SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Lleïr Borràs & Fernando Martínez


El Ferrocarril contra




Los Árboles Muertos
¿Quiénes?
     Lleïr Borràs Metje Fernando Martínez de la Cueva

                   Web: Web:
lleirborras.blogspot.com www.sic-sl.com/fmc

               twitter: twitter:
           @lleirborras @oinak

                Github: LinkedIn:
 github.com/lleirborras www.linkedin.com/in/fernandomc

             Trabajo: Trabajo:
    www.hesperides.cat www.lciberica.es y www.sic-sl.com

                        Producto:
                        www.lciberica.es/productos/psp
«Rails es un Framework web...
  No lo decimos nosotros sino ellos
...en un mundo de papel»
Nuestra vida esta rodeada de objetos hechos de papel o
relacionados con él y es muy difícil dejarlo atrás de golpe:

 Libros

 Títulos de propiedad

 Contratos

 Periódico

 Lista de la compra...
Definamos aplicación:




  [La cultura del árbol muerto]
¿Por qué?

«You can't grep dead trees...
... but you can read them in
    WC bed»
 
 
 
  Los árboles muertos llegan donde aún no llegan las
  pantallas.

 Esto puede que mejore en el futuro a medio plazo con la
 tinta electrónica, o iniciatvas como Google Editions, el
 Crunchpad, los nuevos dispositivos Android...
Odiosas comparaciones...




Tamaño / formato predecible   Tamaño variable

Alta resolución ~300ppp       Baja resolución ~72ppp

Márgenes imprescindibles      Márgenes opinables

Predominantemente vertical    Vista ¿horizontal?
¿To PDF or not To PDF? . . .

                        . . . that's the question




                    ¿     ?
¿Que tener en cuenta?
  Rapidez/facilidad (subjetiva) de desarrollo
  Facilidad (subjetiva) de modificar, mantener
  Rendimiento en máquina (aprox.)
  Precisión de la salida (respecto a esperado/modelo)
  Soporte de Parciales
  Soporte de Imágenes
  Control de rupturas (Saltos de Página)
  Soporte/control de tipografías
  Posibilidad de validación
  Compatibilidad con versiones Rails

  Compatibilidad con navegadores
HTMLDoc Gem

Web: http://www.htmldoc.org
Gem: http://htmldoc.rubyforge.org

  ✔ HTML (plantillas existentes, mantenimiento)
  ✘ No soporta HTML > 3.2 (maquetación, validación)
  ✘ Paginación poco ortodoxa (tags especiales)
  ✘ Ejecutable aparte (rendimiento, deploy)
  ✘ Licencia doble (uso comercial*)




* IANAL: No somos abogados
RTeX versiones 1 y 2
Web: http://rtex.rubyforge.org/
      Versión 1 (Rails 1.x.x)         Versión 2 (Rails >= 2.0.1)

      ✘ Sin partials                  ✔ Con partials
      ✘ Sin soporte IDE (¿alguien?)   ✘ Sin soporte IDE (¿alguien?)
      ✘ Congelado (pero opensource)   ✔ Activo


     ✔ Maquetación ortotipográfica
     ✔ Estilo uniforme
     ✘ Lenguaje/dominio nuevo (maquetador web)
     ✘ Posicionamiento difícil de precisar (recortable)
     ✘ Problemas con las imágenes (PNG, JPEG y GIF)
     ✘ Ejecutable externo (deploy de extensiones de LaTeX...)
     ✘ LaTeX pensado para lo contrario (diseño vs contenido)
Jasper Reports
Web: http://jasperforge.org/projects/jasperreports
Rails: wiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports

  ✔Diseño por IDE (propio o plugin Eclipse/NetBeans)
  ✔Posicionamiento/maquetación (muy) preciso
  ✘ Lenguaje/dominio nuevo
  ✘ Requiere Java
  ✘ Funcionalidad limitada (cuando/como lo probamos)
  ✘ No se puede testear la vista
Prawn & PrawnTo

