Aplicações com Tecnologias Web

43
Aplicações com tecnologias web Palestra no Congresso de Software Livre do NE Fac. FIR/Estácio 9 de novembro de 2013 Rildo Pragana

description

Como usar o Tatu (web server) e tecnologias web (html5, css3 e javascript) para criar aplicações completas, usando o navegador como UI, e o javascript para "business logic". Os primeiros 17 slides mostram uma espécie de biogrtafia minha, portanto comece pulando estes, caso não lhe interesse. O restante dos 43 slides é a essencia do que queremos mostrar.

Transcript of Aplicações com Tecnologias Web

Page 1: Aplicações com Tecnologias Web

Aplicações com tecnologias web

Palestra noCongresso de Software Livre do NE

→ Fac. FIR/Estácio 9 de novembro de 2013

Rildo Pragana

Page 2: Aplicações com Tecnologias Web

Prehistória: anos 70

Page 3: Aplicações com Tecnologias Web

Trieste (Ita) - ICTP

Page 4: Aplicações com Tecnologias Web

Anos 80: Corisco

Page 5: Aplicações com Tecnologias Web

Microterminais

Page 6: Aplicações com Tecnologias Web

HandTerm

Page 7: Aplicações com Tecnologias Web

Adotando o Linux e software livre

● Novembro/Dezembro de 1994● Status Quo: Windows 3.1 (crashes,

erros, lentidão, API obscura,...)● Linux! Luz no fim do túnel. Tudo

documentado, multiuser/task, rápido. Um sonho para o desenvolvedor.

Page 8: Aplicações com Tecnologias Web

Device drivers: scanner Genius

● Scanner Genius Color page CS. ● Não havia driver para o Linux● Duração do projeto: 1 semana (incl.

engenharia reversa - Bochs) - 1997● Pode ser encontrado no

http://www.ibiblio.org/pub/Linux/apps/graphics/capture/

Page 9: Aplicações com Tecnologias Web

● Samsung ML-85G● ASIC proprietária da M$● Classificada no linuxprinting.org

como “paper weight” (peso de papel)● Duração do projeto: 8 dias.● 6 artigos publicados no Linux Today

(descrevendo toda a interface e ferramentas usadas para decifrar)

Winprinters

Page 10: Aplicações com Tecnologias Web

Desdobramentos do driver para winprinters

http://www.boichat.ch/nicolas/lbp660/

Page 11: Aplicações com Tecnologias Web

Pentax USA

●Impressoras (Pocket Jet 200, II e III)●Scanner (dsmobile)

Page 12: Aplicações com Tecnologias Web

Dsmobile (scanner)

Page 13: Aplicações com Tecnologias Web

dsmobile

Page 14: Aplicações com Tecnologias Web

TinyCobol● http://tiny-cobol.sourceforge.net● Compilador Cobol standard (antes

inexistente como software livre)● “fork”: Open Cobol (Keisuke Nishida),

depois reescrito para gerar C (no lugar de asm86)

Logo Design by James Richardson in the isle of Man

Page 15: Aplicações com Tecnologias Web

TinyCobol (tools)

Page 16: Aplicações com Tecnologias Web

Projeto radiola (jukebox)

Page 17: Aplicações com Tecnologias Web

Linux com transaçoes eletronicas

Page 18: Aplicações com Tecnologias Web

Starkits

● Scripts e extensões encapsulados em um único arquivo (.kit), portável (Linux/Windows/Mac)

● Executável separado para cada plataforma: tclkit, tclkit.exe

● Diretório virtual. Pode conter scripts, bibliotecas (multiplas versões, uma para cada OS), documentação. Implementado no topo dobanco de dados Metakit.

Page 19: Aplicações com Tecnologias Web

● Utilitário sdx● sdx qwrap programa.tcl

– Gera um kit a partir do script fornecido● sdx unwrap programa.kit

– Expande o kit como o diretório programa.vfs● sdx wrap programa.kit

– Reempacota o kit usando o diretório programa.vfs– Opcionalmente, podemos usar

-runtime tclkit para produzir um starpack (tudo em um só executável).

Manipulando kits

Page 20: Aplicações com Tecnologias Web

Tatu web server

Page 21: Aplicações com Tecnologias Web

Tatu web server 2

Page 22: Aplicações com Tecnologias Web

Tatu web server 3

Page 23: Aplicações com Tecnologias Web

Raspberry Pi

Page 24: Aplicações com Tecnologias Web

rssReader

Page 25: Aplicações com Tecnologias Web

Programação �social�

Page 26: Aplicações com Tecnologias Web

Tatu+Bootstrap

https://github.com/rpragana/tatuMin-FIR

Page 27: Aplicações com Tecnologias Web

