SlideShare a Scribd company logo
Make	
  your	
  own	
  Print	
  &	
  Play	
  card	
  
game	
  using	
  SVG	
  and	
  JavaScript	
  
Kevin	
  Hakanson	
  
5	
  April	
  2014	
  
Abstract	
  
Want	
  to	
  leverage	
  your	
  creaDvity,	
  love	
  of	
  board	
  games,	
  and	
  web	
  plaGorm	
  experience	
  to	
  do	
  
something	
  different?	
  	
  Turn	
  your	
  imaginaDon	
  into	
  a	
  Print	
  &	
  Play	
  card	
  game	
  using	
  only	
  a	
  modern	
  
web	
  browser,	
  color	
  printer	
  and	
  text	
  editor.	
  
	
  
This	
  session	
  will	
  use	
  the	
  Scalable	
  Vector	
  Graphics	
  (SVG)	
  image	
  format	
  and	
  JavaScript	
  
programming	
  language	
  to	
  make	
  a	
  deck	
  of	
  cards	
  for	
  a	
  simple	
  game.	
  	
  CreaDng	
  a	
  few	
  cards	
  in	
  
graphics	
  soSware	
  like	
  Inkscape	
  is	
  one	
  thing,	
  but	
  what	
  about	
  50	
  or	
  100	
  cards?	
  	
  What	
  happens	
  
when	
  you	
  need	
  to	
  update	
  them	
  all?	
  	
  That’s	
  the	
  value	
  of	
  generaDng	
  your	
  SVG	
  using	
  JavaScript.	
  
	
  
We	
  will	
  start	
  with	
  a	
  blank	
  screen,	
  adding	
  color	
  and	
  graphics	
  elements	
  like	
  lines,	
  shapes,	
  text	
  and	
  
images.	
  	
  Learn	
  about	
  container	
  elements	
  and	
  defining	
  content	
  for	
  re-­‐use.	
  	
  Understand	
  how	
  units	
  
in	
  the	
  SVG	
  coordinate	
  system	
  can	
  transform	
  our	
  on-­‐screen	
  creaDon	
  into	
  an	
  8.5	
  by	
  11	
  inch	
  printed	
  
page	
  (or	
  PDF).	
  	
  SVG	
  examples	
  will	
  be	
  both	
  in	
  their	
  naDve	
  XML	
  format	
  and	
  created	
  from	
  JavaScript	
  
using	
  Snap.svg,	
  an	
  open	
  source	
  library	
  from	
  Adobe	
  designed	
  for	
  modern	
  web	
  browsers.	
  
	
  
You	
  will	
  leave	
  this	
  session	
  with	
  a	
  basic	
  knowledge	
  of	
  SVG	
  concepts,	
  how	
  to	
  programmaDcally	
  
generate	
  SVG	
  using	
  JavaScript,	
  and	
  how	
  to	
  make	
  your	
  SVG	
  creaDon	
  printer	
  friendly.	
  
TL;DR	
  
•  Print	
  &	
  Play	
  Card	
  Game	
  
– Scalable	
  Vector	
  Graphics	
  (SVG)	
  
– JavaScript	
  
– Snap.svg	
  
– 8.5	
  by	
  11	
  PrinDng	
  
	
  
Kevin	
  Hakanson	
  
@hakanson	
  
#tccc16	
  
kevin.hakanson@gmail.com	
  
+KevinHakanson	
  
hep://stackoverflow.com/users/22514/kevin-­‐hakanson	
  
heps://github.com/hakanson	
  

Recommended for you

Top 10 HTML5 features
Top 10 HTML5 featuresTop 10 HTML5 features
Top 10 HTML5 features

HTML5 contains many new interesting features that make the platform a capaple development platform. Sockets, SVG, geolocation, local storage and many more are included in the platform. In this one hour session, we will look at cool implementations of 10 features of HTML5

htmljavascripthtml5
Html5
Html5Html5
Html5

This document provides an agenda and introduction for a training session on HTML5. It discusses HTML5 features like new elements, canvas, SVG, drag and drop, geolocation, video, audio, forms, storage and more. The trainer is Mehdi Jalal from NETLINKS for the Afghanistan Workforce Development Program. Browser support for HTML5 is still evolving as the specification is not fully complete.

Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails

This document discusses technologies for creating and maintaining web applications. It covers Ruby and the Rails framework. Ruby is designed to be programmer-focused rather than machine-focused, helping create dynamic and self-explained code. Rails enables quickly building web servers through conventions, reuse, single responsibility principles, and features that provide quick setup, deployment, and built-in scalability. The document also discusses front-end architecture with client-side logic, and Rails features for development, deployment, databases, assets, and multi-environment configuration.

ruby on railsweb development.net framework
Bio	
  
Kevin	
  Hakanson	
  is	
  an	
  applicaDon	
  architect	
  for	
  
Thomson	
  Reuters	
  where	
  he	
  is	
  focused	
  on	
  highly	
  
scalable	
  web	
  applicaDons,	
  especially	
  the	
  JavaScript	
  
and	
  security	
  aspects.	
  His	
  background	
  includes	
  
both	
  .NET	
  and	
  Java,	
  but	
  he	
  is	
  most	
  nostalgic	
  about	
  
Lotus	
  Notes.	
  He	
  has	
  been	
  developing	
  professionally	
  
since	
  1994	
  and	
  holds	
  a	
  Master’s	
  degree	
  in	
  SoSware	
  
Engineering.	
  When	
  not	
  staring	
  at	
  a	
  computer	
  
screen,	
  he	
  is	
  probably	
  staring	
  at	
  another	
  screen,	
  
either	
  watching	
  TV	
  or	
  playing	
  video	
  games	
  with	
  his	
  
family.	
  
Bio	
  
Kevin	
  Hakanson	
  is	
  an	
  applicaDon	
  architect	
  for	
  
Thomson	
  Reuters	
  where	
  he	
  is	
  focused	
  on	
  highly	
  
scalable	
  web	
  applicaDons,	
  especially	
  the	
  JavaScript	
  
and	
  security	
  aspects.	
  His	
  background	
  includes	
  
both	
  .NET	
  and	
  Java,	
  but	
  he	
  is	
  most	
  nostalgic	
  about	
  
Lotus	
  Notes.	
  He	
  has	
  been	
  developing	
  professionally	
  
since	
  1994	
  and	
  holds	
  a	
  Master’s	
  degree	
  in	
  SoSware	
  
Engineering.	
  When	
  not	
  staring	
  at	
  a	
  computer	
  
screen,	
  he	
  is	
  probably	
  staring	
  at	
  another	
  screen,	
  
either	
  watching	
  TV	
  or	
  playing	
  video	
  games	
  with	
  his	
  
family.	
  
Make your own Print & Play card game using SVG and JavaScript
Make your own Print & Play card game using SVG and JavaScript

Recommended for you

Html5 more than just html5 v final
Html5  more than just html5 v finalHtml5  more than just html5 v final
Html5 more than just html5 v final

1. HTML5 is a major revision to the HTML standard that is still under development and aims to be the future of the web. 2. It includes new elements like <video>, <audio>, and <canvas> that allow embedding multimedia without plugins, as well as features like geolocation. 3. The HTML5 specification is very large, covering HTML, SVG, CSS, and APIs. It aims to provide a common standard for web applications. 4. HTML5 is not just a marketing term - it represents an ongoing effort to develop a unified standard for the next generation of the web.

html html5 w3c
HTML5 and CSS3: does now really mean now?
HTML5 and CSS3: does now really mean now?HTML5 and CSS3: does now really mean now?
HTML5 and CSS3: does now really mean now?

Code at http://people.opera.com/cmills/css3book/css3-html5-dnrmn.zip. The browser vendors love them! The browser fans and cutting edge designers are producing some really remarkable stuff, but what do HTML5 and CSS3 really mean for you, the pragmatic designer on the street? If you sidle up to one of those guys and whisper "but what about IE6 support", they are likely to slap you in the face, or run away with their hands clamped over their ears, yelling "la lala lala, I can't hear you." In this talk, Chris Mills will have a look at some of the new features of HTML5 and CSS3 - new semantics, video, media queries, rounded corners, web fonts, drop shadows and more. He will show real world examples, and then look at how they actually perform on those shady older browsers we are often called on to support. He will then look at strategies for providing support for those older browsers, including using JavaScript, fallbacks, and progressive enhancement.

html5alternativecss3
Polyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java DeveloperPolyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java Developer

JavaOne 2017, San Francisco: Talk by Mario-Leander Reimer (@LeanderReimer, Principal Software Architect at QAware). Abstract: Use the right tool for the job! That’s the motto of this session. As modern developers, we need to master several different languages all at once to be 100% productive. We define our development environments using Gradle. We implement our software in Java, Kotlin or another suitable JVM based language. We use Groovy or Scala to test our code at different layers. We construct the build pipelines for our software using a Groovy DSL or JSON. We use YAML and Python to describe the infrastructure and the deployment for our applications. We document our architectures using AsciiDoc and Java. This code intense, polyglot session is a fun and opinionated journey into the modern era of software development.

computer languagesgroovyjava
Make your own Print & Play card game using SVG and JavaScript
Make your own Print & Play card game using SVG and JavaScript
Make your own Print & Play card game using SVG and JavaScript
Make your own Print & Play card game using SVG and JavaScript

Recommended for you

Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design

This document provides an overview of responsive web design. It defines responsive web design as an approach that aims to provide optimal viewing experiences across different devices. It discusses the history and alternatives to responsive design. The key aspects of responsive design are then explained, including fluid grids, flexible images, CSS media queries, and using the viewport meta tag. Tools for responsive design like Bootstrap and techniques like fluid layouts are also covered. Finally, resources for further learning about responsive web design are provided.

rwdresponsive web design
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis

IT-Tage 2017, Frankfurt am Main: Vortrag von Mario-Leander Reimer (@LeanderReimer, Cheftechnologe bei QAware) Abstract: Als zeitgemäßer Entwickler muss man eine Vielzahl an Sprachen sicher beherrschen. Wir definieren unsere Entwicklungsumgebung mit Gradle, wir bauen unsere Software in Java, Kotlin und JavaScript. Wir verwenden Groovy und Scala um unsere Software zu testen. Die Build-Pipeline wird per DSL und JSON definiert. Mit YAML und Python beschreiben wir die Infrastruktur und das Deployment unserer Anwendungen. Die Dokumentation unserer Architekturen erledigen wir mit AsciiDoc und JRuby. Use the right tool for the job! Das ist das Motto dieser Session. Jede Sprache hat Stärken in einer bestimmten Domäne. Diese Stärken gilt es zu nutzen. Aber einfach blind jede gerade angesagte Sprache oder Technologie einzusetzen, ist sicher nicht die Lösung. Dieser Vortrag führt durch die einzelnen Entwicklungs-Phasen eines Microservice und zeigt dabei einen in der Praxis erprobten, stabilen und gut integrierten polyglotten Technologie-Stack um moderne Enterprise-Applikationen schnell und einfach zu entwickeln.

it-tagecodesprogrammiersprachen
Windows Phone 7 and Windows Azure – A Match Made in the Cloud
Windows Phone 7 and Windows Azure – A Match Made in the CloudWindows Phone 7 and Windows Azure – A Match Made in the Cloud
Windows Phone 7 and Windows Azure – A Match Made in the Cloud

Windows Phone 7 and Windows Azure are a good match because they both provide easy and familiar development environments, connectivity through the cloud, and scalability. They are compatible in these areas. The document discusses how Windows Phone 7 and Windows Azure can be used together through features like data storage in Windows Azure tables and blobs, push notifications, and identity management with Access Control Services. It provides examples of how to integrate the platforms for storing, retrieving, and displaying data stored in the cloud.

windows phone 7windows azurewindows phone
Fluxx	
  Blanxx	
  
•  Add	
  your	
  own	
  zany	
  ideas	
  
•  Each	
  pack	
  contains	
  one	
  of	
  each	
  
of	
  the	
  five	
  card	
  types	
  
•  Cards	
  are	
  "halfway-­‐blank"	
  with	
  
standard-­‐issue	
  text	
  and	
  the	
  
stripe	
  of	
  color	
  
•  Just	
  grab	
  your	
  trusty	
  
permanent	
  marker	
  and	
  
customize	
  the	
  fun!	
  	
  
hep://store.looneylabs.com/Fluxx-­‐Blanxx	
  	
  
Print	
  &	
  Play	
  
•  “Print	
  &	
  Play	
  games	
  are	
  those	
  which	
  are	
  oSen	
  
free	
  to	
  any	
  player	
  who	
  wishes	
  to	
  print	
  them	
  
off	
  themselves.	
  Many	
  are	
  available	
  on	
  the	
  
Internet.”	
  
–  hep://boardgamegeek.com/boardgamecategory/1120/print-­‐play	
  	
  
	
  
•  Print	
  &	
  Play	
  games	
  Boardgamegeek	
  wiki	
  entry:	
  
–  hep://boardgamegeek.com/wiki/page/Print_and_Play_Games	
  	
  
Azure	
  Fluxx	
  
•  Version	
  of	
  Fluxx	
  based	
  in	
  the	
  Window	
  Azure	
  
“universe”:	
  
– SoSware	
  Development	
  
– MicrosoS	
  Products	
  
– Web	
  Technologies	
  
Fair	
  Use?	
  
•  Fluxx	
  Copyright	
  Looney	
  Labs	
  
•  Same	
  card	
  types	
  
•  Same	
  basic	
  gameplay	
  and	
  rules	
  wording	
  
•  Similar,	
  but	
  not	
  exact,	
  colors	
  and	
  artwork	
  
•  Different	
  fonts	
  
•  Different	
  physical	
  card	
  size	
  and	
  deck	
  count	
  

Recommended for you

Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and Techniques

Responsive Web design challenges Web designers to adapt a new mindset to their design and coding processes. This talk provides an overview of various practical techniques, tips and tricks that you might want to be aware of when working on a new responsive design project.

cssweb design and developmentresponsive
Drupal Backbone.js in the Frontend
Drupal Backbone.js in the FrontendDrupal Backbone.js in the Frontend
Drupal Backbone.js in the Frontend

Slides for presentation at DrupalCon Munich August 2012 http://munich2012.drupal.org/program/sessions/backbonejs-frontend Author: David Corbacho http://corbacho.info

drupalrestfulajax
W3C HTML5 KIG-The complete guide to building html5 games
W3C HTML5 KIG-The complete guide to building html5 gamesW3C HTML5 KIG-The complete guide to building html5 games
W3C HTML5 KIG-The complete guide to building html5 games

The document discusses building HTML5 games and provides resources on graphics libraries, physics engines, handling touch input, and gaming frameworks. It recommends libraries like EaselJS and frameworks like MelonJS and ImpactJS for HTML5 game development. Tutorials are presented on porting games to HTML5 using these tools as well as considerations for building games targeting multiple platforms like Windows 8.

gamehtml5w3c kig
Azure	
  Fluxx	
  Cards	
  
Goals	
  and	
  Keepers	
  
•  Goals	
  
–  Old	
  School	
  
–  New	
  School	
  
–  Single	
  Page	
  App	
  
–  Polyglot	
  
–  Web	
  PlaGorm	
  
–  Tool	
  Master	
  
–  .NET	
  PlaGorm	
  
–  Entry	
  Level	
  
–  Mistaken	
  IdenDty	
  
–  Selectors	
  
–  Transpile	
  
–  Odd	
  Couple	
  
–  Double	
  MVC	
  
–  Intellisense	
  
–  Edge.js	
  
–  UI	
  Bootstrap	
  
•  Keepers	
  
Scalable	
  Vector	
  Graphics	
  (SVG)	
  
•  Text-­‐based	
  graphics	
  language	
  that	
  describes	
  
images	
  with	
  vector	
  shapes,	
  text,	
  and	
  
embedded	
  raster	
  graphics.	
  
•  SVG	
  files	
  provide	
  resoluDon	
  independent,	
  high	
  
resoluDon	
  dots	
  per	
  inch	
  (HiDPI)	
  graphics	
  on	
  
the	
  web,	
  in	
  print,	
  and	
  on	
  mobile	
  devices	
  in	
  a	
  
compact	
  format.	
  	
  
	
  
hep://www.adobe.com/devnet/svg.html	
  	
  
SVG	
  EssenDals	
  
“This	
  insighGul	
  book	
  takes	
  you	
  through	
  the	
  
ins	
  and	
  outs	
  of	
  SVG,	
  from	
  the	
  basics	
  to	
  
more	
  complicated	
  features.”	
  
	
  
hep://commons.oreilly.com/wiki/index.php/SVG_EssenDals	
  	
  

Recommended for you

SVG Strikes Back
SVG Strikes BackSVG Strikes Back
SVG Strikes Back

SVG was first introduced on the web in 2001 and finally came around to being a practical web technology in 2011. Thanks to wide browser support and the popularity of retina screens, SVG is a powerful and flexible technology that everyone should have in their web development toolbox. In this talk, I'll tell you why should be using SVGs now and how to integrate SVGs into responsive websites, use it in iconography for resolution independence, and use JavaScript and CSS to create animations and interactive prototypes. I gave this talk at Front Porch in Dallas, TX on October 7th. http://frontporch.io/

responsiveprototypecss
Html5 Canvas and Mobile Graphics
Html5 Canvas and Mobile GraphicsHtml5 Canvas and Mobile Graphics
Html5 Canvas and Mobile Graphics

Engin Yağız Hatay gave a presentation on graphics and animation capabilities in web browsers. He discussed several technologies including CSS3, Canvas, SVG, and WebGL, and when each is best suited. He provided details on HTML5 Canvas capabilities and limitations. Hatay also covered browser support for these technologies and recommended several JavaScript libraries that can be used to create graphics and animations, including PaperJS, ProcessingJS, and ThreeJS. He concluded with a discussion of tools and frameworks for mobile graphics development.

mobile graphicspaperjsprocessingjs
Vector Graphics on the Web: SVG, Canvas, CSS3
Vector Graphics on the Web: SVG, Canvas, CSS3Vector Graphics on the Web: SVG, Canvas, CSS3
Vector Graphics on the Web: SVG, Canvas, CSS3

This document summarizes different vector graphic options for use on the web. It discusses the differences between vector and raster graphics, and why vectors are preferable for resolution independence and smaller file sizes. It then examines SVG, Canvas, VML, and CSS3 as vector graphic options, outlining browser support, APIs, and common uses for each. While SVG is ideal theoretically, browser support is still limited, so libraries like SVG Web and Raphael.js are recommended to abstract cross-browser differences. In the end, SVG is generally better than Canvas for interactive graphics with events, while Canvas may be better for full-screen animations and games.

html5svgcanvas
SVG	
  Primer	
  
“The	
  book	
  aeempts	
  to	
  discuss	
  SVG	
  in	
  
broader	
  terms,	
  but	
  at	
  the	
  same	
  Dme	
  to	
  
illustrate	
  how	
  one	
  can	
  write	
  JavaScript	
  
