SlideShare a Scribd company logo
Graphics for Web Devs
Jarrod Overson - Shape Security
@jsoverson
Graphics Programming for Web Developers
Graphics Programming for Web Developers
Graphics Programming for Web Developers

Recommended for you

ZIKA - What You Need to Know!
ZIKA - What You Need to Know! ZIKA - What You Need to Know!
ZIKA - What You Need to Know!

The document provides information about the Zika virus outbreak, including how it spreads and symptoms. It notes that Zika virus is mainly spread by Aedes mosquitoes and infected mothers can pass it to fetuses. While there is no vaccine currently, people can protect themselves by preventing mosquito bites, using repellent and eliminating standing water where mosquitoes breed. The most important advice is to stay informed but remain calm.

viruskeynotehonolulu
Inaugural Addresses
Inaugural AddressesInaugural Addresses
Inaugural Addresses

We looked at the data. Here’s a breakdown of some key statistics about the nation’s incoming presidents’ addresses, how long they spoke, how well, and more.

#analytics#bigdata#datasci
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks

Turbocharge your online presence with SlideShare. We provide the best tips and tricks for succeeding on SlideShare. Get ideas for what to upload, tips for designing your deck and more.

slidesharepresentationspresentation design
Graphics Programming for Web Developers
Graphics Programming for Web Developers
Graphics Programming for Web Developers
Graphics Programming for Web Developers

Recommended for you

Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare

SlideShare is a global platform for sharing presentations, infographics, videos and documents. It has over 18 million pieces of professional content uploaded by experts like Eric Schmidt and Guy Kawasaki. The document provides tips for setting up an account on SlideShare, uploading content, optimizing it for searchability, and sharing it on social media to build an audience and reputation as a subject matter expert.

slideshare
1- Create a class called Point that has two instance variables, defi.pdf
1- Create a class called Point that has two instance variables, defi.pdf1- Create a class called Point that has two instance variables, defi.pdf
1- Create a class called Point that has two instance variables, defi.pdf

1- Create a class called Point that has two instance variables, defined as private, as follows: An x coordinate and a y coordinate of type integer. a) Write two constructors for the Point class as follows: A default constructor that sets the class instance variables to zero and a constructor that receives two integer values and sets the instance variables to them. b) Write the set and get methods for the Point class to set and return the values of its instance variables. c) Write a toString() method for the Point class that prints the class name (Point) and the value of its instance variables. 2- Create three classes called Circle, Rectangle and Square with the following properties: - The Circle class has two instance variables – a position of type Point (the class that you just created above) and a radius of type double. The instance variables position and radius specify the position of the center and radius of the circle, respectively. - The Rectangle class has three instance variables – a position of type Point (the class that you just created above), a length and a width of type double. The instance variables position, length and width specify the position of the top left corner, length and width of the rectangle, respectively. - The Square class has two instance variables – a position of type Point (the class that you just created above) and a lengthof type double. The instance variables position andlength specify the position of the top left corner and length of the square, respectively. For each of the Circle, Rectangle andSquare classes do the following: a) Define the instance variables as private. b) Write two constructors for each class as follows: A default constructor that sets the instance variables to zero and a constructor that receives values for the instance variables and sets them. c) Write the set and get methods for each class to set and return the values of their instance variables. For example, one of the get methods would return a Point. d) Write a toString() method for each class that prints the class name (Circle, Rectangle or Square) and the value of its instance variables. e) Write two methods called getPerimeter() and getArea() for each class, which calculate and return the perimeter and area of the class, respectively. For example, the getArea() method of the Square class returns the area of the Square object. 3- Test the above classes by writing a class called GeometricTest.java that does the following: - Creates instances of the Circle, Rectangle and Square classes as follows: - Circle: positioned at x = 7, y = 3 and the radius = 4.5. - Rectangle: positioned at x = 3, y = -1 and the length = 4.0 and width = 6.0. - Square: positioned at x = 5, y = 8 and the length = 2.0. - Prints each of the above objects. - Changes the length of the Square object to 5.0. - Prints the perimeter and area of each of each of the above objects. - Compares the x coordinates of the Square and Rectangle classes and prints a message spec.

視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて

This document discusses Swift and transformations. It begins by introducing typed transforms in Swift using protocols like AngleProtocol. It defines operations like addition and subtraction for angle types that conform to AngleProtocol. It also defines conversions between radians and degrees. Next, it discusses 2D points using a Point2DProtocol. It implements operations like addition and subtraction for point types. It then discusses affine transforms for points using a CGAffineTransform type. It shows how to apply transforms to points and concatenate multiple transforms. Finally, it provides an example of drawing a house shape to a graphics context after applying various coordinate space transforms.

iosmathlinear alegebra
Graphics Programming for Web Developers
Yes, we're not game developers.
But what are you looking for in your applications?
• 60 FPS
• Beautiful graphics
• Responsive Interaction
• Smooth animations
When I say "video games"
think: "performance critical graphic applications"

Recommended for you

05 Geographic scripting in uDig - halfway between user and developer
05 Geographic scripting in uDig - halfway between user and developer05 Geographic scripting in uDig - halfway between user and developer
05 Geographic scripting in uDig - halfway between user and developer

The document discusses using the JGrasstools library within Geoscript to perform geospatial analyses and processing on raster data. It provides examples of reading raster properties, creating new rasters, extracting features like pits and contours, and performing analyses like aspect modeling and network extraction. The library allows accessing the same raster processing modules available in uDig from within Geoscript scripts.

udiggroovygeoscript
Player x 0 y ga.docx
Player x 0 y ga.docxPlayer x 0 y ga.docx
Player x 0 y ga.docx

