PHP es un lenguaje de programación libre y de código abierto muy usado para el desarrollo web y que permite generar páginas dinámicas. Se ejecuta en el servidor, se integra directamente con HTML y su sintaxis es similar a C. PHP puede acceder a bases de datos, trabajar con archivos, enviar correos electrónicos, generar imágenes y más.
Este documento proporciona una breve reseña de la historia de la Web desde 1945 hasta el año 2000. Describe los orígenes de la Web con Vannevar Bush en 1945 y el desarrollo del hipertexto por Tim Berners-Lee en el CERN en 1980. Explica cómo la Web se difundió en círculos académicos en los años 1990 y su boom comercial a partir de 1995, con la entrada de los grandes medios en Internet en 1996-1997.
El documento introduce XML y describe sus aplicaciones. Explica que XML es un lenguaje de marcado extensible que permite definir otros lenguajes y que los documentos XML tienen formato de texto. Además, describe algunos usos comunes de XML como almacenar y transmitir información estructurada y personalizar páginas web.
Este documento proporciona una introducción a XML, incluyendo sus aplicaciones, cómo funciona y cómo trabajar con él. Explica que XML es un lenguaje de marcado extensible que permite definir otros lenguajes y que los documentos XML tienen formato de texto. También describe algunas aplicaciones comunes de XML como almacenar y transmitir información estructurada.
Este documento describe XML y su uso en la plataforma .NET. XML proporciona un método uniforme para describir e intercambiar datos estructurados mediante la definición de elementos y atributos propios. El documento explica los conceptos básicos de XML como elementos, atributos, declaraciones y validación. También cubre temas como la creación de documentos XML bien formados y el uso de DTDs para definir la estructura y validar documentos XML.
Javascript es un lenguaje de programación ligero e interpretado que se usa principalmente para añadir interactividad a páginas web. Se puede incrustar directamente en HTML o en archivos externos con extensión .js. Proporciona objetos y métodos para manipular el contenido, eventos y propiedades de documentos HTML.
Este documento explica el lenguaje XML y cómo se puede usar con ActionScript 3. XML es un lenguaje para representar datos de forma estructurada mediante etiquetas. En AS3, las clases XML y XMLList permiten trabajar con datos XML, creando, accediendo y manipulando elementos XML. El documento proporciona ejemplos de cómo construir objetos XML y acceder a sus elementos y atributos.
Este documento proporciona una introducción a los códigos básicos de HTML. Explica elementos como <br> para saltos de línea, <a> para hipervínculos, <img> para imágenes, y diferentes tipos de listas como ordenadas (<ol>), no ordenadas (<ul>) y por definición (<dl>). También cubre cómo anidar listas y el uso de énfasis (<em>) y fuerte (<strong>).
Ruby es un lenguaje de programación interpretado, dinámico y orientado a objetos. Sus características incluyen tipado dinámico, herencia, métodos, bloques, iteradores, manejo automático de memoria, y acceso directo al sistema operativo. Ruby también soporta arreglos, hashes, expresiones regulares, lectura/escritura de archivos, y manejo de excepciones.
El documento proporciona información sobre códigos básicos de HTML. Explica cómo crear párrafos, hipervínculos, imágenes, listas ordenadas y no ordenadas, listas de definición y tablas. También cubre cómo enfatizar texto, agregar líneas de ruptura y anidar listas. Proporciona ejemplos de código HTML para ilustrar cada elemento.
Este documento proporciona una introducción a las vistas en Django. Explica que las vistas son funciones que devuelven una instancia HttpResponse y manejan las solicitudes HTTP. También cubre temas como el uso de plantillas, contextos y excepciones para devolver respuestas personalizadas.
El documento describe las etiquetas y elementos básicos de HTML para crear páginas web estáticas, incluyendo etiquetas para estructurar el contenido, agregar enlaces, imágenes y tablas. También introduce JavaScript, un lenguaje de programación interpretado que se ejecuta en el navegador y permite agregar interactividad y acceso dinámico a los objetos de la página web.
El documento describe las etiquetas y elementos básicos de HTML para crear páginas web estáticas, incluyendo etiquetas para estructurar el contenido, agregar enlaces, imágenes y tablas. También introduce JavaScript, un lenguaje de programación interpretado que se ejecuta en el navegador y permite agregar interactividad y acceso dinámico a los objetos de la página web.
Este documento presenta un resumen de tres oraciones del taller de Python impartido por Carlos Mauro Cárdenas Fernández. Explica que Python es un lenguaje de programación gratuito, de código abierto y multiplataforma. Además, destaca algunas características del lenguaje como su sintaxis sencilla y su amplia biblioteca estándar. Finalmente, resume los diferentes temas que se abordarán en el taller como Python básico, interfaces gráficas y el uso de librerías como NumPy.
El documento introduce los lenguajes para la estructuración de documentos, comenzando con SGML y luego describiendo XML. Explica las diferencias entre SGML y XML, y describe brevemente las especificaciones relacionadas como XSLT, XPath, XML Schema y otros estándares de la "familia" XML.
Este documento presenta una introducción a los conceptos básicos de JavaScript, incluyendo algoritmos, programas, lenguajes de programación, variables, estructuras condicionales y operadores lógicos. Se proveen ejemplos de código JavaScript para ilustrar estos conceptos y se resuelven problemas paso a paso usando diferentes estructuras.
XHTML es una versión más estricta de HTML que combina la sintaxis de HTML para mostrar datos con la de XML para describirlos. XHTML permite incluir otros lenguajes como MathML o SVG y todas sus etiquetas deben estar bien formadas y jerarquizadas. Un documento XHTML básico incluye la codificación, el tipo de documento DOCTYPE, el elemento raíz <html>, la cabecera <head> con el título, y el cuerpo <body> con el contenido.
Diapositivas del resumen y ejercicios(finalizada)guest6a4fee
El documento explica conceptos clave de programación como algoritmos, programas y lenguajes de programación. Define un algoritmo como un proceso de pasos para resolver un problema, un programa como un ordenador que ejecuta actividades según instrucciones, y un lenguaje de programación como las instrucciones que una computadora usa para realizar operaciones. Luego profundiza en conceptos de JavaScript, como variables, entrada de datos, estructuras secuenciales y condicionales.
Diapositivas del resumen y ejercicios(finalizada) (1)guestc229aba9
El documento describe conceptos fundamentales de algoritmos, programas y lenguajes de programación. Explica que un algoritmo es un proceso de pasos para resolver un problema, un programa son instrucciones para una computadora, y un lenguaje de programación son las instrucciones que entiende una computadora. Luego profundiza en JavaScript, variables, entrada de datos, estructuras secuenciales y condicionales en este lenguaje. Finalmente, introduce conceptos como operadores lógicos y la estructura switch.
Presentación de programación (conceptos y ejercicios)guest6a4fee
El documento describe conceptos fundamentales de algoritmos, programas y lenguajes de programación. Explica que un algoritmo es un proceso de pasos para resolver un problema, un programa son instrucciones para una computadora, y un lenguaje de programación son las instrucciones que entiende una computadora. Luego profundiza en JavaScript, variables, entrada de datos, estructuras secuenciales y condicionales en este lenguaje. Finalmente presenta operadores lógicos y la estructura switch.
Cómo hemos implementado semántica de "Exactly Once" en nuestra base de datos ...javier ramirez
Los sistemas distribuidos son difíciles. Los sistemas distribuidos de alto rendimiento, más. Latencias de red, mensajes sin confirmación de recibo, reinicios de servidores, fallos de hardware, bugs en el software, releases problemáticas, timeouts... hay un montón de motivos por los que es muy difícil saber si un mensaje que has enviado se ha recibido y procesado correctamente en destino. Así que para asegurar mandas el mensaje otra vez.. y otra... y cruzas los dedos para que el sistema del otro lado tenga tolerancia a los duplicados.
QuestDB es una base de datos open source diseñada para alto rendimiento. Nos queríamos asegurar de poder ofrecer garantías de "exactly once", deduplicando mensajes en tiempo de ingestión. En esta charla, te cuento cómo diseñamos e implementamos la palabra clave DEDUP en QuestDB, permitiendo deduplicar y además permitiendo Upserts en datos en tiempo real, añadiendo solo un 8% de tiempo de proceso, incluso en flujos con millones de inserciones por segundo.
Además, explicaré nuestra arquitectura de log de escrituras (WAL) paralelo y multithread. Por supuesto, todo esto te lo cuento con demos, para que veas cómo funciona en la práctica.
How We Added Replication to QuestDB - JonTheBeachjavier ramirez
Building a database that can beat industry benchmarks is hard work, and we had to use every trick in the book to keep as close to the hardware as possible. In doing so, we initially decided QuestDB would scale only vertically, on a single instance.
A few years later, data replication —for horizontally scaling reads and for high availability— became one of the most demanded features, especially for enterprise and cloud environments. So, we rolled up our sleeves and made it happen.
Today, QuestDB supports an unbounded number of geographically distributed read-replicas without slowing down reads on the primary node, which can ingest data at over 4 million rows per second.
In this talk, I will tell you about the technical decisions we made, and their trade offs. You'll learn how we had to revamp the whole ingestion layer, and how we actually made the primary faster than before when we added multi-threaded Write Ahead Logs to deal with data replication. I'll also discuss how we are leveraging object storage as a central part of the process. And of course, I'll show you a live demo of high-performance multi-region replication in action.
The Building Blocks of QuestDB, a Time Series Databasejavier ramirez
Talk Delivered at Valencia Codes Meetup 2024-06.
Traditionally, databases have treated timestamps just as another data type. However, when performing real-time analytics, timestamps should be first class citizens and we need rich time semantics to get the most out of our data. We also need to deal with ever growing datasets while keeping performant, which is as fun as it sounds.
It is no wonder time-series databases are now more popular than ever before. Join me in this session to learn about the internal architecture and building blocks of QuestDB, an open source time-series database designed for speed. We will also review a history of some of the changes we have gone over the past two years to deal with late and unordered data, non-blocking writes, read-replicas, or faster batch ingestion.
Hubo un tiempo en el que casi cualquier componente de software requería pagar una licencia. Afortunadamente, hoy en día gracias al software libre y de código abierto, se puede desarrollar prácticamente cualquier aplicación usando componentes gratuitos.
Pero, si el software es gratis, ¿Quién lo desarrolla? ¿Trabaja la comunidad de software libre de forma altruista? ¿Se puede desarrollar software libre de forma profesional? De hecho, hay quien dice que el código abierto tal y como lo conocimos ya no existe, y que lo que hay hoy en día es otra cosa.
En esta charla hablaré de cómo se puede monetizar el código libre, y de algunos posibles conflictos que puedes encontrarte en el camino.
Además, te contaré cómo hacemos desde QuestDB para desarrollar una base de datos de código abierto y mantener un equipo estable viviendo de ello. Comentaré también algunas situaciones problemáticas a las que proyectos muy destacados se han enfrentado, o que se enfrentan a día de hoy.
QuestDB: The building blocks of a fast open-source time-series databasejavier ramirez
(talk delivered at OSA CON 23)
Traditionally, databases have treated timestamps just as another data type. However, when performing real-time analytics, timestamps should be first class citizens and we need rich time semantics to get the most out of our data. We also need to deal with ever growing datasets while keeping performant, which is as fun as it sounds.
It is no wonder time-series databases are now more popular than ever before. Join me in this session to learn about the internal architecture and building blocks of QuestDB, an open source time-series database designed for speed.
We will learn how it deals with data ingestion, and which SQL extensions it implements for working with time-series efficiently.
We will also review a history of some of the changes we have gone over the past two years to deal with late and unordered data, non-blocking writes, read-replicas, or data deduplication.
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...javier ramirez
QuestDB es una base de datos open source de alto rendimiento. Mucha gente nos comentaba que les gustaría usarla como servicio, sin tener que gestionar las máquinas. Así que nos pusimos manos a la obra para desarrollar una solución que nos permitiese lanzar instancias de QuestDB con provisionado, monitorización, seguridad o actualizaciones totalmente gestionadas.
Unos cuantos clusters de Kubernetes más tarde, conseguimos lanzar nuestra oferta de QuestDB Cloud. Esta charla es la historia de cómo llegamos ahí. Hablaré de herramientas como Calico, Karpenter, CoreDNS, Telegraf, Prometheus, Loki o Grafana, pero también de retos como autenticación, facturación, multi-nube, o de a qué tienes que decir que no para poder sobrevivir en la nube.
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database ...javier ramirez
How would you build a database to support sustained ingestion of several hundreds of thousands rows per second while running near real-time queries on top?
In this session I will go over some of the technical decisions and trade-offs we applied when building QuestDB, an open source time-series database developed mainly in JAVA, and how we can achieve over four million row writes per second on a single instance without blocking or slowing down the reads. There will be code and demos, of course.
We will also review a history of some of the changes we have gone over the past two years to deal with late and unordered data, non-blocking writes, read-replicas, or faster batch ingestion.
Deduplicating and analysing time-series data with Apache Beam and QuestDBjavier ramirez
Time series data pipelines tend to prioritise speed and freshness over completeness and integrity. In such scenarios, it is very common to ingest duplicate data, which may be fine for many analytical use cases, but is very inconvenient for others.
There are many open source databases built specifically for the speed and query semantics of time series, and most of them lack automatic deduplication of events in near real-time. One such database is QuestDB, which requires a manual batch process to deduplicate ingested data.
In this talk, we will see how we can successfully use Apache Beam to deduplicate streaming time series, which can then be analysed by a time series database.
Relational databases were created a long time ago for a simpler world. Even if they are still awesome tools for generic workloads, there are some things they cannot do well.
In this session I will speak about purpose-built databases that you can use for specific business scenarios. We will see the type of queries you can run on a Graph database, a Document Database, and a Time-Series database. We will then see how a relational database could also be used for the same use cases, just in a much more complex way.
Your Timestamps Deserve Better than a Generic Databasejavier ramirez
This document discusses the challenges of working with timestamped data in databases and introduces QuestDB as a time-series database designed to address these challenges. It highlights QuestDB's high performance for ingesting and querying large volumes of timestamped data. It also demonstrates several time-series focused query patterns in QuestDB like time range queries, sampling, filling missing data, retrieving the latest value, and approximate joins between tables. Finally, it outlines some areas QuestDB is exploring to further improve performance.
Cómo se diseña una base de datos que pueda ingerir más de cuatro millones de ...javier ramirez
En esta sesión voy a contar las decisiones técnicas que tomamos al desarrollar QuestDB, una base de datos Open Source para series temporales compatible con Postgres, y cómo conseguimos escribir más de cuatro millones de filas por segundo sin bloquear o enlentecer las consultas.
Hablaré de cosas como (zero) Garbage Collection, vectorización de instrucciones usando SIMD, reescribir en lugar de reutilizar para arañar microsegundos, aprovecharse de los avances en procesadores, discos duros y sistemas operativos, como por ejemplo el soporte de io_uring, o del balance entre experiencia de usuario y rendimiento cuando se plantean nuevas funcionalidades.
Processing and analysing streaming data with Python. Pycon Italy 2022javier ramirez
Data used to be a batch thing, but more and more we get unbounded streams of data, fast or slow, that we need to process and analyse in near real time.
In this talk I’ll show you how you can use Apache Flink and QuestDB to build reliable streaming data pipelines that can grow as much as you need.
QuestDB: ingesting a million time series per second on a single instance. Big...javier ramirez
In this session I will show you the technical decisions we made when building QuestDB, the open source, Postgres compatible, time-series database, and how we can achieve a million row writes per second without blocking or slowing down the reads.
Servicios e infraestructura de AWS y la próxima región en Aragónjavier ramirez
AWS está montando una región de infraestructura en Aragón. Vale, pero ¿Qué significa eso? ¿Es tan diferente de un centro de datos convencional o de otros proveedores de nube? (Spoiler: Sí). En esta sesión te cuento por qué. Hay video en https://catedrasamcadt.unizar.es/noticias/el-momento-tecnologico-actual-contado-por-trabajadores-de-amazon-web-services/
¿Qué es eso del desarrollo sin servidores? ¿Qué lenguajes puedo utilizar? ¿Cómo hago cosas como autenticación, o guardar en base de datos, o enviar notificaciones? ¿Esto escala? A todas estas preguntas, y a alguna más, intentaré dar respuesta en esta sesión, donde haré una pequeña demo de montar una app muy sencilla y desplegarla en la nube sin preocuparnos de gestionar infraestructura. Charla realizada por primera vez para AlcarriaConf 2021
AWS launched publicly on March 2006 with just one service, starting the age of the public cloud. You might think after 15 years everything in cloud has already been invented, but that's simply not the case.
In this session I want to show you how AWS is reinventing the cloud in areas like computing, machine learning, databases and analytics, or cloud infrastructure.
Analitica de datos en tiempo real con Apache Flink y Apache BEAMjavier ramirez
This document summarizes a presentation about real-time data analytics with Apache Flink and Apache BEAM. It discusses possible real-time and batch processing systems using AWS services, challenges of streaming systems including state management, and demos of analyzing user clickstreams and taxi trips with Apache Flink, Kafka, and Elasticsearch. It also covers advantages of Apache BEAM including a unified batch and streaming API that can run on different frameworks like Flink, benefits of native support for Java, Python, and Go, and how it allows mixing languages in pipelines.
In this webinar we explain which are some of the problems of streaming analytics, and why they are different to batch/big data analytics. Then we go into introducing some basic streaming concepts, like event queues, event processors, event vs processing time, and delivery guarantees. We end this first part of the series presenting a few of the most common open source components for streaming (Kafka, Spark, Flink, Cassandra, or ElasticSearch) and we mention the different options you have to run them on AWS.
Getting started with streaming analytics: Setting up a pipelinejavier ramirez
In this session I will show you how to create a simple streaming analytics pipeline, first using open source tools and developing locally, then moving to a VM, then moving to fully managed AWS services. The session will serve as an introduction to some details of Apache Kafka, Apache Flink, ElasticSearch, Amazon Managed Streaming for Kafka, Kinesis Data Analytics, and Amazon ElasticSearch. It will be an almost slideless presentation, as I will spent most of the time at the command line and the IDE.
Edición número 18 de la revista Bifurcaciones. El número gira alrededor del eHealth y cómo la tecnología transforma la atención sanitaria. La colaboración de Juan Jesús Velasco pone foco en startups de eHealth españolas.
La implementación de nuevas tecnologías se ha desarrollado en paralelo con los cambios en los métodos de enseñanza e incluso con la forma de concebir el aprendizaje,, donde cada vez más es el propio alumno quien toma el control del proceso, los materiales y recursos adaptándose a sus requerimientos y posibilidades.
"Los 10 Beneficios Clave de Contratar un Asistente Virtual" pdftiendadigitalboutique
"¡Descubre el fascinante mundo de los Asistentes Virtuales y desbloquea tu potencial profesional!
Este documento es tu guía definitiva para adentrarte en el emocionante universo de los Asistentes Virtuales (AV), una profesión en auge que está revolucionando la forma de trabajar en la era digital. Ya seas un joven emprendedor buscando tu camino o un profesional experimentado listo para un cambio, este recurso es tu puerta de entrada a un futuro lleno de oportunidades.
¿Qué encontrarás en su interior? Una mina de oro de información:
• Descubre qué es realmente un Asistente Virtual y por qué está en tan alta demanda.
• Explora las habilidades esenciales y las herramientas tecnológicas que necesitas para triunfar.
• Aprende a superar los desafíos comunes con estrategias probadas por expertos.
• Sumérgete en las tendencias futuras que darán forma a esta profesión, desde la Inteligencia Artificial hasta la Realidad Virtual.
• Obtén consejos prácticos para construir tu carrera, encontrar clientes y destacar en un mercado competitivo.
Este documento no es solo una guía, es tu compañero en el viaje hacia la libertad laboral y el éxito profesional. Con un lenguaje accesible y ejemplos concretos, te sentirás inspirado y equipado para dar tus primeros pasos o llevar tu carrera de AV al siguiente nivel.
¿Lo mejor? Está repleto de enlaces útiles y recursos adicionales, incluyendo una invitación especial a Entireweb, una plataforma diseñada para potenciar tu éxito como Asistente Virtual.
Ya seas un estudiante curioso, un profesional buscando un cambio de carrera, o un emprendedor en busca de flexibilidad, este documento tiene algo valioso para ti. Es tu pasaporte a un mundo de posibilidades laborales, donde la tecnología y la creatividad se encuentran.
No esperes más para descubrir cómo puedes formar parte de esta revolución laboral. Descarga este documento ahora y da el primer paso hacia un futuro profesional emocionante y lleno de oportunidades. ¡Tu aventura como Asistente Virtual comienza aquí!"
IPLOOK Solución de core móvil convergente 4G&5G de punta a punta.pdfIPLOOK Networks
IPLOOK Solución de core móvil convergente 4G&5G de punta a punta. Perfil de la empresa. ¿Por qué elegir a IPLOOK? Cooperación industrial. Clientes al rededor del mundo
FOROS, BLOGS Y CHATS HERRAMIENTAS PARA LA COMUNICACIÓN VIRTUAL.pdfJosGregorioFernndezA
En esta presentación se analizará el uso de los blogs, los foros y el
Chats como elementos educativos fundamentales para fomentar dicha
interacción y colaborar, de esa manera, con la adquisición de
contenidos.
PROYECTO INTEGRADOR: LAS TIC EN LA SOCIEDAD241578066
Nombre de la actividad: Proyecto integrador. Las TIC en la sociedad
Nombre del estudiante: Alejandra Santana Martínez.
En esta presentación se abordará lo siguiente:
Descripción de como las TICs son usadas en la comunidad en que vivo y como he visto que ayudan a los que me rodean, y su impacto en un pueblo, sus habitantes y en especial para los trabajadores como artesanos.
LIBRO DE AUTOMATIZACION -DAR ORDENES A UN SISTEMA CON MINIMA INTERVENCION HUMANA-, MEDIANTE LOGICA DE CONTACTAROES- LOGICA CABLEADA Y MEDIENTA LOGICA DE AUTOMATAS PROGRAMABLES -PLCS-
Automatismos industriales Juan Martin y María Garcia.pdf
Xml On Rails
1. Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’ de Creative Commons [email_address]
6. <?xml version="1.0" encoding="UTF-8"?> <topic> <parent-id></parent-id> <title>The First Topic</title> <author-name>David</author-name> <id type="integer">1</id> <approved type="boolean">false</approved> <replies-count type="integer">0</replies-count> <bonus-time type="datetime">2000-01-01T08:28:00+12:00</bonus-time> <written-on type="datetime">2003-07-16T09:28:00+1200</written-on> <content>Have a nice day</content> <author-email-address>david@loudthinking.com</author-email-address> <last-read type="date">2004-04-15</last-read> </topic> xml básico instruct root attribute text element
7. xml desde cualquier modelo, con includes de primer nivel xml desde cualquier hash, incluso anidadas xml desde arrays si todos sus elementos responden a to_xml método to_xml..
8. no soporta atributos sustitución de _ por - :root, :except, :only, :skip_instruct, :include, :indent ..método to_xml.
9. permite generar cualquier xml de forma sencilla, con elementos, atributos, namespaces, contenido mixto y cualquier anidamiento permite lanzar eventos al estilo SAX builder..
10. xm.html do # <html> xm.head do # <head> xm.title("History") # <title>History</title> end # </head> xm.body do # <body> xm.comment! "HI" # <!-- HI --> xm.h1("Header") # <h1>Header</h1> xm.p("paragraph") # <p>paragraph</p> end # </body> end # </html> ..builder..
14. contenido mixto <p class="weblink">visita la web<a href= "http://www.conferenciarails.org"> conferencia rails</a></p> xm.p('visita la web ',:class=>'weblink') do xm.a 'conferenciarails', :href=>'http://www.conferenciarails.org' end xm.p(:class=>'weblink') do xm.text! 'visita la web' xm.a 'conferencia rails', :href=>'http://www.conferenciarails.org' end ..builder..
15. en vistas rxml, accesible mediante el objeto xml para usar partials en el caller render partial=>'partial_name', :locals=>{parent_xml=>xml} en el partial xml = parent_xml unless !parent_xml ..builder.
16. mapeo de xml a arrays/hashes ruby de forma sencilla depende de rexml. rexml viene con ruby y xmlsimple con rails es una adaptación de la librería perl XML::Simple xmlsimple..
23. XmlDeclaration (true|string) KeyToSymbol (true| false ) NoEscape (true| false ) NormaliseSpace ( 0 |1|2) 0: sin normalizar 1: normaliza sólo hash keys 2: normaliza todo ..xmlsimple..
24. Si queremos usar varias veces los mismos parámetros de inicialización, podemos crear una instancia con las opciones deseadas my_xml = XmlSimple.new (ForceArray=>true, KeepRoot=>true) my_xml.xml_in %q(<root><H1>test</H1></root>) ..xmlsimple..
25. Si recibimos un request con content-type = “application/xml” se usa xmlsimple dejando una hash en params[:root_name] Para otros content-types ActionController::Base.param_parsers [Mime::Type.lookup( 'application/xml+soap' )] = :xml_simple ..xmlsimple.
26. parser xml completo.incluído en ruby soporte de xpath modelos soportados tree / dom stream / sax (push) stream / sax2 (push) stream / stax (pull) rexml..
27. modelo DOM, con estilo ruby java: for (Enumeration e=parent.getChildren(); e.hasMoreElements(); ) { Element child = (Element)e.nextElement(); // Do something with child } rexml: parent.each_child { |child| # Do something with child } ..rexml..
29. element element.name devuelve el tag element.next_element element.previous_element element.next_sibling element.previous_sibling element.root_node ..rexml..
30. elements accesible por index, desde 1 opcionalmente por index,nombre accesible por nombre. devuelve el primero con ese tag each_element_with_attribute each_element_with_text elements.to_a ..rexml..
37. streaming parsers lanzan eventos mientras se lee el xml más rápidos que DOM y con menos consumo de memoria. útiles en documentos grandes requieren 'máquina de estados' ..rexml..
39. sax2 parser es como el streaming parser, pero con la posibilidad de filtrar los eventos que se lanzan permite escuchar eventos vía listeners o mediante procs ..rexml..
40. proceso de eventos via procs require 'rexml/sax2parser' parser = REXML::SAX2Parser.new( File.new( 'documentation.xml' ) ) parser.listen( :characters ) {|text| puts text } parser.parse parser.listen( :characters, %w{ changelog todo } ) {|text| puts text } parser.listen(%w{ item } ) {|uri,localname,qname,attributes| puts qname} ..rexml..
41. proceso de eventos via listeners listener = MySAX2Listener.new parser.listen( listener ) item_listener = MySAX2Listener.new parser.listen (%w{item}, item_listener) parser.parse podemos procesar eventos mediante procs y listeners de forma combinada. Los listeners se procesan más rápidamente, pero necesitamos crear un objeto con los métodos apropiados ..rexml..
42. pull parser ~ stax en lugar de escuchar eventos, se piden items y luego se comprueba su tipo requiere mantener máquina de estados, pero el código es más legible ..rexml..
43. el pull parser en rexml está todavía en estado experimental parser = PullParser.new( "<a>text<b att='val'/>txet</a>" ) while parser.has_next? res = parser.next puts res[1]['att'] if res.start_tag? and res[0] == 'b' raise res[1] if res.error? end ..rexml.
44. los servicios web son demasiado complejos para muchos casos cuando se realizan consultas, se envía menos información que la que se recibe. podemos exponer la misma api al usuario final y a la máquina REST: representational state transfer..
45. modelo rails = rest resource un recurso se identifica con una uri www.example.com/item/200776 permite cachear las peticiones ya servidas ..rest..
46. rest propone separar las operaciones con resources en tres partes verbo nombre content-type a diferencia de XML-RPC, el conjunto de operaciones (verbos) es limitado y hay en su lugar muchos nombres (recursos) diferentes ..rest..
47. rest efectúa las operaciones CRUD mediante los verbos HTTP PUT/ GET/ POST/ DELETE el content-type puede ser cualquiera, incluso diferente para la entrada y la salida (ej: url=>xml) ..rest..
48. if request.post? if params[:id] # update else # no ID # create elsif request.get? # mostrar el modelo en xml elsif request.delete? # delete end ..rest.. para distinguir la operación a realizar
49. def show_item @item = Item.find(params[:id]) respond_to do |accepts| accepts.html accepts.xml {render :xml=>@item.to_xml} end end ..rest.. para poder servir al cliente diferentes content-types según su cabecera Accept:
50. delegando en rails para la recepción de parámetros via querystring o xml de forma transparente (usando xmlsimple por debajo) y utilizando el mecanismo respond_to, podemos servir aplicaciones rest en diferentes formatos con el mínimo esfuerzo ..rest.
51. las librerías proporcionadas en la distribución estándar de ruby on rails permiten la interpretación y la generación de xml de una forma rápida, sencilla y limpia las facilidades de prueba directa en la consola, agilizan el desarrollo como resultado, usar rails mejora la productividad cuando tratamos xml conclusión
52. Rails y XML como herramienta de Integración obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’ de Creative Commons [email_address]