programs	
  that	
  use	
  and	
  manipulate	
  SVG.”	
  
	
  
hep://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html	
  	
  
Snap.svg	
  
	
  
“the	
  JavaScript	
  SVG	
  library	
  for	
  the	
  modern	
  web”	
  
	
  
“makes	
  working	
  with	
  your	
  SVG	
  assets	
  as	
  easy	
  as	
  
jQuery	
  makes	
  working	
  with	
  the	
  DOM”	
  
	
  
	
  
	
  
hep://snapsvg.io/	
  	
  
The	
  svg	
  Element	
  
•  <svg>	
  is	
  both	
  root	
  element	
  and	
  used	
  to	
  nest	
  
standalone	
  SVG	
  fragments	
  
•  Each	
  standalone	
  fragment	
  has	
  its	
  own	
  
viewPort	
  and	
  coordinate	
  system	
  
<svg>	
  XML	
  Example	
  
<svg	
  
	
  	
  width="8.5in"	
  
	
  	
  height="11in"	
  
	
  	
  viewBox="0	
  0	
  215.9	
  279.4"	
  
	
  	
  version="1.1"	
  
	
  	
  xmlns="http://www.w3.org/2000/svg"	
  	
  
	
  	
  xmlns:xlink="http://www.w3.org/1999/xlink">	
  
</svg>	
  

Recommended for you

D3.js and SVG
D3.js and SVGD3.js and SVG
D3.js and SVG

The document is a presentation about D3 and SVG technologies. It includes sections on networking opportunities, an interactive presentation format, polls about experience levels with D3 and SVG, examples of force-directed graphs and animated SVGs using D3, and details on implementing drag and drop as well as mouseover highlighting in a D3 visualization. The presentation source code is provided on GitHub and other examples are referenced, including alternatives to SVG. It concludes with another poll and a question and answer period.

svgd3javascript
Easy charting with
Easy charting withEasy charting with
Easy charting with

This document discusses two technologies for creating charts directly in the browser: Canvas and SVG. Canvas uses JavaScript to manipulate pixel data and is best for fast rendering like games, while SVG uses vector-based markup that lives in the DOM, making it easier to interact with and support older browsers with VML. The document recommends SVG for charts since it allows dynamic tooltips and broad browser support without needing polyfills.

Thats Not Flash?
Thats Not Flash?Thats Not Flash?
Thats Not Flash?

Vector graphics allow shapes to be mathematically represented and scaled smoothly, while raster graphics use a grid of pixels. SVG is an XML format for describing vector shapes and is supported natively by modern browsers. DojoX GFX provides a normalized API for creating vector graphics across browsers using SVG, VML, Canvas, or Silverlight depending on browser support. It implements a procedural subset of SVG for creating shapes and text programmatically similar to the canvas API.

dojoxgfxvector
<svg>	
  JavaScript	
  Example	
  
var	
  svg	
  =	
  Snap("8.5in",	
  (pageCount*11)+"in")	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  .attr({id:"SnapDeck",	
  style:"display:	
  block;"});	
  
	
  
var	
  pageAttr	
  =	
  {	
  width:"8.5in",	
  height:"11in",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "viewBox"	
  :	
  "0	
  0	
  215.9	
  279.4"};	
  
	
  
for	
  (pageIndex	
  =	
  1;	
  pageIndex<=pageCount;	
  pageIndex++)	
  {	
  
	
  
	
  	
  	
  	
  page	
  =	
  svg.el("svg",	
  pageAttr)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .attr({	
  id	
  :	
  "SnapDeckPage"+pageIndex,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  y	
  :	
  ((pageIndex-­‐1)*11)+"in"	
  });	
  
}	
  
<svg>	
  XML	
  Example	
  
<svg	
  width="8.5in"	
  height="22in"	
  id="SnapDeck">	
  
	
  
	
  	
  <svg	
  width="8.5in"	
  height="11in"	
  y="0in"	
  
	
  	
  	
  viewBox="0	
  0	
  215.9	
  279.4"	
  id="SnapDeckPage1">	
  
	
  	
  </svg>	
  
	
  
	
  	
  <svg	
  width="8.5in"	
  height="11in"	
  y="11in"	
  
	
  	
  	
  viewBox="0	
  0	
  215.9	
  279.4"	
  id="SnapDeckPage2">	
  
	
  	
  </svg>	
  
	
  
</svg>	
  
Grouping	
  and	
  Reusing	
  
	
  
“The	
  <use>	
  (reuse)	
  and	
  <g>	
  (or	
  group)	
  
tags	
  bear	
  similarity	
  to	
  the	
  variables	
  and	
  
objects	
  encountered	
  in	
  programming	
  
languages.”	
  
	
  
	
  
hep://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html#operaDons	
  	
  
The	
  g	
  Element	
  
•  Gathers	
  child	
  elements	
  into	
  a	
  group	
  
•  Uses	
  id	
  aeribute	
  to	
  give	
  a	
  unique	
  name	
  
•  Can	
  have	
  <title>	
  and	
  <desc>	
  
•  Styles	
  apply	
  to	
  child	
  elements	
  
•  Can	
  nest	
  groups	
  within	
  one	
  another	
  

Recommended for you

CANVAS vs SVG @ FrontInRio 2011
CANVAS vs SVG @ FrontInRio 2011CANVAS vs SVG @ FrontInRio 2011
CANVAS vs SVG @ FrontInRio 2011

Conheça as principais diferenças entre os dois formatos e tenha uma visão do que se pode fazer com ambas tecnologias.

frontinriorio de janeirobrazil
HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!

WebGL is getting everywhere. The recent announcement from Microsoft that Internet Explorer is finally supporting WebGL is just another example of the importance that this technology is getting among web technologies. For the first time, web developers can access complex graphics features that were only available for native game development. But, what are the real advantages of WebGL over other web based games development technologies? What are the different game engines that support it? Is WebGL ready for cross-platform game development? Can only 3D games benefit from WebGL? All these questions and more will be answered in this talk full of code snippets and useful tips that will try to show that the web environment (and specially WebGL) can be great for developing successful games, and could become in a real game changer.

webgl html5 games canvas ludei cocoonjs
The Image that called me - Active Content Injection with SVG Files
The Image that called me - Active Content Injection with SVG FilesThe Image that called me - Active Content Injection with SVG Files
The Image that called me - Active Content Injection with SVG Files

Mario Heiderich gave a presentation on active content injection using SVG files. He discussed how SVG files are XML-based and support scripting, allowing execution of JavaScript. This enables security issues like XSS. Browser implementations of SVG are inconsistent, with different levels of script support depending on how SVG files are deployed (inline, via <img>, etc). Exploits discussed SVG vulnerabilities in Firefox, Opera, and Chromium. Defense is difficult due to lack of documentation and filters, and new vectors are found weekly. Future work proposed a SVG purifier and raising awareness of issues.

xsssecurityfirefox
<g>	
  XML	
  Example	
  
<g	
  id="plus"	
  	
  
	
  	
  	
  opacity=".4"	
  	
  
	
  	
  	
  stroke="black"	
  	
  
	
  	
  	
  stroke-­‐width="0.1">	
  
	
  
	
  	
  <path	
  d="M	
  -­‐3	
  0	
  H	
  3	
  M	
  0	
  -­‐3	
  V	
  3"	
  />	
  
	
  
</g>	
  
	
  
The	
  defs	
  Element	
  
•  Puxng	
  grouped	
  objects	
  inside	
  of	
  <defs>	
  tells	
  
SVG	
  to	
  define	
  them	
  without	
  displaying	
  them	
  
•  SVG	
  recommendaDon	
  is	
  to	
  put	
  all	
  objects	
  
intended	
  for	
  re-­‐use	
  inside	
  <defs>	
  
<defs>	
  JavaScript	
  Example	
  
var	
  plus	
  =	
  svg.g(	
  
	
  svg.path("M	
  -­‐3	
  0	
  H	
  3	
  M	
  0	
  -­‐3	
  V	
  3")	
  
);	
  
plus.attr({id:"plus",	
  	
  
	
  	
  opacity:"0.4",	
  
	
  	
  stroke:"black",	
  
	
  	
  "stroke-­‐width":"0.1"});	
  
plus.toDefs();	
  
The	
  symbol	
  Element	
  
•  <symbol>	
  element	
  provides	
  another	
  way	
  of	
  
grouping	
  elements	
  
•  Never	
  displayed,	
  so	
  don't	
  have	
  to	
  enclose	
  it	
  in	
  
<defs>	
  but	
  customary	
  to	
  do	
  so	
  
•  <symbol>	
  can	
  specify	
  viewBox	
  and	
  
preserveAspectRatio	
  aeributes	
  

Recommended for you

Universal Applications with Universal JavaScript
Universal Applications with Universal JavaScriptUniversal Applications with Universal JavaScript
Universal Applications with Universal JavaScript

Today JavaScript is a ubiquitous runtime.  JavaScript is everywhere - from Browser,  server side, embedded device, mobile and gaming. JavaScript can be leveraged to write once and run everywhere or have a consistent programming style, and drive consistent experience across multiple channels – browser, Servers side, or Native Mobile apps.

angular2mobileuniversal javascript
HTML5 - A Whirlwind tour
HTML5 - A Whirlwind tourHTML5 - A Whirlwind tour
HTML5 - A Whirlwind tour

This document provides an overview of HTML5 and related technologies. It discusses how HTML5 is more than just HTML, and covers the HTML5 specification process and components. It then provides a tour of new HTML5 features like <video>, <audio>, SVG, <canvas>, geolocation, and CSS3 specifications including borders, colors, shadows, backgrounds, fonts, media queries and transforms. The document demonstrates several of these features and provides resources for further information.

html html5 w3c
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007

Eugene Lazutkin's keynote on DojoX GFX at SVG Open 2007. (The seminar notes are here: http://www.slideshare.net/elazutkin/dojox-gfx-session-eugene-lazutkin-svg-open-2007/)

svgjavascriptgfx
The	
  use	
  Element	
  
•  “copy-­‐and-­‐paste”	
  of	
  a	
  defined	
  group	
  
•  Specify	
  with	
  an	
  xlink:href	
  aeribute	
  
•  Specify	
  the	
  x	
  and	
  y	
  locaDon	
  for	
  the	
  
group's	
  (0,	
  0)	
  point	
  
Chrome	
  Print	
  Dialog	
  
<g	
  id="pluses">	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="12.7"	
  y="7.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="12.7"	
  y="95.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="12.7"	
  y="183.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="12.7"	
  y="271.7"/>	
  
	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="76.2"	
  y="7.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="76.2"	
  y="95.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="76.2"	
  y="183.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="76.2"	
  y="271.7"/>	
  
	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="139.7"	
  y="7.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="139.7"	
  y="95.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="139.7"	
  y="183.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="139.7"	
  y="271.7"/>	
  
	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="203.2"	
  y="7.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="203.2"	
  y="95.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="203.2"	
  y="183.7"/>	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  x="203.2"	
  y="271.7"/>	
  
</g>	
  
	
  
<use>	
  XML	
  Example	
  
<g	
  id="pluscolumn">	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  y="7.7"	
  />	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  y="95.7"	
  />	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  y="183.7"	
  />	
  
	
  	
  	
  	
  <use	
  xlink:href="#plus"	
  y="271.7"	
  />	
  
</g>	
  
	
  
<g	
  id="pluses">	
  
	
  	
  	
  	
  <use	
  xlink:href="#pluscolumn"	
  x="12.7"	
  />	
  
	
  	
  	
  	
  <use	
  xlink:href="#pluscolumn"	
  x="76.2"	
  />	
  
	
  	
  	
  	
  <use	
  xlink:href="#pluscolumn"	
  x="139.7"	
  />	
  
	
  	
  	
  	
  <use	
  xlink:href="#pluscolumn"	
  x="203.2"	
  />	
  
</g>	
  

Recommended for you

Academy PRO: HTML5 API graphics
Academy PRO: HTML5 API graphicsAcademy PRO: HTML5 API graphics
Academy PRO: HTML5 API graphics

Lecture for Binary Studio Academy PRO course about HTML5 API by Bohdan Rusinka (JS developer at Binary Studio) binary-studio.com

html5binary studiohtml5 api
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular

Do you want to build native mobile apps for iOS and Android? Are you a web developer? Then NativeScript is the perfect framework for you. NativeScript is an open source framework for creating native mobile apps using the skills of the web developer: JavaScript, CSS and simple tag-based markup. Create rich, high-performance iOS and Android apps with 100% native UI using many of the skills you already have. Topics covered include: NativeScript framework core concepts and getting started Accessing native device capabilities with JavaScript Building native mobile apps with Angular 2 Common app patterns (login, settings, data bound list and more) Styling NativeScript with CSS Targeting specific devices and screens Debugging and deploying to devices There has never been a better (and easier) way for web developers to create native mobile apps.

javascriptmobile application developmentandroid
Svghtml5 Meetup
Svghtml5 MeetupSvghtml5 Meetup
Svghtml5 Meetup

This document provides an overview of SVG (Scalable Vector Graphics) and compares it to other vector graphics technologies such as Flash, Silverlight, and HTML5 Canvas. It discusses SVG's capabilities, versions, mobile support, and tools. It also covers related topics like animation, JavaScript integration, and browser support. The future of SVG and how it compares to other technologies is explored.

<use>	
  JavaScript	
  Example	
  
//	
  width:	
  63.5,	
  height:	
  88	
  
var	
  xstops	
  =	
  [12.7,	
  76.2,	
  139.7,	
  203.2];	
  
var	
  ystops	
  =	
  [7.7,	
  95.7,	
  183.7,	
  271.7];	
  
	
  
pages.forEach(function	
  (page)	
  {	
  
	
  	
  ystops.forEach(function	
  (y)	
  {	
  
	
  	
  	
  	
  xstops.forEach(function	
  (x)	
  {	
  
	
  	
  	
  	
  	
  	
  var	
  p	
  =	
  plus.use().attr({	
  x:	
  x,	
  y:	
  y	
  });	
  
	
  	
  	
  	
  	
  	
  page.append(p);	
  
	
  	
  	
  	
  });	
  
	
  	
  });	
  
});	
  
Why	
  63.5	
  x	
  88	
  mm	
  ?	
  
Make your own Print & Play card game using SVG and JavaScript
Paper	
  Cueer	
  

Recommended for you

Rich Media Advertising with SVG and JavaScript
Rich Media Advertising with SVG and JavaScriptRich Media Advertising with SVG and JavaScript
Rich Media Advertising with SVG and JavaScript

This document discusses using SVG and HTML5 video for rich media advertising as an alternative to Flash. It provides a history of rich media ads and examples using Flash. The document demonstrates a prototype rich media ad created with SVG and HTML5 video that performs better than its Flash equivalent. It addresses challenges like a lack of SVG authoring tools and full browser support. The document argues that SVG is more semantic, accessible and an open standard compared to Flash or Canvas. With improved tools and browser support, SVG could become the standard for rich media ads.

svgopen2009html5svg
SVG Icons and Screen Reader Accessibility
SVG Icons and Screen Reader AccessibilitySVG Icons and Screen Reader Accessibility
SVG Icons and Screen Reader Accessibility

SVG is often used for content, linked icons, and buttons. Learn which coding methods perform best across a variety of screen reader and browser combinations. By @DennisL

webdevaccessibilitysvg
Uni Tour Germany 11.2009
Uni Tour Germany 11.2009Uni Tour Germany 11.2009
Uni Tour Germany 11.2009

The document discusses Opera Education and provides information about university seminars, student representatives, web standards curriculum, and summer internships offered by Opera. It also provides details on how to learn more through email or their education website, which has information on internships, student programs, and forums.

The	
  rect	
  Element	
  
•  Specify	
  x-­‐	
  and	
  y-­‐coordinates	
  of	
  the	
  upper	
  leS	
  
corner,	
  width,	
  and	
  height	
  
– 	
  x,	
  y,	
  width	
  and	
  height	
  aeributes	
  
•  Interior	
  is	
  filled	
  with	
  a	
  fill	
  color	
  (default	
  black)	
  
•  Outline	
  is	
  drawn	
  with	
  strokes	
  (default	
  none)	
  
<rect	
  x="0"	
  y="0"	
  	
  
	
  width="10"	
  height="10"	
  fill="black"/>	
  
The	
  circle	
  Element	
  
•  Specify	
  center	
  x-­‐coordinate,	
  center	
  y-­‐
coordinate,	
  and	
  radius	
  
– 	
  cx,	
  cy,	
  and	
  r	
  aeributes	
  
•  Interior	
  is	
  filled	
  with	
  a	
  fill	
  color	
  (default	
  black)	
  
•  Outline	
  is	
  drawn	
  with	
  strokes	
  (default	
  none)	
  
<circle	
  cx="5"	
  cy="5"	
  r="3.5"	
  
	
  fill="white"	
  stroke-­‐width="0"	
  />	
  
The	
  ellipse	
  Element	
  
•  Like	
  <circle>,	
  specify	
  center	
  x-­‐coordinate,	
  
center	
  y-­‐coordinate	
  
•  Also	
  needs	
  an	
  x-­‐radius	
  and	
  a	
  y-­‐radius	
  
– aeributes	
  for	
  these	
  radii	
  are	
  named	
  rx	
  and	
  ry	
  
<ellipse	
  cx="4"	
  cy="4"	
  	
  
	
  rx="0.25"	
  ry="0.5"	
  />	
  
The	
  line	
  Element	
  
•  Specify	
  the	
  x-­‐	
  and	
  y-­‐coordinates	
  of	
  the	
  line's	
  
endpoints	
  
– 	
  x1,	
  y1,	
  x2	
  and	
  x2	
  aeributes	
  

Recommended for you

Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017

Use the right tool for the job! That’s the motto of this session. As modern developers, we need to master several different languages all at once to be 100 percent productive. We define our development environments with Gradle. We implement our software in Java, Kotlin, or another suitable JVM-based language. We use Groovy or Scala to test our code at different layers. We construct the build pipelines for our software with a Groovy DSL or JSON. We use YAML and Python to describe the infrastructure and deployment of our applications. We document our architectures with AsciiDoc and Java. This code-intense, polyglot session is a fun and opinionated journey into the modern era of software development. #javaone2017 @JavaOneConf @qaware

programmingpolyglot programmingqaware
Sharpen your "Architectural Documentation" Saw
Sharpen your "Architectural Documentation" SawSharpen your "Architectural Documentation" Saw
Sharpen your "Architectural Documentation" Saw

All solutions implicitly have an architecture, ideally one which is both intentional and documented. The Architectural Decision Records (ADR) process distributes architectural decision-making across team members. Accelerate the time-consuming process of hand drawing diagrams by rendering from a text-based source. Communicate effectively by committing both your markdown-based ADRs and text-based diagrams into your source code repository. This talk will review these techniques, provide actionable steps to adoption, and even live-code some examples.

architecturecode
Who's in your Cloud? Cloud State Monitoring
Who's in your Cloud? Cloud State MonitoringWho's in your Cloud? Cloud State Monitoring
Who's in your Cloud? Cloud State Monitoring

When it comes to cloud operations, monitoring security and visibility are critical. Integration by other systems via Cloud APIs is one of the most powerful value drivers of the hyperscale cloud providers. In this session, we will describe Cloud State Monitoring, including why it is important and who needs awareness in your organization. An explanation of the categories of Cloud APIs (including the management plane, control plane, and data plane) will give us background. Specific use cases across AWS, Azure, and GCP will dive deep into various changes you might not have considered monitoring.

cloudsecurityaws
The	
  path	
  Element	
  
•  Draws	
  the	
  outline	
  of	
  any	
  arbitrary	
  shape	
  by	
  
specifying	
  a	
  series	
  of	
  connected	
  lines,	
  arcs,	
  and	
  
curves	
  
•  Must	
  begin	
  with	
  a	
  moveto	
  command	
  
•  Followed	
  by	
  one	
  or	
  more	
  lineto	
  commands	
  
•  Arc	
  draws	
  a	
  secDon	
  of	
  an	
  ellipse	
  that	
  connects	
  
two	
  points	
  
<path	
  fill="none"	
  stroke-­‐linecap="round"	
  
	
  	
  	
  	
  	
  	
  d="M	
  3.5	
  6.75	
  a	
  1.5,1.5	
  0	
  1	
  1	
  3	
  0"	
  />	
  
Fluxx	
  Card	
  Types	
  
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="black"	
  />	
  
<g	
  id="frown"	
  stroke="black"	
  fill="black"	
  stroke-­‐width=".5">	
  
	
  	
  <circle	
  cx="5"	
  cy="5"	
  r="3.5"	
  fill="white"	
  stroke-­‐width="0"	
  />	
  
	
  
	
  	
  <circle	
  cx="4"	
  cy="4"	
  r="0.25"	
  />	
  
	
  	
  <circle	
  cx="6"	
  cy="4"	
  r="0.25"	
  />	
  
	
  
	
  	
  <path	
  fill="none"	
  
	
  	
  	
  	
  	
  	
  	
  	
  d="M	
  3.5	
  6.75	
  a	
  1.5,1.5	
  0	
  1	
  1	
  3	
  0"	
  />	
  
</g>	
  
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="black"	
  />	
  
<g	
  id="frown"	
  stroke="black"	
  fill="black"	
  stroke-­‐width=".5">	
  
	
  	
  <circle	
  cx="5"	
  cy="5"	
  r="3.5"	
  fill="white"	
  stroke-­‐width="0"	
  />	
  
	
  
	
  	
  <ellipse	
  cx="4"	
  cy="4"	
  rx="0.25"	
  ry="0.5"	
  />	
  
	
  	
  <ellipse	
  cx="6"	
  cy="4"	
  rx="0.25"	
  ry="0.5"	
  />	
  
	
  
	
  	
  <path	
  fill="none"	
  stroke-­‐linecap="round"	
  
	
  	
  	
  	
  	
  	
  	
  	
  d="M	
  3.5	
  6.75	
  a	
  1.5,1.5	
  0	
  1	
  1	
  3	
  0"	
  />	
  
</g>	
  

Recommended for you

Adopting Multi-Cloud Services with Confidence
Adopting Multi-Cloud Services with ConfidenceAdopting Multi-Cloud Services with Confidence
Adopting Multi-Cloud Services with Confidence

In transitioning to multi-cloud, IT organizations have the same responsibility to provide quality service and operational security yet have a much greater need to understand how to efficiently govern and manage these disparate cloud services. In this session, we will examine some key patterns and models taken from a Cloud Adoption Framework through a multi-cloud lens. The presentation will include a mixture of high-level guidance, examples where vocabulary and terminology differ, and opinions on when to utilize cloud-agnostic vs cloud-native technologies for strategic decisions. Attendees will leave with a better understanding of how to implement a Cloud Adoption Framework across multiple clouds and a higher level of confidence in their multi-cloud adoption plans.

cloud computingawsazure
Introduction to Speech Interfaces for Web Applications
Introduction to Speech Interfaces for Web ApplicationsIntroduction to Speech Interfaces for Web Applications
Introduction to Speech Interfaces for Web Applications

Speaking with your computing device is becoming commonplace. Most of us have used Apple's Siri, Google Now, Microsoft's Cortana, or Amazon's Alexa - but how can you speak with your web application? The Web Speech API can enable a voice interface by adding both Speech Synthesis (Text to Speech) and Speech Recognition (Speech to Text) functionality. This session will introduce the core concepts of Speech Synthesis and Speech Recognition. We will evaluate the current browser support and review alternative options. See the JavaScript code and UX design considerations required to add a speech interface to your web application. Come hear if it's as easy as it sounds?

webjavascriptspeech synthesis
Learning to Mod Minecraft: A Father/Daughter Retrospective
Learning to Mod Minecraft: A Father/Daughter RetrospectiveLearning to Mod Minecraft: A Father/Daughter Retrospective
Learning to Mod Minecraft: A Father/Daughter Retrospective

Video: https://youtu.be/InbVSEA8V0U What do Minecraft and Blockly have in common? Minecraft is a popular, open world video game where players can build structures using digital blocks. Blockly is a open source visual programming language where students can build programs using blocks. LearnToMod combined these together to teach students how to modify Minecraft using either the Blockly visual editor or JavaScript. This session will be the retrospective of an enthusiastic father teaching his hesitant daughter (who loves Minecraft) about programming. We started with Hour of Code and pair-programmed through LearnToMod’s video lessons. What did we create? How did we like it? What would we recommend to others? Come learn about our experience and ask questions.

minecraftmoddingblockly
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="black"	
  />	
  
<g	
  id="frown"	
  stroke="black"	
  fill="black"	
  stroke-­‐width=".5">	
  
	
  	
  <circle	
  cx="5"	
  cy="5"	
  r="3.5"	
  fill="white"	
  stroke-­‐width="0"	
  />	
  
	
  
	
  	
  <ellipse	
  cx="4"	
  cy="4"	
  rx="0.25"	
  ry="0.5"	
  />	
  
	
  	
  <ellipse	
  cx="6"	
  cy="4"	
  rx="0.25"	
  ry="0.5"	
  />	
  
	
  
	
  	
  <path	
  fill="none"	
  stroke-­‐linecap="round"	
  
	
  	
  	
  	
  	
  	
  	
  	
  d="M	
  3.5	
  6.75	
  C	
  4	
  5	
  6	
  6	
  6.5	
  7"	
  />	
  
</g>	
  
svg.rect(0,	
  0,	
  10,	
  10);	
  
	
  
var	
  frown	
  =	
  svg.g()	
  
	
  	
  	
  	
  .attr({	
  id:	
  "frown",	
  stroke:	
  "black",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fill:	
  "black",	
  "stroke-­‐width":	
  0.5	
  });	
  
	
  
frown.append(svg.circle(5,	
  5,	
  3.5)	
  
	
  	
  	
  	
  .attr({	
  fill:	
  "white",	
  "stroke-­‐width":	
  0	
  }));	
  
frown.append(svg.ellipse(4,	
  4,	
  0.25,	
  0.5));	
  
frown.append(svg.ellipse(6,	
  4,	
  0.25,	
  0.5));	
  
	
  
frown.append(svg.path("M	
  3.5	
  6.75	
  C	
  4	
  5	
  6	
  6	
  6.5	
  7")	
  
	
  	
  	
  	
  .attr({	
  fill:	
  "none",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "stroke-­‐linecap":	
  "round"	
  }));	
  
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="yellow"/>	
  
	
  
<g	
  id="flowerpedal"	
  stroke="black"	
  stroke-­‐width="0">	
  
	
  	
  <path	
  fill="black"	
  	
  
	
   	
  d="M	
  5	
  5	
  l	
  -­‐0.75	
  3	
  a	
  0.75,0.75	
  0	
  1	
  0	
  1.5	
  0	
  Z"	
  />	
  
</g>	
  
The	
  transform	
  Aeribute	
  
•  matrix(<a>	
  <b>	
  <c>	
  <d>	
  <e>	
  <f>)	
  
•  translate(<x>	
  [<y>])	
  
•  scale(<x>	
  [<y>])	
  
•  rotate(<a>	
  [<x>	
  <y>])	
  
•  skewX(<a>)	
  
•  skewY(<a>)	
  
	
  
heps://developer.mozilla.org/en-­‐US/docs/Web/SVG/Aeribute/transform	
  	
  

Recommended for you

ng-owasp: OWASP Top 10 for AngularJS Applications
ng-owasp: OWASP Top 10 for AngularJS Applicationsng-owasp: OWASP Top 10 for AngularJS Applications
ng-owasp: OWASP Top 10 for AngularJS Applications

The OWASP Top 10 provides a list of the 10 most critical web application security risks. How do these relate to AngularJS applications? What security vulnerabilities should developers be aware of beyond XSS and CSRF? This session will review the OWASP Top 10 with a front-end development focus on HTML and JavaScript. It will look at patterns to implement and others to consider avoiding. We will also explore several built-in features of AngularJS that help secure your application.

javascriptweb security
Securing TodoMVC Using the Web Cryptography API
Securing TodoMVC Using the Web Cryptography APISecuring TodoMVC Using the Web Cryptography API
Securing TodoMVC Using the Web Cryptography API

The open source TodoMVC project implements a Todo application using popular JavaScript MV* frameworks. Some of the implementations add support for compile to JavaScript languages, module loaders and real time backends. This presentation will demonstrate a TodoMVC implementation which adds support for the forthcoming W3C Web Cryptography API, as well as review some key cryptographic concepts and definitions. Instead of storing the Todo list as plaintext in localStorage, this "secure" TodoMVC implementation encrypts Todos using a password derived key. The PBKDF2 algorithm is used for the deriveKey operation, with getRandomValues generating a cryptographically random salt. The importKey method sets up usage of AES-CBC for both encrypt and decrypt operations. The final solution helps address item "A6-Sensitive Data Exposure" from the OWASP Top 10. With the Web Cryptography API being a recommendation in 2014, any Q&A time will likely include browser implementations and limitations, and whether JavaScript cryptography adds any value.

cryptographyjavascript
HTTP Potpourri
HTTP PotpourriHTTP Potpourri
HTTP Potpourri

Embracing HTTP is an important property of well constructed ReSTful and web apis. Every web developer is familiar with GET and POST, 200 and 404, Accept and Content-Type; but what about 207 and 413, OPTIONS and PROPFIND, Transfer-Encoding and X-File-Size? This session will be based on usage of various HTTP methods, headers and status codes drawn from the development of large scale, web applications. Examples will include raw HTTP, mixed in with JavaScript and ASP.NET MVC code.

http
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="yellow"	
  />	
  
<g	
  id="flowerpedal"	
  stroke="black"	
  stroke-­‐width="0">	
  
	
  	
  <path	
  fill="black"	
  d="M	
  5	
  5	
  l	
  -­‐0.75	
  3	
  a	
  0.75,0.75	
  0	
  1	
  0	
  1.5	
  0	
  Z"	
  />	
  
</g>	
  
<use	
  xlink:href="#flowerpedal"	
  transform="rotate(	
  60,	
  5,	
  5)"	
  />	
  
<use	
  xlink:href="#flowerpedal"	
  transform="rotate(120,	
  5,	
  5)"	
  />	
  
<use	
  xlink:href="#flowerpedal"	
  transform="rotate(180,	
  5,	
  5)"	
  />	
  
<use	
  xlink:href="#flowerpedal"	
  transform="rotate(240,	
  5,	
  5)"	
  />	
  
<use	
  xlink:href="#flowerpedal"	
  transform="rotate(300,	
  5,	
  5)"	
  />	
  
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="greenyellow"/>	
  
