SlideShare uma empresa Scribd logo
1 de 69
Baixar para ler offline
@DogDeveloper
#TheRustalorean
The Rustalorian
Este es el camino
Francisco Javier Barrena – Security & Software Architect
20-21-22 abril, 2021
@DogDeveloper
#TheRustalorean
The
rustalorian
Este es el
camino
Francisco Javier Barrena Castillo
@DogDeveloper
@DogDeveloper
#TheRustalorean
Who’s that guy
• Security Advocate & Software Architect en @ITI_TIC
• Actualmente en proyectos de investigación de
ciberseguridad en entornos cloud y detección basada en
Machine Learning
• +10 años con proyectos comerciales
• Profesor en Máster Big Data Analytics de
Universidad Politécnica de Valencia
• Profesor en curso de especialista universitario en
Esquema Nacional de Seguridad en la Universidad
de Mondragón
• Formador y ponente
• +60 cursos y charlas
https://www.linkedin.com/in/fjbarrena
https://twitter.com/DogDeveloper
https://github.com/fjbarrena
https://www.slideshare.net/fjbarrena
@DogDeveloper
#TheRustalorean
•Rust nació como un
side-project de Graydon
Hoare, empleado de
Mozilla, en 2006
•Mozilla lo sponsorizó en
2009
•Y lo hizo oficial en 2010
un poco de historia…
@DogDeveloper
#TheRustalorean
• Durante este periodo de tiempo fue declarado como el
lenguaje más amado en StackOverflow durante 4 años
seguidos (2016-2020!)
• Cada vez que alguien tenía la oportunidad de probar Rust,
caía locamente enamorado de él
un poco de historia…
@DogDeveloper
#TheRustalorean
un poco de historia…
https://insights.stackoverflow.com/survey/2020?_ga=2.101739841.1363837995.1616266973-
1694927504.1616266973#technology-most-loved-dreaded-and-wanted-languages-loved
@DogDeveloper
#TheRustalorean
un poco de historia…
@DogDeveloper
#TheRustalorean
un poco de historia…
@DogDeveloper
#TheRustalorean
un poco de historia…
@DogDeveloper
#TheRustalorean
• Pero entonces llegó…
• El MOZILLA-GEDDÓNde
Agosto de 2020…
un poco de historia…
@DogDeveloper
#TheRustalorean
un poco de historia…
@DogDeveloper
#TheRustalorean
mozilla
the King
market
@DogDeveloper
#TheRustalorean
Rust
foundation
@DogDeveloper
#TheRustalorean
• Organización independiente sin ánimo de lucro
• Con el objetivo de promover y desarrollar el ecosistema de
Rust
• https://foundation.rust-lang.org/
• Apoyado y financiado por:
The rust foundation
@DogDeveloper
#TheRustalorean
•Rust siempre ha sido desarrollado por la
comunidad
•Y la Rust Foundation garantiza que seguirá
siendo así
•No debe preocuparnos la estabilidad de Rust,
porque está garantizada a corto y medio plazo
•A largo plazo bueno… who knows? Sobrevivirá Ruby
a largo plazo?
Rust pa’rato
@DogDeveloper
#TheRustalorean
• Rust siempre ha sido desarrollado por la comunidad
• Y la Rust Foundation garantiza que seguirá siendo así
• No debe preocuparnos la estabilidad de Rust, porque está
garantizada a corto y medio plazo
• A largo plazo bueno… who knows? Sobrevivirá Ruby a largo plazo?
Nuestra historia con rust
Nuestra historia
con rust
@DogDeveloper
#TheRustalorean
@DogDeveloper
#TheRustalorean
•Rust es un lenguaje de programación “de sistemas”
•Que es LA OSTIA de óptimo à rápido en tiempo de
ejecución y con buen uso de recursos del sistema
•Que previene prácticamente de todos los crashes
habituales en este tipo de lenguajes (C, C++…)
•Y elimina las Data Races
• Una Data Race ocurre cuando uno o más hilos acceden
concurrentemente a una posición de memoria o
variable
Pero qué es rust
@DogDeveloper
#TheRustalorean
•Las prioridades de RUST son
• SEGURIDAD
• RENDIMIENTO
• Resuelve problemas que C/C++ han sufrido durante mucho
tiempo
• Errores de memoria
• Programación concurrente
• Tres beneficios principales
• Seguridad en memoria
• Modelo de concurrencia más sencillo
• Zero-cost abstractions
Pero qué es rust
@DogDeveloper
#TheRustalorean
@DogDeveloper
#TheRustalorean
@DogDeveloper
#TheRustalorean
@DogDeveloper
#TheRustalorean
Bueno eso de óptimo lo dicen todos…
@DogDeveloper
#TheRustalorean
• Seguridad en memoria GARANTIZADA
• Hilos sin dataraces
• Abstracciones a CERO COSTE
• Traits
• Type inference
• Immutable by default
• Macros
• No existe null (ni undefined, ni nil, ni LECHES) à Elegante!
• Eficiente en memoria sin Garbage Collector, pero sin tener que
reservar y liberar memoria manualmente como en C…
qué tiene rust de especial
@DogDeveloper
#TheRustalorean
@DogDeveloper
#TheRustalorean
Es como programar con sheldon cooper
@DogDeveloper
#TheRustalorean
Tu código Sin rust
@DogDeveloper
#TheRustalorean
Tu código Sin rust
@DogDeveloper
#TheRustalorean
•Rust analiza la gestión de la memoria de tu programa
en tiempo de compilación
•Asegurando que no aparecerán bugs debidos a una
mala administración de la memoria y eliminando la
necesidad de utilizar sistemas de Garbage Collection
•No es necesario reservar memoria manualmente
• No obstante, puedes hacerlo si lo necesitas dentro de un bloque
de código unsafe
•¿Cómo lo consigue? Con el concepto de ownership
No segfaults
@DogDeveloper
#TheRustalorean
• Este concepto es el que permite a Rust garantizar la
seguridad en memoria y eliminar la necesidad de un
Garbage Collector
• Todos los lenguajes tienen que manejar cómo utilizan la
memoria en tiempo de ejecución
• Algunos a través de un Garbage Collector, que constantemente busca
memoria no utilizada, mientras el programa se ejecuta
• Y otros pidiendo que el programador explícitamente reserve y libere la
memoria
• Rust utiliza otra aproximación…
• La memoria se administra a través del sistema de ownership, con un
conjunto de reglas que el compilador comprueba en tiempo de compilación
ownership
@DogDeveloper
#TheRustalorean
• Esto tiene un impacto directo à En tiempo de ejecución NO
SE PIERDE EL TIEMPO EN ADMINISTRAR LA MEMORIA
ownership
@DogDeveloper
#TheRustalorean
• Tanto el Stack como el Heap son tipos de memorias que
están disponibles para un programa en tiempo de ejecución
• Pero ambas están estructuradas de diferente manera
• Stack (o pila)
• Guarda los valores en el orden que llegan
• Pero los recupera en el orden inverso
• LIFO (Last In First Out)
• Es como una pila de platos
• Todos los datos dentro de la pila deben tener un tamaño fijo y
conocido
• Si no conozco el tamaño, o este puede cambiar en el tiempo, no puede estar en
el Stack
The stack and the heap
@DogDeveloper
#TheRustalorean
• Heap (o montículo)
• El heap es una memoria menos organizada
• Cuando se quiere guardar algo en el Heap, se solicita un tamaño
determinado
• El “reservador de memoria” busca un espacio vacío donde quepa
el dato, lo marca como “en uso” y devuelve un puntero con la
dirección de memoria de ese bloque
• A este proceso se le conoce como allocating on the heap, o simplemente, allocating
• Como el puntero devuelto tiene un tamaño fijo y conocido, se
puede guardar en el Stack
• Pero para leer el dato, tendrás que seguir el puntero hacia el Heap
• Es como buscar una mesa en un restaurante…
The stack and the heap
@DogDeveloper
#TheRustalorean
• El Stack es MUCHO más rápido que el Heap
• No tiene que buscar espacio, ni reservarlo. El propio proceso de reserva de
memoria es lineal con el tamaño que se quiere reservar (a más tamaño, más
le cuesta reservar memoria)
• El acceso a los datos es mucho más rápido también, dado que no hay que
seguir un puntero, la información está directamente accesible
• Todos los tipos de datos primitivos se almacenan en el STACK
• Por ejemplo i8, i16, i32, i64, char, str…
• Mientras que los tipos de datos complejos se almacenan en el HEAP
• Como por ejemplo String, y cualquier tipo complejo que podamos crear
• Es importante conocer las diferencias entre Stack y Heap para
comprender el concepto de ownership
• Una vez lo tengáis claro, ya no hace tanta falta ;)
The stack and the heap
@DogDeveloper
#TheRustalorean
• El Ownership en Rust tiene 3 sencillas reglas
• Cada VALOR en RUST tiene una variable llamada OWNER
• SOLO puede haber UN OWNER para un VALOR al mismo tiempo
• Cuando un OWNER se SALE DEL SCOPE, el valor es ELIMINADO
• El scope es el clásico de cualquier lenguaje
ownership rules
@DogDeveloper
#TheRustalorean
scope
@DogDeveloper
#TheRustalorean
• Imaginemos que tenemos un String variable alojado en el
Heap, eso se puede conseguir así
• Este String estaría alojado en el Heap, pero seguiría siendo
inmutable. Para hacerlo mutable tendríamos que:
ownership rules
@DogDeveloper
#TheRustalorean
• En el caso de un str (literal)…
• Conocemos su tamaño en tiempo de compilación
• El texto se ”hardcodea” directamente en el ejecutable final
• Son rápidos y eficientes
• Pero porque son inmutables!
• En el caso de un String
• No conocemos su tamaño en tiempo de compilación
• Si queremos que sea mutable, necesitamos reservar memoria en
el heap, y además debe poder crecer, es decir
• La reserva de memoria se debe solicitar al memory allocator en tiempo de
ejecución
• Tenemos que devolver la memoria cuando ya no la usemos de alguna manera
ownership rules
@DogDeveloper
#TheRustalorean
• “La reserva de memoria se debe solicitar al memory
allocator en tiempo de ejecución”
• “Tenemos que devolver la memoria cuando ya no la
usemos de alguna manera”
• En C tendríamos que liberarla manualmente
• En Java, el Garbage Collector la liberará en algún momento
• ¿Y en Rust? à Se libera AUTOMÁTICAMENTE cuando la variable
sale del SCOPE
• El COMPILADOR añade órdenes de LIBERACIÓN DE MEMORIA en cada cambio
de SCOPE
ownership rules
@DogDeveloper
#TheRustalorean
@DogDeveloper
#TheRustalorean
•El concepto es sencillo, pero
tiene un profundo impacto en
cómo se escribe el código en
Rust
•Puede parecer muy simple,
pero el comportamiento del
código se complica cuando
queremos tener múltiples
variables accediendo a los datos
que hay en el Heap…
ownership rules
@DogDeveloper
#TheRustalorean
En el stack…
@DogDeveloper
#TheRustalorean
En el heap…
@DogDeveloper
#TheRustalorean
En el heap…
@DogDeveloper
#TheRustalorean
moves
@DogDeveloper
#TheRustalorean
•Como hemos dicho antes, Rust libera
automáticamente la memoria de aquellas variables
que salen de su scope
• En este ejemplo, llamará DOS veces para liberar la misma
posición de memoria
• Esto es conocido como el double free error, y es uno de
los problemas de seguridad de memoria que Rust
soluciona
• Liberar la memoria por duplicado lleva habitualmente a
corrupción de memoria, lo cual favorece vulnerabilidades
de seguridad
moves
@DogDeveloper
#TheRustalorean
• Hay otro detalle en este ejemplo
• Rust considera que s1 no es válido, ya que el ownership ya
no pertenece a s1, si no a s2
• Recordad, solo hay un OWNER de un dato
• Este proceso se llama Shallow Copy, y consiste en el
concepto de copiar un puntero, su longitud y su capacidad,
en lugar de copiar todo el dato (hacer un “clon”)
• Rust además de hacer un Shallow Copy, también INVALIDA la
variable s1
• A esto se le conoce como un MOVE
moves
@DogDeveloper
#TheRustalorean
•s1 ha tenido un MOVE a s2
•Esto soluciona nuestro
problema
• Solo s2 es válido
• De modo que cuando s2 salga
de su scope, se liberará su
memoria
• Cuando s1 salga de su scope,
no liberará nada, dado que está
marcada como INVÁLIDA
• Así es imposible que haya un
double free error
moves
@DogDeveloper
#TheRustalorean
• No podemos utilizar s1 porque se ha movido a s2 y s1 es
inválido (UNSAFE!)
moves
@DogDeveloper
#TheRustalorean
• Si cambiamos el código a:
moves
@DogDeveloper
#TheRustalorean
• ¿Porqué esto es importante?
• Habiendo SOLO UN OWNER
nos aseguramos de que SOLO
UN PUNTERO puede acceder a
esa posición de memoria en un
mismo SCOPE
• Esto elimina la posibilidad de
tener PUNTEROS PERDIDOS
accediendo a esa posición de
memoria
• Y también la posibilidad de
tener PUNTEROS MALICIOSOS…
moves
Solo puede haber un
owner!!
@DogDeveloper
#TheRustalorean
Y que ocurre con las funciones?
@DogDeveloper
#TheRustalorean
Y que ocurre con las funciones?
@DogDeveloper
#TheRustalorean
Y que ocurre con las funciones?
@DogDeveloper
#TheRustalorean
borrowing
@DogDeveloper
#TheRustalorean
borrowing
@DogDeveloper
#TheRustalorean
• No tiene NULL ni EXCEPTION
• Ni undefined, ni nil, ni nada
• Bueno, null si lo tiene, pero hay que llamarlo explícitamente
y no se aconseja
• Nuestro código NO TIENE NULLs, y HEMOS GANADO CON
ELLO
otras peculiaridades de rust
@DogDeveloper
#TheRustalorean
Result en vez de exception
@DogDeveloper
#TheRustalorean
option en vez de null
@DogDeveloper
#TheRustalorean
• Una de las promesas de Rust son las abstracciones a coste
cero
• Esto significa que no importa cómo utilices el lenguaje, este
siempre se compilará al mismo código ensamblador
• No importa si usas un loop
• O un closure
• El resultado es el mismo, y además ES EL ÓPTIMO
• ¡Y por eso cualquier otro lenguaje te hará echar la pota!
Rust zero cost abstraction
@DogDeveloper
#TheRustalorean
• En el resto de lenguajes, el azúcar sintáctico, o el uso de
paradigmas “no nativos” tiene un coste
• Si estás en Java por ejemplo, y usas lenguaje funcional, pagas un
precio en rendimiento
• O lo ganas, depende de lo mojón que sea el código que hagas :D
• Pero una abstracción no puede ser más rápida que un código
nativo optimizado
• En Rust, en cambio, esto no es así
• Ejemplo…
Rust zero cost abstraction
@DogDeveloper
#TheRustalorean
• En Python sum(range(1000))
• 1000 iteraciones
• 1000 sumas
• + coste de escritura
• En Rust (0..1000).sum()
• CERO COSTE
• ZERO
• RIEN
• NIENTE
• NOTHING
• NÁ DE NÁ
Rust zero cost abstraction
@DogDeveloper
#TheRustalorean
• El precio de la seguridad y el rendimiento hay que pagarlo
• Rust es un lenguaje de propósito general
• Puede usarse para cualquier cosa
• Pero donde más destaca es en:
• Desarrollos “de sistemas” o de ”bajo nivel”
• Videojuegos
• IoT
• Si necesitas MUCHO rendimiento
• Si quieres reforzar la seguridad (de memoria)
• ¿Y para todo lo demás?
El que algo quiere, algo le cuesta
@DogDeveloper
#TheRustalorean
No os engañaré
@DogDeveloper
#TheRustalorean
Pero…
@DogDeveloper
#TheRustalorean
Este es el camino…
@DogDeveloper
#TheRustalorean
Este es el camino…
@DogDeveloper
#TheRustalorean
Este es el camino…
@DogDeveloper
#TheRustalorean
Gracias!

