SVG i dagens nettlesermarked 
Petter Dahl Thunæs / Robin Smidsrød 
Høgskolen i Vestfold / Vestfold University College 
  Problemstilling 
  
    SVG mangler markedspenetrasjon 
    Fremdeles ikke mulig å benytte uten omtanke 
    Hvordan har Microsoft påvirket adopsjon av SVG? 
    Alternativer til SVG 
   
  Modellapplikasjon:
  
    Generatorbibliotek for kake-/linje-/stolpe-diagram i SVG 
    Grafisk brukergrensesnitt 
   
  
  
 
  Arbeidsmetodikk 
  
    Smidig utvikling (agile) 
    Sprinter 
        Planlegging i forkant 
        Oppfølging i etterkant 
       
     
    Engelsk i programvare 
     
   
  
  
 
  Prosessverktøy 
  
    Utviklingsverktøy: 
        Java 
        Eclipse 
        Lang erfaring gjennom studietiden 
       
     
    Prosjektstyring 
        LiquidPlanner.com 
        Gratis tilgang for klasseromsbruk 
       
     
    Versjonskontroll 
     
    Tekstproduksjon 
        Markdown / Template Toolkit 
        S5 slideshow 
        PrinceXML 
        Perl 
       
     
   
  
  
 
  Hva er SVG? 
  
    2D-grafikk (primært vektorbasert) 
    Åpen standard fra W3C 
    Gjenbruk av standarder 
    Applikasjon i XML 
    Deklarativ (som HTML) 
    Støtter scripting (ECMAScript) 
    DOM-støtte 
    Animasjon 
        Deklarativ (SMIL) 
        Prosedyrebasert (scripting) 
       
     
   
  
  
 
  Medlemmer i SVG Working Group 
  Adobe Systems Inc., Apple, Inc., Canon, Inc., Cisco, ERICSSON, Ikivo AB, INSTITUT TELECOM, Microsoft Corporation, Mozilla Foundation, Opera Software, PTC-Arbortext, Quickoffice Inc, Rochester Institute of Technology, Samsung Electronics Co., Ltd., Telecom Italia SpA
  Aktivitet på offentlige epostlister:
  
  
  
 
  Historisk bakgrunn 
  
    Forgjengere: PGML, VML, HGML, DrawML, WebCGM 
    Beslutning: Stiftelse av SVG WG 
    Fra VML: 
        Kompakt sti-syntaks (path) 
       
     
    Fra PGML: 
        Koordinatsystemet 
        Transformasjoner 
        Fargerom 
        Tekst 
       
     
    Metadata kodet som XML-attributter, ikke som elementer 
        Gode støtte for semantisk separasjon 
       
     
    Integrert støtte for hyperlenking 
   
  
  
 
  Utgivelser av SVG-standarden 
  
    SVG 1.0 
        Godkjent 4. september 2001 
       
     
    SVG 1.1 
     
    SVG Mobile (Basic og Tiny) 1.1 
     
    SVG Full 1.2 
        Sist oppdatert 13. april 2005 (ikke godkjent)  
       
     
    SVG Print 1.2 
        Sist oppdatert 21. desember 2007 (ikke godkjent)  
       
     
    SVG Tiny 1.2 
        Godkjent 22. desember 2008 
       
     
   
  
  
 
  Hvordan ser SVG ut? 
  
    Applikasjon i XML 
    XML namespace 
        http://www.w3.org/2000/svg 
     
    Mimetype 
     
    Filendelse 
     
    Støtter komprimering 
     
    Grafikk-primitiver 
        Linjer, polygon, rektangel, stier 
        Sirkel, ellipse, tekst, bitmap 
       
     
   
  
  
 
  Linje 
  
    line example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 350 350">
 <line x1="0" y1="0" x2="300" y2="300"
  style="stroke: rgb(99,99,99); stroke-width: 2;"
 />
</svg>
  
 
  Sammenhengende linjer 
  
    polyline example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 1200 1200">
 <polyline
  fill="none"
  stroke="blue"
  stroke-width="10"
  points="  50,375
            150,375 150,325 250,325 250,375
            350,375 350,250 450,250 450,375
            550,375 550,175 650,175 650,375
            750,375 750,100 850,100 850,375
            950,375 950,25 1050,25 1050,375
            1150,375"
 />
</svg>
  
 
  Polygon 
  
    polygon example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 350 350">
 <polygon points="220,100 300,210 170,250 123,234"
  style="fill: #cccccc; stroke: #000000; stroke-width: 1;"
 />
</svg>
  
 
  Rektangel 
  
    rect example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 300 300">
 <rect x="20" y="20" rx="10" ry="5" width="250" height="100"
  style="fill: red; stroke: black; stroke-width: 5; opacity: 0.5;"
 />