<g	
  id="check"	
  stroke="black"	
  stroke-­‐width="1">	
  
	
  	
  <polyline	
  stroke-­‐linejoin="round"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  stroke-­‐linecap="round"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fill="none"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  points="2	
  5,	
  3	
  8,	
  8	
  2"	
  />	
  
</g>	
  
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="pink"	
  />	
  
<g	
  id="checkbox"	
  stroke="black">	
  
	
  	
  <rect	
  x="3"	
  y="3"	
  width="6"	
  height="6"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  fill="black"	
  stroke-­‐width="0"	
  />	
  
	
  	
  <rect	
  x="2"	
  y="2"	
  width="6"	
  height="6"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  fill="pink"	
  stroke-­‐width="0.5"	
  />	
  
</g>	
  
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="skyblue"	
  />	
  
<g	
  id="arrow"	
  stroke="black"	
  stroke-­‐width="0.5">	
  
	
  	
  <path	
  fill="black"	
  d="M	
  5.5	
  2	
  l	
  .5	
  0	
  l	
  3	
  3	
  l	
  -­‐3	
  3	
  l	
  -­‐0.5	
  0	
  l	
  0	
  
-­‐1.5	
  l	
  -­‐4	
  0	
  l	
  0	
  -­‐3	
  l	
  4	
  0	
  Z"	
  />	
  
	
  	
  <path	
  stroke-­‐linejoin="round"	
  fill="skyblue"	
  d="M	
  6	
  2	
  l	
  3	
  3	
  l	
  
-­‐3	
  3	
  l	
  0	
  -­‐1.5	
  l	
  -­‐4	
  0	
  l	
  0	
  -­‐3	
  l	
  4	
  0	
  Z"	
  />	
  
</g>	
  

Recommended for you

Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax HubImplementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub

Is your web application a tightly coupled, DOM event handler mess? Use techniques from the Enterprise Integration Patterns book to build better components. Concepts including message, publish-subscribe channel, request-reply and message filter will be demonstrated in JavaScript (along with corresponding tests) using the OpenAjax Hub.

javascriptdesign patterns
Internationalize your JavaScript Application: Prepare for "the next billion" ...
Internationalize your JavaScript Application: Prepare for "the next billion" ...Internationalize your JavaScript Application: Prepare for "the next billion" ...
Internationalize your JavaScript Application: Prepare for "the next billion" ...

Are you prepared for "the next billion" internet users, most of whom don't use English as their primary language? This session will explore the globalization (internationalization and localization) of JavaScript based applications. It will look at the ECMAScript Internationalization API and popular open source projects like AngularJS, messageformat.js, jQuery Globalize and twitter-cldr-js. Topics will include cultures/locales, character encoding, number formatting, date formatting, choice/plural formatting and translations.

javascripti18n
Developer's Guide to JavaScript and Web Cryptography
Developer's Guide to JavaScript and Web CryptographyDeveloper's Guide to JavaScript and Web Cryptography
Developer's Guide to JavaScript and Web Cryptography

The increasing capabilities and performance of the web platform allow for more feature-rich user experiences. How can JavaScript based applications utilize information security and cryptography principles? This session will explore the current state of JavaScript and Web Cryptography. We will review some basic concepts and definitions, discuss the role of TLS/SSL, show some working examples that apply cryptography to real-world use cases and take a peek at the upcoming W3C WebCryptoAPI. Code samples will use CryptoJS in the browser and the Node.js Crypto module on the server. An extended example will secure the popular TodoMVC project using PBKDF2 for key generation, HMAC for data integrity and AES for encryption.

cryptographyjavascript
<rect	
  x="0"	
  y="0"	
  width="10"	
  height="10"	
  fill="mediumpurple"	
  />	
  
	
  
<g	
  id="bolt"	
  stroke="black"	
  stroke-­‐width="0.5">	
  
	
  	
  <path	
  fill="white"	
  d="M	
  5	
  1	
  l	
  -­‐3	
  3	
  l	
  2	
  0	
  l	
  -­‐2	
  2	
  l	
  2	
  0	
  l	
  -­‐2	
  3	
  l	
  
5	
  -­‐4	
  l	
  -­‐2	
  0	
  l	
  2	
  -­‐2	
  l	
  -­‐2	
  0	
  l	
  2	
  -­‐2	
  Z"	
  />	
  
</g>	
  
How-­‐To	
  Make	
  a	
  Keeper	
  
<symbol>	
  
How-­‐To	
  Make	
  a	
  Keeper	
  
<symbol>	
  
	
  
<text>	
  
How-­‐To	
  Make	
  a	
  Keeper	
  
<symbol>	
  
	
  
<text>	
  
	
  
<rect>	
  
	
  

Recommended for you

Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx

MuleSoft Meetup on APM and IDP

mulesoftai
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
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant

Password Rotation in 2024 is still Relevant

passwordmanagementrotation
How-­‐To	
  Make	
  a	
  Keeper	
  
<symbol>	
  
	
  
<text>	
  
	
  
<rect>	
  
	
  
<image>	
  
	
  
The	
  text	
  Element	
  
•  <text>	
  requires	
  only	
  two	
  aeributes,	
  x	
  and	
  y	
  
•  Default	
  style	
  is	
  to	
  have	
  a	
  fill	
  color	
  of	
  black	
  and	
  
no	
  outline	
  
•  font-­‐family,	
  font-­‐size,	
  font-­‐weight,	
  font-­‐style,	
  
text-­‐decoraDon,	
  word-­‐spacing,	
  leeer-­‐spacing	
  
•  “SVG	
  performs	
  no	
  automaDc	
  line	
  breaking	
  or	
  
word	
  wrapping”	
  
hep://www.w3.org/TR/SVG11/text.html#IntroducDon	
  	
  
<text>	
  XML	
  Example	
  
<g	
  text-­‐anchor="start"	
  	
  
	
  	
  	
  font-­‐size="3.5"	
  	
  
	
  	
  	
  letter-­‐spacing="-­‐0.05">	
  
	
  
	
  <text	
  x="15"	
  y="18">To	
  play	
  this	
  card,	
  place	
  it	
  face</text>	
  
	
  
	
  <text	
  x="15"	
  y="22.375">up	
  on	
  the	
  table	
  in	
  front	
  of	
  you.</text>	
  
	
  
</g>	
  
The	
  image	
  Element	
  
•  <image>	
  element	
  includes	
  an	
  enDre	
  SVG	
  or	
  
raster	
  file	
  (JPEG	
  or	
  PNG)	
  
•  x,	
  y,	
  width,	
  and	
  height	
  aeributes	
  
<image	
  xlink:href="images/JavaScript-­‐logo.png"	
  
preserveAspectRatio="meet"	
  x="22"	
  y="48"	
  width="30"	
  
height="30"	
  />	
  

Recommended for you

DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition

The DealBook is our annual overview of the Ukrainian tech investment industry. This edition comprehensively covers the full year 2023 and the first deals of 2024.

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
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
<image>	
  XML	
  Example	
  
	
  <image	
  	
  
	
  xlink:href="images/JavaScript-­‐logo.png"	
  	
  
	
  x="22"	
  	
  
	
  y="48"	
  	
  
	
  width="30"	
  	
  
	
  height="30"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  preserveAspectRatio	
  ="meet"	
  />	
  
<image>	
  JavaScript	
  Example	
  
s.image(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "images/JavaScript-­‐logo.png",	
  	
  
	
  	
  	
  	
  22,	
  	
  
	
  	
  	
  	
  48,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  30,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  30)	
  