Mais conteúdo relacionado

Semelhante a Codemotion 2021 - The Rustalorian: Este es el camino

Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
Alberto Gimeno
 
Postgres SQL - Notas Informativas.
Postgres SQL - Notas Informativas.Postgres SQL - Notas Informativas.
Postgres SQL - Notas Informativas.
Luis Toscano
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Socialmetrix
 

Semelhante a Codemotion 2021 - The Rustalorian: Este es el camino (20)

NestJS: Backends en Node para Javeros y Puntoneteros
NestJS: Backends en Node para Javeros y PuntoneterosNestJS: Backends en Node para Javeros y Puntoneteros
NestJS: Backends en Node para Javeros y Puntoneteros
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
An evening with...Rust
An evening with...RustAn evening with...Rust
An evening with...Rust
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Webinar Codemotion 2020 - Piratas del Cloud
Webinar Codemotion 2020 - Piratas del CloudWebinar Codemotion 2020 - Piratas del Cloud
Webinar Codemotion 2020 - Piratas del Cloud
 
Desarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nubeDesarrollo de aplicaciones en la nube
Desarrollo de aplicaciones en la nube
 
Identificando problemas en el JVM
Identificando problemas en el JVMIdentificando problemas en el JVM
Identificando problemas en el JVM
 
Un viaje por Cosmos DB
Un viaje por Cosmos DBUn viaje por Cosmos DB
Un viaje por Cosmos DB
 
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
 
