;; -*- scheme -*- (use web-scheme slides (srfi 13)) (ws:use-entities-translation 'iso-8859-1) (define s+ string-append) (presentation (cover (string-append (ws:vspace) (center "Programação para a Web com Scheme")) (ws:vspace 3) (p "Mario Domenech Goulart (" (code "mario@ucpel.tche.br") ")" (br) "ESIN -- UCPel")) (slide "Histórico da linguagem" (ws:itemize `(,(s+ (i "Lambda papers") " -- 1975") "Autores: Gerald Jay Sussman e Guy Lewis Steele Jr" ))) (slide "Aplicações com Scheme" (ws:itemize `("Sawfish -- gerenciador de janelas para X11" "Anarchy -- gerenciador de janelas para X11" "SCWM -- gerenciador de janelas para X11" "Orion -- gerenciador de janelas para X11" "Gimp -- editor gráfico" "VRR -- editor vetorial" "TeXmacs -- editor de textos (LaTeX)" "Snd -- editor de áudio" "Beast -- composição musical" ,(s+ "Festival -- sintetizador de voz (" (i "text to speech system") ")") "GNU Radius -- servidor para autenticação e gerenciamento de contas" "Dr. Scheme -- IDE para programação" ))) (slide "Características da linguagem" (ws:itemize `(,(s+ "Derivada de LISP (" (i "LISt Processor") ")") "Multiparadigma" "Sintaxe simples (baseada em parênteses)" "Notação prefixada" "Dinamica e fortemente tipada" "Gerência de memória automática" ,(s+ "Desenvolvimento interativo de programas -- REPL (" (i "Read, Eval, Print Loop") ")") "\"Programável\"" ))) (slide "" (ws:vspace) (center (i "Linguagens de programação devem ser projetadas não empilhando funcionalidade sobre funcionalidade, mas removendo fraquezas e restrições que fazem funcionalidades adicionais parecerem necessárias.")) (p 'align "right" "-- R5RS")) (slide "Especificação e implementações" (h3 "Especificação") (ws:itemize `(,(s+ "RnRS, onde " (i "n") " atualmente = 5") ,(i "Revised5 Report on the Algorithmic Language Scheme"))) (h3 "Implementações") (ws:itemize `("Guile" "PLT" "Chicken" "Gambit" "Bigloo" "..."))) (slide "SRFIs" (h3 (i "Scheme Requests For Implementation")) (p "Documentos que descrevem APIs e semântica para aspectos não cobertos pela especificação (RnRS), visando prover recursos para implementação de extensões portáveis entre diferentes implementações de Scheme.") (h4 "Exemplos:") (center (ws:make-table `(("SRFI 1" "Listas") ("SRFI 12" "Tratamento de exceções") ("SRFI 13" "Strings")) table-attribs: '(border 1 cellpadding "15px") line-format: (lambda (lineno) big)) )) (slide "Chicken" (ws:make-table (list (list (img 'src "chicken.png") (ws:itemize `("Compilador e interpretador de Scheme" "Produz código C a partir de Scheme" "Multiplataforma" "Várias extensões (bibliotecas)" "Foco: aplicações práticas da linguagem") list-attribs: '(style "font-size: 16pt")))))) (slide "Ferramentas do sistema Chicken" (ws:itemize `(,(s+ "Compilador: " (code "csc")) ,(s+ "Interpretador: " (code "csi")) ,(s+ "Gerenciador de extensões: " (code "chicken-setup")) ))) (slide "Sintaxe" (h3 "Expressões simbólicas") (h4 "Átomos") (ws:itemize `("Números" ,(i "Strings") "Booleanos" "Caracteres" "...")) (h4 "Pares") (ws:itemize `("(1 . 2)"))) (slide "Convenções de nomes" (p" Scheme é bastante liberal quanto ao uso de caracteres em nomes de variáveis e funções.") (ws:itemize `(,(s+ "o caractere " (code "-") " é usado como separador de palavras. O que em C seria " (code "minha_funcao") ", ou " (code "meuMetodo") " em Java, é " (code "minha-funcao") " em Scheme") ,(s+ "funções cujo nome terminam por " (code "?") " (e.g., " (code "even?") ") caracterizam " (i "funções predicado") " -- funções cujo valor de retorno é " (code "#t") " (verdadeiro) ou " (code "#f") " (falso)") ,(s+ "o caractere " (code "!") " ao final de nome de funções indica que a função produz " (i "efeitos colaterais") ", ou seja, altera o valor de variáveis.") ,(s+ "os caracteres " (code "->") " indicam que a função realiza algum tipo de conversão de tipo (e.g., " (code "number->string") ")") ))) (slide "Programação para a a Web" (ws:itemize `(,(s+ "envolve vários tipos de tecnologias e " (b "linguagens de programação e formatação")) )) (h3 "Exemplos") (ws:itemize `("HTML" "XML" "Javascript" "PHP" "Python" "Java")) ) (slide "Scheme como linguagem de programação para a Web" (h3 "Scheme representa código e dados") (ws:make-table (list (list (pre " <html> <body> <h1>Título</h1> <p align=\"center\">Parágrafo</p> </body> </html>") (pre " (html (body (h1 \"Título\") (p 'align \"center\" \"Parágrafo\"))) ")) (list (pre " <ul> <li>maçã</li> <li>pera</li> <li>uva</li> <li>laranja</li> </ul> ") (pre " (ul (string-concatenate (map li '(\"maçã\" \"pera\" \"uva\" \"laranja\")))) "))) table-attribs: '(border 1 width "100%" align "center") cell-attribs: '(style "font-size: 10pt;") )) (slide "Servidor web" (h3 "Spiffy") (ws:itemize `("extensão do sistema Chicken" "utiliza a extensão http-server" "feito em Scheme" "configuração e extensão em Scheme" "compatível com CGI" "possibilita o uso de código Scheme puro ou embutido em HTML para geração de páginas dinâmicas" ))) (slide "web-scheme" (ws:itemize `("Extensão para o sistema Chicken" "Servidores web: Spiffy e Apache" "Geração de código HTML a partir de código Scheme" ))) (slide "Exemplos com web-scheme" (ws:itemize `("Tags HTML como funções" ,(code "ws:itemize") ,(code "ws:enumerate") ,(code "ws:make-table") ,(s+ (code "ws:with-get-vars") " e " (code "ws:with-post-vars")) ; ,(code "ws:use-entities-translation") ))) (slide "url-dispatcher" (ws:itemize `("Avaliação de expressões Scheme através da URL" "Caminhos e valores de variáveis GET e POST como argumentos de funcões Scheme" "Possibilidade de definição de espaços de nomes independentes" ,(s+ "Funções para indicar funções tratadoras de requisições (e.g., " (code "make-form") ", " (code "make-link")) ))) (slide "Links" (ws:make-table `(("Chicken" "http://www.call-with-current-continuation.org") ("Chicken Wiki" "http://galinha.ucpel.tche.br") ("web-scheme" "http://www.call-with-current-continuation.org/eggs/web-scheme.html") ("Spiffy" "http://www.call-with-current-continuation.org/eggs/spiffy.html") ) table-attribs: '(cellpadding 10) line-format: (lambda (n) (compose small b))) (h3 "Listas de discussão") (ws:make-table `(("Chicken users (inglês)" "http://lists.nongnu.org/mailman/listinfo/chicken-users") ("Chicken hackers (inglês)" "http://lists.nongnu.org/mailman/listinfo/chicken-hackers") ("Schemers (português)" "http://listas.g3pd.ucpel.tche.br/mailman/listinfo/schemers") ("Lisp-br (português)" "http://lists.lisp-br.org/cgi-bin/mailman/listinfo/users") ) table-attribs: '(cellpadding 10) line-format: (lambda (n) (compose small b))) ) ) ; end presentation