.attr({	
  "preserveAspectRatio":"meet"	
  })	
  
<svg	
  id="SnapDeckCard1"	
  	
  
	
  width="63.5"	
  height="88"	
  	
  
	
  xmlns="http://www.w3.org/2000/svg"	
  
	
  xmlns:xlink="http://www.w3.org/1999/xlink"	
  	
  
	
  font-­‐family="sans-­‐serif">	
  
	
  	
  	
  
	
  	
  <defs>	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  </defs>	
  
	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
</svg>	
  
<svg	
  id="SnapDeckCard1"	
  	
  
	
  width="63.5"	
  height="88"	
  	
  
	
  xmlns="http://www.w3.org/2000/svg"	
  
	
  xmlns:xlink="http://www.w3.org/1999/xlink"	
  	
  
	
  font-­‐family="sans-­‐serif">	
  
	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <rect	
  id="sidebar"	
  x="3"	
  y="3"	
  width="10"	
  height="82"	
  />	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  </defs>	
  
	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
</svg>	
  

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
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry

Are you interested in dipping your toes in the cloud native observability waters, but as an engineer you are not sure where to get started with tracing problems through your microservices and application landscapes on Kubernetes? Then this is the session for you, where we take you on your first steps in an active open-source project that offers a buffet of languages, challenges, and opportunities for getting started with telemetry data. The project is called openTelemetry, but before diving into the specifics, we’ll start with de-mystifying key concepts and terms such as observability, telemetry, instrumentation, cardinality, percentile to lay a foundation. After understanding the nuts and bolts of observability and distributed traces, we’ll explore the openTelemetry community; its Special Interest Groups (SIGs), repositories, and how to become not only an end-user, but possibly a contributor.We will wrap up with an overview of the components in this project, such as the Collector, the OpenTelemetry protocol (OTLP), its APIs, and its SDKs. Attendees will leave with an understanding of key observability concepts, become grounded in distributed tracing terminology, be aware of the components of openTelemetry, and know how to take their first steps to an open-source contribution! Key Takeaways: Open source, vendor neutral instrumentation is an exciting new reality as the industry standardizes on openTelemetry for observability. OpenTelemetry is on a mission to enable effective observability by making high-quality, portable telemetry ubiquitous. The world of observability and monitoring today has a steep learning curve and in order to achieve ubiquity, the project would benefit from growing our contributor community.

cloudcloud native observabilitycloud native
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf

Presented at Gartner Data & Analytics, London Maty 2024. BT Group has used the Neo4j Graph Database to enable impressive digital transformation programs over the last 6 years. By re-imagining their operational support systems to adopt self-serve and data lead principles they have substantially reduced the number of applications and complexity of their operations. The result has been a substantial reduction in risk and costs while improving time to value, innovation, and process automation. Join this session to hear their story, the lessons they learned along the way and how their future innovation plans include the exploration of uses of EKG + Generative AI.

neo4jneo4j webinarsgraph database
<svg	
  id="SnapDeckCard1"	
  	
  
	
  width="63.5"	
  height="88"	
  	
  
	
  xmlns="http://www.w3.org/2000/svg"	
  
	
  xmlns:xlink="http://www.w3.org/1999/xlink"	
  	
  
	
  font-­‐family="sans-­‐serif">	
  
	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <rect	
  id="sidebar"	
  x="3"	
  y="3"	
  width="10"	
  height="82"	
  />	
  
	
  	
  	
  	
  <rect	
  id="hr"	
  x="15"	
  y="33"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  width="45.5"	
  height="2"	
  fill="black"	
  />	
  
	
  
	
  
	
  
	
  
	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  </defs>	
  
	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
</svg>	
  
<svg	
  id="SnapDeckCard1"	
  	
  
	
  width="63.5"	
  height="88"	
  	
  
	
  xmlns="http://www.w3.org/2000/svg"	
  
	
  xmlns:xlink="http://www.w3.org/1999/xlink"	
  	
  
	
  font-­‐family="sans-­‐serif">	
  
	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <rect	
  id="sidebar"	
  x="3"	
  y="3"	
  width="10"	
  height="82"	
  />	
  
	
  	
  	
  	
  <rect	
  id="hr"	
  x="15"	
  y="33"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  width="45.5"	
  height="2"	
  fill="black"	
  />	
  
	
  
	
  	
  	
  	
  <symbol	
  id="check"	
  stroke="black"	
  stroke-­‐width="1">	
  
	
  	
  	
  	
  	
  	
  <polyline	
  points="5,8,6,11,11,5"	
  fill="none"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  stroke-­‐linejoin="round"	
  stroke-­‐linecap="round"	
  />	
  
	
  	
  	
  	
  </symbol>	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  </defs>	
  
	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
</svg>	
  
<svg>	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  	
  	
  <g	
  id="keeper">	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#check"	
  />	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#sidebar"	
  fill="#b3dd1a"	
  />	
  
	
  
	
  
	
  
	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#hr"	
  />	
  
	
  
	
  
	
  
	
  
	
  
	
  	
  	
  	
  </g>	
  
	
  	
  </defs>	
  
	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
</svg>	
  
<svg>	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  	
  	
  <g	
  id="keeper">	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#check"	
  />	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#sidebar"	
  fill="#b3dd1a"	
  />	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  <text	
  text-­‐anchor="start"	
  x="14.5"	
  y="11"	
  font-­‐size="9"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  letter-­‐spacing="-­‐.5"	
  font-­‐weight="bold">KEEPER</text>	
  
	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#hr"	
  />	
  
	
  
	
  
	
  
	
  
	
  
	
  	
  	
  	
  </g>	
  
	
  	
  </defs>	
  
	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
</svg>	
  

Recommended for you

Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...

Today’s digitally connected world presents a wide range of security challenges for enterprises. Insider security threats are particularly noteworthy because they have the potential to cause significant harm. Unlike external threats, insider risks originate from within the company, making them more subtle and challenging to identify. This blog aims to provide a comprehensive understanding of insider security threats, including their types, examples, effects, and mitigation techniques.

insider securitycybersecurity threatsenterprise security
Best Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdfBest Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdf

As a popular open-source library for analytics engineering, dbt is often used in combination with Airflow. Orchestrating and executing dbt models as DAGs ensures an additional layer of control over tasks, observability, and provides a reliable, scalable environment to run dbt models. This webinar will cover a step-by-step guide to Cosmos, an open source package from Astronomer that helps you easily run your dbt Core projects as Airflow DAGs and Task Groups, all with just a few lines of code. We’ll walk through: - Standard ways of running dbt (and when to utilize other methods) - How Cosmos can be used to run and visualize your dbt projects in Airflow - Common challenges and how to address them, including performance, dependency conflicts, and more - How running dbt projects in Airflow helps with cost optimization Webinar given on 9 July 2024

apache airflowdbtdbt-core
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

Java Servlet programs

<svg>	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  	
  	
  <g	
  id="keeper">	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#check"	
  />	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#sidebar"	
  fill="#b3dd1a"	
  />	
  
	
  
	
  	
  	
  	
  	
  	
  <text	
  text-­‐anchor="start"	
  x="14.5"	
  y="11"	
  font-­‐size="9"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  letter-­‐spacing="-­‐.5"	
  font-­‐weight="bold">KEEPER</text>	
  
	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#hr"	
  />	
  
	
  
	
  	
  	
  	
  	
  	
  <g	
  text-­‐anchor="start"	
  font-­‐size="3.5"	
  letter-­‐spacing="-­‐0.05">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <text	
  x="15"	
  y="18">To	
  play	
  this	
  card,	
  place	
  it	
  face</text>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <text	
  x="15"	
  y="22.375">up	
  on	
  the	
  table	
  in	
  front	
  of	
  you.</text>	
  
	
  	
  	
  	
  	
  	
  </g>	
  
	
  	
  	
  	
  </g>	
  
	
  	
  </defs>	
  
	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
</svg>	
  
<svg>	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  </defs>	
  
	
  
	
  	
  <use	
  xlink:href="#keeper"	
  />	
  
	
  
	
  	
  <g	
  text-­‐anchor="start"	
  font-­‐size="5.5"	
  	
  
	
  	
  	
  	
  	
  letter-­‐spacing="-­‐0.05"	
  font-­‐weight="bold">	
  
	
  	
  	
  	
  <text	
  x="15"	
  y="31">JavaScript</text>	
  
	
  	
  </g>	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
</svg>	
  
<svg>	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  </defs>	
  
	
  
	
  	
  <use	
  xlink:href="#keeper"	
  />	
  
	
  
	
  	
  <g	
  text-­‐anchor="start"	
  font-­‐size="5.5"	
  
	
  	
  	
  	
  	
  letter-­‐spacing="-­‐0.05"	
  font-­‐weight="bold">	
  
	
  	
  	
  	
  <text	
  x="15"	
  y="31">JavaScript</text>	
  
	
  	
  </g>	
  
	
  
	
  	
  <text	
  x="10"	
  y="15"	
  transform="matrix(0,-­‐1,1,0,-­‐5,25)"	
  font-­‐size="6"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  text-­‐anchor="end"	
  font-­‐weight="bold">JAVASCRIPT</text>	
  
	
  
	
  
	
  
	
  
</svg>	
  
<svg>	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <!-­‐-­‐	
  ...	
  -­‐-­‐>	
  
	
  	
  </defs>	
  
	
  
	
  	
  <use	
  xlink:href="#keeper"	
  />	
  
	
  
	
  	
  <g	
  line-­‐spacing="0"	
  paragraph-­‐spacing="0"	
  text-­‐anchor="start"	
  	
  
	
  	
  	
  	
  	
  font-­‐size="5.5"	
  letter-­‐spacing="-­‐0.05"	
  font-­‐weight="bold">	
  
	
  	
  	
  	
  <text	
  x="15"	
  y="31">JavaScript</text>	
  
	
  	
  </g>	
  
	
  
	
  	
  <text	
  x="10"	
  y="15"	
  transform="matrix(0,-­‐1,1,0,-­‐5,25)"	
  font-­‐size="6"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  text-­‐anchor="end"	
  font-­‐weight="bold">JAVASCRIPT</text>	
  
	
  
	
  	
  <image	
  xlink:href="images/JavaScript-­‐logo.png"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  preserveAspectRatio="meet"	
  x="22"	
  y="48"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  width="30"	
  height="30"	
  />	
  
</svg>	
  

Recommended for you

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
20240705 QFM024 Irresponsible AI Reading List June 2024
20240705 QFM024 Irresponsible AI Reading List June 202420240705 QFM024 Irresponsible AI Reading List June 2024
20240705 QFM024 Irresponsible AI Reading List June 2024

Everything that I found interesting last month about the irresponsible use of machine intelligence

quantumfaxmachine
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
<svg	
  id="SnapDeckCard1"	
  width="460"	
  height="640"	
  viewBox="0	
  0	
  63.5	
  88"	
  xmlns="http://www.w3.org/2000/svg"	
  	
  
	
  	
  	
  	
  	
  xmlns:xlink="http://www.w3.org/1999/xlink"	
  font-­‐family="sans-­‐serif”>	
  	
  	
  
	
  	
  <defs>	
  
	
  	
  	
  	
  <rect	
  x="3"	
  y="3"	
  width="10"	
  height="82"	
  id="sidebar"	
  />	
  
	
  	
  	
  	
  <rect	
  x="15"	
  y="33"	
  width="45.5"	
  height="2"	
  id="hr"	
  fill="black"	
  />	
  
	
  
	
  	
  	
  	
  <symbol	
  id="check"	
  stroke="black"	
  stroke-­‐width="1">	
  
	
  	
  	
  	
  	
  	
  <polyline	
  points="5,8,6,11,11,5"	
  fill="none"	
  stroke-­‐linejoin="round"	
  stroke-­‐linecap="round"	
  />	
  
	
  	
  	
  	
  </symbol>	
  
	
  
	
  	
  	
  	
  <g	
  id="keeper">	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#sidebar"	
  fill="#b3dd1a"	
  />	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#check"	
  />	
  
	
  	
  	
  	
  	
  	
  <text	
  text-­‐anchor="start"	
  x="14.5"	
  y="11"	
  font-­‐size="9"	
  letter-­‐spacing="-­‐.5"	
  font-­‐weight="bold">KEEPER</text>	
  
	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  <use	
  xlink:href="#hr"	
  />	
  
	
  	
  	
  	
  	
  	
  <g	
  text-­‐anchor="start"	
  font-­‐size="3.5"	
  letter-­‐spacing="-­‐0.05">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <text	
  x="15"	
  y="18">To	
  play	
  this	
  card,	
  place	
  it	
  face</text>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <text	
  x="15"	
  y="22.375">up	
  on	
  the	
  table	
  in	
  front	
  of	
  you.</text>	
  
	
  	
  	
  	
  	
  	
  </g>	
  
	
  	
  	
  	
  </g>	
  
	
  	
  </defs>	
  
	
  	
  <use	
  xlink:href="#keeper"></use>	
  
	
  	
  <g	
  text-­‐anchor="start"	
  font-­‐size="5.5"	
  letter-­‐spacing="-­‐0.05"	
  font-­‐weight="bold">	
  
	
  	
  	
  	
  <text	
  x="15"	
  y="31">JavaScript</text>	
  
	
  	
  </g>	
  
	
  	
  <text	
  x="10"	
  y="15"	
  transform="matrix(0,-­‐1,1,0,-­‐5,25)"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  font-­‐size="6"	
  text-­‐anchor="end"	
  font-­‐weight="bold">JAVASCRIPT</text>	
  
	
  	
  <image	
  xlink:href="images/JavaScript-­‐logo.png"	
  preserveAspectRatio="meet"	
  x="22"	
  y="48"	
  width="30"	
  height="30"	
  />	
  
</svg>	
  
Chrome	
  Print	
  Dialog	
  
SVG	
  1.1	
  Text	
  
Each	
  <text>	
  element	
  causes	
  a	
  single	
  string	
  of	
  
text	
  to	
  be	
  rendered.	
  SVG	
  performs	
  no	
  automaDc	
  
line	
  breaking	
  or	
  word	
  wrapping	
  
	
  
	
  hep://www.w3.org/TR/SVG11/text.html#IntroducDon	
  	
  
SVG	
  Tiny	
  1.2	
  	
  
•  The	
  <textArea>	
  element	
  allows	
  simplisDc	
  
wrapping	
  of	
  text	
  content	
  
	
  
•  The	
  <tbreak>	
  element	
  is	
  an	
  empty	
  element	
  
that	
  forcibly	
  breaks	
  the	
  current	
  line	
  of	
  text	
  
	
  
•  The	
  line-­‐increment	
  property	
  provides	
  
limited	
  control	
  over	
  the	
  size	
  of	
  each	
  line	
  

Recommended for you

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...

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 slides: 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
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...

Have you noticed the OpenSSF Scorecard badges on the official Dart and Flutter repos? It's Google's way of showing that they care about security. Practices such as pinning dependencies, branch protection, required reviews, continuous integration tests etc. are measured to provide a score and accompanying badge. You can do the same for your projects, and this presentation will show you how, with an emphasis on the unique challenges that come up when working with Dart and Flutter. The session will provide a walkthrough of the steps involved in securing a first repository, and then what it takes to repeat that process across an organization with multiple repos. It will also look at the ongoing maintenance involved once scorecards have been implemented, and how aspects of that maintenance can be better automated to minimize toil.

dartflutteropenssf
The Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive ComputingThe Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive Computing

Invited Remote Lecture to SC21 The International Conference for High Performance Computing, Networking, Storage, and Analysis St. Louis, Missouri November 18, 2021

distributed supercomputerdistributed machine learning
SVG	
  1.2	
  
•  Scalable	
  Vector	
  Graphics	
  (SVG)	
  Full	
  1.2	
  
SpecificaDon	
  
– W3C	
  Working	
  DraS	
  13	
  April	
  2005	
  
hep://www.w3.org/TR/SVG12/	
  	
  
•  “The	
  next	
  draS	
  of	
  SVG	
  1.2	
  Full	
  will	
  structured	
  
as	
  a	
  superset	
  of	
  the	
  SVG	
  1.2	
  Tiny	
  language”	
  
•  “At	
  this	
  Dme	
  the	
  refactored	
  SVG	
  1.2	
  Full	
  
specificaDon	
  is	
  not	
  ready	
  for	
  publicaDon.”	
  
snapdeck.textArea	
  =	
  function	
  (s,	
  x,	
  y,	
  width,	
  textToWrap,	
  attr)	
  {	
  
	
  	
  	
  	
  if	
  (!textToWrap)	
  return;	
  
	
  
	
  	
  	
  	
  attr	
  =	
  SnapDeck.defaultAttr(attr,	
  {	
  "text-­‐anchor":	
  "start",	
  "font-­‐size":	
  3.5,	
  "letter-­‐spacing":	
  -­‐.05,	
  "line-­‐spacing":	
  0,	
  "paragraph-­‐
spacing":	
  0	
  });	
  
	
  	
  	
  	
  var	
  fontSize	
  =	
  attr["font-­‐size"];	
  
	
  	
  	
  	
  width	
  =	
  width	
  *	
  (fontSize	
  /	
  3);	
  
	
  	
  	
  	
  var	
  yDelta	
  =	
  (fontSize	
  *	
  1.25)	
  +	
  attr["line-­‐spacing"];	
  
	
  	
  	
  	
  var	
  tmpSvg,	
  tmpRoot	
  =	
  deck.svg.g().attr(attr).toDefs();	
  
	
  	
  	
  	
  var	
  g	
  =	
  s.g().attr(attr);	
  
	
  	
  	
  	
  var	
  line	
  =	
  "",	
  tmpLine	
  =	
  "",	
  linecount	
  =	
  0;	
  
	
  	
  	
  	
  var	
  texts	
  =	
  textToWrap.split("n");	
  
	
  	
  	
  	
  texts.forEach(function	
  (text)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  var	
  words	
  =	
  text.split("	
  ");	
  
	
  	
  	
  	
  	
  	
  	
  	
  words.forEach(function	
  (word)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (line)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  tmpLine	
  =	
  line	
  +	
  "	
  "	
  +	
  word;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  tmpSvg	
  =	
  tmpRoot.text(0,	
  0,	
  tmpLine);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (tmpSvg.node.getBoundingClientRect().width	
  >	
  width)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  g.text(x,	
  y,	
  line);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  y	
  =	
  y	
  +	
  yDelta;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  linecount++;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  line	
  =	
  tmpLine	
  =	
  word;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  line	
  =	
  line	
  +	
  "	
  "	
  +	
  word;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  tmpSvg.remove();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  line	
  =	
  word;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  });	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  g.text(x,	
  y,	
  line);	
  
	
  	
  	
  	
  	
  	
  	
  	
  y	
  =	
  y	
  +	
  yDelta	
  +	
  attr["paragraph-­‐spacing"];	
  
	
  	
  	
  	
  	
  	
  	
  	
  linecount++;	
  
	
  	
  	
  	
  	
  	
  	
  	
  line	
  =	
  tmpLine	
  =	
  "";	
  
	
  	
  	
  	
  });	
  
	
  
	
  	
  	
  	
  tmpRoot.remove();	
  
	
  	
  	
  	
  return	
  g;	
  
};	
  