Usando Geany para desenvolvimento

Page 28: Aplicações com Tecnologias Web

Métodos da APImethod outHeader {{status 200} {headers {}} {delayed 0}}

method out {s {bin 0}}

method queryNames {}

method queryData {name {multiple 0} {index -1}}

method reqCmd {}

method cliHeaders {}

--------------------------------------------tatu::addRoute {route cmd {log 1}

{protocols {http https}}}

tatu::log {msg {type "warn"}}

Usado com várias “keys” iguais na query.

(*) Conexões são objetos do Snit; o ::tatu é simplesmente um namespace

Page 29: Aplicações com Tecnologias Web

Plugins básicos 1

namespace eval myapp {}

proc myapp::service {conn parms} {tatu::log "******** myapp starting..."$conn outHeader 200 {Content-Type text/plain}$conn out "Example output of a simple service"

}

tatu::addRoute "/myapp" myapp::service

error "This is an error on purpose.\nComment to remove error msg."

Page 30: Aplicações com Tecnologias Web

Plugins básicos 2

proc bookService {conn parms} {tatu::log "*** method=[$conn reqCmd] \

conn=$conn parms=$parms"$conn outHeader 200 {Content-Type text/plain}$conn out "Plain text output from a service\n"$conn out "title= [dict get $parms title]"return

}

tatu::addRoute "/book/:title/author/:author" route1

Page 31: Aplicações com Tecnologias Web

<div ng-controller="widgetCtrl"><label for="checkbox1">

<input id="checkbox1" type="checkbox" ng-model="visible">Toggle me</label><div show="visible" my-widget="Olá, mundo!"></div>

</div>

app.controller("widgetCtrl", function($scope) { $scope.visible = true;});app.directive("myWidget", function() { return { templateUrl: "partials/widget1.html", link: function(scope, element, attributes) { scope.$watch(attributes.show, function(value) { element.css('display', value ? ' ' : 'none'); }); scope.frase = attributes.myWidget; } };});

html

javascript

Page 32: Aplicações com Tecnologias Web

2

var app = angular.module("rpApp", ['ui.bootstrap']);

<div ng-app="rpApp" … >

<input type="text" ng-model="frase"></input><ol>

<li>Partial with the widget (using a variable)</li><li>Widget contents:<strong>{{frase}}</strong></li><li>===== end of partial ======</li>

</ol>

partials/widget1.html

Page 33: Aplicações com Tecnologias Web

multipart/form-dataContent-Type: multipart/form-data; boundary=AaB03x

--AaB03x content-disposition: form-data; name="user" content-type: text/plain;charset=utf-8 Maria dos Santos Lima --AaB03x

Tatu:$conn queryValue formVar fieldVar

Exemplo:$conn queryValue user content_type

Page 34: Aplicações com Tecnologias Web

REST client (GoogleChrome)

Page 35: Aplicações com Tecnologias Web

REST client (Firefox)

Page 36: Aplicações com Tecnologias Web

REST client (standalone)

Page 37: Aplicações com Tecnologias Web

File upload

Page 38: Aplicações com Tecnologias Web

File upload (browser)HTML: <div file-upload>File Upload in AngularJS</div>

Page 39: Aplicações com Tecnologias Web

Jquery.fileTree (javascript)

$('.filetree').fileTree({

root: './',

script: '/filetree'

},function(file){alert(file);});

(*) O elemento .filetree (CSS class) poderá ser uma <div>no <html> da página:<div class="filetree"></div>

(**) A rota /filetree irá disparar o script filetree::filetree.

Page 40: Aplicações com Tecnologias Web

Exemplo de web servicenamespace eval filetree { }

proc filetree::filetree {conn params} {set dir [$conn queryData dir]tatu::log "filetree dir=$dir"set s {<ul class="jqueryFileTree">}

foreach f [glob -directory $dir *] { if {![file isdirectory $f]} continue append s {<ul><li class="directory collapsed">} append s "<a href="#" rel=\"$f/\">" append s "[file tail $f]</a></li></ul>" } foreach f [glob -directory $dir *] { if {[file isdirectory $f]} continue set ext [string range [file extension $f] 1 end] append s "<ul><li class=\"file">" append s "<a href="\"#\"" rel="\"$f">[file tail $f]</a></li> } append s \"</ul>\"

$conn outHeader 200 {Content-Type text/html}$conn out $s

}

tatu::addRoute "/filetree" filetree::filetree 0 {http}

Page 41: Aplicações com Tecnologias Web

Tatu plugin

Page 42: Aplicações com Tecnologias Web

Tatu plugin 2

Page 43: Aplicações com Tecnologias Web

Perguntas

? ??

??

http://pragana.net Adventures in Linux Programming

@rpragana