Semana de la I+D - Proyecto OPOSSUM
Semana de la I+D - Proyecto OPOSSUMSemana de la I+D - Proyecto OPOSSUM
Semana de la I+D - Proyecto OPOSSUM
 
Aplicaciones Absurdamente Rápidas con Quarkus.io
Aplicaciones Absurdamente Rápidas con Quarkus.ioAplicaciones Absurdamente Rápidas con Quarkus.io
Aplicaciones Absurdamente Rápidas con Quarkus.io
 
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
 
Sistemas operativos software
Sistemas operativos softwareSistemas operativos software
Sistemas operativos software
 
Postgres SQL - Notas Informativas.
Postgres SQL - Notas Informativas.Postgres SQL - Notas Informativas.
Postgres SQL - Notas Informativas.
 
Why Apache Flink is better than Spark by Rubén Casado
Why Apache Flink is better than Spark by Rubén CasadoWhy Apache Flink is better than Spark by Rubén Casado
Why Apache Flink is better than Spark by Rubén Casado
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
 
Git: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoGit: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativo
 
Modelos de Concurrencia
Modelos de ConcurrenciaModelos de Concurrencia
Modelos de Concurrencia
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Rubik Cube Timer - Diapositivas presentacion Clases
Rubik Cube Timer - Diapositivas presentacion ClasesRubik Cube Timer - Diapositivas presentacion Clases
Rubik Cube Timer - Diapositivas presentacion Clases
 