Chrome	
  Zoom	
  
100%	
   150%	
   200%	
  
snap.deck.js	
  
(function(window)	
  {	
  
	
  
	
  	
  	
  	
  function	
  Deck(cardCount)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  ...	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.svg	
  =	
  Snap("8.5in",	
  (pageCount	
  *	
  11)	
  +	
  "in")	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .attr({	
  id:	
  "SnapDeck",	
  style:	
  "display:	
  block;"	
  });	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.pages	
  =	
  [];	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.cards	
  =	
  [];	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  ...	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  snapdeck.deck	
  =	
  function	
  (cards)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  new	
  Deck(cards);	
  
	
  	
  	
  	
  };	
  
	
  
	
  	
  	
  	
  window.SnapDeck	
  =	
  snapdeck;	
  
	
  
})(window);	
  

Recommended for you

20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024

Everything that I found interesting about machines behaving intelligently during June 2024

quantumfaxmachine
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...

Slide of the tutorial entitled "Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Emerging Trends" held at UMAP'24: 32nd ACM Conference on User Modeling, Adaptation and Personalization (July 1, 2024 | Cagliari, Italy)

user modelinguser profilinguser model
Make your own Print & Play card game using SVG and JavaScript
Make your own Print & Play card game using SVG and JavaScript
Len	
  Peralta’s	
  Geek	
  A	
  Week	
  
@hakanson	
  Card	
  
•  Mimic	
  look	
  from	
  the	
  
Geek	
  A	
  Week	
  series	
  
•  InformaDon	
  and	
  images	
  
from	
  Twieer	
  biography	
  
•  “More	
  cool”	
  than	
  a	
  
business	
  card	
  

Recommended for you

var	
  s	
  =	
  Snap("460",	
  "640")	
  
	
  	
  	
  	
  	
  	
  	
  	
  .attr({	
  "viewBox":	
  "0	
  0	
  63.5	
  88",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "font-­‐family":"sans-­‐serif"	
  });	
  
	
  
SnapDeck.pinwheel(s,	
  31.75,	
  44,	
  55,	
  120,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "firebrick",	
  "maroon");	
  
	
  
	
  
	
  
Pinwheel	
  
•  120	
  rays	
  
•  firebrick	
  
•  maroon	
  
Unit	
  Circle	
  
snapdeck.pinwheel	
  =	
  function	
  (s,	
  cx,	
  cy,	
  cr,	
  count,	
  background,	
  foreground)	
  
{	
  
	
  	
  	
  	
  var	
  c	
  =	
  s.circle(cx,	
  cy,	
  cr);	
  
	
  	
  	
  	
  c.attr({	
  "stroke-­‐width":	
  0,	
  "fill":	
  background	
  });	
  
	
  
	
  	
  	
  	
  var	
  deg	
  =	
  360	
  /	
  count;	
  
	
  	
  	
  	
  var	
  offset	
  =	
  -­‐deg	
  /	
  2;	
  
	
  	
  	
  	
  for	
  (var	
  i	
  =	
  0;	
  i	
  <	
  count	
  /	
  2;	
  i++)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  var	
  start	
  =	
  "M	
  "	
  +	
  cx	
  +	
  "	
  "	
  +	
  cy;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  var	
  rad	
  =	
  (2	
  *	
  i	
  *	
  deg	
  +	
  offset)	
  *	
  (Math.PI	
  /	
  180);	
  
	
  	
  	
  	
  	
  	
  	
  	
  var	
  x	
  =	
  cx	
  +	
  (Math.cos(rad)	
  *	
  cr);	
  
	
  	
  	
  	
  	
  	
  	
  	
  var	
  y	
  =	
  cy	
  +	
  (Math.sin(rad)	
  *	
  cr);	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  var	
  first	
  =	
  "	
  L	
  "	
  +	
  x	
  +	
  "	
  "	
  +	
  y;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  rad	
  =	
  (2	
  *	
  i	
  *	
  deg	
  +	
  deg	
  +	
  offset)	
  *	
  (Math.PI	
  /	
  180);	
  
	
  	
  	
  	
  	
  	
  	
  	
  x	
  =	
  cx	
  +	
  (Math.cos(rad)	
  *	
  cr);	
  
	
  	
  	
  	
  	
  	
  	
  	
  y	
  =	
  cy	
  +	
  (Math.sin(rad)	
  *	
  cr);	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  var	
  second	
  =	
  "	
  A	
  "	
  +	
  cx	
  +	
  "	
  "	
  +	
  cy	
  +	
  "	
  0	
  0	
  1	
  "	
  +	
  x	
  +	
  "	
  "	
  +	
  y;	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  s.path(start	
  +	
  first	
  +	
  second	
  +	
  "	
  Z").attr({	
  "fill":	
  foreground	
  });	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  return	
  s;	
  
};	
  

Recommended for you

var	
  s	
  =	
  Snap("460",	
  "640")	
  
	
  	
  	
  	
  	
  	
  	
  	
  .attr({	
  "viewBox":	
  "0	
  0	
  63.5	
  88",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "font-­‐family":"sans-­‐serif"	
  });	
  
	
  
SnapDeck.pinwheel(s,	
  31.75,	
  44,	
  55,	
  120,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "firebrick",	
  "maroon");	
  
	
  
s.rect(3,	
  3,	
  57.5,	
  75,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "red"	
  });	
  
	
  
	
  
	
  
var	
  s	
  =	
  Snap("460",	
  "640")	
  
	
  	
  	
  	
  	
  	
  	
  	
  .attr({	
  "viewBox":	
  "0	
  0	
  63.5	
  88",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "font-­‐family":"sans-­‐serif"	
  });	
  
	
  
SnapDeck.pinwheel(s,	
  31.75,	
  44,	
  55,	
  120,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "firebrick",	
  "maroon");	
  
	
  
s.rect(3,	
  3,	
  57.5,	
  75,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "red"	
  });	
  
	
  
s.rect(4,	
  4,	
  55.5,	
  73,	
  0,	
  0)	
  
	
  .attr({	
  "fill":	
  "none",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "stroke-­‐width":	
  1,	
  "stroke":	
  "yellow",	
  });	
  
	
  
	
  
var	
  s	
  =	
  Snap("460",	
  "640")	
  
	
  	
  	
  	
  	
  	
  	
  	
  .attr({	
  "viewBox":	
  "0	
  0	
  63.5	
  88",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "font-­‐family":"sans-­‐serif"	
  });	
  
	
  
SnapDeck.pinwheel(s,	
  31.75,	
  44,	
  55,	
  120,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "firebrick",	
  "maroon");	
  
	
  
s.rect(3,	
  3,	
  57.5,	
  75,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "red"	
  });	
  
	
  
s.rect(4,	
  4,	
  55.5,	
  73,	
  0,	
  0)	
  
	
  .attr({	
  "fill":	
  "none",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "stroke-­‐width":	
  1,	
  "stroke":	
  "yellow",	
  });	
  
	
  
s.rect(5,	
  5,	
  53.5,	
  71)	
  
	
  .attr({	
  "fill":	
  "black"	
  });	
  
	
  
s.rect(56,	
  1.25,	
  6,	
  5.5,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "red"	
  });	
  
s.rect(56.5,	
  2,	
  5,	
  4.25,	
  0.25,	
  0.25)	
  
	
  .attr({	
  "fill":	
  "black",	
  "opacity":	
  0.85	
  });	
  
s.rect(56.5,	
  1.75,	
  4.75,	
  4.25,	
  0.25,	
  0.25)	
  
	
  .attr({	
  "fill":	
  "yellow",	
  "opacity":	
  0.9	
  });	
  
	
  
s.text(59,	
  5,	
  "#1").attr({	
  "text-­‐anchor":	
  "middle",	
  "font-­‐size":	
  
3.5,	
  "fill":	
  "black",	
  "font-­‐weight":	
  "bold"	
  });	
  
	
  

Recommended for you

s.rect(56,	
  1.25,	
  6,	
  5.5,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "red"	
  });	
  
s.rect(56.5,	
  2,	
  5,	
  4.25,	
  0.25,	
  0.25)	
  
	
  .attr({	
  "fill":	
  "black",	
  "opacity":	
  0.85	
  });	
  
s.rect(56.5,	
  1.75,	
  4.75,	
  4.25,	
  0.25,	
  0.25)	
  
	
  .attr({	
  "fill":	
  "yellow",	
  "opacity":	
  0.9	
  });	
  
	
  
s.text(59,	
  5,	
  "#1").attr({	
  "text-­‐anchor":	
  "middle",	
  "font-­‐size":	
  
3.5,	
  "fill":	
  "black",	
  "font-­‐weight":	
  "bold"	
  });	
  
	
  
s.image("images/Twitter_logo_blue.png",	
  6,	
  71,	
  14,	
  14);	
  
	
  
s.rect(56,	
  1.25,	
  6,	
  5.5,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "red"	
  });	
  
s.rect(56.5,	
  2,	
  5,	
  4.25,	
  0.25,	
  0.25)	
  
	
  .attr({	
  "fill":	
  "black",	
  "opacity":	
  0.85	
  });	
  
s.rect(56.5,	
  1.75,	
  4.75,	
  4.25,	
  0.25,	
  0.25)	
  
	
  .attr({	
  "fill":	
  "yellow",	
  "opacity":	
  0.9	
  });	
  
	
  
s.text(59,	
  5,	
  "#1").attr({	
  "text-­‐anchor":	
  "middle",	
  "font-­‐size":	
  
3.5,	
  "fill":	
  "black",	
  "font-­‐weight":	
  "bold"	
  });	
  
	
  
s.image("images/Twitter_logo_blue.png",	
  6,	
  71,	
  14,	
  14);	
  
	
  
s.text(60,	
  82,	
  "Kevin	
  Hakanson").attr({	
  "text-­‐anchor":	
  "end",	
  
"font-­‐size":	
  4.5,	
  "fill":	
  "white",	
  "font-­‐weight":	
  "bold"	
  });	
  
s.text(60,	
  86,	
  "@hakanson")	
  
	
  .attr({	
  "text-­‐anchor":	
  "end",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "font-­‐size":	
  3.5,	
  "fill":	
  "white"	
  });	
  
s.rect(11.5,	
  7.5,	
  40,	
  40,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "white"	
  });	
  
s.image("images/hakanson.png",	
  12,	
  8,	
  39,	
  39);	
  
	
  
	
  
s.rect(11.5,	
  7.5,	
  40,	
  40,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "white"	
  });	
  
s.image("images/hakanson.png",	
  12,	
  8,	
  39,	
  39);	
  
	
  
var	
  bioAttr	
  =	
  {	
  "text-­‐anchor":	
  "middle",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "font-­‐size":	
  2.75,	
  "fill":	
  "white"	
  };	
  