Web: http://prawn.majesticseacreature.com/
Rails: http://www.cracklabs.com/prawnto

    ✘ Lenguaje/dominio nuevo
    ✘ Ruby (maquetador)
    ✔ Ruby (desarrollador)
    ✔ MVC (ahem ahem sí...)
    ✘ MVC (...pero no plantilla)
    ✘ Pesado(servidores x2)
  ✔ Preciso (el MÁS) ¡hasta recortables! 
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..','lib'))
require 'prawn'

Prawn::Document.generate("bounding_boxes.pdf") do
  bounding_box [100,600], :width => 200 do
    move_down 10
    text "The rain in spain falls mainly on the plains " * 5
    move_down 20
    stroke do
      line bounds.top_left, bounds.top_right
      line bounds.bottom_left, bounds.bottom_right
    end
  end
  bounding_box [100,cursor], :width => 200, :height => 200 do
    stroke do
      circle_at [100,100], :radius => 100
      line bounds.top_left, bounds.bottom_right
      line bounds.top_right, bounds.bottom_left
    end
    bounding_box [50,150], :width => 100, :height => 100 do
      stroke_bounds
    end
  end
end
Acts as flying saucer

Java: https://xhtmlrenderer.dev.java.net/
Rails: http://github.com/dagi3d/acts_as_flying_saucer/

  ✘ Requiere Java (rendimiento, deploy)
  ✔ Requiere Java (en entornos ruby)
  ✔ Plantillas XHTML Correcto (nativas de rails)
  ✘ Maquetación (limitado por CSS / Navegadores)
  ✔ Soporte partials, imágenes...
  ✔ Plantillas XHTML+CSS (maquetadores)
/app/controllers/ejemplo_controller.rb
acts_as_fying_saucer
def metodo
  #lógica del controlador

  respond_to do |format|
    format.pdf do
      render_pdf :template => 'ejemplo/metodo',
                  :send_file => { :filename => 'metodo.pdf' }
    end
  end
end



/app/views/ejemplo/metodo.haml   
!!!XML
!!!strict
%html{html_attrs('es-es')}
  %head
     %title= @documento.datos[:titulo]
