Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Palestra2009

279 views

Published on

Palestra apresentada no TcheLinux (auditório)
de Porto Alegre, Rio Grande do Sul, em 2009.

  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

Palestra2009

  1. 1. Desenvolvimento Rápido de Aplicações com Tcl e XOTcl
  2. 2. Porque usar scripts?● Interatividade: não há o ciclo “edita-compila- testa”.● Menos linhas de código (alto-nível).● Melhor representação dos dados (no Tcl, por exemplo, tudo é string).● Portabilidade. (Linux (e outros unices), Windows, Mac, mobile, embedded, ...)
  3. 3. O que podemos fazer com Tcl?● MITO: linguagens de script são muito lentas, não devem ser usadas em aplicações velozes (processamento de vídeo, por exemplo)● REALIDADE: só uma pequena fração do código precisa ter velocidade extrema; scripts nos fornecem mais controle, flexibilidade e menos linhas de código.
  4. 4. 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 do banco de dados Metakit.
  5. 5. Manipulando kits● 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).
  6. 6. Bibliotheca
  7. 7. Bibliotheca (2)● Cada livro é representado por uma imagem (capa) de tamanho reduzido.● Formatos dos arquivos (livros): pdf, djvu, chm, ps,...(outros podem ser suportados facilmente)● Comandos para incluir novos livros, reorganizar as “estantes”, criar ícones para um livro, ou até para transferir o conteúdo (ssh) a partir de um servidor.
  8. 8. Bibliotheca (3)● Informações sobre livros armazenados numa lista: <arquivo_do_livro> <ícone> <estante> ● Todos os livros localizados em um diretório único, configurável. ● Ícones de tamanho até 96x128 pixels, variável. ● Cada “estante virtual” agrupa livros de assunto similar.
  9. 9. Bibliotheca (4)
  10. 10. Bibliotheca (5)proc showDoc {fn} {global Pafter cancel setupButMotionswitch [file extension $fn] { ".Chm" - ".chm" { set P(chan) [open "|xchm "$fn"" r+] } ".Pdf" - ".pdf" - ".PDF" { set P(chan) [open "|acroread "$fn"" r+] } ".djvu" { set P(chan) [open "|djview "$fn"" r+] } default { set P(chan) [open "|gv "$fn"" r+] }}fileevent $P(chan) readable [list execHndl $P(chan)]}
  11. 11. Critcl● Permite criar novos comandos (extensões para o Tcl) em C, em scripts. package provide fork 1.0 critcl::ccode { #include <unistd.h> } critcl::cproc fork {} int { return fork(); }● Compilado com: critcl -pkg fork● Extensão produzida pode ser incluida na aplicação normalmente, com:
  12. 12. Aplicação com dual vídeo
  13. 13. Libavformat/avcodec + SDL interfaceados com Tcl● libavformat/avcodec (ffmpeg) ● Decodifica vídeo/áudio ● Redimensiona os quadros (video frames)● SDL ● Preenche os buffers de vídeo na tela, usando MMX e outras tecnologias para obter maior desempenho● Tcl ● Aplicação principal: controla todo o contexto
  14. 14. Dual vídeo extensionpackage provide embvideo 1.0critcl::cheaders -g -I. -DLINUX -I/usr/local/include/ffmpeg/ -I/usr/local/include/critcl::clibraries -L/usr/lib -L/usr/local/lib -lavformat -lavcodec -lavutil -lSDL -lSDL_image -lzcritcl::ccode { #include "embvideo.c"}::critcl::cproc vidinit { Tcl_Interp* ip int wid int dual } ok { ... return TCL_OK;}. . .. . .
  15. 15. Dual vídeo extension (2)● Usa 3 buffers (shared memory) para enviar video frames, comandos e status entre os processos de vídeo/audio, sincronizando a comunicação por meio de signals. mmfd = open("/dev/zero",O_RDWR); mmpixels = mmap(0,sfrw*sfrh*3, PROT_READ|PROT_WRITE, MAP_SHARED, mmfd, 0); close(mmfd);● Comandos ofertados ao script tcl: ● vidsetmovie <audio/video_filename> vidcmd <large | small> vidinit <window id> <flags> vidcheckend, vidwait, vidquit
  16. 16. Protocolo do libavformatURLProtocol decrypt_protocol = { "decrypt", decrypt_open, decrypt_read, NULL /*decrypt_write*/, decrypt_seek, decrypt_close,}; decrypt:arquivo_video_audio Registrando o novo protocolo em libavformat: register_protocol(&decrypt_protocol);
  17. 17. XOTcl (exotickle)● Sistema de objetos poderoso, baseado no CLOS (Common Lisp Object System)● Adiciona dois novos comandos apenas: Object e Class.● Introspecção completa em todos os aspectos dos objetos através do comando standard já presente no tcl, info.● Suporte a muitas abstrações como filtros, mixins, slots, nested classes, method
  18. 18. XOTcl (2)
  19. 19. Exemplo: configurador.xotcl● Definindo (ou adicionando) uma ou mais opções: ● config state {width 800 height 600 background “cadet blue”}● Apagando todas as opções armazenadas: ● config state -clear yes● Obtendo todas as opções existentes: ● config state● Outros comandos: config load, config save
  20. 20. configurador.xotclObject configconfig proc state {{-clear 0} {newstate ""}} { if {$newstate != ""} { foreach {v contents} $newstate { my set $v $contents } } set r {} foreach v [my info vars] { lappend r $v [my set $v] } if $clear { foreach v [my info vars] { my unset $v } } my my [self] [self] return $r}
  21. 21. configurador.xotcl (3)config proc save {filename} { set f [open $filename w] puts $f [my state] close $f}config proc load {filename} { set f [open $filename r] my state [read $f] close $f}
  22. 22. Peculiaridades do XOTcl● XOTcl tem caraterísticas diferentes do tradicional (C++/Java): ● Sistema de classes dinâmico. Tudo pode ser mudado a qualquer instante. ● É voltado aos objetos e não às classes, ou seja, cada objetos tem vida independente, podendo ter suas próprias “procs”, variáveis específicas do objeto, etc. ● É completamente reflexiva (um programa pode observar seu próprio comportamento e modificá-lo, se desejado).
  23. 23. XOTclIDEComponent browser Object Browser
  24. 24. Classes e Objetos● Uma classe generaliza operações e variáveis dos objetos (instâncias). Class Curso Curso instproc init args { my set pre-requisitos "" } Curso instproc sethorario hr { my set horario $hr } Curso historia -sethorario 10:30
  25. 25. Precedência do nextClass TerrestreClass MaritimoTerrestre instproc desc args {return "-terrestre-[next]"}Maritimo instproc desc args {return "-maritimo-[next]"}Class Anfibio -superclass {Terrestre Maritimo}Anfibio instproc desc args {return "-anfibio-[next]"}Terrestre automovelMaritimo lanchalancha proc desc args {return "-lancha-[next]"}Anfibio hovercraft -terrestre-hovercraft proc desc args {return "-hovercraft-[next]"} -lancha—maritimo- -hovercraft--anfibio--terrestre--maritimo-
  26. 26. Nested objects● historia contains {Object idade_media}● Class Point -parameter {{x 100} {y 300}} Class Rectangle -parameter {color} Rectangle r0 -color pink -contains { Rectangle r1 -color red -contains { Point x1 -x 1 -y 2 Point x2 -x 1 -y 2 } Rectangle r2 -color green -contains { Point x1 Point x2 } } ::historia::idade_media historia idade_media
  27. 27. FiltrosObject instproc exempFiltro {args} { puts "self = [self]" puts "calledproc = [self calledproc]" puts "args = $args" puts --------------------------- next}Class TesteClassTesteClass filter exempFiltroTesteClass umObjeto className instproc FilterName args { pre-part next post-part }
  28. 28. Filtros (2)● Filtros “por objeto” e “por classe” Class Painel Painel p1 Painel p2 Painel instproc observaFiltro args { puts "observaFiltro para objeto: [self]" set r [next] puts "observaFiltro (obj=[self]) retornou: $r" } Painel instfilter observaFiltro
  29. 29. MixinsClass AgentAgent instproc move {x y} { # do the movement}Class InteractiveAgent -superclass AgentClass MovementLogMovementLog instproc move {x y} { # movement logging next}Class MovementTestMovementTest instproc move {x y} { # movement testing next}InteractiveAgent i1; InteractiveAgent i2i1 mixin MovementLogi2 mixin MovementTest MovementLog
  30. 30. Slots● System slots: superclass, class, mixin, instmixin, filter, instfilter.● Attribute slots. Class Person -slots { Attribute name Attribute salary -default 0 Attribute projects -default {} -multivalued true } Acessa o slot meta-objeto Person slot name Person rildo rildo name “Rildo Pragana” rildo name
  31. 31. A função primitiva selfself – retorna o nome do objeto em execuçãoself class – retorna a classe que define a instproc correnteself proc – retorna a proc ou instproc em execuçãoself callingclass – retorna a classe que chamou este métodoself callingobject – objeto que chamou este métodoself callingproc – a proc (ou método) que chamou o método correnteself calledclass – a classe que contem essa proc (mixins, filters)self calledproc – nome do método da proc alvo (só em filtros).self isnextcall – retorna 1 se chamado por “next”self next – retorna o path do próximo “next”self filterreg – em um filtro: retorna o nome da classe/objeto onde foi registrado na forma obj filter nomeDoFiltro ou classe instfilter nomeDoFiltroself callinglevel – nível da chamadaself activelevel – nível da pilha onde a proc foi chamada
  32. 32. Links interessantes● http://www.pragana.net - Adventures in Linux Programming● http://wiki.tcl.tk - Tclers wiki (farta documentação!)● http://www.tcl.tk - Tcl developer exchange● http://media.wu-wien.ac.at - XOTcl homepage● http://www.xdobry.de/xotclIDE/ - XOTclIDE homepage● http://openacs.org - OpenACS (toolkit para aplicações web)●
  33. 33. Perguntas ?? ?

×