Usando Twisted para hacer aplicaciones de escritorio no bloqueantesMartín Volpe
Uno de los principales problemas al momento de crear aplicaciones de escritorio es el manejo del flujo de ejecución. Este problema se complica considerablemente al tener que ejecutar funciones bloqueantes. Twisted, a pesar de estar diseñado para networking, tiene una serie de herramientas para el maenjo ascincrónico del flujo facilmente adaptables a los Toolkits gráficos mas populares.
Usando Twisted para hacer aplicaciones de escritorio no bloqueantesMartín Volpe
Uno de los principales problemas al momento de crear aplicaciones de escritorio es el manejo del flujo de ejecución. Este problema se complica considerablemente al tener que ejecutar funciones bloqueantes. Twisted, a pesar de estar diseñado para networking, tiene una serie de herramientas para el maenjo ascincrónico del flujo facilmente adaptables a los Toolkits gráficos mas populares.
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
Charla del 12 de Marzo de 2014 en el MadridJUG, el grupo de usuarios de Java de Madrid. En ella se presentó JavaScript desde el punto de vista de un programador Java que se adentra en ese maravilloso mundo.
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaMicael Gallego
Introducción a TypeScript desde el punto de vista de un desarrollador Java. TS en un lenguaje que transpila a JavaScript y se puede usar tanto para el desarrollo web front-end como para el backend con Node.js. Angular 2, el framework de moda, recomienda su uso.
PHP, una introducción a modo de presentación como tutorial básico llegando hasta clases y pasando por la conexión con una oferta de servicios web mediante protocolo SOAP con WSDL.
Composer es un administrador de paquetes flexible, simple y que se encarga de la administración de dependencias de nuestro proyecto. Está inspirado en npm de node.js y Bundler de Ruby.
Composer ha cambiado la comunidad PHP y está reinventado la forma de trabajar con PHP.
Gracias a Composer la comunidad PHP es más feliz y podrá dejar de reinventar la rueda una y otra vez.
PHP es un lenguaje de scripting orientado al desarrollo de aplicaciones web. En una primera parte se explica los principios del lenguaje, algunas herramientas y un esbozo de una aplicación web escrita en PHP. En una segunda parte se presenta Symfony, un framework PHP que reúne las mejores prácticas de desarrollo de aplicaciones web.
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
Slides de la charla en el MadridJUG sobre TypeScript y su parecido con Java. Se presentan los parecidos entre estos dos lenguajes y sus diferencias más notables.
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
Charla del 12 de Marzo de 2014 en el MadridJUG, el grupo de usuarios de Java de Madrid. En ella se presentó JavaScript desde el punto de vista de un programador Java que se adentra en ese maravilloso mundo.
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaMicael Gallego
Introducción a TypeScript desde el punto de vista de un desarrollador Java. TS en un lenguaje que transpila a JavaScript y se puede usar tanto para el desarrollo web front-end como para el backend con Node.js. Angular 2, el framework de moda, recomienda su uso.
PHP, una introducción a modo de presentación como tutorial básico llegando hasta clases y pasando por la conexión con una oferta de servicios web mediante protocolo SOAP con WSDL.
Composer es un administrador de paquetes flexible, simple y que se encarga de la administración de dependencias de nuestro proyecto. Está inspirado en npm de node.js y Bundler de Ruby.
Composer ha cambiado la comunidad PHP y está reinventado la forma de trabajar con PHP.
Gracias a Composer la comunidad PHP es más feliz y podrá dejar de reinventar la rueda una y otra vez.
PHP es un lenguaje de scripting orientado al desarrollo de aplicaciones web. En una primera parte se explica los principios del lenguaje, algunas herramientas y un esbozo de una aplicación web escrita en PHP. En una segunda parte se presenta Symfony, un framework PHP que reúne las mejores prácticas de desarrollo de aplicaciones web.
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
Slides de la charla en el MadridJUG sobre TypeScript y su parecido con Java. Se presentan los parecidos entre estos dos lenguajes y sus diferencias más notables.
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
En los últimos años ha habido un tremendo progreso e innovación en herramientas y aplicaciones disponibles para que el desarrollador web mejore la calidad, eficiencia y velocidad de sus aplicaciones. Es difícil estar al tanto de todas estas actualizaciones.
En esta charla introduciremos y exploraremos las herramientas que marcan una real diferencia en las siguientes áreas:
Desarrollo, testeo y debugging con Vagrant, Ansible, y Docker
Monitoreo y logging con Logstash, Kibana, Redis, y Elasticsearch
Deployment con Capistrano, Capifony y similares
Todas estas herramientas, además de consejos y trucos aprendidos a lo largo de años de experiencia harán de esta charla muy interesante para desarrolladores de diversos niveles.
Diapositivas de la introducción al lenguaje ruby en el curso de extensión universitaria "Desarrollo Web Avanzado" del programa de Extensión Universitaria de la Universidad de Oviedo (2010)
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
If you are storing records with a timestamp in your database, it is very likely a time series database can make your life easier.
However, time series databases are still the great unknown for a large part of the tech community.
In this talk, I will show you what use cases they are good for, what they give you that you cannot get from a traditional database, and when it is a good idea (and when it is not) to use them.
For the demos, we will be using QuestDB, the fastest open-source time series database.
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
Trabajar en tiempo real con datos que se mueven muy rápido no es trivial, sobre todo con volúmenes de datos elevados. Apache Flink y Apache BEAM están específicamente diseñadas para ese caso de uso. En esta charla te contaré los retos de la analítica en tiempo real, cuál es la arquitectura de Apache Flink, qué es Apace BEAM, y cómo usan estas herramientas empresas para hacer desde procesos triviales hasta gestionar billones de eventos al día con latencias de milisegundos. Por supuesto, haremos una demo :)
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.
Getting started with streaming analytics: Deep Divejavier ramirez
Now that we know how to create simple streaming analytics pipelines, it is time to learn something more interesting. In this session I will show you how to add Complex Event Processing to your Apache Flink (or Kinesis Data Analytics) application using JAVA. For those of you that prefer SQL, I will show you how to run streaming analytics using only SQL.
Getting started with streaming analytics: streaming basics (1 of 3)javier ramirez
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.
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaAMADO SALVADOR
Descubre el catálogo general de la gama de productos de refrigeración del fabricante de electrodomésticos Miele, presentado por Amado Salvador distribuidor oficial Miele en Valencia. Como distribuidor oficial de electrodomésticos Miele, Amado Salvador ofrece una amplia selección de refrigeradores, congeladores y soluciones de refrigeración de alta calidad, resistencia y diseño superior de esta marca.
La gama de productos de Miele se caracteriza por su innovación tecnológica y eficiencia energética, garantizando que cada electrodoméstico no solo cumpla con las expectativas, sino que las supere. Los refrigeradores Miele están diseñados para ofrecer un rendimiento óptimo y una conservación perfecta de los alimentos, con características avanzadas como la tecnología de enfriamiento Dynamic Cooling, sistemas de almacenamiento flexible y acabados premium.
En este catálogo, encontrarás detalles sobre los distintos modelos de refrigeradores y congeladores Miele, incluyendo sus especificaciones técnicas, características destacadas y beneficios para el usuario. Amado Salvador, como distribuidor oficial de electrodomésticos Miele, garantiza que todos los productos cumplen con los más altos estándares de calidad y durabilidad.
Explora el catálogo completo y encuentra el refrigerador Miele perfecto para tu hogar con Amado Salvador, el distribuidor oficial de electrodomésticos Miele.
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaAMADO SALVADOR
Distribuidor Oficial Ariston en Valencia: Amado Salvador distribuidor autorizado de Ariston, una marca líder en soluciones de calefacción y agua caliente sanitaria. Amado Salvador pone a tu disposición el catálogo completo de Ariston, encontrarás una amplia gama de productos diseñados para satisfacer las necesidades de hogares y empresas.
Calderas de condensación: Ofrecemos calderas de alta eficiencia energética que aprovechan al máximo el calor residual. Estas calderas Ariston son ideales para reducir el consumo de gas y minimizar las emisiones de CO2.
Bombas de calor: Las bombas de calor Ariston son una opción sostenible para la producción de agua caliente. Utilizan energía renovable del aire o el suelo para calentar el agua, lo que las convierte en una alternativa ecológica.
Termos eléctricos: Los termos eléctricos, como el modelo VELIS TECH DRY (sustito de los modelos Duo de Fleck), ofrecen diseño moderno y conectividad WIFI. Son ideales para hogares donde se necesita agua caliente de forma rápida y eficiente.
Aerotermia: Si buscas una solución aún más sostenible, considera la aerotermia. Esta tecnología extrae energía del aire exterior para calentar tu hogar y agua. Además, puede ser elegible para subvenciones locales.
Amado Salvador es el distribuidor oficial de Ariston en Valencia. Explora el catálogo y descubre cómo mejorar la comodidad y la eficiencia en tu hogar o negocio.
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialAMADO SALVADOR
Explora el catálogo completo de cajas fuertes BTV, disponible a través de Amado Salvador, distribuidor oficial de BTV. Este catálogo presenta una amplia variedad de cajas fuertes, cada una diseñada con la más alta calidad para ofrecer la máxima seguridad y satisfacer las diversas necesidades de protección de nuestros clientes.
En Amado Salvador, como distribuidor oficial de BTV, ofrecemos productos que destacan por su innovación, durabilidad y robustez. Las cajas fuertes BTV son reconocidas por su eficiencia en la protección contra robos, incendios y otros riesgos, lo que las convierte en una opción ideal tanto para uso doméstico como comercial.
Amado Salvador, distribuidor oficial BTV, asegura que cada producto cumpla con los más estrictos estándares de calidad y seguridad. Al adquirir una caja fuerte a través de Amado Salvador, distribuidor oficial BTV, los clientes pueden tener la tranquilidad de que están obteniendo una solución confiable y duradera para la protección de sus pertenencias.
Este catálogo incluye detalles técnicos, características y opciones de personalización de cada modelo de caja fuerte BTV. Desde cajas fuertes empotrables hasta modelos de alta seguridad, Amado Salvador, como distribuidor oficial de BTV, tiene la solución perfecta para cualquier necesidad de seguridad. No pierdas la oportunidad de conocer todos los beneficios y características de las cajas fuertes BTV y protege lo que más valoras con la calidad y seguridad que solo BTV y Amado Salvador, distribuidor oficial BTV, pueden ofrecerte.
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaAMADO SALVADOR
Descubra el catálogo completo de buzones BTV, una marca líder en la fabricación de buzones y cajas fuertes para los sectores de ferretería, bricolaje y seguridad. Como distribuidor oficial de BTV, Amado Salvador se enorgullece de presentar esta amplia selección de productos diseñados para satisfacer las necesidades de seguridad y funcionalidad en cualquier entorno.
Descubra una variedad de buzones residenciales, comerciales y corporativos, cada uno construido con los más altos estándares de calidad y durabilidad. Desde modelos clásicos hasta diseños modernos, los buzones BTV ofrecen una combinación perfecta de estilo y resistencia, garantizando la protección de su correspondencia en todo momento.
Amado Salvador, se compromete a ofrecer productos de primera clase respaldados por un servicio excepcional al cliente. Como distribuidor oficial de BTV, entendemos la importancia de la seguridad y la tranquilidad para nuestros clientes. Por eso, trabajamos en colaboración con BTV para brindarle acceso a los mejores productos del mercado.
Explore el catálogo de buzones ahora y encuentre la solución perfecta para sus necesidades de correo y seguridad. Confíe en Amado Salvador y BTV para proporcionarle buzones de calidad excepcional que cumplan y superen sus expectativas.
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...AMADO SALVADOR
El catálogo general de electrodomésticos Teka presenta una amplia gama de productos de alta calidad y diseño innovador. Como distribuidor oficial Teka, Amado Salvador ofrece soluciones en electrodomésticos Teka que destacan por su tecnología avanzada y durabilidad. Este catálogo incluye una selección exhaustiva de productos Teka que cumplen con los más altos estándares del mercado, consolidando a Amado Salvador como el distribuidor oficial Teka.
Explora las diversas categorías de electrodomésticos Teka en este catálogo, cada una diseñada para satisfacer las necesidades de cualquier hogar. Amado Salvador, como distribuidor oficial Teka, garantiza que cada producto de Teka se distingue por su excelente calidad y diseño moderno.
Amado Salvador, distribuidor oficial Teka en Valencia. La calidad y el diseño de los electrodomésticos Teka se reflejan en cada página del catálogo, ofreciendo opciones que van desde hornos, placas de cocina, campanas extractoras hasta frigoríficos y lavavajillas. Este catálogo es una herramienta esencial para inspirarse y encontrar electrodomésticos de alta calidad que se adaptan a cualquier proyecto de diseño.
En Amado Salvador somos distribuidor oficial Teka en Valencia y ponemos atu disposición acceso directo a los mejores productos de Teka. Explora este catálogo y encuentra la inspiración y los electrodomésticos necesarios para equipar tu hogar con la garantía y calidad que solo un distribuidor oficial Teka puede ofrecer.
1. JRuby on Rails
Ruby on Rails sobre la JVM
javier ramírez
http://aspgems.com http://spainrb.org/javier-ramirez
obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’ de Creative Commons
4. james duncan davidson
Servlet API, Tomcat, Ant, Java API for XML Processing
Rails is the most well thought-out web development
framework I’ve ever used. And that’s in a decade
of doing web applications for a living.
I’ve built my own frameworks, helped develop the
Servlet API, and have created more than a few
web servers from scratch.
Nobody has done it like this before.
8. tolerancia al dolor
I've seen things you people wouldn't believe. Attack ships on fire
off the shoulder of Orion. I watched C-beams glitter in the dark...
9. tolerancia al dolor
I've seen things you people wouldn't believe. Attack ships on fire
off the shoulder of Orion. I watched C-beams glitter in the dark...
He perdido horas en altavista.com buscando cómo
escribir Blobs en DB2 con JDBC
10. tolerancia al dolor
I've seen things you people wouldn't believe. Attack ships on fire
off the shoulder of Orion. I watched C-beams glitter in the dark...
He perdido horas en altavista.com buscando cómo
escribir Blobs en DB2 con JDBC
JDK 1.0 JAVA 2 RMI/CORBA JNI LDAP JNDI SAX
DOM STAX EJB1 (sin interfaz local) EJB2 Jlex SOAP
JSP XSLT Freemarker
11. tolerancia al dolor
I've seen things you people wouldn't believe. Attack ships on fire
off the shoulder of Orion. I watched C-beams glitter in the dark...
He perdido horas en altavista.com buscando cómo
escribir Blobs en DB2 con JDBC
JDK 1.0 JAVA 2 RMI/CORBA JNI LDAP JNDI SAX
DOM STAX EJB1 (sin interfaz local) EJB2 Jlex SOAP
JSP XSLT Freemarker
Bancos, Administración Pública, Farmaceúticas, SGAE...
13. ruby
Creado por
Yukihiro Matsumoto
aka “Matz”
Dinámico, Orientado a Objetos y Open Source
Primera versión de desarrollo en 1993
Primera versión oficial en 1995
foto con licencia creative commons por Javier Vidal Postigo
fuente: flickr
14. así que desde 1995...
¿Y cómo es que no
supe nada de ruby
hasta mucho más
tarde?
16. ¿por qué un nuevo lenguaje?
Hipótesis de Sapir-Whorf: todos los
pensamientos teóricos están basados en
el lenguaje y están condicionados por
él
fuente: wikipedia
17. ¿por qué un nuevo lenguaje?
Hipótesis de Sapir-Whorf: todos los
pensamientos teóricos están basados en
el lenguaje y están condicionados por
él
Los diferentes lenguajes de
programación, condicionan la forma en
que los programadores desarrollan sus
soluciones
fuente: the power and philosophy of ruby
http://www.rubyist.net/~matz/slides/oscon2003/
18. ¿por qué ruby?
Diseñado para ser divertido, creativo, y
reducir el estrés del programador.
Centrado en la resolución de problemas
fuente: the power and philosophy of ruby
http://www.rubyist.net/~matz/slides/oscon2003/
19. ¿por qué ruby?
Diseñado para ser divertido, creativo, y
reducir el estrés del programador.
Centrado en la resolución de problemas
Las personas son buenas Las personas no son
en buenas en
•Creatividad •hacer copias
•Imaginación •trabajos rutinarios
•Resolución de problemas •cálculos, etc…
fuente: the power and philosophy of ruby
http://www.rubyist.net/~matz/slides/oscon2003/
20. principios de diseño
principio de la mínima sorpresa
principio de la brevedad (succinctness)
principio de la interfaz humana
enviar mensajes “ocultos” (syntactic sugar)
fuente: the power and philosophy of ruby
http://www.rubyist.net/~matz/slides/oscon2003/
21. convenciones en ruby
ClassNames
method_names and variable_names
methods_asking_a_question?
slightly_dangerous_methods!
@instance_variables
$global_variables
SOME_CONSTANTS or OtherConstants
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
22. orientación “pura” a objetos
Alan Kay
Actually I made up the term "object-oriented", and I can
tell you I did not have C++ in mind
23. orientación “pura” a objetos
Alan Kay (2003)
Actually I made up the term "object-oriented", and I can
tell you I did not have C++ in mind
OOP to me means only messaging, local retention and
protection and hiding of state-process, and extreme late-
binding of all things. It can be done in Smalltalk and in
LISP. There are possibly other systems in which this is
possible, but I'm not aware of them
fuente: http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
24. todo es un objeto
las clases son objetos => Array.new
ejemplo de factoría en ruby
def create_from_factory(factory)
factory.new
end
obj = create_from_factory(Array)
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
26. todo es un objeto.sin primitivas
0.zero? # => true
true.class #=> TrueClass
1.zero? # => false
1.abs # => 1
-1.abs # => 1
1.methods # => métodos del objeto 1
2.+(3) # => 5 (igual que 2+3)
10.class # => Fixnum
(10**100).class # => Bignum
Bignum.class # => Class
(1..20).class #=> Range
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
27. dinámico
Reflection muy simple
Clases Abiertas
Objetos Singleton
Hooks integrados
Evaluación dinámica
Mensajes dinámicos
ObjectSpace
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
28. dinámico. ejemplos
def create(klass, value) class MyClass
def MyClass.method_added(name)
klass.new(value)
puts "Adding Method #{name}"
end end
create(Greeting, "Hello")
def new_method
# Yada yada yada
class Integer end
def even? end
(self % 2) == 0
end
end
3.even?
=> false
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
29. mensajes. method_missing
class VCR
def initialize
@messages = []
end
def method_missing(method, *args, &block)
@messages << [method, args, block]
end
def play_back_to(obj)
@messages.each do |method, args, block|
obj.send(method, *args, &block)
end
end
end
Proxies, Auto Loaders, Decorators, Mock Objects, Builders...
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
30. tipos
fuertemente tipado, a
diferencia de C y de igual class Duck
forma que en JAVA def talk() puts
"Quack" end
end
class DuckLikeObject
tipos asignados implícitamente def talk() puts "Kwak"
end
y comprobados dinámicamente end
en tiempo de ejecución (late flock = [
binding) Duck.new,
DuckLikeObject.new ]
flock.each do |d| d.talk
end
duck typing. “if it walks like a
duck and talks like a duck, we
can treat it as a duck”
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
31. tipos. algunas implicaciones
def factorial(n) public class Fact {
result = 1 static long factorial(long n) {
(2..n).each do |i| long result = 1;
result *= i for (long i=2; i<=n; i++)
end result *= i;
result return result;
end }
public static
puts factorial(20) void main (String args[]) {
puts factorial(21)
System.out.println(factorial(20))
;
2432902008176640000
51090942171709440000 System.out.println(factorial(21))
;
}
}
2432902008176640000
-4249290049419214848
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
32. bloques (closures)
Iteradores
[1,2,3].each do |item|
puts item
end
Gestión de recursos
file_contents = open(file_or_url_name) { |f|
f.read }
Callbacks
widget.on_button_press { puts "Press!" }
fuente: 10 Things Every Java Programmer Should Know About Ruby
http://conferences.oreillynet.com/cs/os2005/view/e_sess/6708
33. domain specific languages
Feature: Hello class User < ActiveRecord::Base
In order to have more friends has_one :address
I want to say hello belongs_to :company
Scenario: Personal greeting has_many :items
Given my name is Aslak
When I greet David validates_presence_of
:name, :email
Then he should hear Hi, David. I'm
Aslak. end
And I should remember David as a
friend
And I should get David's phone
number
fuente: http://github.com/aslakhellesoy/cucumber
34. utilidades (muy útiles!)
ri String#upcase
----------------------------------------------------------
String#upcase str.upcase => new_str
-----------------------------------------------------------------
Returns a copy of _str_ with all lowercase letters replaced with
their uppercase counterparts. The operation is locale
insensitive---only characters ``a'' to ``z'' are affected.
"hEllO".upcase #=> "HELLO"
irb
en Ruby todo el código es ejecutable y devuelve un resultado,
incluyendo las definiciones de clases, métodos, sentencias de
control...
rubygems, rake, capistrano, chef, cucumber...
36. ruby on rails
Desarrollado por David Heinemeier Hansson,
comenzando en 2003. Primera release estable en
julio de 2004. Versión 1.0 en diciembre de 2005.
La versión actual es 2.3.2 (con rails 3 en versión
unstable)
“Ruby on Rails is an open-source web framework
that's optimized for programmer happiness and
sustainable productivity. It lets you write beautiful
code by favoring convention over configuration”
37. open source
Mejorado por la comunidad. 1391 personas han
enviado contribuciones al core. 200 personas en lo
que va de año
Son contribuciones “voluntarias” (no controladas
por empresas). Se gana acceso al core por méritos
Incontables plugins, gemas y librerías en rubyforge,
github, sourceforge y code.google.com
fuente: http://contributors.rubyonrails.org/
38. extracted, not built
Desarrollado a partir de una aplicación real
(Basecamp)
Los grandes bloques de funcionalidad se añaden a
partir de plugins, gemas o librerías que tienen una
adopción grande por la comunidad (ejemplo:
REST, merb, i18n)
Si una funcionalidad no se usa demasiado, se
extrae del core y se deja disponible como plugin
(acts_as_tree, acts_as_list)
41. principios de diseño
Principio de la mínima sorpresa
Principio de Brevedad
Principio de la Interfaz Humana
DRY (Don't repeat yourself)
COC (Convention over configuration)
Agile (no deploy, generators, testing)
43. miniaplicación REST desde cero
gem install rails
rails myapp
cd myapp
#configura la conexión de tu db en config/database.yml
rake db:create:all #si la db no existe todavía
#generamos migration, rutas, modelo, vista, controller, tests y fixtures
ruby script/generate scaffold post title:string body:text published:boolean
rake db:migrate #ejecuta la migration y crea la tabla
ruby script/server #en http://localhost:3000/posts podemos ver la aplicación
rake #carga la base de datos de testing y ejecuta los tests
46. modelo
class Post < ActiveRecord::Base
end
Post.find_all_by_published true
=> [#<Post id: 1, title: "hello java and ruby world", body:
"this is just a test of what you can do", published: true,
created_at: "2009-06-10 00:03:37", updated_at: "2009-06-10
00:03:37">]
>> Post.last
=> #<Post id: 1, title: "hello java and ruby world", body:
"this is just a test of what you can do", published: true,
created_at: "2009-06-10 00:03:37", updated_at: "2009-06-10
00:03:37">
>> Post.first.valid?
=> true
52. jruby
Iniciado por Jan Arne Petersen, en 2001, open
source
Unos 50 contribuidores al proyecto
En 2006, Charles Nutter y Thomas Enebo son
contratados por SUN
Core actual: 8 desarrolladores
53. jruby
JRuby es una implementación 100% Java del
lenguaje de programación Ruby. Es Ruby para la
JVM (fuente: jruby.org)
Implementaciones Ruby: MRI, Jruby, IronRuby,
MacRuby, Ruby.NET, MagLev, Rubinius
No hay especificación (http://rubyspec.org/)
54. java como plataforma
La JVM está muy optimizada y sigue mejorando
Omnipresente, multiplataforma
Garbage Collector potente y configurable
Threads
Monitorización
Librerías
Compilación a ByteCode (AOT/JIT)
55. java como plataforma
Aplicaciones Rails desplegadas sobre cualquier
Java Application Server
Menor resistencia en sitios con aplicaciones
Java
“Credibilidad por Asociación” (Ola Bini)
56. retos
IRB POSIX
rubygems Librerías Nativas (FFI)
YAML IO (ficheros, sockets, pipes...)
Zlib Rendimiento
Rails Compilación a ByteCode
ActiveRecord-JDBC Tipos
Strings
RegExps eficientes
fuente: Beyond Impossible, How Jruby evolved the Java Platform
talk by Charles Nutter at Community One 2009
62. jakarta bsf
import org.apache.bsf.*;
public class BSF {
public static void main(String[] args) throws Exception {
// Create a script manager.
BSFManager bsfmanager=new BSFManager();
// Evaluate the ruby expression.
try {
bsfmanager.eval("ruby","Test",0,0,"puts('Hello')");
} catch (BSFException exception) {
exception.printStackTrace();
}
}
63. despliegue sobre la JVM
jgem install warbler
jruby -S warble config
jruby -S warble war
WEB-INF y .war standard listos para deploy
(perfecto en producción, poco ágil en desarrollo)
64. despliegue sobre la JVM
jgem install mongrel_rails #mongrel_rails start
jgem install glassfish #glassfish_rails
jgem install calavera-tomcat-rails #tomcat_rails
permite cambios en caliente
65. JRuby on Rails
Ruby on Rails sobre la JVM
javier ramírez
http://aspgems.com http://spainrb.org/javier-ramirez
obra publicada por javier ramirez como ‘Atribución-No Comercial-Licenciar Igual 2.5’ de Creative Commons