Mais de Francisco Javier Barrena

Kubernetes - The Cloud King
Kubernetes - The Cloud KingKubernetes - The Cloud King
Kubernetes - The Cloud King
Francisco Javier Barrena
 

Mais de Francisco Javier Barrena (10)

¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
 
Codemotion 2022 - API Security Workshop.pdf
Codemotion 2022 - API Security Workshop.pdfCodemotion 2022 - API Security Workshop.pdf
Codemotion 2022 - API Security Workshop.pdf
 
Welcome to Gotham - Nuevas formas ingeniosas y terroríficas de ciberataques
Welcome to Gotham - Nuevas formas ingeniosas y terroríficas de ciberataquesWelcome to Gotham - Nuevas formas ingeniosas y terroríficas de ciberataques
Welcome to Gotham - Nuevas formas ingeniosas y terroríficas de ciberataques
 
Deja de ser el rival más débil con DevSecOps
Deja de ser el rival más débil con DevSecOpsDeja de ser el rival más débil con DevSecOps
Deja de ser el rival más débil con DevSecOps
 
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
Codemotion 2020 - Big Data en Ciberseguridad: mejor morir de pie que vivir ar...
 
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcidoTotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
TotoConf2020 - Técnicas OSINT que te dejarán con el PAPO torcido
 
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
Ciberseguridad en el Cloud - ¿Y es que eso no puede hacerlo otro?
 