</svg>
  
 
  Sti 
  
    path example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 400 400">
 <path d="M153 334
C153 334 151 334 151 334
C151 339 153 344 156 344
C164 344 171 339 171 334
C171 322 164 314 156 314
C142 314 131 322 131 334
C131 350 142 364 156 364
C175 364 191 350 191 334
C191 311 175 294 156 294
C131 294 111 311 111 334
C111 361 131 384 156 384
C186 384 211 361 211 334
C211 300 186 274 156 274"
  style="fill: white; stroke: red; stroke-width: 2;"
 />
</svg>
  
 
  Sirkel 
  
    circle example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 200 200">
 <circle cx="50%" cy="50%"
         r="50"
         stroke="black" stroke-width="2"
         fill="red" />
</svg>
  
 
  Ellipse 
  
    ellipse example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 200 200">
 <ellipse cx="50%" cy="50%" rx="50%" ry="25%"
  style="fill: rgb(200,100,50); stroke: rgb(0,0,100); stroke-width: 2;"
 />
</svg>
  
 
  Tekst 
  
    text example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 300 300">
 <text x="10" y="20" style="font-family:sans-serif;font-size:24"
  >Stationary text</text>
 <text x="10" y="40" style="font-family:serif;font-size:24">Moving text
  <animateMotion path="M 10 40 L 200 40" dur="0.5s" fill="freeze" />
 </text>
</svg>
  
 
  Filter 
  
    filter example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
             xmlns:xlink="http://www.w3.org/1999/xlink"
     viewBox="0 0 300 300">
 <defs>
  <filter id="shadow">
   <feGaussianBlur in="SourceGraphic" stdDeviation="2" result="blur" />
   <feOffset in="blur" dx="3" dy="3" />
  </filter>
  <text id="text"
   x="10%" y="10%"
   font-family="sans-serif" font-size="150%"
   >Text with drop shadow
  </text>
 </defs>
 <use xlink:href="#text" filter="url(#shadow)" stroke="grey" />
 <use xlink:href="#text" stroke="black" />
</svg>
  
 
  Animasjon 
  
    animation example 
  
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 300 300">
 <rect
  x="20" y="20"
  rx="0" ry="0"
  width="250" height="100"
  fill="red"
  stroke="black" stroke-width="5">
  <animateColor attributeName="fill" attributeType="XML"
   from="red" to="yellow"
   dur="2s"
   fill="freeze"
  />
  <animate attributeName="rx" attributeType="XML"
   from="0" to="10"
   begin="2s" dur="2s"
   fill="freeze"
  />
  <animate attributeName="ry" attributeType="XML"
   from="0" to="10"
   begin="2s" dur="2s"
   fill="freeze"
  />
 </rect>