Player: x 0 y game using HTMLJAVA SCRIPT/car copy.png game using HTMLJAVA SCRIPT/car.js function Car () { this.img = new Image(); // Create new img element this.img.onload = function(){ // execute drawImage statements here }; this.img.src = 'car.png'; // Set source path // collision this.collisions = { top: new CollisionPoint(this, 0), right: new CollisionPoint(this, 90, 10), bottom: new CollisionPoint(this, 180), left: new CollisionPoint(this, 270, 10) }; } Car.prototype = { x: 870, y: 370, code: 'player', acceleration: 1.1, rotationStep: 4, rotation: 350, speed: 0, speedDecay: 0.98, maxSpeed: 4, backSpeed: 1.1, isMoving: function (speed) { return !(this.speed > -0.4 && this.speed < 0.4); }, getCenter: function(){ return { x: this.x, y: this.y }; }, accelerate: function(){ if (this.speed < this.maxSpeed){ if (this.speed < 0){ this.speed *= this.speedDecay; } else if (this.speed === 0){ this.speed = 0.4; } else { this.speed *= this.acceleration; } } }, decelerate: function(min){ min = min || 0; if (Math.abs(this.speed) < this.maxSpeed){ if (this.speed > 0){ this.speed *= this.speedDecay; this.speed = this.speed < min ? min : this.speed; } else if (this.speed === 0){ this.speed = -0.4; } else { this.speed *= this.backSpeed; this.speed = this.speed > min ? min : this.speed; } } }, steerLeft: function(){ if (this.isMoving()){ this.rotation -= this.rotationStep * (this.speed/this.maxSpeed); } }, steerRight: function(){ if (this.isMoving()){ this.rotation += this.rotationStep * (this.speed/this.maxSpeed); } } }; game using HTMLJAVA SCRIPT/car.png game using HTMLJAVA SCRIPT/collision.js /** * A hit map class for dynamically * checking whether an x/y coordinate * with an appropriate hit image * * @param {Image} img The hit map image */ function HitMap(img){ var self = this; this.img = img; // only do the drawing once the // image has downloaded if (img.complete){ this.draw(); } else { img.onload = function(){ self.draw(); }; } } HitMap.prototype = { draw: function(){ // first create the canvas this.canvas = document.createElement('canvas'); this.canvas.width = this.img.width; this.canvas.height = this.img.height; this.context = this.canvas.getContext('2d'); // draw the image on it this.context.drawImage(this.img, 0, 0); }, isHit: function(x, y){ if (this.context){ // get the pixel RGBA values var pixel = this.context.getImageData(x, y, 1, 1); if (pixel){ // we consider a hit if the Red // value is 0 return pixel.data[0] === 0; } else { return false; } } else { return false; } } }; function CollisionPoint (car, rotation, distance) { this.car = car; this.rotation = rotation; this.dis.

Hi,I have updated your code. It is working fine now. Highllighted .pdf
Hi,I have updated your code. It is working fine now. Highllighted .pdfHi,I have updated your code. It is working fine now. Highllighted .pdf
Hi,I have updated your code. It is working fine now. Highllighted .pdf

Hi, I have updated your code. It is working fine now. Highllighted all code changes below. Shapes.java import java.util.Scanner; public class Shapes { private int radius; public Shapes(int radius){ this.radius = radius; } public void setradius( int radius ) { } public int getradius() { return radius; } public void report() { System.out.printf( \"Circle perimeter, area / Sphere volume:\"); System.out.println(); System.out.printf( \" perimeter : \" + 2. * Math.PI * getradius()); System.out.println(); System.out.printf( \" area : \" + Math.PI * getradius() * 1.); System.out.println(); System.out.printf( \" volume : \" + (4 * Math.PI * Math.pow(getradius(),3)/3)); System.out.println(); System.out.printf( \"Square perimeter, area:\"); System.out.println(); System.out.printf( \" perimeter : \" + 2 *Math.E * 1.); System.out.println(); System.out.printf( \" area : \" + Math.E * 1.* 1); System.out.println(); } public static void main( String[] args ) { //System.out.printf( \"Radius (as integer) of bounding sphere?\ %s!\ \", getradius() ); Scanner input = new Scanner( System.in ); System.out.println(\"Enter the radius:\"); int radius = input.nextInt(); Shapes s = new Shapes(radius); s.report(); } } Output: import java.util.Scanner; public class Shapes { private int radius; public Shapes(int radius){ this.radius = radius; } public void setradius( int radius ) { } public int getradius() { return radius; } public void report() { System.out.printf( \"Circle perimeter, area / Sphere volume:\"); System.out.println(); System.out.printf( \" perimeter : \" + 2. * Math.PI * getradius()); System.out.println(); System.out.printf( \" area : \" + Math.PI * getradius() * 1.); System.out.println(); System.out.printf( \" volume : \" + (4 * Math.PI * Math.pow(getradius(),3)/3)); System.out.println(); System.out.printf( \"Square perimeter, area:\"); System.out.println(); System.out.printf( \" perimeter : \" + 2 *Math.E * 1.); System.out.println(); System.out.printf( \" area : \" + Math.E * 1.* 1); System.out.println(); } public static void main( String[] args ) { //System.out.printf( \"Radius (as integer) of bounding sphere?\ %s!\ \", getradius() ); Scanner input = new Scanner( System.in ); System.out.println(\"Enter the radius:\"); int radius = input.nextInt(); Shapes s = new Shapes(radius); s.report(); } } Solution Hi, I have updated your code. It is working fine now. Highllighted all code changes below. Shapes.java import java.util.Scanner; public class Shapes { private int radius; public Shapes(int radius){ this.radius = radius; } public void setradius( int radius ) { } public int getradius() { return radius; } public void report() { System.out.printf( \"Circle perimeter, area / Sphere volume:\"); System.out.println(); System.out.printf( \" perimeter : \" + 2. * Math.PI * getradius()); System.out.println(); System.out.printf( \" area : \" + Math.PI * getradius() * 1.); System.out.println(); System.out.printf( \" volume : \" + (4 * Math.PI * Math.pow(getradius(),3)/3).

The web is one of the only computer
platforms that hasn't grown with video
games pushing the edge.
Why?
1996
Graphics Programming for Web Developers
Graphics Programming for Web Developers

Recommended for you

Chapter10.pptx
Chapter10.pptxChapter10.pptx
Chapter10.pptx

This document provides an overview of defining classes in Python. It begins with objectives for defining classes and using encapsulation. It then reviews the concepts of objects and classes. The remainder of the document discusses designing a cannonball simulation program, first as an unmodularized program and then refactoring it into a modularized object-oriented program using a Projectile class. It also provides an example class definition for modeling multi-sided dice.

Create a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdfCreate a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdf

Create a java project that: - Draw a circle with three random initial points on the circle. - Link the points to form a triangle. - Print the angles values in the triangle. - Use the mouse to drag a point along the perimeter of the circle. As you drag it, the triangle and angles are redisplayed dynamically. Here is the formula to compute angles: A = acos((a * a - b * b - c * c) / (-2 * b * c)) B = acos((b * b - a * a - c * c) / (-2 * a * c)) C = acos((c * c - b * b - a * a) / (-2 * a * b)) Solution @Suppresswarnings(\"WeakerAccess\") public class DragPoints extends Application { @Override public void start(Stage primaryStage) { final PointPane pane = new PointPane(640, 480); pane.setStyle(\"-fx-background-color: wheat;\"); Label label = new Label(\"Click and drag the points.\"); BorderPane borderPane = new BorderPane(pane); BorderPane.setAlignment(label, Pos.CENTER); label.setPadding(new Insets(5)); borderPane.setBottom(label); Scene scene = new Scene(borderPane); primaryStage.setTitle(\"Exercise15_21\"); primaryStage.setScene(scene); primaryStage.show(); } private class PointPane extends Pane { final Circle circle = new Circle(); final Vertex[] v = new Vertex[3]; final int strokeWidth = 2; final Color circleStroke = Color.GRAY, legStroke = Color.BLACK; @SuppressWarnings(\"SameParameterValue\") PointPane(double w, double h) { this.setPrefSize(w, h); this.setWidth(w); this.setHeight(h); circle.setStroke(circleStroke); circle.setFill(Color.TRANSPARENT); circle.setStrokeWidth(strokeWidth); circle.radiusProperty().bind(this.heightProperty().multiply(0.4)); circle.centerXProperty().bind(this.widthProperty().divide(2)); circle.centerYProperty().bind(this.heightProperty().divide(2)); this.getChildren().add(circle); for (int i = 0; i < v.length; i++) { v[i] = new Vertex(circle, 2 * Math.PI / v.length * (i + Math.random())); v[i].radiusProperty().bind(circle.radiusProperty().divide(10)); v[i].setPosition(); v[i].setStroke(new Color(i == 0 ? 1 : 0, i == 1 ? 1 : 0, i == 2 ? 1 : 0, 1)); v[i].setFill(Color.TRANSPARENT); v[i].setStrokeWidth(strokeWidth); this.getChildren().add(v[i]); v[i].setOnMouseDragged(new EventHandler() { @Override public void handle(MouseEvent event) { int i; for (i = 0; i < v.length; i++) if (v[i] == event.getSource()) break; v[i].setAngle(event.getX(), event.getY()); moveUpdate((Vertex) event.getSource()); } }); } for (int i = 0; i < v.length; i++) { int j = i + 1 < v.length ? i + 1 : 0; int k = j + 1 < v.length ? j + 1 : 0; v[i].bindLeg(v[j], v[k]); v[i].leg.setStroke(legStroke); v[i].leg.setStrokeWidth(strokeWidth); this.getChildren().add(v[i].leg); this.getChildren().add(v[i].text); } for(DoubleProperty p: new DoubleProperty[] {circle.radiusProperty(), circle.centerXProperty(), circle.centerYProperty()}) p.addListener(new ResizeListener()); moveUpdate(v[0]); } void moveUpdate(Vertex vert) { vert.setPosition(); double[] legLength = new double[3]; for (int i = 0; i < v.length; i++) legLength[i] = v[i].getLegLength(); for (int i = .

Object Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ ExamsObject Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ Exams

The question asks to create classes to represent publications, books, and tapes. The Publication class has title and price attributes. The Book class inherits from Publication and adds a noOfPages attribute. The Tape class inherits from Publication and adds a playingTime attribute.

object-orientedsolved practice programsc++ exams
Graphics Programming for Web Developers
The web may not need games.
But losing that discipline has handicapped us.
Graphics Programming for Web Developers
Graphics Programming for Web Developers

Recommended for you

Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdfCreat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf

Creat Shape classes from scratch DETAILS You will create 3 shape classes (Circle, Rectangle, Triangle) that all inherit from a single abstract class called AbstractShape which implements Shape (also created by you). You are also responsible for creating the driver class \"Assignment7.java\" (program that tests your classes and described on page 3) which does the following reads input data from a file instantiates various objects of the three shapes based on the input data stores each in a LinkedList outputs this list to an output file sorts a \"copy\" of this LinkedList of objects outputs the sorted version of the list to the output file outputs the original list to the output file This driver program also needs to \"ignore errors in the input file that breach the specified input format as described in the Assianment7,java details (see page 3 1. Shape.java This is an interface that has 2 abstract methods, and passes the responsibility of implementing the compareTo method to the class that implements Shape (you may note, nomally Comparable is \"implemented\" by a class. However, an interface cannot implement because interfaces can only contain abstract methods. That said, an interface can only extend other interfaces and the responsibility of actually \"implementing\" the abstract method(s) of the super class interface is passed on to the sub-classes) public interface Shape extends Comparable public double calculateAreal) Il This abstract method is implemented at the concrete level public Shape copyShape); Il also implemented at the concrete level 2. AbstractShape.java public abstract class AbstractShape implements Shape This class should contain an instance field to store the name of each obiect. The constructor which sets this field should receive the name and a number to be concatenated to the name and then stored in the name field Recall, when the super class has a parameterized constructor, the sub-classes will need to call it AND the sub- classes will need to also provide a constructor without parameters This abstract class will implement the compareTo method passed on from the Shape interface and will pass on the responsibility of implementing calculateArea to the extending sub-classes (compare To will use the calculateArea method when comparing 2 Shape objects). Along with compare To, one more concrete method should be included. The following will be used by the sub-classes\' toString method: public String getName) II Simply returns the name field data Solution in7.txt 4.4 2.5 3 8.1 3.0 5.0 2.5 3 4 2.5 tuesday -7 1.0 3 three 3 -9 3 5 1.0 Assignment7.java import java.io.*; import java.util.*; public class Assignment7 { /** * This is the test driver class that will include main. * This program MUST read a file named in7.txt and * generate an output file named out7.txt. The in7.txt * file must be created by you based on formatting * described shortly. * * @param theArgs */ public static void main(String[] theArgs) { List myList = new Arra.

Bindings: the zen of montage
Bindings: the zen of montageBindings: the zen of montage
Bindings: the zen of montage

The document discusses MontageJS bindings and how they can be used to define relationships between object properties. It provides examples of different types of bindings including property bindings, map bindings, and array range bindings. It also previews upcoming changes to how bindings will be defined and array operations will work.

bindingsjavascriptfunctional reactive programming
Css5 canvas
Css5 canvasCss5 canvas
Css5 canvas

The document provides information about using the canvas API to draw graphics on an HTML5 canvas element. It covers topics such as drawing shapes, paths, images, text, applying styles, transformations, gradients and saving state. Code examples are provided to demonstrate how to use various canvas drawing methods and properties.

So where do we start?
<canvas>
document.createElement('canvas');
<canvas>
or
canvas.width = 1280;
canvas.height = 720;
var context = canvas.getContext('2d');
or "webgl"

Recommended for you

1.what is the difference between a instance variable and an local va.pdf
1.what is the difference between a instance variable and an local va.pdf1.what is the difference between a instance variable and an local va.pdf
1.what is the difference between a instance variable and an local va.pdf

The document discusses the difference between instance variables and local variables in Java, as well as the difference between call-by-value and call-by-reference when passing arguments to methods. Instance variables are variables that are created for each object and can be accessed throughout the class, while local variables only exist within the method they are declared in. Call-by-value passes the value of an argument to a method, while call-by-reference passes the reference of an object. Examples using classes Rectangle, Square, RoomDimension, and RoomCarpet are provided to illustrate these concepts.

Ch3
Ch3Ch3
Ch3

1. The document discusses elementary programming concepts in Java such as variables, data types, operators, and expressions. It provides examples of computing the area of a circle and converting temperatures between Fahrenheit and Celsius. 2. Tracing the execution of a sample area computation program is demonstrated. Key steps include declaring variables, assigning values, performing calculations, and printing output. 3. Numeric data types in Java are explained along with various arithmetic operators for performing calculations on integer and floating-point values.

HTML5 Canvas (Wall Clock).pptx
HTML5 Canvas (Wall Clock).pptxHTML5 Canvas (Wall Clock).pptx
HTML5 Canvas (Wall Clock).pptx

The document provides code for creating an analog wall clock using HTML5 canvas. It includes functions for drawing the clock face, numbers, and hands. To start the clock updating, the drawClock function is called each second using setInterval. Code is included to initialize the canvas, calculate radii, and transform coordinates. Angles are used to position numbers and set hand positions based on the system time.

html5canvasgraphics
context.fillStyle = 'MediumAquaMarine';
context.fillRect(10, 10, 100, 100);
Graphics Programming for Web Developers
for (var i = 0; i < 500; i++) {
context.fillRect(10 + i, 10 + i, 100, 100);
}
Graphics Programming for Web Developers

Recommended for you

ES6 Overview
ES6 OverviewES6 Overview
ES6 Overview

The document defines a LineChart class that extends the Chart class. The LineChart class constructor calls the parent constructor and draws the chart. The draw method builds a line chart from the series data using an SVG library, appends it to the canvas, and adds statistics for each data point by calling the parent addStats method. The getSerieData static method calculates max and average values for a data series. The class is exported for use in other code.

javascriptecmascript 2015web development
The Canvas API for Rubyists
The Canvas API for RubyistsThe Canvas API for Rubyists
The Canvas API for Rubyists

A short talk which covered more the core game loop/entity/drawing primitive pattern more than the actual Canvas API. Terrible Haiku as a bonus.

game loopcanvasgame entities
130717666736980000
130717666736980000130717666736980000
130717666736980000

1. Arrays allow us to store multiple values of the same type in a single variable. We declare an array by specifying its type, name, and size. 2. The Math class contains commonly used mathematical functions like trigonometric, exponent, rounding, and random number generation methods. 3. We can pass arrays to methods in Java. When an array is passed as a parameter, any changes made to the array inside the method will be reflected outside the method.

for (var i = 0; i < 500; i++) {
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillRect(10 + i, 10 + i, 100, 100);
}
Graphics Programming for Web Developers
setTimeout(draw, 1000/60)
requestAnimationFrame(draw)
var i = 0;
function draw() {
if (i < 500) i++;
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillRect(i + 10, i + 10, 100, 100);
requestAnimationFrame(draw);
}
draw();

Recommended for you

Exploring Canvas
Exploring CanvasExploring Canvas
Exploring Canvas

The document provides an overview of using the HTML5 canvas element to draw graphics and animations. It covers topics like rendering contexts, paths, styles, gradients, text, shapes, mouse/touch interaction, animation, and libraries. Code examples demonstrate how to draw basic shapes, handle user input, interpolate lines, add gradients, render to canvas, and more. The document is a tutorial for learning the capabilities of the canvas element.

htmlcanvasstandards
package chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdfpackage chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdf

package chapter15; import javafx.application.Application; import javafx.beans.property.DoubleProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; import javafx.stage.Stage; /** * Java Programming: Comprehensive (10e); Liang; Pearson 2014 * * *15.21(Drag points) Draw a circle with three random points on the circle. Connect * the points to form a triangle. Display the angles in the triangle. Use the mouse * to drag a point along the perimeter of the circle. As you drag it, the triangle and * angles are redisplayed dynamically, as shown in Figure 15.30b. For computing * angles in a triangle, see Listing 4.1. * * {@code A = Math.acos((a * a - b * b - c * c) / (-2 * b * c))} * {@code B = Math.acos((b * b - a * a - c * c) / (-2 * a * c))} * {@code C = Math.acos((c * c - b * b - a * a) / (-2 * a * b))} * * @author ncoop */ @SuppressWarnings(\"WeakerAccess\") public class DragPoints extends Application { @Override public void start(Stage primaryStage) { final PointPane pane = new PointPane(640, 480); pane.setStyle(\"-fx-background-color: wheat;\"); Label label = new Label(\"Click and drag the points.\"); BorderPane borderPane = new BorderPane(pane); BorderPane.setAlignment(label, Pos.CENTER); label.setPadding(new Insets(5)); borderPane.setBottom(label); Scene scene = new Scene(borderPane); primaryStage.setTitle(\"Exercise15_21\"); primaryStage.setScene(scene); primaryStage.show(); } private class PointPane extends Pane { final Circle circle = new Circle(); final Vertex[] v = new Vertex[3]; final int strokeWidth = 2; final Color circleStroke = Color.GRAY, legStroke = Color.BLACK; @SuppressWarnings(\"SameParameterValue\") PointPane(double w, double h) { this.setPrefSize(w, h); this.setWidth(w); this.setHeight(h); circle.setStroke(circleStroke); circle.setFill(Color.TRANSPARENT); circle.setStrokeWidth(strokeWidth); circle.radiusProperty().bind(this.heightProperty().multiply(0.4)); circle.centerXProperty().bind(this.widthProperty().divide(2)); circle.centerYProperty().bind(this.heightProperty().divide(2)); this.getChildren().add(circle); // create the vertices at random angles for (int i = 0; i < v.length; i++) { v[i] = new Vertex(circle, 2 * Math.PI / v.length * (i + Math.random())); v[i].radiusProperty().bind(circle.radiusProperty().divide(10)); v[i].setPosition(); v[i].setStroke(new Color(i == 0 ? 1 : 0, i == 1 ? 1 : 0, i == 2 ? 1 : 0, 1)); v[i].setFill(Color.TRANSPARENT); v[i].setStrokeWidth(strokeWidth); this.getChildren().add(v[i]); v[i].setOnMouseDr.

Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]

We all know, or should know, about SOLID. The question is, do we write C++ according to the SOLID principles? https://platis.solutions/blog/2020/06/22/how-to-write-solid-cpp/

c++solidcpp
Graphics Programming for Web Developers
var i = 0;
function draw() {
if (i < 500) i++;
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillRect(i + 10, i + 10, 100, 100);
requestAnimationFrame(draw);
}
draw();
First we update our state.
var i = 0;
function draw() {
if (i < 500) i++;
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillRect(i + 10, i + 10, 100, 100);
requestAnimationFrame(draw);
}
draw();
Then we render our current state.
var i = 0;
function draw() {
if (i < 500) i++;
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillRect(i + 10, i + 10, 100, 100);
requestAnimationFrame(draw);
}
draw();
And we do it all over again.

Recommended for you

Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus

This All Things Open 2022 talk shows how to use current-gen WebAssembly to build complex applications out of components.

webassemblywasmapex
AppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is EvolvingAppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is Evolving

This talk was given at AppSec California, January 2020. Credential stuffing and other automated attacks are evolving passed every defense thrown in their way. CAPTCHAs don't work, Fingerprints don't work, Magical AI-whatevers don't work. The value is just too great.

securityautomationcredential stuffing
How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019

Slides for talk given at PasswordsCon Sweden 2019. Credentials Stuffing is an automated attack that exploits users who reuse passwords by taking breached credentials and replaying them across sites.

credential stuffingcredential spillsowasp
Update Render
Our loop
function loop() {
update();
render();
requestAnimationFrame(loop);
}
loop();
Particle System
Particles Emitters
class ParticleSystem {
constructor() {
this.particles = [];
this.emitters = [];
}
}

Recommended for you

JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...

This document summarizes an analysis of an exploited NPM package called event-stream. It describes how an attacker gained control of the package and added malicious code that was downloaded by thousands of projects whenever their dependencies were updated. The malicious code stole cryptocurrency from wallets containing large amounts. It highlights the risks of supply chain attacks and emphasizes the importance of auditing dependencies, locking versions, and thinking carefully before adding new dependencies to avoid compromising entire projects and their users.

nodejsnpmsecurity
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...

Jarrod Overson presented on a supply chain attack that occurred in 2018 through the compromise of the event-stream Node.js package. An unauthorized developer gained commit access and introduced malicious code through new dependencies that was then installed by millions of users. The malware harvested cryptocurrency private keys from the Copay wallet app. While the community responded quickly, such attacks demonstrate vulnerabilities in open source software supply chains and dependency management that will continue to be exploited if not properly addressed through changes to practices and tooling.

nodejsnpmsecurity
Deepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the futureDeepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the future

Deepfakes originally started as cheap costing but believable video effects and have expanded into AI-generated content of every format. This session dove into the state of deepfakes and how the technology highlights an exciting but dangerous future.

deepfakesmachine learningartificial intelligence
class Particle {
constructor(position, velocity, acceleration) {
this.position = position;
this.velocity = velocity;
this.acceleration = acceleration;
}
}
class Particle {
constructor(position, velocity, acceleration) {
this.position = position || {x: 0, y: 0};
this.velocity = velocity || {x: 0, y: 0};
this.acceleration = acceleration || {x: 0, y: 0};
}
}
class Vector {
constructor(x, y) {
this.x = x || 0;
this.y = y || 0;
}
}
class Particle {
constructor(position, velocity, acceleration) {
this.position = position || new Vector(0, 0);
this.velocity = velocity || new Vector(0, 0);
this.acceleration = acceleration || new Vector(0, 0);
}
}

Recommended for you

The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.

Jarrod Overson discusses the evolution of credential stuffing attacks and where they may go in the future. He summarizes that credential stuffing started as basic automated login attempts but has evolved through generations as defenses were put in place, such as CAPTCHAs and behavior analysis. The next generation involves more sophisticated imitation attacks that flawlessly emulate human behavior using real device fingerprints to blend in. Beyond credential stuffing, malware may start scraping user accounts and environments directly from infected machines. As defenses raise the cost of attacks, fraudsters will diversify methods to preserve the value of valid accounts and user data.

credential stuffingcredential spillsowasp
How to Reverse Engineer Web Applications
How to Reverse Engineer Web ApplicationsHow to Reverse Engineer Web Applications
How to Reverse Engineer Web Applications

Workshop slides originally given at the WOPR Summit in Atlantic City. Use JavaScript parsers and generators like Shift combined with Puppeteer and Chrome to reverse engineer web applications

javascriptsecurityreverse-engineering
The life of breached data and the attack lifecycle
The life of breached data and the attack lifecycleThe life of breached data and the attack lifecycle
The life of breached data and the attack lifecycle

OWASP RTP Presentation on Data breaches, credential spills, the lifespan of data, credential stuffing, the attack lifecycle, and what you can do to protect yourself or your users.

password securitycredential stuffingdata breaches
class Emitter {
constructor(point, velocity) {
this.position = point || new Vector(0, 0);
this.velocity = velocity || new Vector(0, 0);
}
}
class ParticleSystem {
constructor(width, height) { /* …snipped… */ }
render(context) {
context.clearRect(0, 0, this.width, this.height);
this.emitters.forEach(emitter => emitter.render(context));
this.particles.forEach(particle => particle.render(context));
}
}
class Particle {
constructor(position, velocity, acceleration) { /* … */ }
render(context) {
context.fillStyle = 'red';
context.fillRect(this.position.x, this.position.y, 2, 2);
}
}
var system = new ParticleSystem(width, height);
system.emitters.push(new Emitter(new Vector(10, 10)));
system.particles.push(new Particle(new Vector(20, 20)));
system.particles.push(new Particle(new Vector(10, 20)));
system.particles.push(new Particle(new Vector(20, 10)));
function loop() {
system.render(context);
window.requestAnimationFrame(loop);
}
loop();

Recommended for you

The Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of SecurityThe Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of Security

QCon SF 2016 security talk about who uses data from massive breaches (like Yahoo, Target), what tools they use, and what damage they inflict.

securitybreachqconsf
Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16

Shape Security analyzes 1.5 billion logins per week and protects 350 million user accounts. In 2016 alone, 1.6 billion credentials were leaked and sold or traded by criminals on dark web markets. Shape uses headless browsers like PhantomJS to automatically test leaked credentials on other sites, stopping over $1 billion in fraud losses in 2016. However, captchas intended to prevent automated attacks do not work and ruin the user experience.

javascriptwafflejsweb platform
The Dark Side of Security
The Dark Side of SecurityThe Dark Side of Security
The Dark Side of Security

This document discusses the dark side of web security, including automated threats from bots and attackers. It notes that traditional security like flossing is difficult to measure effectiveness. It outlines the OWASP top 10 vulnerabilities and automated threats attackers use. While captchas are meant to stop bots, services have made bypassing captchas easier. If a site has value like money, data, or content, there is value in exploiting it. Detection of attacks is difficult as attackers use many proxies and fingerprints to avoid detection. Patching is not enough, and spikes in traffic from many IPs could indicate an attack.

automationaccount-takeovercaptcha
Graphics Programming for Web Developers
var system = new ParticleSystem(width, height);
system.addEmitter(320, 180);
function loop() {
system.update();
system.render(context);
window.requestAnimationFrame(loop);
}
loop();
class Emitter {
constructor(position, velocity) { /* … */ }
render(context) { /* … */ }
emitParticle() {
return new Particle(this.position.clone(), this.velocity.clone());
}
}
class Particle {
constructor(position, velocity, acceleration) { /* … */ }
render(context) { /* … */ }
update() {
this.velocity.add(this.acceleration);
this.position.add(this.velocity);
}
}

Recommended for you

JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST

This was a talk given at HTML5DevConf SF in 2015. Ever wanted to write your own Browserify or Babel? Maybe have an idea for something new? This talk will get you started understanding how to use a JavaScript AST to transform and generate new code.

astbabelshift-ast
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows

This document discusses ECMAScript 2015 (ES2015), also known as ES6. It provides examples of new ES2015 features like arrow functions, template literals, classes, and modules. It also discusses how to set up a development environment to use ES2015, including transpiling code to ES5 using Babel, linting with Eslint, testing with Mocha, and generating coverage reports with Istanbul. The document emphasizes that while ES2015 is fun to explore, proper tooling like linting and testing is needed for serious development. It concludes by noting ES2015 marks a transition and thanks the audience.

nodejses2015javascript
Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014 Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014

The document discusses achieving maintainability in code through examining code quality with linters, generating visual reports on metrics like complexity and coverage, and automating processes like builds, linting, and testing through tools like Grunt and Gulp. It emphasizes setting limits on metrics like complexity, enforcing code style through automation, and treating documentation as important as code.

code-coveragejavascriptyeoman
class ParticleSystem {
constructor(width, height) { /* … */ }
addEmitter(x, y, velX, velY) { /* … */ }
update() {
this.emitters.forEach(
emitter => this.particles.push(emitter.emitParticle())
);
this.particles = this.particles.filter(particle => {
particle.update();
let pos = particle.position;
let outOfBounds = pos.x > this.width || pos.y > this.height ||
pos.x < 0 || pos.y < 0
return !outOfBounds;
})
}
}
Graphics Programming for Web Developers
emitParticle() {
// Define a maximum angle range in radians.
let spread = Math.PI / 32;
// Use an angle randomized over a spread so we have more of a "spray"
var angle = this.velocity.rad() + spread - (Math.random() * spread * 2);
// The magnitude of the emitter's velocity
var magnitude = this.velocity.length();
// New velocity based off of the calculated angle and magnitude
var velocity = Vector.fromAngle(angle, magnitude);
// return our new Particle
return new Particle(this.position.clone(), velocity);
}
emitParticle() {
// Define a maximum angle range in radians.
let spread = Math.PI / 32;
// Use an angle randomized over a spread so we have more of a "spray"
var angle = this.velocity.rad() + spread - (Math.random() * spread * 2);
// The magnitude of the emitter's velocity
var magnitude = this.velocity.length();
// New velocity based off of the calculated angle and magnitude
var velocity = Vector.fromAngle(angle, magnitude);
// return our new Particle
return new Particle(this.position.clone(), velocity);
}

Recommended for you

Idiot proofing your code
Idiot proofing your codeIdiot proofing your code
Idiot proofing your code

1) The document discusses achieving maintainability in code through analysis, automation, and enforcement of standards. 2) It recommends setting up linting, code coverage, and other analysis tools to examine code quality and automatically enforcing code style through build processes. 3) The key is to automate as many processes as possible like testing, linting, and documentation to make the code easy to work with and prevent issues from being introduced.

platoyeomanautomation
Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014

Slides for the keynote given at QCon Sao Paulo 2014. Talk goes into the problems scaling Riot and how we've tried to solve them as well as what we've learned from the web and what lies in store next.

scaleasmjsspdy
Managing JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - FluentManaging JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - Fluent

This document discusses managing complexity in JavaScript projects. It addresses coming to terms with the challenges of dynamic languages being messy, having an immature tooling ecosystem, and rapid evolution. It emphasizes respecting code style conventions, enforcing linting rules, documenting code, and using metrics like cyclomatic complexity to reduce testing difficulty. The overall message is that perseverance is needed to tame JavaScript's complexity through automation, visualization, honesty and acceptance of its challenges and opportunities.

javascriptgruntcomplexity
emitParticle() {
// Define a maximum angle range in radians.
let spread = Math.PI / 32;
// Use an angle randomized over a spread so we have more of a "spray"
var angle = this.velocity.rad() + spread - (Math.random() * spread * 2);
// The magnitude of the emitter's velocity
var magnitude = this.velocity.length();
// New velocity based off of the calculated angle and magnitude
var velocity = Vector.fromAngle(angle, magnitude);
// return our new Particle
return new Particle(this.position.clone(), velocity);
}
Velocity
+ Spread
- (2 * spread)

Recommended for you

Real World Web components
Real World Web componentsReal World Web components
Real World Web components

The document discusses web components, which include HTML templates, custom elements, shadow DOM, and HTML imports. Web components allow the creation of reusable custom elements with their own styles and DOM structure. They provide encapsulation and help avoid issues with global namespaces. While browser support is still emerging for some features, polyfills exist and frameworks like Polymer make web components accessible today. Web components represent an important evolution of the web that will improve how code is structured and shared.

polymerangularweb-components
Managing JavaScript Complexity
Managing JavaScript ComplexityManaging JavaScript Complexity
Managing JavaScript Complexity

These are the slides for the talk "Managing and Visualizing JavaScript Complexity" given at QCon SF 2013 by Jarrod Overson

halsteadjavascriptcomplexity
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation

Manual Method of Product Research | Helium10 | MBS RETRIEVER

product researchhelium10 | mbs retriever
- (2 * spread) * rand
emitParticle() {
// Define a maximum angle range in radians.
let spread = Math.PI / 32;
// Use an angle randomized over a spread so we have more of a "spray"
var angle = this.velocity.rad() + spread - (Math.random() * spread * 2);
// The magnitude of the emitter's velocity
var magnitude = this.velocity.length();
// New velocity based off of the calculated angle and magnitude
var velocity = Vector.fromAngle(angle, magnitude);
// return our new Particle
return new Particle(this.position.clone(), velocity);
}
emitParticle() {
// Define a maximum angle range in radians.
let spread = Math.PI / 32;
// Use an angle randomized over a spread so we have more of a "spray"
var angle = this.velocity.rad() + spread - (Math.random() * spread * 2);
// The magnitude of the emitter's velocity
var magnitude = this.velocity.length();
// New velocity based off of the calculated angle and magnitude
var velocity = Vector.fromAngle(angle, magnitude);
// return our new Particle
return new Particle(this.position.clone(), velocity);
}
emitParticle() {
// Define a maximum angle range in radians.
let spread = Math.PI / 32;
// Use an angle randomized over a spread so we have more of a "spray"
var angle = this.velocity.rad() + spread - (Math.random() * spread * 2);
// The magnitude of the emitter's velocity
var magnitude = this.velocity.length();
// New velocity based off of the calculated angle and magnitude
var velocity = Vector.fromAngle(angle, magnitude);
// return our new Particle
return new Particle(this.position.clone(), velocity);
}

Recommended for you

WPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide DeckWPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide Deck

YOUR RELIABLE WEB DESIGN & DEVELOPMENT TEAM — FOR LASTING SUCCESS WPRiders is a web development company specialized in WordPress and WooCommerce websites and plugins for customers around the world. The company is headquartered in Bucharest, Romania, but our team members are located all over the world. Our customers are primarily from the US and Western Europe, but we have clients from Australia, Canada and other areas as well. Some facts about WPRiders and why we are one of the best firms around: More than 700 five-star reviews! You can check them here. 1500 WordPress projects delivered. We respond 80% faster than other firms! Data provided by Freshdesk. We’ve been in business since 2015. We are located in 7 countries and have 22 team members. With so many projects delivered, our team knows what works and what doesn’t when it comes to WordPress and WooCommerce. Our team members are: - highly experienced developers (employees & contractors with 5 -10+ years of experience), - great designers with an eye for UX/UI with 10+ years of experience - project managers with development background who speak both tech and non-tech - QA specialists - Conversion Rate Optimisation - CRO experts They are all working together to provide you with the best possible service. We are passionate about WordPress, and we love creating custom solutions that help our clients achieve their goals. At WPRiders, we are committed to building long-term relationships with our clients. We believe in accountability, in doing the right thing, as well as in transparency and open communication. You can read more about WPRiders on the About us page.

web development agencywpriderswordpress development
Mitigating the Impact of State Management in Cloud Stream Processing Systems
Mitigating the Impact of State Management in Cloud Stream Processing SystemsMitigating the Impact of State Management in Cloud Stream Processing Systems
Mitigating the Impact of State Management in Cloud Stream Processing Systems

Stream processing is a crucial component of modern data infrastructure, but constructing an efficient and scalable stream processing system can be challenging. Decoupling compute and storage architecture has emerged as an effective solution to these challenges, but it can introduce high latency issues, especially when dealing with complex continuous queries that necessitate managing extra-large internal states. In this talk, we focus on addressing the high latency issues associated with S3 storage in stream processing systems that employ a decoupled compute and storage architecture. We delve into the root causes of latency in this context and explore various techniques to minimize the impact of S3 latency on stream processing performance. Our proposed approach is to implement a tiered storage mechanism that leverages a blend of high-performance and low-cost storage tiers to reduce data movement between the compute and storage layers while maintaining efficient processing. Throughout the talk, we will present experimental results that demonstrate the effectiveness of our approach in mitigating the impact of S3 latency on stream processing. By the end of the talk, attendees will have gained insights into how to optimize their stream processing systems for reduced latency and improved cost-efficiency.

20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf

Support en anglais diffusé lors de l'événement 100% IA organisé dans les locaux parisiens d'Iguane Solutions, le mardi 2 juillet 2024 : - Présentation de notre plateforme IA plug and play : ses fonctionnalités avancées, telles que son interface utilisateur intuitive, son copilot puissant et des outils de monitoring performants. - REX client : Cyril Janssens, CTO d’ easybourse, partage son expérience d’utilisation de notre plateforme IA plug & play.

genaicloudrgpd
Graphics Programming for Web Developers
Graphics Programming for Web Developers
Graphics Programming for Web Developers
1. Application state modified and rendered independently.
2. Expensive mutations performed as little as possible.
3. Physics based animations.

Recommended for you

Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops

This presentation, delivered at the Postgres Bangalore (PGBLR) Meetup-2 on June 29th, 2024, dives deep into connection pooling for PostgreSQL databases. Aakash M, a PostgreSQL Tech Lead at Mydbops, explores the challenges of managing numerous connections and explains how connection pooling optimizes performance and resource utilization. Key Takeaways: * Understand why connection pooling is essential for high-traffic applications * Explore various connection poolers available for PostgreSQL, including pgbouncer * Learn the configuration options and functionalities of pgbouncer * Discover best practices for monitoring and troubleshooting connection pooling setups * Gain insights into real-world use cases and considerations for production environments This presentation is ideal for: * Database administrators (DBAs) * Developers working with PostgreSQL * DevOps engineers * Anyone interested in optimizing PostgreSQL performance Contact info@mydbops.com for PostgreSQL Managed, Consulting and Remote DBA Services

postgresqlpgsqldatabase
Comparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdfComparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdf

To help you choose the best DiskWarrior alternative, we've compiled a comparison table summarizing the features, pros, cons, and pricing of six alternatives.

data recoverydatadiskwarrior
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024

This presentation explores the practical application of image description techniques. Familiar guidelines will be demonstrated in practice, and descriptions will be developed “live”! If you have learned a lot about the theory of image description techniques but want to feel more confident putting them into practice, this is the presentation for you. There will be useful, actionable information for everyone, whether you are working with authors, colleagues, alone, or leveraging AI as a collaborator. Link to presentation recording and transcript: https://bnctechforum.ca/sessions/details-of-description-part-ii-describing-images-in-practice/ Presented by BookNet Canada on June 25, 2024, with support from the Department of Canadian Heritage.

a11yaccessibilityalt text
We're getting there. You can do this now, sort of.
var Greets = React.createClass({
getInitialState: function() {
return { name: "Portland" };
},
render: function() {
return <div>Hello {this.state.name}</div>;
}
});
The virtual DOM is an abstraction that saves you the cost of
expensive render-based mutation in a familiar package.
It's better, but a virtual DOM is not our application state.
While you're exploring JavaScript, explore graphics & games.
Go, do neat things with canvas!

Recommended for you

Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter

Widya Salim and Victor Ma will outline the causal impact analysis, framework, and key learnings used to quantify the impact of reducing Twitter's network latency.

find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges

accommodate the strengths, weaknesses, threats and opportunities of autonomous vehicles

automotive self-driving car technology
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces

An invited talk given by Mark Billinghurst on Research Directions for Cross Reality Interfaces. This was given on July 2nd 2024 as part of the 2024 Summer School on Cross Reality in Hagenberg, Austria (July 1st - 7th)

augmented realitycross realityvirtual reality
Maybe you'll find a use for normal mapped backgrounds.
http://jsoverson.github.io/texture.js/demo/bricks.html
Or maybe you'll use it to understand the bounds of an optical illusion.
http://jsoverson.github.io/concentric-circle-illusion/
Or maybe you'll make some really awesome games.
https://ga.me/games/polycraft (turbulenz.com)
Or maybe you'll try…
phaser.io

Recommended for you

What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx

This is a slide deck that showcases the updates in Microsoft Copilot for May 2024

microsoftmicrosoft copilot
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf

Solar Storms (Geo Magnetic Storms) are the motion of accelerated charged particles in the solar environment with high velocities due to the coronal mass ejection (CME).

solar storms
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference

We are honored to launch and host this event for our UiPath Polish Community, with the help of our partners - Proservartner! We certainly hope we have managed to spike your interest in the subjects to be presented and the incredible networking opportunities at hand, too! Check out our proposed agenda below 👇👇 08:30 ☕ Welcome coffee (30') 09:00 Opening note/ Intro to UiPath Community (10') Cristina Vidu, Global Manager, Marketing Community @UiPath Dawid Kot, Digital Transformation Lead @Proservartner 09:10 Cloud migration - Proservartner & DOVISTA case study (30') Marcin Drozdowski, Automation CoE Manager @DOVISTA Pawel Kamiński, RPA developer @DOVISTA Mikolaj Zielinski, UiPath MVP, Senior Solutions Engineer @Proservartner 09:40 From bottlenecks to breakthroughs: Citizen Development in action (25') Pawel Poplawski, Director, Improvement and Automation @McCormick & Company Michał Cieślak, Senior Manager, Automation Programs @McCormick & Company 10:05 Next-level bots: API integration in UiPath Studio (30') Mikolaj Zielinski, UiPath MVP, Senior Solutions Engineer @Proservartner 10:35 ☕ Coffee Break (15') 10:50 Document Understanding with my RPA Companion (45') Ewa Gruszka, Enterprise Sales Specialist, AI & ML @UiPath 11:35 Power up your Robots: GenAI and GPT in REFramework (45') Krzysztof Karaszewski, Global RPA Product Manager 12:20 🍕 Lunch Break (1hr) 13:20 From Concept to Quality: UiPath Test Suite for AI-powered Knowledge Bots (30') Kamil Miśko, UiPath MVP, Senior RPA Developer @Zurich Insurance 13:50 Communications Mining - focus on AI capabilities (30') Thomasz Wierzbicki, Business Analyst @Office Samurai 14:20 Polish MVP panel: Insights on MVP award achievements and career profiling

#uipathcommunity#automation#automationdeveloper
Graphics for Web Devs
Jarrod Overson - Shape Security
@jsoverson

More Related Content

Viewers also liked

HTML5 Canvas - The Future of Graphics on the Web
HTML5 Canvas - The Future of Graphics on the WebHTML5 Canvas - The Future of Graphics on the Web
HTML5 Canvas - The Future of Graphics on the Web
Robin Hawkes
 
Molecular Cloning - Vectors: Types & Characteristics
Molecular Cloning -  Vectors: Types & CharacteristicsMolecular Cloning -  Vectors: Types & Characteristics
Molecular Cloning - Vectors: Types & Characteristics
Sruthy Chandran
 
Strategies to Drive Web Traffic in the Real Estate World
Strategies to Drive Web Traffic in the Real Estate WorldStrategies to Drive Web Traffic in the Real Estate World
Strategies to Drive Web Traffic in the Real Estate World
Rand Fishkin
 
ZIKA - What You Need to Know!
ZIKA - What You Need to Know! ZIKA - What You Need to Know!
ZIKA - What You Need to Know!
Empowered Presentations
 
Inaugural Addresses
Inaugural AddressesInaugural Addresses
Inaugural Addresses
Booz Allen Hamilton
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
SlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
SlideShare
 

Viewers also liked (7)

HTML5 Canvas - The Future of Graphics on the Web
HTML5 Canvas - The Future of Graphics on the WebHTML5 Canvas - The Future of Graphics on the Web
HTML5 Canvas - The Future of Graphics on the Web
 
Molecular Cloning - Vectors: Types & Characteristics
Molecular Cloning -  Vectors: Types & CharacteristicsMolecular Cloning -  Vectors: Types & Characteristics
Molecular Cloning - Vectors: Types & Characteristics
 
Strategies to Drive Web Traffic in the Real Estate World
Strategies to Drive Web Traffic in the Real Estate WorldStrategies to Drive Web Traffic in the Real Estate World
Strategies to Drive Web Traffic in the Real Estate World
 
ZIKA - What You Need to Know!
ZIKA - What You Need to Know! ZIKA - What You Need to Know!
ZIKA - What You Need to Know!
 
Inaugural Addresses
Inaugural AddressesInaugural Addresses
Inaugural Addresses
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Similar to Graphics Programming for Web Developers

1- Create a class called Point that has two instance variables, defi.pdf
1- Create a class called Point that has two instance variables, defi.pdf1- Create a class called Point that has two instance variables, defi.pdf
1- Create a class called Point that has two instance variables, defi.pdf
jeeteshmalani1
 
視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて
Ray Fix
 
05 Geographic scripting in uDig - halfway between user and developer
05 Geographic scripting in uDig - halfway between user and developer05 Geographic scripting in uDig - halfway between user and developer
05 Geographic scripting in uDig - halfway between user and developer
Andrea Antonello
 
Player x 0 y ga.docx
Player x 0 y ga.docxPlayer x 0 y ga.docx
Player x 0 y ga.docx
mattjtoni51554
 
Hi,I have updated your code. It is working fine now. Highllighted .pdf
Hi,I have updated your code. It is working fine now. Highllighted .pdfHi,I have updated your code. It is working fine now. Highllighted .pdf
Hi,I have updated your code. It is working fine now. Highllighted .pdf
aniyathikitchen
 
Chapter10.pptx
Chapter10.pptxChapter10.pptx
Chapter10.pptx
RahulChaudhary51756
 
Create a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdfCreate a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdf
arihantmobileselepun
 
Object Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ ExamsObject Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ Exams
MuhammadTalha436
 
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdfCreat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
aromanets
 
Bindings: the zen of montage
Bindings: the zen of montageBindings: the zen of montage
Bindings: the zen of montage
Kris Kowal
 
Css5 canvas
Css5 canvasCss5 canvas
Css5 canvas
Vadim Spiridenko
 
1.what is the difference between a instance variable and an local va.pdf
1.what is the difference between a instance variable and an local va.pdf1.what is the difference between a instance variable and an local va.pdf
1.what is the difference between a instance variable and an local va.pdf
archgeetsenterprises
 
Ch3
Ch3Ch3
HTML5 Canvas (Wall Clock).pptx
HTML5 Canvas (Wall Clock).pptxHTML5 Canvas (Wall Clock).pptx
HTML5 Canvas (Wall Clock).pptx
AhmadAbba6
 
ES6 Overview
ES6 OverviewES6 Overview
ES6 Overview
Bruno Scopelliti
 
The Canvas API for Rubyists
The Canvas API for RubyistsThe Canvas API for Rubyists
The Canvas API for Rubyists
deanhudson
 
130717666736980000
130717666736980000130717666736980000
130717666736980000
Tanzeel Ahmad
 
Exploring Canvas
Exploring CanvasExploring Canvas
Exploring Canvas
Kevin Hoyt
 
package chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdfpackage chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdf
KARTIKINDIA
 
Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Dimitrios Platis
 

Similar to Graphics Programming for Web Developers (20)

1- Create a class called Point that has two instance variables, defi.pdf
1- Create a class called Point that has two instance variables, defi.pdf1- Create a class called Point that has two instance variables, defi.pdf
1- Create a class called Point that has two instance variables, defi.pdf
 
視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて
 
05 Geographic scripting in uDig - halfway between user and developer
05 Geographic scripting in uDig - halfway between user and developer05 Geographic scripting in uDig - halfway between user and developer
05 Geographic scripting in uDig - halfway between user and developer
 
Player x 0 y ga.docx
Player x 0 y ga.docxPlayer x 0 y ga.docx
Player x 0 y ga.docx
 
Hi,I have updated your code. It is working fine now. Highllighted .pdf
Hi,I have updated your code. It is working fine now. Highllighted .pdfHi,I have updated your code. It is working fine now. Highllighted .pdf
Hi,I have updated your code. It is working fine now. Highllighted .pdf
 
Chapter10.pptx
Chapter10.pptxChapter10.pptx
Chapter10.pptx
 
Create a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdfCreate a java project that - Draw a circle with three random init.pdf
Create a java project that - Draw a circle with three random init.pdf
 
Object Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ ExamsObject Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ Exams
 
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdfCreat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
Creat Shape classes from scratch DETAILS You will create 3 shape cla.pdf
 
Bindings: the zen of montage
Bindings: the zen of montageBindings: the zen of montage
Bindings: the zen of montage
 
Css5 canvas
Css5 canvasCss5 canvas
Css5 canvas
 
1.what is the difference between a instance variable and an local va.pdf
1.what is the difference between a instance variable and an local va.pdf1.what is the difference between a instance variable and an local va.pdf
1.what is the difference between a instance variable and an local va.pdf
 
Ch3
Ch3Ch3
Ch3
 
HTML5 Canvas (Wall Clock).pptx
HTML5 Canvas (Wall Clock).pptxHTML5 Canvas (Wall Clock).pptx
HTML5 Canvas (Wall Clock).pptx
 
ES6 Overview
ES6 OverviewES6 Overview
ES6 Overview
 
The Canvas API for Rubyists
The Canvas API for RubyistsThe Canvas API for Rubyists
The Canvas API for Rubyists
 
130717666736980000
130717666736980000130717666736980000
130717666736980000
 
Exploring Canvas
Exploring CanvasExploring Canvas
Exploring Canvas
 
package chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdfpackage chapter15;import javafx.application.Application;import j.pdf
package chapter15;import javafx.application.Application;import j.pdf
 
Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]Writing SOLID C++ [gbgcpp meetup @ Zenseact]
Writing SOLID C++ [gbgcpp meetup @ Zenseact]
 

More from Jarrod Overson

Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus
Jarrod Overson
 
AppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is EvolvingAppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is Evolving
Jarrod Overson
 
How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019
Jarrod Overson
 
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
Jarrod Overson
 
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Jarrod Overson
 
Deepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the futureDeepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the future
Jarrod Overson
 
The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.
Jarrod Overson
 
How to Reverse Engineer Web Applications
How to Reverse Engineer Web ApplicationsHow to Reverse Engineer Web Applications
How to Reverse Engineer Web Applications
Jarrod Overson
 
The life of breached data and the attack lifecycle
The life of breached data and the attack lifecycleThe life of breached data and the attack lifecycle
The life of breached data and the attack lifecycle
Jarrod Overson
 
The Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of SecurityThe Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of Security
Jarrod Overson
 
Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16
Jarrod Overson
 
The Dark Side of Security
The Dark Side of SecurityThe Dark Side of Security
The Dark Side of Security
Jarrod Overson
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST
Jarrod Overson
 
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows
Jarrod Overson
 
Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014 Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014
Jarrod Overson
 
Idiot proofing your code
Idiot proofing your codeIdiot proofing your code
Idiot proofing your code
Jarrod Overson
 
Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014
Jarrod Overson
 
Managing JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - FluentManaging JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - Fluent
Jarrod Overson
 
Real World Web components
Real World Web componentsReal World Web components
Real World Web components
Jarrod Overson
 
Managing JavaScript Complexity
Managing JavaScript ComplexityManaging JavaScript Complexity
Managing JavaScript Complexity
Jarrod Overson
 

More from Jarrod Overson (20)

Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus
 
AppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is EvolvingAppSecCali - How Credential Stuffing is Evolving
AppSecCali - How Credential Stuffing is Evolving
 
How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019How Credential Stuffing is Evolving - PasswordsCon 2019
How Credential Stuffing is Evolving - PasswordsCon 2019
 
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
JSconf JP - Analysis of an exploited npm package. Event-stream's role in a su...
 
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
Analysis of an OSS supply chain attack - How did 8 millions developers downlo...
 
Deepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the futureDeepfakes - How they work and what it means for the future
Deepfakes - How they work and what it means for the future
 
The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.The State of Credential Stuffing and the Future of Account Takeovers.
The State of Credential Stuffing and the Future of Account Takeovers.
 
How to Reverse Engineer Web Applications
How to Reverse Engineer Web ApplicationsHow to Reverse Engineer Web Applications
How to Reverse Engineer Web Applications
 
The life of breached data and the attack lifecycle
The life of breached data and the attack lifecycleThe life of breached data and the attack lifecycle
The life of breached data and the attack lifecycle
 
The Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of SecurityThe Life of Breached Data & The Dark Side of Security
The Life of Breached Data & The Dark Side of Security
 
Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16Shape Security @ WaffleJS October 16
Shape Security @ WaffleJS October 16
 
The Dark Side of Security
The Dark Side of SecurityThe Dark Side of Security
The Dark Side of Security
 
JavaScript and the AST
JavaScript and the ASTJavaScript and the AST
JavaScript and the AST
 
ES2015 workflows
ES2015 workflowsES2015 workflows
ES2015 workflows
 
Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014 Maintainability SFJS Sept 4 2014
Maintainability SFJS Sept 4 2014
 
Idiot proofing your code
Idiot proofing your codeIdiot proofing your code
Idiot proofing your code
 
Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014Riot on the web - Kenote @ QCon Sao Paulo 2014
Riot on the web - Kenote @ QCon Sao Paulo 2014
 
Managing JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - FluentManaging JavaScript Complexity in Teams - Fluent
Managing JavaScript Complexity in Teams - Fluent
 
Real World Web components
Real World Web componentsReal World Web components
Real World Web components
 
Managing JavaScript Complexity
Managing JavaScript ComplexityManaging JavaScript Complexity
Managing JavaScript Complexity
 

Recently uploaded

Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
welrejdoall
 
WPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide DeckWPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide Deck
Lidia A.
 
Mitigating the Impact of State Management in Cloud Stream Processing Systems
Mitigating the Impact of State Management in Cloud Stream Processing SystemsMitigating the Impact of State Management in Cloud Stream Processing Systems
Mitigating the Impact of State Management in Cloud Stream Processing Systems
ScyllaDB
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
Sally Laouacheria
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Mydbops
 
Comparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdfComparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdf
Andrey Yasko
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
BookNet Canada
 
Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter
ScyllaDB
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
huseindihon
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
Mark Billinghurst
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
Stephanie Beckett
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
Enterprise Wired
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
UiPathCommunity
 
How RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptxHow RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptx
SynapseIndia
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
shanthidl1
 
20240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 202420240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 2024
Matthew Sinclair
 
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
Kief Morris
 
Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...
BookNet Canada
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
Safe Software
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
Emerging Tech
 

Recently uploaded (20)

Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
 
WPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide DeckWPRiders Company Presentation Slide Deck
WPRiders Company Presentation Slide Deck
 
Mitigating the Impact of State Management in Cloud Stream Processing Systems
Mitigating the Impact of State Management in Cloud Stream Processing SystemsMitigating the Impact of State Management in Cloud Stream Processing Systems
Mitigating the Impact of State Management in Cloud Stream Processing Systems
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
 
Comparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdfComparison Table of DiskWarrior Alternatives.pdf
Comparison Table of DiskWarrior Alternatives.pdf
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
 
Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
 
How RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptxHow RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptx
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
 
20240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 202420240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 2024
 
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
[Talk] Moving Beyond Spaghetti Infrastructure [AOTB] 2024-07-04.pdf
 
Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
 

Graphics Programming for Web Developers

  • 1. Graphics for Web Devs Jarrod Overson - Shape Security @jsoverson
  • 10. Yes, we're not game developers. But what are you looking for in your applications?
  • 11. • 60 FPS • Beautiful graphics • Responsive Interaction • Smooth animations
  • 12. When I say "video games" think: "performance critical graphic applications"
  • 13. The web is one of the only computer platforms that hasn't grown with video games pushing the edge. Why?
  • 14. 1996
  • 18. The web may not need games. But losing that discipline has handicapped us.
  • 21. So where do we start? <canvas>
  • 24. var context = canvas.getContext('2d'); or "webgl"
  • 27. for (var i = 0; i < 500; i++) { context.fillRect(10 + i, 10 + i, 100, 100); }
  • 29. for (var i = 0; i < 500; i++) { context.clearRect(0, 0, canvas.width, canvas.height); context.fillRect(10 + i, 10 + i, 100, 100); }
  • 32. var i = 0; function draw() { if (i < 500) i++; context.clearRect(0, 0, canvas.width, canvas.height); context.fillRect(i + 10, i + 10, 100, 100); requestAnimationFrame(draw); } draw();
  • 34. var i = 0; function draw() { if (i < 500) i++; context.clearRect(0, 0, canvas.width, canvas.height); context.fillRect(i + 10, i + 10, 100, 100); requestAnimationFrame(draw); } draw(); First we update our state.
  • 35. var i = 0; function draw() { if (i < 500) i++; context.clearRect(0, 0, canvas.width, canvas.height); context.fillRect(i + 10, i + 10, 100, 100); requestAnimationFrame(draw); } draw(); Then we render our current state.
  • 36. var i = 0; function draw() { if (i < 500) i++; context.clearRect(0, 0, canvas.width, canvas.height); context.fillRect(i + 10, i + 10, 100, 100); requestAnimationFrame(draw); } draw(); And we do it all over again.
  • 40. class ParticleSystem { constructor() { this.particles = []; this.emitters = []; } }
  • 41. class Particle { constructor(position, velocity, acceleration) { this.position = position; this.velocity = velocity; this.acceleration = acceleration; } }
  • 42. class Particle { constructor(position, velocity, acceleration) { this.position = position || {x: 0, y: 0}; this.velocity = velocity || {x: 0, y: 0}; this.acceleration = acceleration || {x: 0, y: 0}; } }
  • 43. class Vector { constructor(x, y) { this.x = x || 0; this.y = y || 0; } }
  • 44. class Particle { constructor(position, velocity, acceleration) { this.position = position || new Vector(0, 0); this.velocity = velocity || new Vector(0, 0); this.acceleration = acceleration || new Vector(0, 0); } }
  • 45. class Emitter { constructor(point, velocity) { this.position = point || new Vector(0, 0); this.velocity = velocity || new Vector(0, 0); } }
  • 46. class ParticleSystem { constructor(width, height) { /* …snipped… */ } render(context) { context.clearRect(0, 0, this.width, this.height); this.emitters.forEach(emitter => emitter.render(context)); this.particles.forEach(particle => particle.render(context)); } }
  • 47. class Particle { constructor(position, velocity, acceleration) { /* … */ } render(context) { context.fillStyle = 'red'; context.fillRect(this.position.x, this.position.y, 2, 2); } }
  • 48. var system = new ParticleSystem(width, height); system.emitters.push(new Emitter(new Vector(10, 10))); system.particles.push(new Particle(new Vector(20, 20))); system.particles.push(new Particle(new Vector(10, 20))); system.particles.push(new Particle(new Vector(20, 10))); function loop() { system.render(context); window.requestAnimationFrame(loop); } loop();
  • 50. var system = new ParticleSystem(width, height); system.addEmitter(320, 180); function loop() { system.update(); system.render(context); window.requestAnimationFrame(loop); } loop();
  • 51. class Emitter { constructor(position, velocity) { /* … */ } render(context) { /* … */ } emitParticle() { return new Particle(this.position.clone(), this.velocity.clone()); } }
  • 52. class Particle { constructor(position, velocity, acceleration) { /* … */ } render(context) { /* … */ } update() { this.velocity.add(this.acceleration); this.position.add(this.velocity); } }
  • 53. class ParticleSystem { constructor(width, height) { /* … */ } addEmitter(x, y, velX, velY) { /* … */ } update() { this.emitters.forEach( emitter => this.particles.push(emitter.emitParticle()) ); this.particles = this.particles.filter(particle => { particle.update(); let pos = particle.position; let outOfBounds = pos.x > this.width || pos.y > this.height || pos.x < 0 || pos.y < 0 return !outOfBounds; }) } }
  • 55. emitParticle() { // Define a maximum angle range in radians. let spread = Math.PI / 32; // Use an angle randomized over a spread so we have more of a "spray" var angle = this.velocity.rad() + spread - (Math.random() * spread * 2); // The magnitude of the emitter's velocity var magnitude = this.velocity.length(); // New velocity based off of the calculated angle and magnitude var velocity = Vector.fromAngle(angle, magnitude); // return our new Particle return new Particle(this.position.clone(), velocity); }
  • 56. emitParticle() { // Define a maximum angle range in radians. let spread = Math.PI / 32; // Use an angle randomized over a spread so we have more of a "spray" var angle = this.velocity.rad() + spread - (Math.random() * spread * 2); // The magnitude of the emitter's velocity var magnitude = this.velocity.length(); // New velocity based off of the calculated angle and magnitude var velocity = Vector.fromAngle(angle, magnitude); // return our new Particle return new Particle(this.position.clone(), velocity); }
  • 57. emitParticle() { // Define a maximum angle range in radians. let spread = Math.PI / 32; // Use an angle randomized over a spread so we have more of a "spray" var angle = this.velocity.rad() + spread - (Math.random() * spread * 2); // The magnitude of the emitter's velocity var magnitude = this.velocity.length(); // New velocity based off of the calculated angle and magnitude var velocity = Vector.fromAngle(angle, magnitude); // return our new Particle return new Particle(this.position.clone(), velocity); }
  • 60. - (2 * spread)
  • 61. - (2 * spread) * rand
  • 62. emitParticle() { // Define a maximum angle range in radians. let spread = Math.PI / 32; // Use an angle randomized over a spread so we have more of a "spray" var angle = this.velocity.rad() + spread - (Math.random() * spread * 2); // The magnitude of the emitter's velocity var magnitude = this.velocity.length(); // New velocity based off of the calculated angle and magnitude var velocity = Vector.fromAngle(angle, magnitude); // return our new Particle return new Particle(this.position.clone(), velocity); }
  • 63. emitParticle() { // Define a maximum angle range in radians. let spread = Math.PI / 32; // Use an angle randomized over a spread so we have more of a "spray" var angle = this.velocity.rad() + spread - (Math.random() * spread * 2); // The magnitude of the emitter's velocity var magnitude = this.velocity.length(); // New velocity based off of the calculated angle and magnitude var velocity = Vector.fromAngle(angle, magnitude); // return our new Particle return new Particle(this.position.clone(), velocity); }
  • 64. emitParticle() { // Define a maximum angle range in radians. let spread = Math.PI / 32; // Use an angle randomized over a spread so we have more of a "spray" var angle = this.velocity.rad() + spread - (Math.random() * spread * 2); // The magnitude of the emitter's velocity var magnitude = this.velocity.length(); // New velocity based off of the calculated angle and magnitude var velocity = Vector.fromAngle(angle, magnitude); // return our new Particle return new Particle(this.position.clone(), velocity); }
  • 68. 1. Application state modified and rendered independently. 2. Expensive mutations performed as little as possible. 3. Physics based animations.
  • 69. We're getting there. You can do this now, sort of.
  • 70. var Greets = React.createClass({ getInitialState: function() { return { name: "Portland" }; }, render: function() { return <div>Hello {this.state.name}</div>; } });
  • 71. The virtual DOM is an abstraction that saves you the cost of expensive render-based mutation in a familiar package. It's better, but a virtual DOM is not our application state.
  • 72. While you're exploring JavaScript, explore graphics & games. Go, do neat things with canvas!
  • 73. Maybe you'll find a use for normal mapped backgrounds. http://jsoverson.github.io/texture.js/demo/bricks.html
  • 74. Or maybe you'll use it to understand the bounds of an optical illusion. http://jsoverson.github.io/concentric-circle-illusion/
  • 75. Or maybe you'll make some really awesome games. https://ga.me/games/polycraft (turbulenz.com)
  • 76. Or maybe you'll try… phaser.io
  • 77. Graphics for Web Devs Jarrod Overson - Shape Security @jsoverson