Angular 6 + Angular Elements: Write once, run anywhere
Angular 6 + Angular Elements: Write once, run anywhereAngular 6 + Angular Elements: Write once, run anywhere
Angular 6 + Angular Elements: Write once, run anywhere
 
Kubernetes - The Cloud King
Kubernetes - The Cloud KingKubernetes - The Cloud King
Kubernetes - The Cloud King
 
Machine Learning ¿A TODO GAS? con GraalVM
Machine Learning ¿A TODO GAS? con GraalVMMachine Learning ¿A TODO GAS? con GraalVM
Machine Learning ¿A TODO GAS? con GraalVM
 

Último

editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
ssusere34b451
 

Último (20)

Unidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdfUnidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdf
 
Gestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL ServerGestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL Server
 
herramientas informaticas mas utilizadas
herramientas informaticas mas utilizadasherramientas informaticas mas utilizadas
herramientas informaticas mas utilizadas
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
Licencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de SoftwareLicencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de Software
 
¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf
 
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdfPons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
 
CIBERSEGURIDAD Y SEGURIDAD INFORMATICA .
CIBERSEGURIDAD Y SEGURIDAD INFORMATICA .CIBERSEGURIDAD Y SEGURIDAD INFORMATICA .
CIBERSEGURIDAD Y SEGURIDAD INFORMATICA .
 
Introducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptxIntroducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptx
 
manual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdfmanual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdf
 
proyectos_social_y_socioproductivos _mapas_conceptuales
proyectos_social_y_socioproductivos _mapas_conceptualesproyectos_social_y_socioproductivos _mapas_conceptuales
proyectos_social_y_socioproductivos _mapas_conceptuales
 
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
Bloque 1 _ Lectura base - Sistemas Distribuidos
Bloque 1 _ Lectura base - Sistemas DistribuidosBloque 1 _ Lectura base - Sistemas Distribuidos
Bloque 1 _ Lectura base - Sistemas Distribuidos
 
Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.
 

Codemotion 2021 - The Rustalorian: Este es el camino