Soy Pedro Gallino estudiante de Ingeniería informática en la Facultad de Ingeniería de la UBA (FIUBA) 📚
Simulador gráfico educativo de redes de computadoras, diseñado para ayudar a estudiantes a comprender conceptos fundamentales de redes de manera interactiva. Permite visualizar el flujo de paquetes y experimentar con escenarios de red, facilitando el aprendizaje práctico.
- Simulación de capas de transporte, red y enlace, con abstracción de otras capas para un enfoque modular.
- Interfaz gráfica interactiva, optimizada para estudiantes sin experiencia en redes.
- Aplicación web client-side, desarrollada en TypeScript.
- Basado en el modelo top-down del libro Computer Networking: A Top-Down Approach.
Sistema distribuido diseñado para procesar y analizar datos de Steam en paralelo. Recibe datasets sobre juegos y reseñas y ejecuta consultas predefinidas, como identificar los juegos con más reseñas positivas o aquellos con mayor tiempo de juego.
- Pipeline distribuido con nodos especializados en filtrado, conteo y unión de datos.
- Comunicación vía RabbitMQ para coordinar los nodos de procesamiento.
- Optimizado para entornos de multicomputing, permitiendo escalabilidad horizontal con Docker y Docker Compose.
- Tolerancia a fallos con réplicas y monitoreo automático mediante Watchdog.
Heladería Robotizada: Sistema distribuido que simula el procesamiento concurrente de pedidos en una heladería automatizada. El sistema está diseñado para ser altamente concurrente y tolerante a fallos, coordinando múltiples robots que preparan pedidos de manera eficiente.
- Procesamiento concurrente de pedidos mediante múltiples robots trabajando en paralelo.
- Elección de líder con el algoritmo Bully, permitiendo resiliencia ante fallos y asegurando la continuidad operativa.
- Modelo centralizado con distribución de carga, optimizando la asignación de pedidos y evitando sobrecarga en la comunicación.
- Mecanismos de tolerancia a fallos, garantizando que el sistema continúe funcionando incluso si robots o pantallas fallan.
- Implementación en Rust, aprovechando concurrencia y sincronización eficiente entre procesos.
File Transfer: Desarrollo de una aplicación cliente-servidor que garantiza la transferencia fiable de archivos sobre la red utilizando UDP y técnicas de retransmisión.
- Implementación de un protocolo confiable sobre UDP mediante Stop-And-Wait y Go-Back-N.
- Arquitectura Cliente-Servidor Multi-thread, permitiendo concurrencia y múltiples clientes simultáneos.
- Mecanismo de detección y recuperación de pérdida de paquetes.
- Simulación de condiciones adversas en la red utilizando Comcast para evaluar rendimiento y confiabilidad.
- Pruebas con Mininet y topologías personalizadas.
Left4Dead2D: Juego online en C++ con arquitectura cliente-servidor, utilizando sockets y threads.
- Cliente multi-threaded, con hilos independientes para recepción y envío de datos.
- Servidor concurrente, gestionando múltiples clientes de manera eficiente.
- Manejo de memoria seguro con RAII, evitando fugas de memoria y asegurando recursos correctamente.
- Renderizado con SDL2, optimizando gráficos y animaciones.
Trabajos Prácticos sobre Sockets y Threads. Cliente-Servidor. (C++).
TP1: Implementación de una Shell.
TP2: Implementación de un Scheduler.
TP3: Implementación de un FileSystem FUSE para un sistema operativo Unix-Like. (C y Assembly)
Machine learning: Clasificación y Regresión - Métricas y Errores - Linear y logistic regression, KNN, Árboles, Random Forest y XGBoost - Feature Engineering. (python scikit-learn)
Trabajo práctico: Modelo para predecir si un hongo es venenoso o no.
Machine learning: Hongo venenoso
Análisis de Datos: Pandas - Spark - visualización de datos - NLP. (python).
Trabajo práctico: Modelo para predecir si un paciente es fumador o no.
Machine learning: Fumador o no.
Desarrollo de un sistema de gestión web de proyectos y tickets para una empresa ficticia PSA.
Inicialmente se descubrió el producto a desarrollar mediante técnicas de la Ingeniería de requisitos: Entrevistas - Backlog (Historias de usuario y criterios de aceptación) - Modelo de Dominio - Modelo C4 - Modelo de Datos - Organigrama - Onion Model - Minutas - Matriz de trazabilidad - Prototipos.
Finalmente se implementó utilizando: API-REST - React-js - TailWindcss - Java - SpringBoot - Gherkin.
Desarrollo de App similar a splitwise con el fin de aplicar técnicas de gestión del desarrollo de sistemas informáticos.
Modelos en etapas, iterativos, incrementales, ágiles y de flujo continuo. Procesos clásicos de la administración de proyectos: gestión de alcance, tiempos, costos y calidad.
Busqueda Exhaustiva - Problemas greedy - División y conquista - Teorema del maestro - Programación dinámica - Flujo en redes - Reducciones - Certificados - Problemas NP completos - Algoritmos randomizados - Algoritmos de aproximación - Análisis amortizado - Computabilidad.
Programación orientada a objetos. (Java - Smalltalk)
MiniJuego siguiendo los lineamientos de POO.
Implementación de tipos de dato Abstracto (TDA): Árboles - hash - Grafo - Heap - lista - pila - cola.
Recursividad - Fuerza bruta - Manejo de memoria - Algoritmos sobre grafos (C - Python)
Minijuego Pokedex (python).
Minijuego Batallas Pokemon. (python)