...
(Lleïr's) Render as PDF

PHP: http://html2pdf.fr
Rails: http://github.com/lleirborras/render_as_pdf

  ☹ Necesita PHP (>=4) en la máquina
  ☹ Consume mucha RAM en pdf's grandes (>250 pg.)
  ☹ Algunos tags especiales (<page_header>, <page_footer>, ...)
  ☺ Admite HTML 4.01 + CSS 2
  ☺ Cabeceras y pies de página dinámicos.
  ☺ Admite muchos formatos de imágen (jpg, png, gif, ...)
  ☺ Admite códigos de barras
  ☺ Plantillas y helpers
  ☺ MUY rápido de maquetar (HTML)
/app/controllers/ejemplo_controller.rb
def metodo
  respond_to do |format|
     format.html
     format.pdf do
       pdf_data = render_as_pdf :template => "/ejemplo/metodo.html.haml",
                                :layout => false
       send_data pdf_data, { :type => "application/pdf",
                             :filename => "nombre.pdf" }
    end
  end
end




/app/views/ejemplo/metodo.haml   
!!!XML
!!!strict
%html{html_attrs('es-es')}
  %head
     %title= @documento.datos[:titulo]
...
(Oinak's) Fly without the saucer
☑ No requiere Java/PHP/Plugins... (rendimiento, deploy)
 
☑ Plantillas XHTML Válido (nativas de rails)
    ☑ helpers, partials, reutilización...
    ☑ maquetadores web 
 
☒ Renderizado: (limitados por CSS/soporte browsers)
    ☒ en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets) 
 
☑ Un modelo no AR (lib/módulo) con todos los datos (hash)
    ☑ testeos unitarios (thin controller) 
    ☑ eficiencia (sin procesos extra)
    ☑ mantenimiento (por ejemplo: haml + sass)
/lib/impresos/ejemplo.rb
module Impresos
   class Ejemplo
      attr_accessor :datos
      def initializer(*params)... #recaba el hash :datos
      def render_options()...     #decide la plantilla

/app/controllers/ejemplo_controller.rb
def documento
  if @documento = Impresos::Ejemplo.new(params)
     render @documento.render_options
  else
     render(:nothing => true,:status => 404)
  end
end

/app/views/ejemplo/modelo/variante/documento.haml   
!!!XML
!!!strict
%html{html_attrs('es-es')}
  %head
     %title= @documento.datos[:titulo]
...
(Lleïr's version) wicked_pdf

wkhtmltopdf: http://code.google.com/p/wkhtmltopdf/
Rails: http://github.com/lleirborras/wicked_pdf

  ☹ Necesita wkhtmltopdf (webkit)
  ☺ En la web de wkhtmltopdf ya hay versiones compiladas para
    GNU/Linux, Mac Os y windows
  ☺ No require PHP, Java, ...
  ☺ Plantillas y helpers
  ☺ MUY rápido de maquetar (HTML, haml, ...)
  ☺ Admite Javascript
  ☺ MUY rápido en hacer el render
  ☺ Soporta para algunos tags de CSS3
$ script/plugin install git://github.com/lleirborras/wicked_pdf.git
$ script/generate wicked_pdf


/config/initializers/wicked_pdf.rb
WICKED_PDF = {
   :exe_path => '/usr/local/bin/wkhtmltopdf',
   :layout => 'pdf.html'
}

/app/controllers/ejemplo_controller.rb
def show
  respond_to do |format|
     format.pdf do
       render :pdf => "name",
                 :show_as_html => !params[:debug].blank?
     end
  end
end



/app/views/ejemplo/show.pdf.erb   
<h1>Hola en pdf!</h1>
/app/views/layouts/pdf.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en">
  <head>
     <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" />
    <%= stylesheet_link_tag "pdf" -%>
    <%= stylesheet_link_tag "#{RAILS_ROOT}/public/stylesheets/pdf" -%>
  </head>
  <body>
    <div id="content">
      <%= yield %>
    </div>
  </body>
</html>




 http://localhost:3000/ejemplo/X.pdf?debug=1
En el tintero...

• PrinceXML: (http://www.princexml.com/)
   o Licencia de pago
   o Márgenes, paginación complicados
• ¿Público... ?
¿Preguntas?
Créditos (mantener al final)

Licencia del contenido:
  Creative Commons blabla

Ilustraciones:
• [3] Old books: http://commons.wikimedia.org
• [5] TUX-WC: Andrés Abad http://andresabad.wordpress.com
• [6] 49 hand-drawing: Aleksandra Wolska http://iconfinder.net

Más contenido relacionado

La actualidad más candente

Joomla! en 10 minutos - JoomlaDay Sevilla 2015
Joomla! en 10 minutos  - JoomlaDay Sevilla 2015Joomla! en 10 minutos  - JoomlaDay Sevilla 2015
Joomla! en 10 minutos - JoomlaDay Sevilla 2015Carlos M. Cámara
 
Manual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con EjemplosManual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con EjemplosSteven Gomez
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!SergioIglesiasNET
 
Buenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on RailsBuenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on RailsSergio Gil
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básicocamposer
 

La actualidad más candente (7)

Joomla! en 10 minutos - JoomlaDay Sevilla 2015
Joomla! en 10 minutos  - JoomlaDay Sevilla 2015Joomla! en 10 minutos  - JoomlaDay Sevilla 2015
Joomla! en 10 minutos - JoomlaDay Sevilla 2015
 
Manual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con EjemplosManual Tutorial Javascript Con Ejemplos
Manual Tutorial Javascript Con Ejemplos
 
Curso de HTML5
Curso de HTML5Curso de HTML5
Curso de HTML5
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!
 
Buenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on RailsBuenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on Rails
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básico
 
Lenguaje JavaScript parte 1
Lenguaje JavaScript parte 1Lenguaje JavaScript parte 1
Lenguaje JavaScript parte 1
 

Destacado

Destacado (10)

Arboles
ArbolesArboles
Arboles
 
Arboles
ArbolesArboles
Arboles
 
Tema 2 diccionarios_grupo_23
Tema 2 diccionarios_grupo_23Tema 2 diccionarios_grupo_23
Tema 2 diccionarios_grupo_23
 
arboles avl con codigo en java
arboles avl con codigo en javaarboles avl con codigo en java
arboles avl con codigo en java
 
Árboles binarios en Java
Árboles binarios en JavaÁrboles binarios en Java
Árboles binarios en Java
 
conceptos de Punteros y Nodos
conceptos de Punteros y Nodosconceptos de Punteros y Nodos
conceptos de Punteros y Nodos
 
ActiveWarehouse/ETL - BI & DW for Ruby/Rails
ActiveWarehouse/ETL - BI & DW for Ruby/RailsActiveWarehouse/ETL - BI & DW for Ruby/Rails
ActiveWarehouse/ETL - BI & DW for Ruby/Rails
 
SWING
SWINGSWING
SWING
 
Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)
 
Tipologia de la multimedia
Tipologia de la multimediaTipologia de la multimedia
Tipologia de la multimedia
 

Similar a La cultura del árbol muerto

Introducción a HTML5 y CSS3 - ArtMedia 2011
Introducción a HTML5 y CSS3 - ArtMedia 2011Introducción a HTML5 y CSS3 - ArtMedia 2011
Introducción a HTML5 y CSS3 - ArtMedia 2011Hernan Beati
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Airespeterpunk
 
PHP Con symfony
PHP Con symfonyPHP Con symfony
PHP Con symfonycsalazart
 
Sesion01
Sesion01Sesion01
Sesion01UB Art
 
Mobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloMobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloSoftware Guru
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmasZuriel Diaz
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007JuancaPompilla
 
Mi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nubeMi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nubeCarlos Longarela
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
Herramientas Y Programas Utiles
Herramientas Y Programas UtilesHerramientas Y Programas Utiles
Herramientas Y Programas UtilesJairo Gatjens
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Pakman Lh
 
Rhodes: Framework Open Source para desarrollo móvil multiplataforma
Rhodes: Framework Open Source para desarrollo móvil multiplataformaRhodes: Framework Open Source para desarrollo móvil multiplataforma
Rhodes: Framework Open Source para desarrollo móvil multiplataformaHiroshi Hiromoto
 
Ruby On Rails Jun2009
Ruby On Rails Jun2009Ruby On Rails Jun2009
Ruby On Rails Jun2009Sergio Alonso
 

Similar a La cultura del árbol muerto (20)

Introducción a HTML5 y CSS3 - ArtMedia 2011
Introducción a HTML5 y CSS3 - ArtMedia 2011Introducción a HTML5 y CSS3 - ArtMedia 2011
Introducción a HTML5 y CSS3 - ArtMedia 2011
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
Html5
Html5Html5
Html5
 
PHP Con symfony
PHP Con symfonyPHP Con symfony
PHP Con symfony
 
Sesion01
Sesion01Sesion01
Sesion01
 
Html5 para móviles
Html5 para móvilesHtml5 para móviles
Html5 para móviles
 
Mobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloMobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vuelo
 
Rompiendo paradigmas
Rompiendo paradigmasRompiendo paradigmas
Rompiendo paradigmas
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
 
Mi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nubeMi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nube
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
CSS3
CSS3CSS3
CSS3
 
XML - Introducción
XML - IntroducciónXML - Introducción
XML - Introducción
 
Herramientas Y Programas Utiles
Herramientas Y Programas UtilesHerramientas Y Programas Utiles
Herramientas Y Programas Utiles
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8
 
Rhodes: Framework Open Source para desarrollo móvil multiplataforma
Rhodes: Framework Open Source para desarrollo móvil multiplataformaRhodes: Framework Open Source para desarrollo móvil multiplataforma
Rhodes: Framework Open Source para desarrollo móvil multiplataforma
 
Ruby On Rails Jun2009
Ruby On Rails Jun2009Ruby On Rails Jun2009
Ruby On Rails Jun2009
 
Django
DjangoDjango
Django
 

Último

Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalEmanuelCastro64
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Tecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaTecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaElizabethLpezSoto
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskbydaniela5
 
tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6SaraMineiropalacio
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdflauralizcano0319
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888ElianaValencia28
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024anasofiarodriguezcru
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfJoseAlejandroPerezBa
 
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxBLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxhellendiaz12
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 

Último (18)

Trabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamentalTrabajo de tecnología liceo departamental
Trabajo de tecnología liceo departamental
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Tecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestríaTecnología Educativa- presentación maestría
Tecnología Educativa- presentación maestría
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjskTrabajo de Tecnología .pdfywhwhejsjsjsjsjsk
Trabajo de Tecnología .pdfywhwhejsjsjsjsjsk
 
tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6tecno 2024.pdf sara mineiro palacio 10-6
tecno 2024.pdf sara mineiro palacio 10-6
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdftecnologiaactividad11-240323205859-a9b9b9bc.pdf
tecnologiaactividad11-240323205859-a9b9b9bc.pdf
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888TECNOLOGIA 11-4.8888888888888888888888888
TECNOLOGIA 11-4.8888888888888888888888888
 
Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024Trabajo de tecnología primer periodo 2024
Trabajo de tecnología primer periodo 2024
 
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdfTENDENCIAS DE IA Inteligencia artificial generativa.pdf
TENDENCIAS DE IA Inteligencia artificial generativa.pdf
 
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docxBLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
BLOG, EXCEL AVANZADO, MÉTODOS ESTADÍSTICOS..docx
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 

La cultura del árbol muerto

  • 1. Lleïr Borràs & Fernando Martínez El Ferrocarril contra Los Árboles Muertos
  • 2. ¿Quiénes? Lleïr Borràs Metje Fernando Martínez de la Cueva Web: Web: lleirborras.blogspot.com www.sic-sl.com/fmc twitter: twitter: @lleirborras @oinak Github: LinkedIn: github.com/lleirborras www.linkedin.com/in/fernandomc Trabajo: Trabajo: www.hesperides.cat www.lciberica.es y www.sic-sl.com Producto: www.lciberica.es/productos/psp
  • 3. «Rails es un Framework web... No lo decimos nosotros sino ellos
  • 4. ...en un mundo de papel» Nuestra vida esta rodeada de objetos hechos de papel o relacionados con él y es muy difícil dejarlo atrás de golpe:  Libros  Títulos de propiedad  Contratos  Periódico  Lista de la compra...
  • 5. Definamos aplicación: [La cultura del árbol muerto]
  • 6. ¿Por qué? «You can't grep dead trees... ... but you can read them in WC bed»       Los árboles muertos llegan donde aún no llegan las pantallas. Esto puede que mejore en el futuro a medio plazo con la tinta electrónica, o iniciatvas como Google Editions, el Crunchpad, los nuevos dispositivos Android...
  • 7. Odiosas comparaciones... Tamaño / formato predecible Tamaño variable Alta resolución ~300ppp Baja resolución ~72ppp Márgenes imprescindibles Márgenes opinables Predominantemente vertical Vista ¿horizontal?
  • 8. ¿To PDF or not To PDF? . . . . . . that's the question ¿ ?
  • 9. ¿Que tener en cuenta? Rapidez/facilidad (subjetiva) de desarrollo Facilidad (subjetiva) de modificar, mantener Rendimiento en máquina (aprox.) Precisión de la salida (respecto a esperado/modelo) Soporte de Parciales Soporte de Imágenes Control de rupturas (Saltos de Página) Soporte/control de tipografías Posibilidad de validación Compatibilidad con versiones Rails Compatibilidad con navegadores
  • 10. HTMLDoc Gem Web: http://www.htmldoc.org Gem: http://htmldoc.rubyforge.org ✔ HTML (plantillas existentes, mantenimiento) ✘ No soporta HTML > 3.2 (maquetación, validación) ✘ Paginación poco ortodoxa (tags especiales) ✘ Ejecutable aparte (rendimiento, deploy) ✘ Licencia doble (uso comercial*) * IANAL: No somos abogados
  • 11. RTeX versiones 1 y 2 Web: http://rtex.rubyforge.org/ Versión 1 (Rails 1.x.x) Versión 2 (Rails >= 2.0.1) ✘ Sin partials ✔ Con partials ✘ Sin soporte IDE (¿alguien?) ✘ Sin soporte IDE (¿alguien?) ✘ Congelado (pero opensource) ✔ Activo ✔ Maquetación ortotipográfica ✔ Estilo uniforme ✘ Lenguaje/dominio nuevo (maquetador web) ✘ Posicionamiento difícil de precisar (recortable) ✘ Problemas con las imágenes (PNG, JPEG y GIF) ✘ Ejecutable externo (deploy de extensiones de LaTeX...) ✘ LaTeX pensado para lo contrario (diseño vs contenido)
  • 12. Jasper Reports Web: http://jasperforge.org/projects/jasperreports Rails: wiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports   ✔Diseño por IDE (propio o plugin Eclipse/NetBeans)   ✔Posicionamiento/maquetación (muy) preciso ✘ Lenguaje/dominio nuevo ✘ Requiere Java ✘ Funcionalidad limitada (cuando/como lo probamos) ✘ No se puede testear la vista
  • 13.
  • 14. Prawn & PrawnTo Web: http://prawn.majesticseacreature.com/ Rails: http://www.cracklabs.com/prawnto   ✘ Lenguaje/dominio nuevo   ✘ Ruby (maquetador)   ✔ Ruby (desarrollador)   ✔ MVC (ahem ahem sí...)   ✘ MVC (...pero no plantilla)   ✘ Pesado(servidores x2)   ✔ Preciso (el MÁS) ¡hasta recortables! 
  • 15. $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..','lib')) require 'prawn' Prawn::Document.generate("bounding_boxes.pdf") do bounding_box [100,600], :width => 200 do move_down 10 text "The rain in spain falls mainly on the plains " * 5 move_down 20 stroke do line bounds.top_left, bounds.top_right line bounds.bottom_left, bounds.bottom_right end end bounding_box [100,cursor], :width => 200, :height => 200 do stroke do circle_at [100,100], :radius => 100 line bounds.top_left, bounds.bottom_right line bounds.top_right, bounds.bottom_left end bounding_box [50,150], :width => 100, :height => 100 do stroke_bounds end end end
  • 16. Acts as flying saucer Java: https://xhtmlrenderer.dev.java.net/ Rails: http://github.com/dagi3d/acts_as_flying_saucer/ ✘ Requiere Java (rendimiento, deploy) ✔ Requiere Java (en entornos ruby) ✔ Plantillas XHTML Correcto (nativas de rails) ✘ Maquetación (limitado por CSS / Navegadores) ✔ Soporte partials, imágenes... ✔ Plantillas XHTML+CSS (maquetadores)
  • 17. /app/controllers/ejemplo_controller.rb acts_as_fying_saucer def metodo #lógica del controlador respond_to do |format| format.pdf do render_pdf :template => 'ejemplo/metodo', :send_file => { :filename => 'metodo.pdf' } end end end /app/views/ejemplo/metodo.haml    !!!XML !!!strict %html{html_attrs('es-es')} %head %title= @documento.datos[:titulo] ...
  • 18. (Lleïr's) Render as PDF PHP: http://html2pdf.fr Rails: http://github.com/lleirborras/render_as_pdf ☹ Necesita PHP (>=4) en la máquina ☹ Consume mucha RAM en pdf's grandes (>250 pg.) ☹ Algunos tags especiales (<page_header>, <page_footer>, ...) ☺ Admite HTML 4.01 + CSS 2 ☺ Cabeceras y pies de página dinámicos. ☺ Admite muchos formatos de imágen (jpg, png, gif, ...) ☺ Admite códigos de barras ☺ Plantillas y helpers ☺ MUY rápido de maquetar (HTML)
  • 19. /app/controllers/ejemplo_controller.rb def metodo respond_to do |format| format.html format.pdf do pdf_data = render_as_pdf :template => "/ejemplo/metodo.html.haml", :layout => false send_data pdf_data, { :type => "application/pdf", :filename => "nombre.pdf" } end end end /app/views/ejemplo/metodo.haml    !!!XML !!!strict %html{html_attrs('es-es')} %head %title= @documento.datos[:titulo] ...
  • 20. (Oinak's) Fly without the saucer ☑ No requiere Java/PHP/Plugins... (rendimiento, deploy)   ☑ Plantillas XHTML Válido (nativas de rails)   ☑ helpers, partials, reutilización...   ☑ maquetadores web    ☒ Renderizado: (limitados por CSS/soporte browsers)   ☒ en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets)    ☑ Un modelo no AR (lib/módulo) con todos los datos (hash)   ☑ testeos unitarios (thin controller)    ☑ eficiencia (sin procesos extra)   ☑ mantenimiento (por ejemplo: haml + sass)
  • 21. /lib/impresos/ejemplo.rb module Impresos class Ejemplo attr_accessor :datos def initializer(*params)... #recaba el hash :datos def render_options()... #decide la plantilla /app/controllers/ejemplo_controller.rb def documento if @documento = Impresos::Ejemplo.new(params) render @documento.render_options else render(:nothing => true,:status => 404) end end /app/views/ejemplo/modelo/variante/documento.haml    !!!XML !!!strict %html{html_attrs('es-es')} %head %title= @documento.datos[:titulo] ...
  • 22. (Lleïr's version) wicked_pdf wkhtmltopdf: http://code.google.com/p/wkhtmltopdf/ Rails: http://github.com/lleirborras/wicked_pdf ☹ Necesita wkhtmltopdf (webkit) ☺ En la web de wkhtmltopdf ya hay versiones compiladas para GNU/Linux, Mac Os y windows ☺ No require PHP, Java, ... ☺ Plantillas y helpers ☺ MUY rápido de maquetar (HTML, haml, ...) ☺ Admite Javascript ☺ MUY rápido en hacer el render ☺ Soporta para algunos tags de CSS3
  • 23. $ script/plugin install git://github.com/lleirborras/wicked_pdf.git $ script/generate wicked_pdf /config/initializers/wicked_pdf.rb WICKED_PDF = { :exe_path => '/usr/local/bin/wkhtmltopdf', :layout => 'pdf.html' } /app/controllers/ejemplo_controller.rb def show respond_to do |format| format.pdf do render :pdf => "name", :show_as_html => !params[:debug].blank? end end end /app/views/ejemplo/show.pdf.erb    <h1>Hola en pdf!</h1>
  • 24. /app/views/layouts/pdf.html.erb <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <%= stylesheet_link_tag "pdf" -%> <%= stylesheet_link_tag "#{RAILS_ROOT}/public/stylesheets/pdf" -%> </head> <body> <div id="content"> <%= yield %> </div> </body> </html> http://localhost:3000/ejemplo/X.pdf?debug=1
  • 25. En el tintero... • PrinceXML: (http://www.princexml.com/) o Licencia de pago o Márgenes, paginación complicados • ¿Público... ?
  • 27. Créditos (mantener al final) Licencia del contenido: Creative Commons blabla Ilustraciones: • [3] Old books: http://commons.wikimedia.org • [5] TUX-WC: Andrés Abad http://andresabad.wordpress.com • [6] 49 hand-drawing: Aleksandra Wolska http://iconfinder.net