1. Web 2.0

    construindo aplicações dinâmicas utilizando padrões abertos

    VIII Semana da Computação - ICMC USP - São Carlos

    hideout.web.radio
  2. Web 2.0

    the internet as platform -- Tim O'Reilly

  3. Exemplos

  4. AJAX

  5. Comparação

    Ajax Overview 1

    Figura retirada do artigo Ajax: A New Approach to Web Applications de Jesse James Garrett

  6. Modelo Síncrono

    Ajax Overview 2

    Figura retirada do artigo Ajax: A New Approach to Web Applications de Jesse James Garrett

  7. Modelo Assíncrono

    Ajax Overview 3

    Figura retirada do artigo Ajax: A New Approach to Web Applications de Jesse James Garrett

  8. Web Services (exemplos)

  9. Formatos

  10. Aplicativos que usam APIs públicas

  11. Libraries

  12. Mais coisas bacanas

  13. Chega de conversa!

    Exhausted

    Exhausted Originally uploaded by waffler.

  14. Parte I : Conteúdo vs Apresentação

    winamp screenshot Winamp screenshot itunes screenshot iTunes screenshot
  15. XHTML Básico

    					 
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
      <head>
        <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />	
        <title>XHTML básico</title>
      </head>
      <body>
        <p>
          Hello World!
        </p>
      </body>
    </html>
    					
    				
  16. Listas Ordenadas

    					 
    <ol>
      <li>
        Dresden Dolls - 
        Coin-Operated Boy
      </li>
      <li>
        Suburbian Kids With Biblical Names - 
        Trumpets and Violins
      </li>
    </ol>
    					
    				
  17. Classnames

    					 
    <ol class="track-list">
      <li class="track">
        <span class="track-creator">Dresden Dolls</span> - 
        <span class="track-title">Coin-Operated Boy</span>
      </li>
      <li class="track">
        <span class="track-creator">Suburbian Kids With Biblical Names</span> - 
        <span class="track-title">Trumpets and Violins</span>
      </li>
    </ol>
    					
    				
  18. CSS

    					 
    <link rel="stylesheet" href="playlist.css" type="text/css" title="Winamp" />
    					
    				
    					 
    ol{
      border: thin solid red;
    }
    li:hover{
      background: Blue;
    }
    					
    				
  19. Arquivos da parte I

  20. Parte II : Javascript e DOM

  21. DOM Reference

  22. Javascript apply_zebra.js

    					 
    function applyZebra(list_element){
      var ol_ar = document.getElementsByTagName('ol'); //todas as listas ordenadas
      for(var i in ol_ar){
        if(ol_ar[i].className=="track-list"){ //se a lista ordenada é da classe track-list
          var li_ar = ol_ar[i].getElementsByTagName('li') //pega todos os itens desta lista
          var cont = 1;
          for(var j in li_ar){
            if(cont++%2){ //testa para ver se é impar
              li_ar[j].className = 'impar'
            }else{
              li_ar[j].className = 'par'
            }
          }
        }
      }
    }					
    				
  23. Javascript add_track.js

    					 
    function addTrack(p_tracklist_id,p_autor,p_title){
      //text nodes
      var creator_text_node = document.createTextNode(p_autor)
      var title_text_node = document.createTextNode(p_title)
      var separator_text_node = document.createTextNode(' - ')
      //span elements
      var track_creator_element = document.createElement('span')
      var track_title_element = document.createElement('span')  
      track_creator_element.appendChild(creator_text_node)
      track_title_element.appendChild(title_text_node)
      //li element
      var track_element = document.createElement('li')
      track_element.appendChild(track_creator_element)
      track_element.appendChild(separator_text_node)
      track_element.appendChild(track_title_element)
      //ol element
      var tracklist_element = document.getElementById(p_tracklist_id);
      tracklist_element.appendChild(track_element)
      //classnames 
      track_creator_element.className = "track-creator";
      track_title_element.className = "track-title";
      if(tracklist_element.getElementsByTagName('li').length%2){
        track_element.className = "impar"
      }else{
        track_element.className = "par"
      }
      //form submit dont leave the page
      return false;
    }
    					
    				
  24. Arquivos da parte II

  25. Fase Bônus: Greasemonkey fun

  26. Parte III : XMLHttpRequest

    Exercício:
    Gerar a página html a partir de um XML remoto (webjay.org ou audioscrobbler)
  27. XMLHttpRequest Básico

    					 
    req = new XMLHttpRequest();
    req.open('GET', 'http://ws.audioscrobbler.com/1.0/user/fczuardi/topartists.xml', true);
    req.onreadystatechange = function () {
      //mudou de estado: 0 = uninitialized, 1 = loading, 2 = loaded, 3 = interactive, 4 = complete
      if (req.readyState == 4) {
        if(req.status == 200){
          //carregou
         }else{
           alert("Error loading page\n");
         }
      };
      req.send(null); 
    }
    					
    				
  28. para funcionar em IE

    					 
    // Firefox, Safari, etc
    if(window.XMLHttpRequest) {
      try {
        req = new XMLHttpRequest();
      } catch(e) {
      req = false;
    }
    // IE/Windows
    } else if(window.ActiveXObject) {
      try {
         req = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
        try {
          req = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
          req = false;
        }
      }
    }
        				
    				
  29. Crossdomain problems+Mozilla security

    					 
    if(window.netscape) { 
      netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    }
        				
    				
  30. Arquivos da parte III

  31. Parte IV : Aplicação