</svg>
  
 
  Programvare med SVG-støtte 
  Programvare som kan produsere SVG-dokumenter
  
    Kommersiell programvare 
    Fri programvare 
    Utviklerverktøy 
   
  
  
 
  Kommersiell programvare 
  
    Microsoft Visio 
     
    Adobe Illustrator 
        Støtter SVG siden versjon 9 
        Utvidet SVG-støtte i versjon 12 (CS2) 
        Støtter avansert SVG-funksjonalitet som filtre, interaktivitet, typografi, hyperlenking 
       
     
    CorelDRAW 
        Støtter SVG siden versjon 10 (2000) 
        Støtter static profile godt 
        Noen rariteter (skygger blir rendret som bitmap) 
       
     
    Xara Xtreme 
        Støtter SVG siden versjon 3.2 
        Ikke komplett støtte (jobber med saken) 
       
     
   
  
  
 
  Fri programvare 
  
    OpenOffice.org Draw 
        Støtter SVG siden 2002 
        Basert på Batik Toolkit 
       
     
    Inkscape 
        Bruker SVG som primært filformat 
        Støtter omtrent hele SVG-standarden (1.1) 
        Unntakene er animasjon og noen filtre 
       
     
    Scribus 
        Elementær støtte for SVG 
        Noen mangler i støtte av tekst-elementet 
        Eksport av SVG er godt støttet 
        Import av SVG fremdeles problematisk 
       
     
   
  
  
 
  Verktøy for utviklere 
  
    Batik SVG Toolkit 
        Javabibliotek 
        Beste implementasjon på markedet 
       
     
    Cairo 
        2D-grafikk-bibliotek (C++) 
        Støtter mange programmeringsspråk 
        Gecko- og WebKit-motorene benytter Cairo 
       
     
    Processing 
        Programmeringsspråk 
        Visuell kontekst 
        Bygd på toppen av JVM 
        Støtter import av SVG-primitiver 
       
     
   
  
  
 
  Nettlesere og SVG-støtte 
  
    SVG har vært tilgjenglig lenge 
    Stor variasjon i nettleserimplementasjoner 
    
      Kan ikke garantere for utseende
     
    
      Internet Explorer har ingen støtte for SVG
      
        Adobe SVG Viewer 
        Apache Batick SVG Toolkit 
       
     
    
      Jeff Schillers implementasjonstest
     
    Firefox, Safari, Opera, Chrome, Internet Explorer 
   
  
  
 
  Dekningsgrad i implementasjonene 
  
    
      Firefox - utgangspunkt for sammenligning
      
        Text module - mangler symbolstøtte 
        Cursor module - egendefinert peker 
        Animation module - flere feil og mangler 
       
     
    
      Opera har den beste implementasjonen
      
        Video og lyd - mangler 
        Font module - mangler symbolstøtte 
       
     
    
      Chrome og Safari - basert på WebKits SVG-implementasjon
      
        Text module - mangler symbolstøtte 
        Filter module - mangler delvis 
        Animation module - bedre implementert enn Firefox 
        Font module - bedre enn andre nettlesere 
       
     
   
  
  
 
  Ikke støttet funksjonalitet 
  
    
      
        Modul 
        Firefox 
        Opera 
        WebKit 
       
     
    
      
        Filter 
        OK 
        OK 
        DELVIS 
       
      
        Font 
        FEIL 
        OK 
        OK 
       
      
        Animation 
        FEIL 
        OK 
        DELVIS 
       
      
        Text 
        DELVIS 
        OK 
        OK 
       
     
  
  
  
 
  Funksjonalitet med feil 
  
    
      Firefox - dårlig Font/Animation-implementasjon
      
        Ikke mulig å animere element over tid 
        Ikke mulig å skalere eller rotere element 
        Ikke mulig å vise symboler og tegn 
       
     
    
      WebKit - dårlig Cursor/View/Animate-implementasjon
      
        Ikke mulig å definere egen peker 
        Ikke mulig å hente ut aktive elementer 
        Ikke mulig å animere element over tid 
        Ikke mulig å skalere eller rotere element 
       
     
    
      Opera minst feil, best støtte
      
        Spesialtegn i Font/Text-modulen 
        Font/Animation - best implementasjon i Opera 
       
     
   
  
  
 
  Ingen SVG-støtte i IE 
  
    IE har aldri støttet SVG 
    Tredjepartstillegg 
        Adobe SVG Viewer 
        Batik Plugin 
       
     
    SVG WG deadlock 
        IE benytter VML 
        Nok med et grafikk-språk 
        IE team mer eller mindre nedlagt i 5 år 
       
     
    Microsoft må revurdere strategi 
        Fallende markedsandeler for IE 
        EU-domstolen / monopol 
        Økt antall mobile enheter på markedet 
       
     
   
  
  
 
  Microsoft melder seg inn i SVG WG 
  
    Januar 2010 
    Positivt sjokk på webutviklere verden over 
    Spørsmål fra media: 
     
    Svar fra Microsoft: 
     
   
  
  
 
  Microsoft IE9 vil støtte SVG 
  
    Mai 2010 
    Støtte for grunnleggende elementer i SVG 1.1 
   
  IE9 Preview SVG support:
  
    Most SVG document structure, scripting (eventing), and styling (inline and through CSS) 
    Many presentation elements and their corresponding attributes and DOM, including: 
        paths 
        shapes 
        colors 
        transforms 
       
     
   
  
  
 
  Alternativer til SVG 
  
    Flash har større brukermasse og markedsandel 
    
      Flash er mer utbredt på nett
     
    
      SVG er internetts offisielle åpne standard for grafikk og animasjon (W3C)
     
    
      Flash og Silverlight har mange flere utviklere
     
    
      Flash har god funksjonalitet for video og lyd
     
    Det finnes ingen SVG-implementasjon uten mangler 
    Vanskelig å ta i bruk for utviklere 
    Microsoft har annonsert sin interesse for SVG 
   
  
  
 
  Adobe Flash 
  
    Flash har lang fartstid 
    
      Enkelt å lage spennende grafikk og animasjoner
     
    
      Flash er en multimedia-plattform
     
    Flash benytter vektor- og raster-grafikk 
    
      Brukes til å lage interaktive og spennende nettsteder
     
    
      ActionScript, programmeringspråk for Flash
     
    Språket brukes til mer avanserte operasjoner 
    
      Oppkobling av eksterne script, sende data, osv.
     
    
      Krever ekstern plugin fra Adobe
     
   
  
  
 
  Fordeler med Flash 
  
    Markedsdominerende, de fleste bruker Flash 
    Samme utseende/rendering alltid garantert 
     
   
  
  
 
  Ulemper med Flash 
  
    Flash har problemer med sikkerhet 
    
      Trusteer bekrefter Flash som en synder når det kommer til sikkerhetshull
     
    
      Flash krever avanserte spesialverktøy
     
    Gratis og kommersielle verktøy er tilgjenglige 
    
      Gratisverktøy holder ofte ikke mål
     
    
      Plugin kreves for kjøring av Flash-applikasjoner
     
    Adobe Flash er et proprietært prosjekt 
   
  
  
 
  Microsoft Silverlight 
  
    Silverlight - Flash i Microsoft-innpakking 
    Rammeverk for Microsoft-utviklere 
    
      Kan lage grafikk, animasjoner, video og lyd
     
    
      Moonlight - kjører .NET-kode på BSD/UNIX-plattformen
     
    
      Utvikling i vanlig Microsoft-miljø (Visual Studio)
     
    Svært vanskelig å utvikle for med en tekstbehandler 
   
  
  
 
  Fordeler med Silverlight 
  
    Microsoft-rammeverk for programvareutvikling 
    Bredere fokus enn andre teknologier 
        Ikke bare tekst, grafikk, animasjon, osv. 
       
     
   
  
  
 
  Fordeler med Raphaël 
  
    Imperativt programmeringsfokus 
        Enklere å duplisere grafikk-elementer 
        Enklere å gjøre endringer 
       
     
    Tar i bruk teknologi som allerede eksisterer i nettlesere 
   
  
  
 
  Ulemper med Raphaël 
  
    Krever inkludering av JavaScript-bibliotek på nettsiden 
    Krever JavaScript-støtte i nettleser 
        Tregere en innebygd grafikkstøtte 
       
     
    Ekstra programvarelag 
   
  
  
 
  Ulemper med VML 
  
    Enda en teknologi å ta hensyn til 
    Dynamisk generering av SVG eller VML krever komplisert kode 
    Kun tilgjenglig i Internet Explorer 
    Utviklingen av VML har stoppet 
   
  
  
 
  Konklusjon 
  
    God utvikling siden 2001 
    Tilgjengelig i mange produkter 
    Microsoft/IE er ombord 
    Webutviklere må fremdeles forholde seg til implementasjonsfeil 
    VML, Flash og Silverlight kommer ikke til å forsvinne over natta 
    Raphaël er en god kompatibilitetsløsning 
    Svært positive fremtidsutsikter for SVG 
    Om 3-5 år bør IE9 ha erstattet tidligere versjoner 
   
  
  
 
  Modellapplikasjonen 
  
    Utfordrende 
    Omfattende spesifikasjon 
    Vanskeligheter 
        Koordinatsystemet 
        Transformasjoner 
       
     
    God isolering av funksjonalitet 
    Få eksterne avhengigheter 
     
    Mønstre 
        Chain-of-Responsibility 
        Model-View-Controller 
       
     
   
  
  
 
  Sektordiagram 
  
    sector chart 
  
  
    En akse 
     
    
      Utheving vha. forskyving
     
    
      Fargekoding
     
    Totalsum 
    Plassering prosentanvisning 
   
  
  
 
  Stolpediagram 
  
    bar chart 
  
  
    En akse 
        Vertikal 
        Elementer horisontalt 
       
     
    
      Utheving via filter
      
     
    
      Elementverdier vertikalt
      
     
   
  
  
 
  Sirkeldiagram 
  
    scatter chart 
  
  
  
  
 
  Brukergrensesnitt 
  
  
    Benyttet CoR (Chain of Responsibility)-mønster 
    Benyttet enkle layouts 
    Benyttet statisk kontroller 
    Henter og skriver data til API 
    Benyttet MVC (Model-View-Controller)-mønster 
   
  
  
 
  SVG-generatorbibliotek 
  
    SVGChartLibrary UML Class Diagram 
  
  
    Chart (interface) 
    AbstractChart 
    SVGRenderer (interface) 
    AbstractSVGRenderer 
    Range 
    Item 
    
      Value
     
    
      SectorChart
     
    BarChart 
    LineChart 
    ScatterChart 
   
  
  
 
  Utviklingsprosess 
  
    Markdown + Git 
     
    Perl-applikasjon for å bygge rapport og presentasjon 
        HTML 
        Konvertert til PDF 
        Bruker S5 slideshow mal 
       
     
    Revisjonskontroll 
        All kildekode 
        Alle dokumenter 
       
     
    Prosjektstyring 
        LiquidPlanner 
        God oversikt over risiko