s.text(31.75,	
  52,	
  	
  
	
  	
  	
  "Software	
  Architect	
  at	
  Thomson	
  Reuters.")	
  
	
  .attr(bioAttr);	
  
s.text(31.75,	
  56,	
  	
  
	
  	
  	
  "WestlawNext.	
  Web	
  Platform.	
  JavaScript.")	
  
	
  .attr(bioAttr);	
  
s.text(31.75,	
  60,	
  	
  
	
  	
  	
  "Agile	
  Software	
  Development.").attr(bioAttr);	
  
s.text(31.75,	
  64,	
  	
  
	
  	
  	
  "Information	
  Security.	
  Speaker.").attr(bioAttr);	
  
s.text(31.75,	
  68,	
  "Creator	
  @LicPlateZone").attr(bioAttr);	
  
	
  

Recommended for you

s.rect(11.5,	
  7.5,	
  40,	
  40,	
  0.5,	
  0.5)	
  
	
  .attr({	
  "fill":	
  "white"	
  });	
  
s.image("images/hakanson.png",	
  12,	
  8,	
  39,	
  39);	
  
	
  
var	
  bioAttr	
  =	
  {	
  "text-­‐anchor":	
  "middle",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "font-­‐size":	
  2.75,	
  "fill":	
  "white"	
  };	
  
s.text(31.75,	
  52,	
  	
  
	
  	
  	
  "Software	
  Architect	
  at	
  Thomson	
  Reuters.")	
  
	
  .attr(bioAttr);	
  
s.text(31.75,	
  56,	
  	
  
	
  	
  	
  "WestlawNext.	
  Web	
  Platform.	
  JavaScript.")	
  
	
  .attr(bioAttr);	
  
s.text(31.75,	
  60,	
  	
  
	
  	
  	
  "Agile	
  Software	
  Development.").attr(bioAttr);	
  
s.text(31.75,	
  64,	
  	
  
	
  	
  	
  "Information	
  Security.	
  Speaker.").attr(bioAttr);	
  
s.text(31.75,	
  68,	
  "Creator	
  @LicPlateZone").attr(bioAttr);	
  
	
  
s.text(56,	
  74,	
  "http://about.me/kevin.hakanson")	
  
	
  .attr({	
  "font-­‐size":	
  2.5,	
  "text-­‐anchor":	
  "end",	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "fill":	
  "lightskyblue"	
  });	
  
var	
  s	
  =	
  Snap("460",	
  "640")	
  
	
  	
  	
  	
  	
  	
  	
  	
  .attr({	
  "viewBox":	
  "0	
  0	
  63.5	
  88",	
  style:	
  "display:	
  block;",	
  "font-­‐family":"sans-­‐serif"	
  });	
  
var	
  cx	
  =	
  31.75,	
  cy	
  =	
  44,	
  cr	
  =	
  55;	
  
	
  
SnapDeck.pinwheel(s,	
  cx,	
  cy,	
  cr,	
  120,	
  "firebrick",	
  "maroon");	
  
	
  
s.rect(3,	
  3,	
  57.5,	
  75,	
  0.5,	
  0.5).attr({	
  "fill":	
  "red"	
  });	
  
s.rect(4,	
  4,	
  55.5,	
  73,	
  0,	
  0).attr({	
  "stroke-­‐width":	
  1,	
  "stroke":	
  "yellow",	
  "fill":	
  "none"	
  });	
  
s.rect(5,	
  5,	
  53.5,	
  71).attr({	
  "fill":	
  "black"	
  });	
  
	
  	
  	
  	
  	
  
s.rect(56,	
  1.25,	
  6,	
  5.5,	
  0.5,	
  0.5).attr({	
  "fill":	
  "red"	
  });	
  
s.rect(56.5,	
  2,	
  5,	
  4.25,	
  0.25,	
  0.25).attr({	
  "fill":	
  "black",	
  "opacity":	
  0.85	
  });	
  
s.rect(56.5,	
  1.75,	
  4.75,	
  4.25,	
  0.25,	
  0.25).attr({	
  "fill":	
  "yellow",	
  "opacity":	
  0.9	
  });	
  
	
  
s.text(59,	
  5,	
  "#1").attr({	
  "text-­‐anchor":	
  "middle",	
  "font-­‐size":	
  3.5,	
  "fill":	
  "black",	
  "font-­‐weight":	
  "bold"	
  });	
  
	
  	
  	
  	
  	
  	
  	
  	
  
s.rect(11.5,	
  7.5,	
  40,	
  40,	
  0.5,	
  0.5).attr({	
  "fill":	
  "white"	
  });	
  
s.image("images/hakanson.png",	
  12,	
  8,	
  39,	
  39);	
  
	
  	
  	
  	
  
var	
  bioAttr	
  =	
  {	
  "text-­‐anchor":	
  "middle",	
  "font-­‐size":	
  2.75,	
  "fill":	
  "white"	
  };	
  
s.text(cx,	
  52,	
  "Software	
  Architect	
  at	
  Thomson	
  Reuters.").attr(bioAttr);	
  
s.text(cx,	
  56,	
  "WestlawNext.	
  Web	
  Platform.	
  JavaScript.").attr(bioAttr);	
  
s.text(cx,	
  60,	
  "Agile	
  Software	
  Development.").attr(bioAttr);	
  
s.text(cx,	
  64,	
  "Information	
  Security.	
  Speaker.").attr(bioAttr);	
  
s.text(cx,	
  68,	
  "Creator	
  @LicPlateZone").attr(bioAttr);	
  
s.text(56,	
  74,	
  "http://about.me/kevin.hakanson")	
  
	
  .attr({	
  "font-­‐size":	
  2.5,	
  "text-­‐anchor":	
  "end",	
  "fill":	
  "lightskyblue"	
  });	
  
	
  
//	
  https://about.twitter.com/press/brand-­‐assets	
  
s.image("images/Twitter_logo_blue.png",	
  6,	
  71,	
  14,	
  14);	
  
	
  
s.text(60,	
  82,	
  "Kevin	
  Hakanson")	
  
	
  .attr({	
  "text-­‐anchor":	
  "end",	
  "font-­‐size":	
  4.5,	
  "fill":	
  "white",	
  "font-­‐weight":	
  "bold"	
  });	
  
s.text(60,	
  86,	
  "@hakanson").attr({	
  "text-­‐anchor":	
  "end",	
  "font-­‐size":	
  3.5,	
  "fill":	
  "white"	
  });	
  
Evil	
  Twins?	
  
QuesDons?	
  

Recommended for you

More Related Content

What's hot

Drawing in HTML5 Open House
Drawing in HTML5 Open HouseDrawing in HTML5 Open House
Drawing in HTML5 Open House
Noam Kfir
 
Using Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the WebUsing Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the Web
philogb
 
Learn svg
Learn svgLearn svg
Learn svg
FitBlar Mit
 
Top 10 HTML5 features
Top 10 HTML5 featuresTop 10 HTML5 features
Top 10 HTML5 features
Gill Cleeren
 
Html5
Html5Html5
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
Avi Kedar
 
Html5 more than just html5 v final
Html5  more than just html5 v finalHtml5  more than just html5 v final
Html5 more than just html5 v final
Lohith Goudagere Nagaraj
 
HTML5 and CSS3: does now really mean now?
HTML5 and CSS3: does now really mean now?HTML5 and CSS3: does now really mean now?
HTML5 and CSS3: does now really mean now?
Chris Mills
 
Polyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java DeveloperPolyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java Developer
QAware GmbH
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
Debra Shapiro
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
QAware GmbH
 
Windows Phone 7 and Windows Azure – A Match Made in the Cloud
Windows Phone 7 and Windows Azure – A Match Made in the CloudWindows Phone 7 and Windows Azure – A Match Made in the Cloud
Windows Phone 7 and Windows Azure – A Match Made in the Cloud
Michael Collier
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and Techniques
Vitaly Friedman
 
Drupal Backbone.js in the Frontend
Drupal Backbone.js in the FrontendDrupal Backbone.js in the Frontend
Drupal Backbone.js in the Frontend
David Corbacho Román
 

What's hot (14)

Drawing in HTML5 Open House
Drawing in HTML5 Open HouseDrawing in HTML5 Open House
Drawing in HTML5 Open House
 
Using Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the WebUsing Web Standards to create Interactive Data Visualizations for the Web
Using Web Standards to create Interactive Data Visualizations for the Web
 
Learn svg
Learn svgLearn svg
Learn svg
 
Top 10 HTML5 features
Top 10 HTML5 featuresTop 10 HTML5 features
Top 10 HTML5 features
 
Html5
Html5Html5
Html5
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
Html5 more than just html5 v final
Html5  more than just html5 v finalHtml5  more than just html5 v final
Html5 more than just html5 v final
 
HTML5 and CSS3: does now really mean now?
HTML5 and CSS3: does now really mean now?HTML5 and CSS3: does now really mean now?
HTML5 and CSS3: does now really mean now?
 
Polyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java DeveloperPolyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java Developer
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
 
Windows Phone 7 and Windows Azure – A Match Made in the Cloud
Windows Phone 7 and Windows Azure – A Match Made in the CloudWindows Phone 7 and Windows Azure – A Match Made in the Cloud
Windows Phone 7 and Windows Azure – A Match Made in the Cloud
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and Techniques
 
Drupal Backbone.js in the Frontend
Drupal Backbone.js in the FrontendDrupal Backbone.js in the Frontend
Drupal Backbone.js in the Frontend
 

Similar to Make your own Print & Play card game using SVG and JavaScript

W3C HTML5 KIG-The complete guide to building html5 games
W3C HTML5 KIG-The complete guide to building html5 gamesW3C HTML5 KIG-The complete guide to building html5 games
W3C HTML5 KIG-The complete guide to building html5 games
Changhwan Yi
 
SVG Strikes Back
SVG Strikes BackSVG Strikes Back
SVG Strikes Back
Matt Baxter
 
Html5 Canvas and Mobile Graphics
Html5 Canvas and Mobile GraphicsHtml5 Canvas and Mobile Graphics
Html5 Canvas and Mobile Graphics
Engin Hatay
 
Vector Graphics on the Web: SVG, Canvas, CSS3
Vector Graphics on the Web: SVG, Canvas, CSS3Vector Graphics on the Web: SVG, Canvas, CSS3
Vector Graphics on the Web: SVG, Canvas, CSS3
Pascal Rettig
 
D3.js and SVG
D3.js and SVGD3.js and SVG
D3.js and SVG
Karol Depka Pradzinski
 
Easy charting with
Easy charting withEasy charting with
Easy charting with
Major Ye
 
Thats Not Flash?
Thats Not Flash?Thats Not Flash?
Thats Not Flash?
Mike Wilcox
 
CANVAS vs SVG @ FrontInRio 2011
CANVAS vs SVG @ FrontInRio 2011CANVAS vs SVG @ FrontInRio 2011
CANVAS vs SVG @ FrontInRio 2011
Davidson Fellipe
 
HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!
Iker Jamardo
 
The Image that called me - Active Content Injection with SVG Files
The Image that called me - Active Content Injection with SVG FilesThe Image that called me - Active Content Injection with SVG Files
The Image that called me - Active Content Injection with SVG Files
Mario Heiderich
 
Universal Applications with Universal JavaScript
Universal Applications with Universal JavaScriptUniversal Applications with Universal JavaScript
Universal Applications with Universal JavaScript
Thomas Joseph
 
HTML5 - A Whirlwind tour
HTML5 - A Whirlwind tourHTML5 - A Whirlwind tour
HTML5 - A Whirlwind tour
Lohith Goudagere Nagaraj
 
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
Eugene Lazutkin
 
Academy PRO: HTML5 API graphics
Academy PRO: HTML5 API graphicsAcademy PRO: HTML5 API graphics
Academy PRO: HTML5 API graphics
Binary Studio
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
Todd Anglin
 
Svghtml5 Meetup
Svghtml5 MeetupSvghtml5 Meetup
Svghtml5 Meetup
Oswald Campesato
 
Rich Media Advertising with SVG and JavaScript
Rich Media Advertising with SVG and JavaScriptRich Media Advertising with SVG and JavaScript
Rich Media Advertising with SVG and JavaScript
Gjokica Zafirovski
 
SVG Icons and Screen Reader Accessibility
SVG Icons and Screen Reader AccessibilitySVG Icons and Screen Reader Accessibility
SVG Icons and Screen Reader Accessibility
Dennis Lembree
 
Uni Tour Germany 11.2009
Uni Tour Germany 11.2009Uni Tour Germany 11.2009
Uni Tour Germany 11.2009
Patrick Lauke
 
Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017
Mario-Leander Reimer
 

Similar to Make your own Print & Play card game using SVG and JavaScript (20)

W3C HTML5 KIG-The complete guide to building html5 games
W3C HTML5 KIG-The complete guide to building html5 gamesW3C HTML5 KIG-The complete guide to building html5 games
W3C HTML5 KIG-The complete guide to building html5 games
 
SVG Strikes Back
SVG Strikes BackSVG Strikes Back
SVG Strikes Back
 
Html5 Canvas and Mobile Graphics
Html5 Canvas and Mobile GraphicsHtml5 Canvas and Mobile Graphics
Html5 Canvas and Mobile Graphics
 
Vector Graphics on the Web: SVG, Canvas, CSS3
Vector Graphics on the Web: SVG, Canvas, CSS3Vector Graphics on the Web: SVG, Canvas, CSS3
Vector Graphics on the Web: SVG, Canvas, CSS3
 
D3.js and SVG
D3.js and SVGD3.js and SVG
D3.js and SVG
 
Easy charting with
Easy charting withEasy charting with
Easy charting with
 
Thats Not Flash?
Thats Not Flash?Thats Not Flash?
Thats Not Flash?
 
CANVAS vs SVG @ FrontInRio 2011
CANVAS vs SVG @ FrontInRio 2011CANVAS vs SVG @ FrontInRio 2011
CANVAS vs SVG @ FrontInRio 2011
 
HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!HTML5DevConf 2013 (October): WebGL is a game changer!
HTML5DevConf 2013 (October): WebGL is a game changer!
 
The Image that called me - Active Content Injection with SVG Files
The Image that called me - Active Content Injection with SVG FilesThe Image that called me - Active Content Injection with SVG Files
The Image that called me - Active Content Injection with SVG Files
 
Universal Applications with Universal JavaScript
Universal Applications with Universal JavaScriptUniversal Applications with Universal JavaScript
Universal Applications with Universal JavaScript
 
HTML5 - A Whirlwind tour
HTML5 - A Whirlwind tourHTML5 - A Whirlwind tour
HTML5 - A Whirlwind tour
 
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
DojoX GFX Keynote Eugene Lazutkin SVG Open 2007
 
Academy PRO: HTML5 API graphics
Academy PRO: HTML5 API graphicsAcademy PRO: HTML5 API graphics
Academy PRO: HTML5 API graphics
 
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and AngularNativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
NativeScript: Cross-Platform Mobile Apps with JavaScript and Angular
 
Svghtml5 Meetup
Svghtml5 MeetupSvghtml5 Meetup
Svghtml5 Meetup
 
Rich Media Advertising with SVG and JavaScript
Rich Media Advertising with SVG and JavaScriptRich Media Advertising with SVG and JavaScript
Rich Media Advertising with SVG and JavaScript
 
SVG Icons and Screen Reader Accessibility
SVG Icons and Screen Reader AccessibilitySVG Icons and Screen Reader Accessibility
SVG Icons and Screen Reader Accessibility
 
Uni Tour Germany 11.2009
Uni Tour Germany 11.2009Uni Tour Germany 11.2009
Uni Tour Germany 11.2009
 
Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017
 

More from Kevin Hakanson

Sharpen your "Architectural Documentation" Saw
Sharpen your "Architectural Documentation" SawSharpen your "Architectural Documentation" Saw
Sharpen your "Architectural Documentation" Saw
Kevin Hakanson
 
Who's in your Cloud? Cloud State Monitoring
Who's in your Cloud? Cloud State MonitoringWho's in your Cloud? Cloud State Monitoring
Who's in your Cloud? Cloud State Monitoring
Kevin Hakanson
 
Adopting Multi-Cloud Services with Confidence
Adopting Multi-Cloud Services with ConfidenceAdopting Multi-Cloud Services with Confidence
Adopting Multi-Cloud Services with Confidence
Kevin Hakanson
 
Introduction to Speech Interfaces for Web Applications
Introduction to Speech Interfaces for Web ApplicationsIntroduction to Speech Interfaces for Web Applications
Introduction to Speech Interfaces for Web Applications
Kevin Hakanson
 
Learning to Mod Minecraft: A Father/Daughter Retrospective
Learning to Mod Minecraft: A Father/Daughter RetrospectiveLearning to Mod Minecraft: A Father/Daughter Retrospective
Learning to Mod Minecraft: A Father/Daughter Retrospective
Kevin Hakanson
 
ng-owasp: OWASP Top 10 for AngularJS Applications
ng-owasp: OWASP Top 10 for AngularJS Applicationsng-owasp: OWASP Top 10 for AngularJS Applications
ng-owasp: OWASP Top 10 for AngularJS Applications
Kevin Hakanson
 
Securing TodoMVC Using the Web Cryptography API
Securing TodoMVC Using the Web Cryptography APISecuring TodoMVC Using the Web Cryptography API
Securing TodoMVC Using the Web Cryptography API
Kevin Hakanson
 
HTTP Potpourri
HTTP PotpourriHTTP Potpourri
HTTP Potpourri
Kevin Hakanson
 
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax HubImplementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
Kevin Hakanson
 
Internationalize your JavaScript Application: Prepare for "the next billion" ...
Internationalize your JavaScript Application: Prepare for "the next billion" ...Internationalize your JavaScript Application: Prepare for "the next billion" ...
Internationalize your JavaScript Application: Prepare for "the next billion" ...
Kevin Hakanson
 
Developer's Guide to JavaScript and Web Cryptography
Developer's Guide to JavaScript and Web CryptographyDeveloper's Guide to JavaScript and Web Cryptography
Developer's Guide to JavaScript and Web Cryptography
Kevin Hakanson
 

More from Kevin Hakanson (11)

Sharpen your "Architectural Documentation" Saw
Sharpen your "Architectural Documentation" SawSharpen your "Architectural Documentation" Saw
Sharpen your "Architectural Documentation" Saw
 
Who's in your Cloud? Cloud State Monitoring
Who's in your Cloud? Cloud State MonitoringWho's in your Cloud? Cloud State Monitoring
Who's in your Cloud? Cloud State Monitoring
 
Adopting Multi-Cloud Services with Confidence
Adopting Multi-Cloud Services with ConfidenceAdopting Multi-Cloud Services with Confidence
Adopting Multi-Cloud Services with Confidence
 
Introduction to Speech Interfaces for Web Applications
Introduction to Speech Interfaces for Web ApplicationsIntroduction to Speech Interfaces for Web Applications
Introduction to Speech Interfaces for Web Applications
 
Learning to Mod Minecraft: A Father/Daughter Retrospective
Learning to Mod Minecraft: A Father/Daughter RetrospectiveLearning to Mod Minecraft: A Father/Daughter Retrospective
Learning to Mod Minecraft: A Father/Daughter Retrospective
 
ng-owasp: OWASP Top 10 for AngularJS Applications
ng-owasp: OWASP Top 10 for AngularJS Applicationsng-owasp: OWASP Top 10 for AngularJS Applications
ng-owasp: OWASP Top 10 for AngularJS Applications
 
Securing TodoMVC Using the Web Cryptography API
Securing TodoMVC Using the Web Cryptography APISecuring TodoMVC Using the Web Cryptography API
Securing TodoMVC Using the Web Cryptography API
 
HTTP Potpourri
HTTP PotpourriHTTP Potpourri
HTTP Potpourri
 
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax HubImplementing Messaging Patterns in JavaScript using the OpenAjax Hub
Implementing Messaging Patterns in JavaScript using the OpenAjax Hub
 
Internationalize your JavaScript Application: Prepare for "the next billion" ...
Internationalize your JavaScript Application: Prepare for "the next billion" ...Internationalize your JavaScript Application: Prepare for "the next billion" ...
Internationalize your JavaScript Application: Prepare for "the next billion" ...
 
Developer's Guide to JavaScript and Web Cryptography
Developer's Guide to JavaScript and Web CryptographyDeveloper's Guide to JavaScript and Web Cryptography
Developer's Guide to JavaScript and Web Cryptography
 

Recently uploaded

Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
ishalveerrandhawa1
 
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
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
Bert Blevins
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
Yevgen Sysoyev
 
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
 
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
 
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
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
Eric D. Schabell
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
Neo4j
 
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Bert Blevins
 
Best Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdfBest Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdf
Tatiana Al-Chueyr
 
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
 
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
 
20240705 QFM024 Irresponsible AI Reading List June 2024
20240705 QFM024 Irresponsible AI Reading List June 202420240705 QFM024 Irresponsible AI Reading List June 2024
20240705 QFM024 Irresponsible AI Reading List June 2024
Matthew Sinclair
 
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
 
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
 
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Chris Swan
 
The Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive ComputingThe Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive Computing
Larry Smarr
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
Matthew Sinclair
 
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Erasmo Purificato
 

Recently uploaded (20)

Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
 
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
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
 
DealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 editionDealBook of Ukraine: 2024 edition
DealBook of Ukraine: 2024 edition
 
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
 
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
 
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
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
 
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
 
Best Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdfBest Practices for Effectively Running dbt in Airflow.pdf
Best Practices for Effectively Running dbt in Airflow.pdf
 
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
 
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
 
20240705 QFM024 Irresponsible AI Reading List June 2024
20240705 QFM024 Irresponsible AI Reading List June 202420240705 QFM024 Irresponsible AI Reading List June 2024
20240705 QFM024 Irresponsible AI Reading List June 2024
 
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
 
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...
 
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
Fluttercon 2024: Showing that you care about security - OpenSSF Scorecards fo...
 
The Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive ComputingThe Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive Computing
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
 
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
 

Make your own Print & Play card game using SVG and JavaScript

  • 1. Make  your  own  Print  &  Play  card   game  using  SVG  and  JavaScript   Kevin  Hakanson   5  April  2014  
  • 2. Abstract   Want  to  leverage  your  creaDvity,  love  of  board  games,  and  web  plaGorm  experience  to  do   something  different?    Turn  your  imaginaDon  into  a  Print  &  Play  card  game  using  only  a  modern   web  browser,  color  printer  and  text  editor.     This  session  will  use  the  Scalable  Vector  Graphics  (SVG)  image  format  and  JavaScript   programming  language  to  make  a  deck  of  cards  for  a  simple  game.    CreaDng  a  few  cards  in   graphics  soSware  like  Inkscape  is  one  thing,  but  what  about  50  or  100  cards?    What  happens   when  you  need  to  update  them  all?    That’s  the  value  of  generaDng  your  SVG  using  JavaScript.     We  will  start  with  a  blank  screen,  adding  color  and  graphics  elements  like  lines,  shapes,  text  and   images.    Learn  about  container  elements  and  defining  content  for  re-­‐use.    Understand  how  units   in  the  SVG  coordinate  system  can  transform  our  on-­‐screen  creaDon  into  an  8.5  by  11  inch  printed   page  (or  PDF).    SVG  examples  will  be  both  in  their  naDve  XML  format  and  created  from  JavaScript   using  Snap.svg,  an  open  source  library  from  Adobe  designed  for  modern  web  browsers.     You  will  leave  this  session  with  a  basic  knowledge  of  SVG  concepts,  how  to  programmaDcally   generate  SVG  using  JavaScript,  and  how  to  make  your  SVG  creaDon  printer  friendly.  
  • 3. TL;DR   •  Print  &  Play  Card  Game   – Scalable  Vector  Graphics  (SVG)   – JavaScript   – Snap.svg   – 8.5  by  11  PrinDng    
  • 4. Kevin  Hakanson   @hakanson   #tccc16   kevin.hakanson@gmail.com   +KevinHakanson   hep://stackoverflow.com/users/22514/kevin-­‐hakanson   heps://github.com/hakanson  
  • 5. Bio   Kevin  Hakanson  is  an  applicaDon  architect  for   Thomson  Reuters  where  he  is  focused  on  highly   scalable  web  applicaDons,  especially  the  JavaScript   and  security  aspects.  His  background  includes   both  .NET  and  Java,  but  he  is  most  nostalgic  about   Lotus  Notes.  He  has  been  developing  professionally   since  1994  and  holds  a  Master’s  degree  in  SoSware   Engineering.  When  not  staring  at  a  computer   screen,  he  is  probably  staring  at  another  screen,   either  watching  TV  or  playing  video  games  with  his   family.  
  • 6. Bio   Kevin  Hakanson  is  an  applicaDon  architect  for   Thomson  Reuters  where  he  is  focused  on  highly   scalable  web  applicaDons,  especially  the  JavaScript   and  security  aspects.  His  background  includes   both  .NET  and  Java,  but  he  is  most  nostalgic  about   Lotus  Notes.  He  has  been  developing  professionally   since  1994  and  holds  a  Master’s  degree  in  SoSware   Engineering.  When  not  staring  at  a  computer   screen,  he  is  probably  staring  at  another  screen,   either  watching  TV  or  playing  video  games  with  his   family.  
  • 13. Fluxx  Blanxx   •  Add  your  own  zany  ideas   •  Each  pack  contains  one  of  each   of  the  five  card  types   •  Cards  are  "halfway-­‐blank"  with   standard-­‐issue  text  and  the   stripe  of  color   •  Just  grab  your  trusty   permanent  marker  and   customize  the  fun!     hep://store.looneylabs.com/Fluxx-­‐Blanxx    
  • 14. Print  &  Play   •  “Print  &  Play  games  are  those  which  are  oSen   free  to  any  player  who  wishes  to  print  them   off  themselves.  Many  are  available  on  the   Internet.”   –  hep://boardgamegeek.com/boardgamecategory/1120/print-­‐play       •  Print  &  Play  games  Boardgamegeek  wiki  entry:   –  hep://boardgamegeek.com/wiki/page/Print_and_Play_Games    
  • 15. Azure  Fluxx   •  Version  of  Fluxx  based  in  the  Window  Azure   “universe”:   – SoSware  Development   – MicrosoS  Products   – Web  Technologies  
  • 16. Fair  Use?   •  Fluxx  Copyright  Looney  Labs   •  Same  card  types   •  Same  basic  gameplay  and  rules  wording   •  Similar,  but  not  exact,  colors  and  artwork   •  Different  fonts   •  Different  physical  card  size  and  deck  count  
  • 18. Goals  and  Keepers   •  Goals   –  Old  School   –  New  School   –  Single  Page  App   –  Polyglot   –  Web  PlaGorm   –  Tool  Master   –  .NET  PlaGorm   –  Entry  Level   –  Mistaken  IdenDty   –  Selectors   –  Transpile   –  Odd  Couple   –  Double  MVC   –  Intellisense   –  Edge.js   –  UI  Bootstrap   •  Keepers  
  • 19. Scalable  Vector  Graphics  (SVG)   •  Text-­‐based  graphics  language  that  describes   images  with  vector  shapes,  text,  and   embedded  raster  graphics.   •  SVG  files  provide  resoluDon  independent,  high   resoluDon  dots  per  inch  (HiDPI)  graphics  on   the  web,  in  print,  and  on  mobile  devices  in  a   compact  format.       hep://www.adobe.com/devnet/svg.html    
  • 20. SVG  EssenDals   “This  insighGul  book  takes  you  through  the   ins  and  outs  of  SVG,  from  the  basics  to   more  complicated  features.”     hep://commons.oreilly.com/wiki/index.php/SVG_EssenDals    
  • 21. SVG  Primer   “The  book  aeempts  to  discuss  SVG  in   broader  terms,  but  at  the  same  Dme  to   illustrate  how  one  can  write  JavaScript   programs  that  use  and  manipulate  SVG.”     hep://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html    
  • 22. Snap.svg     “the  JavaScript  SVG  library  for  the  modern  web”     “makes  working  with  your  SVG  assets  as  easy  as   jQuery  makes  working  with  the  DOM”         hep://snapsvg.io/    
  • 23. The  svg  Element   •  <svg>  is  both  root  element  and  used  to  nest   standalone  SVG  fragments   •  Each  standalone  fragment  has  its  own   viewPort  and  coordinate  system  
  • 24. <svg>  XML  Example   <svg      width="8.5in"      height="11in"      viewBox="0  0  215.9  279.4"      version="1.1"      xmlns="http://www.w3.org/2000/svg"        xmlns:xlink="http://www.w3.org/1999/xlink">   </svg>  
  • 25. <svg>  JavaScript  Example   var  svg  =  Snap("8.5in",  (pageCount*11)+"in")                    .attr({id:"SnapDeck",  style:"display:  block;"});     var  pageAttr  =  {  width:"8.5in",  height:"11in",                                    "viewBox"  :  "0  0  215.9  279.4"};     for  (pageIndex  =  1;  pageIndex<=pageCount;  pageIndex++)  {            page  =  svg.el("svg",  pageAttr)                        .attr({  id  :  "SnapDeckPage"+pageIndex,                                        y  :  ((pageIndex-­‐1)*11)+"in"  });   }  
  • 26. <svg>  XML  Example   <svg  width="8.5in"  height="22in"  id="SnapDeck">        <svg  width="8.5in"  height="11in"  y="0in"        viewBox="0  0  215.9  279.4"  id="SnapDeckPage1">      </svg>        <svg  width="8.5in"  height="11in"  y="11in"        viewBox="0  0  215.9  279.4"  id="SnapDeckPage2">      </svg>     </svg>  
  • 27. Grouping  and  Reusing     “The  <use>  (reuse)  and  <g>  (or  group)   tags  bear  similarity  to  the  variables  and   objects  encountered  in  programming   languages.”       hep://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html#operaDons    
  • 28. The  g  Element   •  Gathers  child  elements  into  a  group   •  Uses  id  aeribute  to  give  a  unique  name   •  Can  have  <title>  and  <desc>   •  Styles  apply  to  child  elements   •  Can  nest  groups  within  one  another  
  • 29. <g>  XML  Example   <g  id="plus"          opacity=".4"          stroke="black"          stroke-­‐width="0.1">        <path  d="M  -­‐3  0  H  3  M  0  -­‐3  V  3"  />     </g>    
  • 30. The  defs  Element   •  Puxng  grouped  objects  inside  of  <defs>  tells   SVG  to  define  them  without  displaying  them   •  SVG  recommendaDon  is  to  put  all  objects   intended  for  re-­‐use  inside  <defs>  
  • 31. <defs>  JavaScript  Example   var  plus  =  svg.g(    svg.path("M  -­‐3  0  H  3  M  0  -­‐3  V  3")   );   plus.attr({id:"plus",        opacity:"0.4",      stroke:"black",      "stroke-­‐width":"0.1"});   plus.toDefs();  
  • 32. The  symbol  Element   •  <symbol>  element  provides  another  way  of   grouping  elements   •  Never  displayed,  so  don't  have  to  enclose  it  in   <defs>  but  customary  to  do  so   •  <symbol>  can  specify  viewBox  and   preserveAspectRatio  aeributes  
  • 33. The  use  Element   •  “copy-­‐and-­‐paste”  of  a  defined  group   •  Specify  with  an  xlink:href  aeribute   •  Specify  the  x  and  y  locaDon  for  the   group's  (0,  0)  point  
  • 35. <g  id="pluses">          <use  xlink:href="#plus"  x="12.7"  y="7.7"/>          <use  xlink:href="#plus"  x="12.7"  y="95.7"/>          <use  xlink:href="#plus"  x="12.7"  y="183.7"/>          <use  xlink:href="#plus"  x="12.7"  y="271.7"/>            <use  xlink:href="#plus"  x="76.2"  y="7.7"/>          <use  xlink:href="#plus"  x="76.2"  y="95.7"/>          <use  xlink:href="#plus"  x="76.2"  y="183.7"/>          <use  xlink:href="#plus"  x="76.2"  y="271.7"/>            <use  xlink:href="#plus"  x="139.7"  y="7.7"/>          <use  xlink:href="#plus"  x="139.7"  y="95.7"/>          <use  xlink:href="#plus"  x="139.7"  y="183.7"/>          <use  xlink:href="#plus"  x="139.7"  y="271.7"/>            <use  xlink:href="#plus"  x="203.2"  y="7.7"/>          <use  xlink:href="#plus"  x="203.2"  y="95.7"/>          <use  xlink:href="#plus"  x="203.2"  y="183.7"/>          <use  xlink:href="#plus"  x="203.2"  y="271.7"/>   </g>    
  • 36. <use>  XML  Example   <g  id="pluscolumn">          <use  xlink:href="#plus"  y="7.7"  />          <use  xlink:href="#plus"  y="95.7"  />          <use  xlink:href="#plus"  y="183.7"  />          <use  xlink:href="#plus"  y="271.7"  />   </g>     <g  id="pluses">          <use  xlink:href="#pluscolumn"  x="12.7"  />          <use  xlink:href="#pluscolumn"  x="76.2"  />          <use  xlink:href="#pluscolumn"  x="139.7"  />          <use  xlink:href="#pluscolumn"  x="203.2"  />   </g>  
  • 37. <use>  JavaScript  Example   //  width:  63.5,  height:  88   var  xstops  =  [12.7,  76.2,  139.7,  203.2];   var  ystops  =  [7.7,  95.7,  183.7,  271.7];     pages.forEach(function  (page)  {      ystops.forEach(function  (y)  {          xstops.forEach(function  (x)  {              var  p  =  plus.use().attr({  x:  x,  y:  y  });              page.append(p);          });      });   });  
  • 38. Why  63.5  x  88  mm  ?  
  • 41. The  rect  Element   •  Specify  x-­‐  and  y-­‐coordinates  of  the  upper  leS   corner,  width,  and  height   –   x,  y,  width  and  height  aeributes   •  Interior  is  filled  with  a  fill  color  (default  black)   •  Outline  is  drawn  with  strokes  (default  none)   <rect  x="0"  y="0"      width="10"  height="10"  fill="black"/>  
  • 42. The  circle  Element   •  Specify  center  x-­‐coordinate,  center  y-­‐ coordinate,  and  radius   –   cx,  cy,  and  r  aeributes   •  Interior  is  filled  with  a  fill  color  (default  black)   •  Outline  is  drawn  with  strokes  (default  none)   <circle  cx="5"  cy="5"  r="3.5"    fill="white"  stroke-­‐width="0"  />  
  • 43. The  ellipse  Element   •  Like  <circle>,  specify  center  x-­‐coordinate,   center  y-­‐coordinate   •  Also  needs  an  x-­‐radius  and  a  y-­‐radius   – aeributes  for  these  radii  are  named  rx  and  ry   <ellipse  cx="4"  cy="4"      rx="0.25"  ry="0.5"  />  
  • 44. The  line  Element   •  Specify  the  x-­‐  and  y-­‐coordinates  of  the  line's   endpoints   –   x1,  y1,  x2  and  x2  aeributes  
  • 45. The  path  Element   •  Draws  the  outline  of  any  arbitrary  shape  by   specifying  a  series  of  connected  lines,  arcs,  and   curves   •  Must  begin  with  a  moveto  command   •  Followed  by  one  or  more  lineto  commands   •  Arc  draws  a  secDon  of  an  ellipse  that  connects   two  points   <path  fill="none"  stroke-­‐linecap="round"              d="M  3.5  6.75  a  1.5,1.5  0  1  1  3  0"  />  
  • 47. <rect  x="0"  y="0"  width="10"  height="10"  fill="black"  />   <g  id="frown"  stroke="black"  fill="black"  stroke-­‐width=".5">      <circle  cx="5"  cy="5"  r="3.5"  fill="white"  stroke-­‐width="0"  />        <circle  cx="4"  cy="4"  r="0.25"  />      <circle  cx="6"  cy="4"  r="0.25"  />        <path  fill="none"                  d="M  3.5  6.75  a  1.5,1.5  0  1  1  3  0"  />   </g>  
  • 48. <rect  x="0"  y="0"  width="10"  height="10"  fill="black"  />   <g  id="frown"  stroke="black"  fill="black"  stroke-­‐width=".5">      <circle  cx="5"  cy="5"  r="3.5"  fill="white"  stroke-­‐width="0"  />        <ellipse  cx="4"  cy="4"  rx="0.25"  ry="0.5"  />      <ellipse  cx="6"  cy="4"  rx="0.25"  ry="0.5"  />        <path  fill="none"  stroke-­‐linecap="round"                  d="M  3.5  6.75  a  1.5,1.5  0  1  1  3  0"  />   </g>  
  • 49. <rect  x="0"  y="0"  width="10"  height="10"  fill="black"  />   <g  id="frown"  stroke="black"  fill="black"  stroke-­‐width=".5">      <circle  cx="5"  cy="5"  r="3.5"  fill="white"  stroke-­‐width="0"  />        <ellipse  cx="4"  cy="4"  rx="0.25"  ry="0.5"  />      <ellipse  cx="6"  cy="4"  rx="0.25"  ry="0.5"  />        <path  fill="none"  stroke-­‐linecap="round"                  d="M  3.5  6.75  C  4  5  6  6  6.5  7"  />   </g>  
  • 50. svg.rect(0,  0,  10,  10);     var  frown  =  svg.g()          .attr({  id:  "frown",  stroke:  "black",                            fill:  "black",  "stroke-­‐width":  0.5  });     frown.append(svg.circle(5,  5,  3.5)          .attr({  fill:  "white",  "stroke-­‐width":  0  }));   frown.append(svg.ellipse(4,  4,  0.25,  0.5));   frown.append(svg.ellipse(6,  4,  0.25,  0.5));     frown.append(svg.path("M  3.5  6.75  C  4  5  6  6  6.5  7")          .attr({  fill:  "none",                            "stroke-­‐linecap":  "round"  }));  
  • 51. <rect  x="0"  y="0"  width="10"  height="10"  fill="yellow"/>     <g  id="flowerpedal"  stroke="black"  stroke-­‐width="0">      <path  fill="black"        d="M  5  5  l  -­‐0.75  3  a  0.75,0.75  0  1  0  1.5  0  Z"  />   </g>  
  • 52. The  transform  Aeribute   •  matrix(<a>  <b>  <c>  <d>  <e>  <f>)   •  translate(<x>  [<y>])   •  scale(<x>  [<y>])   •  rotate(<a>  [<x>  <y>])   •  skewX(<a>)   •  skewY(<a>)     heps://developer.mozilla.org/en-­‐US/docs/Web/SVG/Aeribute/transform    
  • 53. <rect  x="0"  y="0"  width="10"  height="10"  fill="yellow"  />   <g  id="flowerpedal"  stroke="black"  stroke-­‐width="0">      <path  fill="black"  d="M  5  5  l  -­‐0.75  3  a  0.75,0.75  0  1  0  1.5  0  Z"  />   </g>   <use  xlink:href="#flowerpedal"  transform="rotate(  60,  5,  5)"  />   <use  xlink:href="#flowerpedal"  transform="rotate(120,  5,  5)"  />   <use  xlink:href="#flowerpedal"  transform="rotate(180,  5,  5)"  />   <use  xlink:href="#flowerpedal"  transform="rotate(240,  5,  5)"  />   <use  xlink:href="#flowerpedal"  transform="rotate(300,  5,  5)"  />  
  • 54. <rect  x="0"  y="0"  width="10"  height="10"  fill="greenyellow"/>   <g  id="check"  stroke="black"  stroke-­‐width="1">      <polyline  stroke-­‐linejoin="round"                            stroke-­‐linecap="round"                            fill="none"                            points="2  5,  3  8,  8  2"  />   </g>  
  • 55. <rect  x="0"  y="0"  width="10"  height="10"  fill="pink"  />   <g  id="checkbox"  stroke="black">      <rect  x="3"  y="3"  width="6"  height="6"                    fill="black"  stroke-­‐width="0"  />      <rect  x="2"  y="2"  width="6"  height="6"                    fill="pink"  stroke-­‐width="0.5"  />   </g>  
  • 56. <rect  x="0"  y="0"  width="10"  height="10"  fill="skyblue"  />   <g  id="arrow"  stroke="black"  stroke-­‐width="0.5">      <path  fill="black"  d="M  5.5  2  l  .5  0  l  3  3  l  -­‐3  3  l  -­‐0.5  0  l  0   -­‐1.5  l  -­‐4  0  l  0  -­‐3  l  4  0  Z"  />      <path  stroke-­‐linejoin="round"  fill="skyblue"  d="M  6  2  l  3  3  l   -­‐3  3  l  0  -­‐1.5  l  -­‐4  0  l  0  -­‐3  l  4  0  Z"  />   </g>  
  • 57. <rect  x="0"  y="0"  width="10"  height="10"  fill="mediumpurple"  />     <g  id="bolt"  stroke="black"  stroke-­‐width="0.5">      <path  fill="white"  d="M  5  1  l  -­‐3  3  l  2  0  l  -­‐2  2  l  2  0  l  -­‐2  3  l   5  -­‐4  l  -­‐2  0  l  2  -­‐2  l  -­‐2  0  l  2  -­‐2  Z"  />   </g>  
  • 58. How-­‐To  Make  a  Keeper   <symbol>  
  • 59. How-­‐To  Make  a  Keeper   <symbol>     <text>  
  • 60. How-­‐To  Make  a  Keeper   <symbol>     <text>     <rect>    
  • 61. How-­‐To  Make  a  Keeper   <symbol>     <text>     <rect>     <image>    
  • 62. The  text  Element   •  <text>  requires  only  two  aeributes,  x  and  y   •  Default  style  is  to  have  a  fill  color  of  black  and   no  outline   •  font-­‐family,  font-­‐size,  font-­‐weight,  font-­‐style,   text-­‐decoraDon,  word-­‐spacing,  leeer-­‐spacing   •  “SVG  performs  no  automaDc  line  breaking  or   word  wrapping”   hep://www.w3.org/TR/SVG11/text.html#IntroducDon    
  • 63. <text>  XML  Example   <g  text-­‐anchor="start"          font-­‐size="3.5"          letter-­‐spacing="-­‐0.05">      <text  x="15"  y="18">To  play  this  card,  place  it  face</text>      <text  x="15"  y="22.375">up  on  the  table  in  front  of  you.</text>     </g>  
  • 64. The  image  Element   •  <image>  element  includes  an  enDre  SVG  or   raster  file  (JPEG  or  PNG)   •  x,  y,  width,  and  height  aeributes   <image  xlink:href="images/JavaScript-­‐logo.png"   preserveAspectRatio="meet"  x="22"  y="48"  width="30"   height="30"  />  
  • 65. <image>  XML  Example    <image      xlink:href="images/JavaScript-­‐logo.png"      x="22"      y="48"      width="30"      height="30"                    preserveAspectRatio  ="meet"  />  
  • 66. <image>  JavaScript  Example   s.image(                          "images/JavaScript-­‐logo.png",            22,            48,                    30,                    30)   .attr({  "preserveAspectRatio":"meet"  })  
  • 67. <svg  id="SnapDeckCard1"      width="63.5"  height="88"      xmlns="http://www.w3.org/2000/svg"    xmlns:xlink="http://www.w3.org/1999/xlink"      font-­‐family="sans-­‐serif">            <defs>                          <!-­‐-­‐  ...  -­‐-­‐>      </defs>    <!-­‐-­‐  ...  -­‐-­‐>   </svg>  
  • 68. <svg  id="SnapDeckCard1"      width="63.5"  height="88"      xmlns="http://www.w3.org/2000/svg"    xmlns:xlink="http://www.w3.org/1999/xlink"      font-­‐family="sans-­‐serif">            <defs>          <rect  id="sidebar"  x="3"  y="3"  width="10"  height="82"  />                        <!-­‐-­‐  ...  -­‐-­‐>      </defs>    <!-­‐-­‐  ...  -­‐-­‐>   </svg>  
  • 69. <svg  id="SnapDeckCard1"      width="63.5"  height="88"      xmlns="http://www.w3.org/2000/svg"    xmlns:xlink="http://www.w3.org/1999/xlink"      font-­‐family="sans-­‐serif">            <defs>          <rect  id="sidebar"  x="3"  y="3"  width="10"  height="82"  />          <rect  id="hr"  x="15"  y="33"                        width="45.5"  height="2"  fill="black"  />                    <!-­‐-­‐  ...  -­‐-­‐>      </defs>    <!-­‐-­‐  ...  -­‐-­‐>   </svg>  
  • 70. <svg  id="SnapDeckCard1"      width="63.5"  height="88"      xmlns="http://www.w3.org/2000/svg"    xmlns:xlink="http://www.w3.org/1999/xlink"      font-­‐family="sans-­‐serif">            <defs>          <rect  id="sidebar"  x="3"  y="3"  width="10"  height="82"  />          <rect  id="hr"  x="15"  y="33"                        width="45.5"  height="2"  fill="black"  />            <symbol  id="check"  stroke="black"  stroke-­‐width="1">              <polyline  points="5,8,6,11,11,5"  fill="none"                                    stroke-­‐linejoin="round"  stroke-­‐linecap="round"  />          </symbol>          <!-­‐-­‐  ...  -­‐-­‐>      </defs>    <!-­‐-­‐  ...  -­‐-­‐>   </svg>  
  • 71. <svg>          <defs>          <!-­‐-­‐  ...  -­‐-­‐>          <g  id="keeper">              <use  xlink:href="#check"  />              <use  xlink:href="#sidebar"  fill="#b3dd1a"  />                                <use  xlink:href="#hr"  />                    </g>      </defs>    <!-­‐-­‐  ...  -­‐-­‐>   </svg>  
  • 72. <svg>          <defs>          <!-­‐-­‐  ...  -­‐-­‐>          <g  id="keeper">              <use  xlink:href="#check"  />              <use  xlink:href="#sidebar"  fill="#b3dd1a"  />                            <text  text-­‐anchor="start"  x="14.5"  y="11"  font-­‐size="9"                            letter-­‐spacing="-­‐.5"  font-­‐weight="bold">KEEPER</text>                          <use  xlink:href="#hr"  />                    </g>      </defs>    <!-­‐-­‐  ...  -­‐-­‐>   </svg>  
  • 73. <svg>          <defs>          <!-­‐-­‐  ...  -­‐-­‐>          <g  id="keeper">              <use  xlink:href="#check"  />              <use  xlink:href="#sidebar"  fill="#b3dd1a"  />                <text  text-­‐anchor="start"  x="14.5"  y="11"  font-­‐size="9"                            letter-­‐spacing="-­‐.5"  font-­‐weight="bold">KEEPER</text>                          <use  xlink:href="#hr"  />                <g  text-­‐anchor="start"  font-­‐size="3.5"  letter-­‐spacing="-­‐0.05">                  <text  x="15"  y="18">To  play  this  card,  place  it  face</text>                  <text  x="15"  y="22.375">up  on  the  table  in  front  of  you.</text>              </g>          </g>      </defs>    <!-­‐-­‐  ...  -­‐-­‐>   </svg>  
  • 74. <svg>          <defs>          <!-­‐-­‐  ...  -­‐-­‐>      </defs>        <use  xlink:href="#keeper"  />        <g  text-­‐anchor="start"  font-­‐size="5.5"              letter-­‐spacing="-­‐0.05"  font-­‐weight="bold">          <text  x="15"  y="31">JavaScript</text>      </g>                 </svg>  
  • 75. <svg>          <defs>          <!-­‐-­‐  ...  -­‐-­‐>      </defs>        <use  xlink:href="#keeper"  />        <g  text-­‐anchor="start"  font-­‐size="5.5"            letter-­‐spacing="-­‐0.05"  font-­‐weight="bold">          <text  x="15"  y="31">JavaScript</text>      </g>        <text  x="10"  y="15"  transform="matrix(0,-­‐1,1,0,-­‐5,25)"  font-­‐size="6"                    text-­‐anchor="end"  font-­‐weight="bold">JAVASCRIPT</text>           </svg>  
  • 76. <svg>          <defs>          <!-­‐-­‐  ...  -­‐-­‐>      </defs>        <use  xlink:href="#keeper"  />        <g  line-­‐spacing="0"  paragraph-­‐spacing="0"  text-­‐anchor="start"              font-­‐size="5.5"  letter-­‐spacing="-­‐0.05"  font-­‐weight="bold">          <text  x="15"  y="31">JavaScript</text>      </g>        <text  x="10"  y="15"  transform="matrix(0,-­‐1,1,0,-­‐5,25)"  font-­‐size="6"                    text-­‐anchor="end"  font-­‐weight="bold">JAVASCRIPT</text>        <image  xlink:href="images/JavaScript-­‐logo.png"                      preserveAspectRatio="meet"  x="22"  y="48"                      width="30"  height="30"  />   </svg>  
  • 77. <svg  id="SnapDeckCard1"  width="460"  height="640"  viewBox="0  0  63.5  88"  xmlns="http://www.w3.org/2000/svg"              xmlns:xlink="http://www.w3.org/1999/xlink"  font-­‐family="sans-­‐serif”>          <defs>          <rect  x="3"  y="3"  width="10"  height="82"  id="sidebar"  />          <rect  x="15"  y="33"  width="45.5"  height="2"  id="hr"  fill="black"  />            <symbol  id="check"  stroke="black"  stroke-­‐width="1">              <polyline  points="5,8,6,11,11,5"  fill="none"  stroke-­‐linejoin="round"  stroke-­‐linecap="round"  />          </symbol>            <g  id="keeper">              <use  xlink:href="#sidebar"  fill="#b3dd1a"  />              <use  xlink:href="#check"  />              <text  text-­‐anchor="start"  x="14.5"  y="11"  font-­‐size="9"  letter-­‐spacing="-­‐.5"  font-­‐weight="bold">KEEPER</text>                          <use  xlink:href="#hr"  />              <g  text-­‐anchor="start"  font-­‐size="3.5"  letter-­‐spacing="-­‐0.05">                  <text  x="15"  y="18">To  play  this  card,  place  it  face</text>                  <text  x="15"  y="22.375">up  on  the  table  in  front  of  you.</text>              </g>          </g>      </defs>      <use  xlink:href="#keeper"></use>      <g  text-­‐anchor="start"  font-­‐size="5.5"  letter-­‐spacing="-­‐0.05"  font-­‐weight="bold">          <text  x="15"  y="31">JavaScript</text>      </g>      <text  x="10"  y="15"  transform="matrix(0,-­‐1,1,0,-­‐5,25)"                    font-­‐size="6"  text-­‐anchor="end"  font-­‐weight="bold">JAVASCRIPT</text>      <image  xlink:href="images/JavaScript-­‐logo.png"  preserveAspectRatio="meet"  x="22"  y="48"  width="30"  height="30"  />   </svg>  
  • 79. SVG  1.1  Text   Each  <text>  element  causes  a  single  string  of   text  to  be  rendered.  SVG  performs  no  automaDc   line  breaking  or  word  wrapping      hep://www.w3.org/TR/SVG11/text.html#IntroducDon    
  • 80. SVG  Tiny  1.2     •  The  <textArea>  element  allows  simplisDc   wrapping  of  text  content     •  The  <tbreak>  element  is  an  empty  element   that  forcibly  breaks  the  current  line  of  text     •  The  line-­‐increment  property  provides   limited  control  over  the  size  of  each  line  
  • 81. SVG  1.2   •  Scalable  Vector  Graphics  (SVG)  Full  1.2   SpecificaDon   – W3C  Working  DraS  13  April  2005   hep://www.w3.org/TR/SVG12/     •  “The  next  draS  of  SVG  1.2  Full  will  structured   as  a  superset  of  the  SVG  1.2  Tiny  language”   •  “At  this  Dme  the  refactored  SVG  1.2  Full   specificaDon  is  not  ready  for  publicaDon.”  
  • 82. snapdeck.textArea  =  function  (s,  x,  y,  width,  textToWrap,  attr)  {          if  (!textToWrap)  return;            attr  =  SnapDeck.defaultAttr(attr,  {  "text-­‐anchor":  "start",  "font-­‐size":  3.5,  "letter-­‐spacing":  -­‐.05,  "line-­‐spacing":  0,  "paragraph-­‐ spacing":  0  });          var  fontSize  =  attr["font-­‐size"];          width  =  width  *  (fontSize  /  3);          var  yDelta  =  (fontSize  *  1.25)  +  attr["line-­‐spacing"];          var  tmpSvg,  tmpRoot  =  deck.svg.g().attr(attr).toDefs();          var  g  =  s.g().attr(attr);          var  line  =  "",  tmpLine  =  "",  linecount  =  0;          var  texts  =  textToWrap.split("n");          texts.forEach(function  (text)  {                  var  words  =  text.split("  ");                  words.forEach(function  (word)  {                          if  (line)  {                                  tmpLine  =  line  +  "  "  +  word;                                  tmpSvg  =  tmpRoot.text(0,  0,  tmpLine);                                  if  (tmpSvg.node.getBoundingClientRect().width  >  width)  {                                          g.text(x,  y,  line);                                          y  =  y  +  yDelta;                                          linecount++;                                          line  =  tmpLine  =  word;                                  }  else  {                                          line  =  line  +  "  "  +  word;                                  }                                  tmpSvg.remove();                          }  else  {                                  line  =  word;                          }                  });                    g.text(x,  y,  line);                  y  =  y  +  yDelta  +  attr["paragraph-­‐spacing"];                  linecount++;                  line  =  tmpLine  =  "";          });            tmpRoot.remove();          return  g;   };  
  • 83. Chrome  Zoom   100%   150%   200%  
  • 84. snap.deck.js   (function(window)  {            function  Deck(cardCount)  {                  //  ...                  this.svg  =  Snap("8.5in",  (pageCount  *  11)  +  "in")                          .attr({  id:  "SnapDeck",  style:  "display:  block;"  });                  this.pages  =  [];                  this.cards  =  [];                  //  ...          }            snapdeck.deck  =  function  (cards)  {                  return  new  Deck(cards);          };            window.SnapDeck  =  snapdeck;     })(window);  
  • 87. Len  Peralta’s  Geek  A  Week  
  • 88. @hakanson  Card   •  Mimic  look  from  the   Geek  A  Week  series   •  InformaDon  and  images   from  Twieer  biography   •  “More  cool”  than  a   business  card  
  • 89. var  s  =  Snap("460",  "640")                  .attr({  "viewBox":  "0  0  63.5  88",                                    "font-­‐family":"sans-­‐serif"  });     SnapDeck.pinwheel(s,  31.75,  44,  55,  120,                                        "firebrick",  "maroon");        
  • 90. Pinwheel   •  120  rays   •  firebrick   •  maroon  
  • 92. snapdeck.pinwheel  =  function  (s,  cx,  cy,  cr,  count,  background,  foreground)   {          var  c  =  s.circle(cx,  cy,  cr);          c.attr({  "stroke-­‐width":  0,  "fill":  background  });            var  deg  =  360  /  count;          var  offset  =  -­‐deg  /  2;          for  (var  i  =  0;  i  <  count  /  2;  i++)  {                  var  start  =  "M  "  +  cx  +  "  "  +  cy;                    var  rad  =  (2  *  i  *  deg  +  offset)  *  (Math.PI  /  180);                  var  x  =  cx  +  (Math.cos(rad)  *  cr);                  var  y  =  cy  +  (Math.sin(rad)  *  cr);                    var  first  =  "  L  "  +  x  +  "  "  +  y;                    rad  =  (2  *  i  *  deg  +  deg  +  offset)  *  (Math.PI  /  180);                  x  =  cx  +  (Math.cos(rad)  *  cr);                  y  =  cy  +  (Math.sin(rad)  *  cr);                    var  second  =  "  A  "  +  cx  +  "  "  +  cy  +  "  0  0  1  "  +  x  +  "  "  +  y;                    s.path(start  +  first  +  second  +  "  Z").attr({  "fill":  foreground  });          }          return  s;   };  
  • 93. var  s  =  Snap("460",  "640")                  .attr({  "viewBox":  "0  0  63.5  88",                                    "font-­‐family":"sans-­‐serif"  });     SnapDeck.pinwheel(s,  31.75,  44,  55,  120,                                        "firebrick",  "maroon");     s.rect(3,  3,  57.5,  75,  0.5,  0.5)    .attr({  "fill":  "red"  });        
  • 94. var  s  =  Snap("460",  "640")                  .attr({  "viewBox":  "0  0  63.5  88",                                    "font-­‐family":"sans-­‐serif"  });     SnapDeck.pinwheel(s,  31.75,  44,  55,  120,                                        "firebrick",  "maroon");     s.rect(3,  3,  57.5,  75,  0.5,  0.5)    .attr({  "fill":  "red"  });     s.rect(4,  4,  55.5,  73,  0,  0)    .attr({  "fill":  "none",                      "stroke-­‐width":  1,  "stroke":  "yellow",  });      
  • 95. var  s  =  Snap("460",  "640")                  .attr({  "viewBox":  "0  0  63.5  88",                                    "font-­‐family":"sans-­‐serif"  });     SnapDeck.pinwheel(s,  31.75,  44,  55,  120,                                        "firebrick",  "maroon");     s.rect(3,  3,  57.5,  75,  0.5,  0.5)    .attr({  "fill":  "red"  });     s.rect(4,  4,  55.5,  73,  0,  0)    .attr({  "fill":  "none",                      "stroke-­‐width":  1,  "stroke":  "yellow",  });     s.rect(5,  5,  53.5,  71)    .attr({  "fill":  "black"  });    
  • 96. s.rect(56,  1.25,  6,  5.5,  0.5,  0.5)    .attr({  "fill":  "red"  });   s.rect(56.5,  2,  5,  4.25,  0.25,  0.25)    .attr({  "fill":  "black",  "opacity":  0.85  });   s.rect(56.5,  1.75,  4.75,  4.25,  0.25,  0.25)    .attr({  "fill":  "yellow",  "opacity":  0.9  });     s.text(59,  5,  "#1").attr({  "text-­‐anchor":  "middle",  "font-­‐size":   3.5,  "fill":  "black",  "font-­‐weight":  "bold"  });    
  • 97. s.rect(56,  1.25,  6,  5.5,  0.5,  0.5)    .attr({  "fill":  "red"  });   s.rect(56.5,  2,  5,  4.25,  0.25,  0.25)    .attr({  "fill":  "black",  "opacity":  0.85  });   s.rect(56.5,  1.75,  4.75,  4.25,  0.25,  0.25)    .attr({  "fill":  "yellow",  "opacity":  0.9  });     s.text(59,  5,  "#1").attr({  "text-­‐anchor":  "middle",  "font-­‐size":   3.5,  "fill":  "black",  "font-­‐weight":  "bold"  });     s.image("images/Twitter_logo_blue.png",  6,  71,  14,  14);    
  • 98. s.rect(56,  1.25,  6,  5.5,  0.5,  0.5)    .attr({  "fill":  "red"  });   s.rect(56.5,  2,  5,  4.25,  0.25,  0.25)    .attr({  "fill":  "black",  "opacity":  0.85  });   s.rect(56.5,  1.75,  4.75,  4.25,  0.25,  0.25)    .attr({  "fill":  "yellow",  "opacity":  0.9  });     s.text(59,  5,  "#1").attr({  "text-­‐anchor":  "middle",  "font-­‐size":   3.5,  "fill":  "black",  "font-­‐weight":  "bold"  });     s.image("images/Twitter_logo_blue.png",  6,  71,  14,  14);     s.text(60,  82,  "Kevin  Hakanson").attr({  "text-­‐anchor":  "end",   "font-­‐size":  4.5,  "fill":  "white",  "font-­‐weight":  "bold"  });   s.text(60,  86,  "@hakanson")    .attr({  "text-­‐anchor":  "end",                      "font-­‐size":  3.5,  "fill":  "white"  });  
  • 99. s.rect(11.5,  7.5,  40,  40,  0.5,  0.5)    .attr({  "fill":  "white"  });   s.image("images/hakanson.png",  12,  8,  39,  39);      
  • 100. s.rect(11.5,  7.5,  40,  40,  0.5,  0.5)    .attr({  "fill":  "white"  });   s.image("images/hakanson.png",  12,  8,  39,  39);     var  bioAttr  =  {  "text-­‐anchor":  "middle",                      "font-­‐size":  2.75,  "fill":  "white"  };   s.text(31.75,  52,          "Software  Architect  at  Thomson  Reuters.")    .attr(bioAttr);   s.text(31.75,  56,          "WestlawNext.  Web  Platform.  JavaScript.")    .attr(bioAttr);   s.text(31.75,  60,          "Agile  Software  Development.").attr(bioAttr);   s.text(31.75,  64,          "Information  Security.  Speaker.").attr(bioAttr);   s.text(31.75,  68,  "Creator  @LicPlateZone").attr(bioAttr);    
  • 101. s.rect(11.5,  7.5,  40,  40,  0.5,  0.5)    .attr({  "fill":  "white"  });   s.image("images/hakanson.png",  12,  8,  39,  39);     var  bioAttr  =  {  "text-­‐anchor":  "middle",                      "font-­‐size":  2.75,  "fill":  "white"  };   s.text(31.75,  52,          "Software  Architect  at  Thomson  Reuters.")    .attr(bioAttr);   s.text(31.75,  56,          "WestlawNext.  Web  Platform.  JavaScript.")    .attr(bioAttr);   s.text(31.75,  60,          "Agile  Software  Development.").attr(bioAttr);   s.text(31.75,  64,          "Information  Security.  Speaker.").attr(bioAttr);   s.text(31.75,  68,  "Creator  @LicPlateZone").attr(bioAttr);     s.text(56,  74,  "http://about.me/kevin.hakanson")    .attr({  "font-­‐size":  2.5,  "text-­‐anchor":  "end",                      "fill":  "lightskyblue"  });  
  • 102. var  s  =  Snap("460",  "640")                  .attr({  "viewBox":  "0  0  63.5  88",  style:  "display:  block;",  "font-­‐family":"sans-­‐serif"  });   var  cx  =  31.75,  cy  =  44,  cr  =  55;     SnapDeck.pinwheel(s,  cx,  cy,  cr,  120,  "firebrick",  "maroon");     s.rect(3,  3,  57.5,  75,  0.5,  0.5).attr({  "fill":  "red"  });   s.rect(4,  4,  55.5,  73,  0,  0).attr({  "stroke-­‐width":  1,  "stroke":  "yellow",  "fill":  "none"  });   s.rect(5,  5,  53.5,  71).attr({  "fill":  "black"  });             s.rect(56,  1.25,  6,  5.5,  0.5,  0.5).attr({  "fill":  "red"  });   s.rect(56.5,  2,  5,  4.25,  0.25,  0.25).attr({  "fill":  "black",  "opacity":  0.85  });   s.rect(56.5,  1.75,  4.75,  4.25,  0.25,  0.25).attr({  "fill":  "yellow",  "opacity":  0.9  });     s.text(59,  5,  "#1").attr({  "text-­‐anchor":  "middle",  "font-­‐size":  3.5,  "fill":  "black",  "font-­‐weight":  "bold"  });                   s.rect(11.5,  7.5,  40,  40,  0.5,  0.5).attr({  "fill":  "white"  });   s.image("images/hakanson.png",  12,  8,  39,  39);           var  bioAttr  =  {  "text-­‐anchor":  "middle",  "font-­‐size":  2.75,  "fill":  "white"  };   s.text(cx,  52,  "Software  Architect  at  Thomson  Reuters.").attr(bioAttr);   s.text(cx,  56,  "WestlawNext.  Web  Platform.  JavaScript.").attr(bioAttr);   s.text(cx,  60,  "Agile  Software  Development.").attr(bioAttr);   s.text(cx,  64,  "Information  Security.  Speaker.").attr(bioAttr);   s.text(cx,  68,  "Creator  @LicPlateZone").attr(bioAttr);   s.text(56,  74,  "http://about.me/kevin.hakanson")    .attr({  "font-­‐size":  2.5,  "text-­‐anchor":  "end",  "fill":  "lightskyblue"  });     //  https://about.twitter.com/press/brand-­‐assets   s.image("images/Twitter_logo_blue.png",  6,  71,  14,  14);     s.text(60,  82,  "Kevin  Hakanson")    .attr({  "text-­‐anchor":  "end",  "font-­‐size":  4.5,  "fill":  "white",  "font-­‐weight":  "bold"  });   s.text(60,  86,  "@hakanson").attr({  "text-­‐anchor":  "end",  "font-­‐size":  3.5,  "fill":  "white"  });