El documento describe diferentes características de Transact SQL como identificadores de objetos de base de datos, tipos de datos definidos por el usuario, variables locales y globales, variables de tipo tabla, procedimientos almacenados, restricciones de integridad, sentencias de control de flujo como IF y WHILE, cursores, y triggers.
Este documento describe diferentes comandos y estructuras de programación para los lenguajes Raptor, C# y Java. Explica sentencias de entrada y salida, llamadas a procedimientos, asignaciones de variables, estructuras de control de selección y ciclos, así como funciones para cadenas, archivos, comparaciones y conversión de tipos de datos.
El documento presenta ejemplos de programación concurrente en Java utilizando hilos, interfaces, herencia, sobrecarga de métodos y matrices. Incluye ejemplos de creación e implementación de hilos, interfaces, clases heredadas, métodos sobrecargados y operaciones con matrices como mostrar y recorrer arrays multidimensionales. El objetivo es mostrar diferentes conceptos básicos de programación concurrente en Java a través de pequeños ejemplos prácticos.
Este documento describe el uso de la sentencia return en Java. La sentencia return se usa para salir de un método y opcionalmente devolver un valor. Un método puede devolver un valor o ser de tipo void si no devuelve nada. Los métodos se declaran indicando su tipo de dato de retorno y parámetros. La sentencia return debe coincidir con el tipo de retorno declarado.
Las estructuras de control permiten repetir instrucciones mientras se cumpla una condición y tomar decisiones. Estas incluyen estructuras selectivas como if/else y switch que ejecutan acciones diferentes según una condición, y estructuras repetitivas como while, do-while y for que repiten acciones mientras se cumpla una condición. Los ejemplos muestran cómo implementar estas estructuras en Java para resolver problemas como determinar si una persona es mayor de edad o realizar operaciones matemáticas.
El documento presenta 4 ejercicios de programación concurrente en Java que involucran la entrada de datos desde el teclado, el uso de funciones por valor y referencia, y el manejo de excepciones. Los ejercicios capturan datos de entrada, realizan operaciones matemáticas como sumas y restas, y demuestran la diferencia entre pasar parámetros por valor y referencia. El último ejercicio muestra el uso de bloques try-catch para manejar excepciones al convertir una cadena a entero.
Este documento presenta los temas a cubrir en la Clase 1 de Programación Java: repaso de Java, estándares de codificación Java y buenas prácticas. Los estándares de codificación incluyen normas sobre la estructura de archivos, nomenclatura, indentación y declaración de variables. Las buenas prácticas se enfocan en usar nombres descriptivos, evitar NullPointerExceptions, utilizar colecciones genéricas y constantes en lugar de strings mágicos.
El documento resume los conceptos básicos del lenguaje de programación Java, incluyendo tipos de datos, operadores, estructuras de control de flujo, funciones y procedimientos, y arreglos. Describe los tipos de datos primitivos en Java, las clases de operadores aritméticos, relacionales y lógicos, y el orden de precedencia de los operadores. También explica las estructuras de control secuenciales, condicionales y repetitivas, así como la sintaxis básica para funciones y procedimientos.
El documento describe diferentes características de Transact SQL como identificadores de objetos de base de datos, tipos de datos definidos por el usuario, variables locales y globales, variables de tipo tabla, procedimientos almacenados, restricciones de integridad, sentencias de control de flujo como IF y WHILE, cursores, y triggers.
Este documento describe diferentes comandos y estructuras de programación para los lenguajes Raptor, C# y Java. Explica sentencias de entrada y salida, llamadas a procedimientos, asignaciones de variables, estructuras de control de selección y ciclos, así como funciones para cadenas, archivos, comparaciones y conversión de tipos de datos.
El documento presenta ejemplos de programación concurrente en Java utilizando hilos, interfaces, herencia, sobrecarga de métodos y matrices. Incluye ejemplos de creación e implementación de hilos, interfaces, clases heredadas, métodos sobrecargados y operaciones con matrices como mostrar y recorrer arrays multidimensionales. El objetivo es mostrar diferentes conceptos básicos de programación concurrente en Java a través de pequeños ejemplos prácticos.
Este documento describe el uso de la sentencia return en Java. La sentencia return se usa para salir de un método y opcionalmente devolver un valor. Un método puede devolver un valor o ser de tipo void si no devuelve nada. Los métodos se declaran indicando su tipo de dato de retorno y parámetros. La sentencia return debe coincidir con el tipo de retorno declarado.
Las estructuras de control permiten repetir instrucciones mientras se cumpla una condición y tomar decisiones. Estas incluyen estructuras selectivas como if/else y switch que ejecutan acciones diferentes según una condición, y estructuras repetitivas como while, do-while y for que repiten acciones mientras se cumpla una condición. Los ejemplos muestran cómo implementar estas estructuras en Java para resolver problemas como determinar si una persona es mayor de edad o realizar operaciones matemáticas.
El documento presenta 4 ejercicios de programación concurrente en Java que involucran la entrada de datos desde el teclado, el uso de funciones por valor y referencia, y el manejo de excepciones. Los ejercicios capturan datos de entrada, realizan operaciones matemáticas como sumas y restas, y demuestran la diferencia entre pasar parámetros por valor y referencia. El último ejercicio muestra el uso de bloques try-catch para manejar excepciones al convertir una cadena a entero.
Este documento presenta los temas a cubrir en la Clase 1 de Programación Java: repaso de Java, estándares de codificación Java y buenas prácticas. Los estándares de codificación incluyen normas sobre la estructura de archivos, nomenclatura, indentación y declaración de variables. Las buenas prácticas se enfocan en usar nombres descriptivos, evitar NullPointerExceptions, utilizar colecciones genéricas y constantes en lugar de strings mágicos.
El documento resume los conceptos básicos del lenguaje de programación Java, incluyendo tipos de datos, operadores, estructuras de control de flujo, funciones y procedimientos, y arreglos. Describe los tipos de datos primitivos en Java, las clases de operadores aritméticos, relacionales y lógicos, y el orden de precedencia de los operadores. También explica las estructuras de control secuenciales, condicionales y repetitivas, así como la sintaxis básica para funciones y procedimientos.
El documento contiene 12 ejercicios de programación en Java que resuelven problemas matemáticos y lógicos comunes. Los ejercicios incluyen calcular promedios, descuentos, salarios, áreas, ordenar números y más. Cada ejercicio presenta el código Java correspondiente con comentarios para explicar su función.
El documento describe diferentes tipos de sentencias y estructuras de control en lenguaje de programación, incluyendo sentencias de entrada y salida, llamadas a procedimientos, asignaciones, estructuras de control de selección como if/else, estructuras de control de ciclos como for y while, y declaraciones de variables y tipos. También cubre funciones para manipular cadenas, archivos, E/S, y más.
El documento contiene una lista de términos relacionados con programación como variables, bucles, condiciones, funciones, tipos de datos, operadores, estructuras de control y más. También incluye términos relacionados con E/S de archivos, cadenas, caracteres y funciones matemáticas.
Este documento describe diferentes métodos de interpolación polinomial como Lagrange, Newton y Neville. Explica cómo se han implementado estos métodos como funciones en C++ y proporciona ejemplos de programas que ilustran su uso para interpolar diferentes funciones. También presenta programas adicionales para generar datos, visualizar resultados y estudiar la convergencia de los polinomios interpoladores.
Este documento contiene 18 algoritmos de programación con diferentes propósitos como calcular el perímetro y área de una circunferencia, aplicar descuentos en función de la cantidad de productos comprados, determinar si un número es primo, y sumar números ingresados hasta que la suma sea múltiplo de 10. Los algoritmos utilizan conceptos básicos de programación como variables, lectura de datos, condicionales y estructuras de repetición.
Este documento proporciona ejemplos de código y explicaciones sobre diversos comandos y funciones de Java, incluyendo cómo crear ventanas, botones, establecer tamaños y títulos, y mostrar mensajes. También cubre temas como el uso de import, parseo de cadenas, manejo de fechas, herencia, comentarios Javadoc y más.
Este documento proporciona una introducción a JavaScript (JS). Explica que JS es un lenguaje de programación interpretado, orientado a objetos y débilmente tipado que se ejecuta en el lado del cliente. Describe características como su sintaxis, tipos de datos, operadores, estructuras de control de flujo, funciones predefinidas y de usuario, y el ámbito de las variables. También cubre temas como la interpretación, imperatividad, orientación a objetos, prototipado, tipado débil y dinamismo de JS.
Expositor: Guillermo Winkler
Resumen:
Sabiendo que nunca vamos a lograr escribir tests que prueben que el código es correcto, en esta charla vamos a ver cómo en lugar de escribir tests para casos específicos de entradas de nuestro sistema, podemos declarar propiedades que tiene que cumplir nuestro sistema, y que sea la propia infraestructura que encuentre los casos para los cuáles dichas propiedades no se cumplen.
Un repaso a la historia e implementación de QuickCheck con casos prácticos en Clojure y Javascript.
Property Based Testing usando QuickCheckguillecabeza
El documento introduce el concepto de property based testing, una técnica de pruebas que define propiedades generales que un sistema debe cumplir y luego genera valores aleatorios para probar dichas propiedades de forma exhaustiva. Explica cómo definir propiedades, generar datos de prueba y validar que las propiedades se cumplen para diferentes lenguajes como JavaScript y Clojure. Finalmente, destaca que esta técnica permite probar un sistema en más estados que los unit tests tradicionales y complementa otros enfoques como los tipos.
¿En qué la estamos regando en pruebas de software?Agustin Ramos
El documento discute diferentes tipos y técnicas de pruebas de software, incluyendo pruebas basadas en valores de entrada, condiciones de frontera, valores no esperados, combinaciones de pruebas, rutas de ejecución, cobertura de código, pruebas guiadas por datos, pruebas pairwise, y pruebas basadas en riesgos. El autor argumenta que la cobertura de código por sí sola no es suficiente y que se deben considerar factores como los valores de entrada y las rutas de ejecución para realizar pruebas efectivas.
Arreglo unidimensionales y bidimensionalesMarco Garay
Este documento explica los arreglos unidimensionales y bidimensionales en C. Los arreglos unidimensionales almacenan vectores, mientras que los arreglos bidimensionales almacenan matrices. Se describen las declaraciones y uso básico de arreglos, incluyendo el paso de arreglos como parámetros de funciones. También incluye ejemplos de programas que leen, escriben y realizan cálculos con arreglos unidimensionales y bidimensionales.
1) El documento presenta conceptos básicos de algoritmia y programación estructurada como pseudocódigo, elementos de un programa, identificadores, constantes, variables, expresiones, entrada y salida de información.
2) Se explican conceptos como instrucciones de lectura y escritura, asignación de variables, expresiones aritméticas y lógicas.
3) Se incluyen ejemplos de algoritmos sencillos y ejercicios para practicar los conceptos.
Este documento presenta una introducción básica al software MATLAB. MATLAB es un programa matemático utilizado para resolver problemas del mundo real mediante el cálculo numérico y simbólico. Integra el cálculo, la visualización y la programación en un entorno fácil de usar que permite expresar soluciones de forma análoga a la notación matemática. El documento explica cómo iniciar MATLAB, los elementos de su escritorio y cómo trabajar con variables, números, cadenas, operadores y funciones dentro del programa.
Este documento presenta el tema 2 de un curso de PHP. Explica conceptos básicos del lenguaje como sintaxis, tipos de datos, variables, constantes, expresiones, estructuras de control, funciones y tablas. También introduce bibliotecas de funciones comunes.
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Agile Spain
Este documento compara diferentes lenguajes de programación como Java, Ruby y Scala para determinar cuál es más adecuado para desarrollos ágiles. Discute aspectos como la popularidad de cada lenguaje, su capacidad para pruebas automatizadas y entrega continua de valor, así como si son dinámicos o estáticos y cuán verbosos o concisos son. También menciona brevemente temas como diseño simple, arquitectura y uso de nuevos lenguajes en proyectos existentes.
El documento explica el uso de la estructura repetitiva for en Kotlin y expresiones de rango. For permite repetir un bloque de código una cantidad especificada de veces. Las expresiones de rango definen un intervalo entre dos valores y se usan con for para iterar sobre ese rango. El documento también presenta el uso de when, una estructura condicional que reemplaza if anidados.
Este documento presenta los contenidos de un curso introductorio de Matlab. Incluye temas como los tipos de datos básicos como enteros, reales, complejos y lógicos, operaciones con arrays, gráficos, estructuras de control, funciones y recursividad. También cubre temas como el ciclo de vida del software, debug y un proyecto final.
Machine Learning con Tensorflow y R, presentado por RStudioSoftware Guru
Este documento describe cómo usar R, Tensorflow y Keras para predecir la pérdida de clientes mediante aprendizaje automático. Se leen los datos, se preprocesan eliminando columnas, tratando valores perdidos y transformando variables. Luego se entrena un modelo de redes neuronales usando Keras, se valida midiendo métricas como precisión y se comparten los resultados.
El documento explica cómo calcular el factorial de un número utilizando un bucle for en C++ y recursividad. El factorial de un número es el producto de todos los enteros desde 1 hasta ese número. Se muestra un ejemplo de código para calcular el factorial de forma iterativa con un bucle for y de forma recursiva haciendo que la función factorial se llame a sí misma. La recursividad es más eficiente que la iteración para ciertos problemas, aunque consume más memoria.
Este documento presenta el tema 2 de un curso de PHP. Cubre la sintaxis básica de PHP, incluyendo cómo incrustar código PHP en HTML y cómo imprimir. También explica los tipos de datos en PHP, variables, constantes, expresiones y operadores, estructuras de control como if/else y bucles, funciones, arrays, y bibliotecas de funciones comunes.
Diapositivas correspondientes a la parte de la plataforma de desarrollo Ruby del curso de extensión universitaria "Desarrollo Web Avanzado", celebrado en la Escuela Universitaria de Ingeniería Informática de Oviedo
Este documento introduce los conceptos básicos del lenguaje PHP, incluyendo su sintaxis, tipos de datos, variables, constantes, expresiones, estructuras de control, funciones, tablas y bibliotecas de funciones. Explica cada uno de estos conceptos a través de ejemplos y comparaciones con C, con el objetivo de proporcionar una introducción general al lenguaje PHP.
El documento contiene 12 ejercicios de programación en Java que resuelven problemas matemáticos y lógicos comunes. Los ejercicios incluyen calcular promedios, descuentos, salarios, áreas, ordenar números y más. Cada ejercicio presenta el código Java correspondiente con comentarios para explicar su función.
El documento describe diferentes tipos de sentencias y estructuras de control en lenguaje de programación, incluyendo sentencias de entrada y salida, llamadas a procedimientos, asignaciones, estructuras de control de selección como if/else, estructuras de control de ciclos como for y while, y declaraciones de variables y tipos. También cubre funciones para manipular cadenas, archivos, E/S, y más.
El documento contiene una lista de términos relacionados con programación como variables, bucles, condiciones, funciones, tipos de datos, operadores, estructuras de control y más. También incluye términos relacionados con E/S de archivos, cadenas, caracteres y funciones matemáticas.
Este documento describe diferentes métodos de interpolación polinomial como Lagrange, Newton y Neville. Explica cómo se han implementado estos métodos como funciones en C++ y proporciona ejemplos de programas que ilustran su uso para interpolar diferentes funciones. También presenta programas adicionales para generar datos, visualizar resultados y estudiar la convergencia de los polinomios interpoladores.
Este documento contiene 18 algoritmos de programación con diferentes propósitos como calcular el perímetro y área de una circunferencia, aplicar descuentos en función de la cantidad de productos comprados, determinar si un número es primo, y sumar números ingresados hasta que la suma sea múltiplo de 10. Los algoritmos utilizan conceptos básicos de programación como variables, lectura de datos, condicionales y estructuras de repetición.
Este documento proporciona ejemplos de código y explicaciones sobre diversos comandos y funciones de Java, incluyendo cómo crear ventanas, botones, establecer tamaños y títulos, y mostrar mensajes. También cubre temas como el uso de import, parseo de cadenas, manejo de fechas, herencia, comentarios Javadoc y más.
Este documento proporciona una introducción a JavaScript (JS). Explica que JS es un lenguaje de programación interpretado, orientado a objetos y débilmente tipado que se ejecuta en el lado del cliente. Describe características como su sintaxis, tipos de datos, operadores, estructuras de control de flujo, funciones predefinidas y de usuario, y el ámbito de las variables. También cubre temas como la interpretación, imperatividad, orientación a objetos, prototipado, tipado débil y dinamismo de JS.
Expositor: Guillermo Winkler
Resumen:
Sabiendo que nunca vamos a lograr escribir tests que prueben que el código es correcto, en esta charla vamos a ver cómo en lugar de escribir tests para casos específicos de entradas de nuestro sistema, podemos declarar propiedades que tiene que cumplir nuestro sistema, y que sea la propia infraestructura que encuentre los casos para los cuáles dichas propiedades no se cumplen.
Un repaso a la historia e implementación de QuickCheck con casos prácticos en Clojure y Javascript.
Property Based Testing usando QuickCheckguillecabeza
El documento introduce el concepto de property based testing, una técnica de pruebas que define propiedades generales que un sistema debe cumplir y luego genera valores aleatorios para probar dichas propiedades de forma exhaustiva. Explica cómo definir propiedades, generar datos de prueba y validar que las propiedades se cumplen para diferentes lenguajes como JavaScript y Clojure. Finalmente, destaca que esta técnica permite probar un sistema en más estados que los unit tests tradicionales y complementa otros enfoques como los tipos.
¿En qué la estamos regando en pruebas de software?Agustin Ramos
El documento discute diferentes tipos y técnicas de pruebas de software, incluyendo pruebas basadas en valores de entrada, condiciones de frontera, valores no esperados, combinaciones de pruebas, rutas de ejecución, cobertura de código, pruebas guiadas por datos, pruebas pairwise, y pruebas basadas en riesgos. El autor argumenta que la cobertura de código por sí sola no es suficiente y que se deben considerar factores como los valores de entrada y las rutas de ejecución para realizar pruebas efectivas.
Arreglo unidimensionales y bidimensionalesMarco Garay
Este documento explica los arreglos unidimensionales y bidimensionales en C. Los arreglos unidimensionales almacenan vectores, mientras que los arreglos bidimensionales almacenan matrices. Se describen las declaraciones y uso básico de arreglos, incluyendo el paso de arreglos como parámetros de funciones. También incluye ejemplos de programas que leen, escriben y realizan cálculos con arreglos unidimensionales y bidimensionales.
1) El documento presenta conceptos básicos de algoritmia y programación estructurada como pseudocódigo, elementos de un programa, identificadores, constantes, variables, expresiones, entrada y salida de información.
2) Se explican conceptos como instrucciones de lectura y escritura, asignación de variables, expresiones aritméticas y lógicas.
3) Se incluyen ejemplos de algoritmos sencillos y ejercicios para practicar los conceptos.
Este documento presenta una introducción básica al software MATLAB. MATLAB es un programa matemático utilizado para resolver problemas del mundo real mediante el cálculo numérico y simbólico. Integra el cálculo, la visualización y la programación en un entorno fácil de usar que permite expresar soluciones de forma análoga a la notación matemática. El documento explica cómo iniciar MATLAB, los elementos de su escritorio y cómo trabajar con variables, números, cadenas, operadores y funciones dentro del programa.
Este documento presenta el tema 2 de un curso de PHP. Explica conceptos básicos del lenguaje como sintaxis, tipos de datos, variables, constantes, expresiones, estructuras de control, funciones y tablas. También introduce bibliotecas de funciones comunes.
Quiero hacer ágil, ¿y ahora qué: Java, Ruby o Scala?Agile Spain
Este documento compara diferentes lenguajes de programación como Java, Ruby y Scala para determinar cuál es más adecuado para desarrollos ágiles. Discute aspectos como la popularidad de cada lenguaje, su capacidad para pruebas automatizadas y entrega continua de valor, así como si son dinámicos o estáticos y cuán verbosos o concisos son. También menciona brevemente temas como diseño simple, arquitectura y uso de nuevos lenguajes en proyectos existentes.
El documento explica el uso de la estructura repetitiva for en Kotlin y expresiones de rango. For permite repetir un bloque de código una cantidad especificada de veces. Las expresiones de rango definen un intervalo entre dos valores y se usan con for para iterar sobre ese rango. El documento también presenta el uso de when, una estructura condicional que reemplaza if anidados.
Este documento presenta los contenidos de un curso introductorio de Matlab. Incluye temas como los tipos de datos básicos como enteros, reales, complejos y lógicos, operaciones con arrays, gráficos, estructuras de control, funciones y recursividad. También cubre temas como el ciclo de vida del software, debug y un proyecto final.
Machine Learning con Tensorflow y R, presentado por RStudioSoftware Guru
Este documento describe cómo usar R, Tensorflow y Keras para predecir la pérdida de clientes mediante aprendizaje automático. Se leen los datos, se preprocesan eliminando columnas, tratando valores perdidos y transformando variables. Luego se entrena un modelo de redes neuronales usando Keras, se valida midiendo métricas como precisión y se comparten los resultados.
El documento explica cómo calcular el factorial de un número utilizando un bucle for en C++ y recursividad. El factorial de un número es el producto de todos los enteros desde 1 hasta ese número. Se muestra un ejemplo de código para calcular el factorial de forma iterativa con un bucle for y de forma recursiva haciendo que la función factorial se llame a sí misma. La recursividad es más eficiente que la iteración para ciertos problemas, aunque consume más memoria.
Este documento presenta el tema 2 de un curso de PHP. Cubre la sintaxis básica de PHP, incluyendo cómo incrustar código PHP en HTML y cómo imprimir. También explica los tipos de datos en PHP, variables, constantes, expresiones y operadores, estructuras de control como if/else y bucles, funciones, arrays, y bibliotecas de funciones comunes.
Diapositivas correspondientes a la parte de la plataforma de desarrollo Ruby del curso de extensión universitaria "Desarrollo Web Avanzado", celebrado en la Escuela Universitaria de Ingeniería Informática de Oviedo
Este documento introduce los conceptos básicos del lenguaje PHP, incluyendo su sintaxis, tipos de datos, variables, constantes, expresiones, estructuras de control, funciones, tablas y bibliotecas de funciones. Explica cada uno de estos conceptos a través de ejemplos y comparaciones con C, con el objetivo de proporcionar una introducción general al lenguaje PHP.
Este documento presenta una introducción al lenguaje de programación C. Cubre temas como tipos de datos básicos como enteros, reales y caracteres, declaración de variables, expresiones aritméticas y lógicas, estructuras condicionales como if-else y switch, estructuras iterativas como while, do-while y for, y tipos de datos estructurados como vectores, matrices y cadenas de caracteres.
El documento explica cómo crear y ejecutar scripts y funciones en MATLAB. Brevemente describe cómo crear un script simple "Hola Mundo" y ejecutarlo escribiendo su nombre en la ventana de comandos. También cubre conceptos básicos como variables, operaciones matemáticas, sentencias condicionales if/else y switch, y algunos ejemplos de código.
Este documento proporciona información sobre pruebas unitarias en Ruby utilizando la biblioteca Test::Unit. Explica los elementos básicos como test cases, test fixtures, test suites y aserciones. También cubre cómo se utiliza Test::Unit en Ruby on Rails, incluidos los entornos de prueba, la estructura de pruebas y las tareas Rake para ejecutar pruebas.
Este documento describe los conceptos básicos de la programación funcional como la evaluación perezosa, tipos polimórficos, igualdad semántica y funciones de primer orden. Explica características del lenguaje Curry como la unificación semántica, evaluación de expresiones anidadas y diferentes modos de evaluación. Incluye ejemplos de funciones como append, fac y exp para ilustrar estos conceptos.
para programadores y desarrolladores de inteligencia artificial y machine learning, como se automatiza una cadena de valor o cadena de valor gracias a la teoría por Manuel Diaz @manuelmakemoney
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.
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)codesiret
Los protocolos son conjuntos de
normas para formatos de mensaje y
procedimientos que permiten a las
máquinas y los programas de aplicación
intercambiar información.
KAWARU CONSULTING presenta el projecte amb l'objectiu de permetre als ciutadans realitzar tràmits administratius de manera telemàtica, des de qualsevol lloc i dispositiu, amb seguretat jurídica. Aquesta plataforma redueix els desplaçaments físics i el temps invertit en tràmits, ja que es pot fer tot en línia. A més, proporciona evidències de la correcta realització dels tràmits, garantint-ne la validesa davant d'un jutge si cal. Inicialment concebuda per al Ministeri de Justícia, la plataforma s'ha expandit per adaptar-se a diverses organitzacions i països, oferint una solució flexible i fàcil de desplegar.
3. ● Depurando (print)
Temario
● Comprobación de inputs de una función (if / stop / assert)
● Manejando excepciones (try / try catch)
● Test unitarios
○ Características y ejemplos
○ Metodología TDD
4. Presentación a través de retos
En la exposición voy a ir presentando retos que resolver.
Cuando se alcance el resultado saldrá:
5. Primer reto
Crear una función, my_factorial(), que calcule el factorial de un
número.
El factorial de un entero positivo n se define como el producto de
los números enteros positivos desde 1 hasta n. Por ejemplo,
El factorial de 5 es:
1*2*3*4*5 = 120
6. Primera versión
my_factorial <- function(n) {
factorial <- 0
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
}
> my_factorial(5)
[1] 0
✗
9. Version depurada
my_factorial <- function(n) {
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
}
> my_factorial(5)
[1] 120
✓
10. Comprobación de inputs
> my_factorial(5)
[1] 120
> my_factorial(0)
[1] 0
> my_factorial(-5)
[1] 0
El factorial de un entero positivo n se define como el producto de
los números enteros positivos desde 1 hasta n. Por convenio el
factorial de 0 es 1.
✓
✗
✗
11. Segundo reto
Modificar la función, my_factorial(), para que en caso de un número
negativo devuelva un nulo y cuando se le pase 0 la solución sea 1.
12. Comprobación de inputs: if
my_factorial <- function(n) {
if(n < 0) {
return(NULL)
}
if(n == 0) {
return(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
}
> my_factorial(5)
[1] 120
> my_factorial(0)
[1] 1
> my_factorial(-5)
[1] NULL
> my_factorial("a")
Error in 1:n : NA/NaN argument
In addition: Warning message:
In my_factorial("a") : NAs
introduced by coercion
✓
✓
✓
13. Tercer reto
Pare la función my_factorial() cuando el valor de entrada no
sea numérico.
14. Comprobación de inputs: stop / if / assert
my_factorial <- function(n) {
stopifnot(is.numeric(n))
if(n < 0) {
return(NULL)
}
if(n == 0) {
return(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
}
> my_factorial("a")
Error: is.numeric(n) is not TRUE
✓ > my_factorial("a")
Error: Sorry, n must be a number
✓
my_factorial <- function(n) {
if(!is.numeric(n)){stop("Sorry, n must be a number")}
if(n < 0) {
return(NULL)
}
if(n == 0) {
return(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
}
15. Comprobación de inputs: stop / if / assert
library(assertthat)
my_factorial <- function(n) {
assert_that(
is.numeric(n),
msg = "Sorry, n must be a number"
)
if(n < 0) {
return(NULL)
}
if(n == 0) {
return(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
}
> my_factorial("a")
Error: Sorry, n must be a number
✓ ✓
library(assertthat)
my_factorial <- function(n) {
assert_that(is.numeric(n))
if(n < 0) {
return(NULL)
}
if(n == 0) {
return(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
}
> my_factorial("a")
Error: n is not a numeric or integer vector
16. Cuarto reto
Crear una función, my_factorial_for_file(), que calcule el
factorial de un número que lee de un archivo csv.
Y al final imprimir: “T ' F ! ”
17. Manejando excepciones
library(assertthat)
my_factorial_for_file <- function(filename) {
n <- read.csv(filename, header = FALSE)[1, 1]
assert_that(is.numeric(n))
if(n < 0) {
return(NULL)
}
if(n == 0) {
return(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
return(factorial)
print("-- That's all folks! --")
}
> my_factorial_for_file("num.csv")
[1] 120
[1] "-- That's all folks! --"
> my_factorial_for_file("num2.csv")
Error in file(file, "rt") : cannot open
the connection In addition: Warning
message:
In file(file, "rt") :
cannot open file 'num2.csv': No such
file or directory
✓
✗
5
num.csv
18. Manejando excepciones: Try
library(assertthat)
my_factorial_for_file <- function(filename) {
try({
n <- read.csv(filename, header = FALSE)[1, 1]
assert_that(is.numeric(n))
if(n < 0) {
return(NULL)
}
if(n == 0) {
print(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
print(factorial)
})
print("-- That's all folks! ---")
}
> my_factorial_for_file("num.csv")
[1] 120
[1] "-- That's all folks! --"
> my_factorial_for_file("num2.csv")
Error in file(file, "rt") : cannot
open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file 'num2.csv': No
such file or directory
[1] "-- That's all folks! ---"
✓
✓
5
num.csv
19. Manejando excepciones: Try catch
tryCatch({
expression to be evaluated
}, warning = function(w) {
warning-handler-code
}, error = function(e) {
error-handler-code
}, finally = {
cleanup-code
}
La sintaxis del manejo de excepciones de try catch en R es
similar a la de otros lenguajes:
20. Manejando excepciones: Try catch
library(assertthat)
my_factorial_for_file <- function(filename) {
tryCatch({
n <- read.csv(filename, header = FALSE)[1, 1]
assert_that(is.numeric(n))
if(n < 0) {
return(NULL)
}
if(n == 0) {
print(1)
}
factorial <- 1
for(i in 1:n) {
factorial <- i * factorial
}
print(factorial)
}, warning = function(w) {
print("Ups, a warning:")
print(w)
}, error = function(e) {
print("There is an error:")
print(e)
}, finally = {
print("-- That's all folks! ---")
})
}
> my_factorial_for_file("num.csv")
[1] 120
[1] "-- That's all folks! --"
> my_factorial_for_file("num2.csv")
[1] "Ups, a warning:"
<simpleWarning in file(file, "rt"):
cannot open file 'num2.csv': No such
file or directory>
[1] "-- That's all folks! ---"
✓
✓
5
num.csv
21. Comprobaciones una y otra vez sobre lo mismo
> my_factorial(5)
[1] 120
> my_factorial(0)
[1] 1
> my_factorial(-5)
[1] NULL
23. Test unitarios
● Solo deben fallar cuando se introduce un bug
● Los test deben acabar rápidamente, tardar menos de un minuto en ejecutarse
● Debe ser fácil detectar dónde se produce el error para poderlo solucionar
Un test unitario es una secuencia de comandos que evalúa la unidad más pequeña del código
y lo compara con el comportamiento esperado.
Deberían:
● Los test deben ser independientes unos de otros
27. "testthat: Get Started with Testing" Hadley Wickham
Expectation
Una expectation es una afirmación binaria sobre si un valor es o no lo que se
espera. Sólo en caso de no ser verdadera dará un error.
Hay 11 tipos:
expect_that(x, is_true())
expect_that(x, is_false())
expect_that(x, is_a(y))
expect_that(x, equals(y))
expect_that(x, is_equivalent_to(y))
expect_that(x, is_identical_to(y))
expect_that(x, matches(y))
expect_that(x, prints_text(y))
expect_that(x, shows_message(y))
expect_that(x, gives_warning(y))
expect_that(x, throws_error(y))
expect_true(x)
expect_false(x)
expect_is(x, y)
expect_equal(x, y)
expect_equivalent(x, y)
expect_identical(x, y)
expect_matches(x, y)
expect_output(x, y)
expect_message(x, y)
expect_warning(x, y)
expect_error(x, y)
Full Short curt
28. Ejemplos de expectations
library("testthat")
test_that("example of expectations", {
expect_equal(1, 1) # pass
expect_equal(1, 1 + 1e-8) # pass
expect_equal(1, 5) # fail
expect_identical(1, 1) # pass
expect_identical(1, 1 + 1e-8) # fail
expect_identical(3, 1 + 2) # pass
expect_identical(0.3, 0.1 + 0.2) # fail
})
> test_file('tests/test.examples.R')
..1.2.3
Failed
---------------------------------------------
1. Failure: example of
expectations(@test.examples.R#6) ------------
1 not equal to 5.
1/1 mismatches
[1] 1 - 5 == -4
2. Failure: example of expectations
(@test.examples.R#8) ------------------------
1 not identical to 1 + 1e-08.
Objects equal but not identical
3. Failure: example of expectations
(@test.examples.R#10) -----------------------
0.3 not identical to 0.1 + 0.2.
Objects equal but not identical
DONE ========================================
1
2
3
4
5
6
7
8
9
10
11
30. asserthat::with_mock()
with_mock() ejecuta el código después de sustituir temporalmente las implementaciones de
las funciones del paquete.
Podemos tener en nuestro código funciones que sean difícil de testear.
● Llamadas a un servicio que no está disponible
● Resultados impredecibles al llamar a una función
● Un código que tarde demasiado en ejecutarse
¿Cómo testear en estos casos que el código es el correcto?
33. Último reto
Crear una función, add_one(), que sume uno al número que se le pase.
En caso de que no se le pase un número debe devolver NULL.
Utilizar la metodología Test-Driven Development (TDD).
34. Workflow (basado en Test-driven development)
Escribe el test
tests/test.foo.R
Escribe el código
mínimo
foo.R
¿Pasa
el
test?
No
36. Por qué escribir el test antes que el código
● Nos aseguramos de obtener el resultado deseado y de que
efectivamente vamos a generar código testeable
● Sirve de guía si no sabes por dónde empezar pero sabes lo que
quieres obtener
● Seamos realistas, lo más seguro es que una vez que el código
realiza lo que queremos nos dará más pereza escribir el test
37. Test unitarios y paquetes: Test workflow
● Crear un paquete
● Crear test para una función, add_one(), que sume una unidad al número que
se le pase de argumento y en caso de no pasarle un número nos devuelva un
texto
● Crear la función, add_one()
● Estudiar la cobertura de test del paquete
49. Extra: traceback()
> g <- function(x) x + "a"
> g(0)
Error in x + "a" : non-numeric argument to binary operator
> f <- function(x) g(x)
> f(0)
Error in x + "a" : non-numeric argument to binary operator
> traceback()
2: g(x) at #1
1: f(0)