Compare commits

..

7 Commits

Author SHA1 Message Date
660a5690ee arreglado scroll de la pagina diego hdp 2025-10-20 17:49:31 -03:00
7aedaac585 añadida paginas de proyecto y CV 2025-07-05 00:08:51 -03:00
9826085cb1 añadida pagina para los posts 2025-06-18 16:14:17 -03:00
66f53c9fbf arreglada una cosa 2025-05-29 19:13:36 -03:00
883d065090 configurado para pushear public 2025-05-23 11:07:27 -03:00
27b1134cf4 chore 2025-05-23 10:48:27 -03:00
70713a2fd1 añadidos posts 2025-05-23 10:47:44 -03:00
82 changed files with 4993 additions and 343 deletions

1
.gitignore vendored
View File

@@ -1 +0,0 @@
/public

View File

@@ -1,3 +1,4 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

View File

@@ -0,0 +1,20 @@
---
title: "Coord Keeper"
description:
date: 2025-03-19T02:53:57-03:00
image: cover.png
math:
tags: ["DevLog"]
license:
hidden: false
comments: true
draft: false
---
# Motivacion
He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el <kbd>f3</kbd>) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo.... hacer una app de react.
Así que presento Coord-Keeper una app nefasta de React para guardar, compartir y importar Coordenas de minecraft. !!!11!!!
Esta disponible en [Coord-keeper](/coords)
su [codigo fuente](/git/fede/coord-keeper) esta en mi instancia de gitea.

View File

@@ -0,0 +1,93 @@
---
layout: post
title: "Diseño de Software Incident"
date: 2023-09-22T15:08:17+08:00
tags: ["old_blog"]
math: false
draft: false
---
# Instanciacion del SqlConnection
```csharp
using (var connection = new SqlConnection(configuration.GetConnectionString("DefaultConnection")))
```
Eso genera un sql connection que va a existir hasta que salga del scope del programa.
# Creacion del SqlCommand
```csharp
using var command = new SqlCommand();
command.CommandText = "sp_RecuperaProductos";
command.CommandType = System.Data.CommandType.StoredProcedure;
```
# Apertura de la coneccion
```csharp
command.Connection = connection;
command.Connection.Open();
```
## Utilizacion del ExecuteReader
Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. **MUY** importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).
```csharp
var reader = command.ExecuteReader();
while (reader.Read())//lee a traves de todas las filas que existen en la tabla
{
//por cada fila que creo tengo que asignar manualmente cada columna con cada propiedad
var producto = new Producto();
producto.Codigo = reader["Codigo"].ToString();
producto.Nombre = reader["Nombre"].ToString();
producto.Cantidad = Convert.ToInt32(reader["Cantidad"].ToString());
producto.CantidadMinima = Convert.ToInt32(reader["CantidadMinima"].ToString());
producto.Precio = Convert.ToDecimal(reader["Precio"].ToString());
var codigoCategoria = reader["CodigoCategoria"].ToString();
producto.Categoria = RepositorioCategorias.Instancia.RecuperarCategorias().FirstOrDefault(c => c.Codigo == codigoCategoria);
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
using var commandProveedores = new SqlCommand();
//otra forma de hacerlo es usando Store Procedures
commandProveedores.CommandText = "sp_RecuperarProveedoresProducto";
commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
commandProveedores.Parameters.Add("@CodigoProducto", System.Data.SqlDbType.NVarChar,25).Value = producto.Codigo;
/////////////////////////
commandProveedores.Connection = connection;
var readerProveedoresProducto = command.ExecuteReader();
while (readerProveedoresProducto.Read())//lee a traves de todas las filas que existen en la tabla
{
var codigoProveedor = readerProveedoresProducto["CodigoProveedor"].ToString();
var proveedor = RepositorioProveedores.Instancia.RecuperarProveedores().FirstOrDefault(x => x.Codigo == codigoProveedor);
producto.AgregarProveedor(proveedor);
//una vez cargado el objeto completo lo agrego a la coleccion
}
productos.Add(producto);
}
```
# Cerrado de la coneccion
NOTA: no ser mamerto y cerrar la coneccion fuera del while-loop.
```csharp
command.Connection.Close();
```
# Sub-Query
```csharp
using var commandProveedores = new SqlCommand();
commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
commandProveedores.CommandText = "SP_AGREGARPROVEEDORPRODUCTO";
commandProveedores.Connection = connection;
commandProveedores.Transaction = sqlTransaction;
commandProveedores.Parameters.Add("@CodigoProducto", System.Data.SqlDbType.NVarChar,25).Value = producto.Codigo;
commandProveedores.Parameters.Add("@CodigoProveedor", System.Data.SqlDbType.NVarChar, 25);
foreach (var proveedor in producto.Proveedores)
{
commandProveedores.Parameters["CodigoProveedor"].Value = proveedor.Codigo;
commandProveedores.ExecuteNonQuery();
}
```
# Non-Query
Un query es una consulta de tipo UPDATE, INSERT, DELETE, para el ExecuteNonQuery se devuelve la cantidad de ramas afectadas, menos en el uso de un StoredProcedure donde devuelve -1.
# Notas
> " Si compila y anda, aprueba " ~Laureano

View File

@@ -0,0 +1,11 @@
---
title: "Experimento Gtk3 + Rust"
description:
date: 2024-10-15T19:29:43-03:00
image:
math:
license:
hidden: false
comments: true
draft: true
---

View File

@@ -0,0 +1,71 @@
---
title: "Fix Screen Tear x11"
date: 2024-11-09T13:28:17+08:00
tags: ["Fix"]
image: cover.jpg
math: false
draft: false
---
# ¿Que es el screen tear?
buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.
![Imagen sacada de google donde se demuestra el screen tear](https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb)
Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.
# Solucion
Esto Parece suceder porque muchos [WindowManagers](https://en.wikipedia.org/wiki/X_window_manager) de linux muestran un frame nuevo independientemente de si la gpu logró terminar de dibujar el proximo frame(buffer).
Encontré un parametro que se le puede pasar al X11 para evitar que se muestre un frame que la gpu aun no termino de actualizar.
## Cosas que necesitamos
1. Tener `inxi` instalado
En Arch se puede instalar con un
```
sudo pacman -S inxi
```
y supongo que lo mismo pero reemplazando `pacman -S` por `apt install` en distros debian-base.
2. Necesitamos editar uno(o dos) archivos en el **/usr/share/**
Asi que verifica que tengas permisos para poder escribir en ese path.
## Paso a Paso
1. Executamos `inxi -G`.
Con esto nos daremos cuenta de que tipo de grafica tenemos. En mi caso es una integrada amd
```
i ➜ ~ inxi -G
Graphics:
Device-1: Advanced Micro Devices [AMD/ATI] Lucienne driver: amdgpu v: kernel
```
Por lo que el archivo que tengo que editar es "/usr/share/X11/xorg.conf.d/10-amdgpu.conf"
```
Section "OutputClass"
Identifier "AMDgpu"
MatchDriver "amdgpu"
Driver "amdgpu"
Option "HotplugDriver" "amdgpu"
EndSection
```
Donde añado la opcion "TearFree" "on"
```
Section "OutputClass"
Identifier "AMDgpu"
MatchDriver "amdgpu"
Driver "amdgpu"
Option "HotplugDriver" "amdgpu"
Option "TearFree" "on"
EndSection
```
Demostracion de como queda
![demo tear resuelto](./tear.gif)

View File

@@ -0,0 +1,25 @@
---
title: 'Imagenes: Color a b&w'
date: 2023-09-23T10:35:18-03:00
draft: false
tags: ["old_blog"]
---
# Gimp
Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar **Gimp** con la opcion de `Color > Desaturacion > Color a gama de grises`. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.
![Comparación](/fedecomp.png)
# ImageMagick
> Es un conjunto de utilidades de código abierto para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.
Una de esas utilidades es llamada `convert`, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada `-colorspace` la cual si le damos el parametro **Gray** la imagen resultante estará representada en una gama de grises.
![Imagen en gama de grises](/fedeg.jpg)
## Nota
Tambien se puede usar la flag `-monocrome` pero esta da un resultado el cual no me termina de gustar, a continuacion doy un par de muestras de como queda,
![Imagen monocroma](/fedebw.jpg)
# Opcion web
Existe [esta](https://pinetools.com/es/imagen-escala-grises) pagina en la cual para generar la imagen en gama de grises solo hay que poner la imagen y darle a **Aplicar**.
![Gama de grises demo](/gamaDeGrises.jpg)

View File

@@ -0,0 +1,14 @@
---
layout: post
title: "RetroArchivements"
date: 2023-09-22T13:30:17+08:00
tags: ["old_blog"]
math: false
draft: false
---
Hace ya un par de dias que estoy usando un [servicio](https://retroachievements.org/user/fedpo2) que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.
Uno de los que estoy jugando es `Kirby's dream land 2`
![kirby](https://media.retroachievements.org/Images/046585.png)

View File

@@ -0,0 +1,9 @@
---
title: 'ServerMC'
date: 2023-10-27T08:34:58-03:00
tags: ["old_blog"]
draft: true
---
# ¿Que es?
En despues de navidad voy a estar hosteando un server de minecraft (si otra vez 🙄), con varios mods del lado de servidor

View File

@@ -0,0 +1,40 @@
---
title: "Sistema Alquileres DevLog n1"
date: 2024-11-10T00:08:17+08:00
tags: ["DevLog"]
image: cover2.png
math: false
draft: false
---
# ¿Que es esto?
Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de "Ingenieria de Software" (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.
Ahí arriba describi solo 2 o 3 de los casi 26 casos de uso que tengo descriptos. Además voy a reutilizar los conocimiento que adquirí haciendo el panel de control para la materia de base de datos.
> Se vienen cositas
Bueno ahora voy a hacer un mini-informe sobre el modulo de seguridad
# Permisos para los clientes
Cito de la entrega del segundo parcial.
>En cuanto a como va el desarrollo, te diria que bien encaminado, actualmente estoy usando svelte/bootstrap para el front y aspnet core 8 ( ? ) para el backend. ya tengo definido que acciones puede hacer un cliente en el sistema mediante un sistema usuario-grupo-permiso Similar a como los permisos son definidos en linux (donde por ejemplo un usuario para poder acceder al uso del audio del servidor necesita estar en un grupo "audio" o para escribir a un almacenamiento en cinta necesita pertenecer al grupo "tape") En mi proyecto por ahora tengo 3 grupos que consisten en los 3 actores que tengo definidos (inquilino, propietario, administracion). Entonces cuando checkeo por si un cliente tiene acceso a un permiso lo puedo averiguar de forma sencilla:
```csharp
var permisos = con.Clientes
.Where(c => c.Dni == cli.Dni)
.SelectMany(c => c.Idgrupos)
.SelectMany(g => g.Idpermisos)
.Distinct();
```
Esto dandome una lista de todos los permisos que posee el cliente.
Tambien tengo hechos los abm de inquilino/propietario pero hay menos que comentar sobre eso.
# Almacenamiento de Contratos de Alquiler
Un requisito que considero muy importante es almacenamiento de los contratos de alquiler. En una primera instancia pense que almacenarlos en un campo blob de mysql podia ser factible pero entre lo que escuché sobre que hace los backups de la base de datos gigantes y el hecho de que estaria haciendo una query a la base de datos para obtener, ponele, 3MB me parece un montón
Almacenarlos con un fileserver simple como [Miniserve](https://github.com/svenstaro/miniserve) que es una excelente herramienta si bien para casos donde tenes un solo servidor pareceria masomenos pasable al final termina no siendo tan buena idea si llegas a necesitar algo minimanente distribuido o que maneje permisos.
Así fue como luego de preguntarle a un amigo y a chatgpt. me decidí por darle una oportunidad a [Minio](https://min.io/) que es una alternativa "S3 pero hosteado en casa". tengo mucho que aprender aún sobre s3 porque tengo solo una idea general de como funciona. Así que voy a dejar una update de esto en unos dias o semanas (no hay chances que sea consistente publicando acá) sobre como va esto. bye.

View File

@@ -0,0 +1,28 @@
---
layout: post
title: "Proximamente: Server Terraria"
date: 2023-09-22T22:24:17+08:00
math: false
draft: true
---
# Anuncio
En los proximos dias voy a estar armando un server de terraria, estoy armando una lista con un par de mods que vamos a poner para ese entonces.
## Mods
A continuacion voy a tirar una lista preliminar de los mods que tengo pensado utilizar:
- [X] **Magic Storage**
Este es uno que no puede faltar _literal_.
- [X] **Calamity**
Tengo pensado poner la versión con Música pero voy a ver si me lo tira la ram ( seguro que sí ).
- [X] **Wing Slot**
Me genera un dilema _Moral_ usar un mod que añada item slots pero creo que este pasa.
- [X] **Boss Checklist**
Sin este mod me voy a terminar acordando de invocar a la reina slime **post-moonlord**.
### Sugerencias
Estoy abierto a que tiren posibles candidatos para añadir a la lista de mods.
## Invitados
- [X] Si estas leyendo esto estás invitado al server de Terraria cuando arranque.

View File

@@ -0,0 +1,15 @@
---
title: 'Anuncio Aoc 2023'
date: 2023-10-03T12:54:22-03:00
tags: ["old_blog"]
draft: false
---
# ¿Que es Advent of Code?
Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:
- Preparacion de entrevistas.
- Training en empresas.
- Practica para familiarizarse con nuevos lenguajes de programacion.
- _etc..._
# Que tengo pensado
Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando `zig` como un ejercicio para aprender ese lenguaje de programacion `(aunque de forma básica)`.

View File

@@ -0,0 +1,15 @@
---
title: 'Bootloader Incident'
date: 2023-09-26T22:27:20-03:00
tags: ["old_blog"]
draft: false
---
# El inicio de la catastrofe
En pocas palabras, **Nunca Corten Un `pacman -Syu`**.
Si utilizan **arch** sabrán que se pueden configurar 'hooks' antes y despues de las operaciones con el comando `pacman`, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la **UEFI**.
# Posibles Soluciones
## Opcion Atomica
Consiste en reinstalar linux desde 0. ( pero no desde scratch 😳 ). Obviamente es una terrible idea pero es una a la que en otro momento antes de haber aprendido a usar arch hubiera solucionado de esa forma.
## Lo que termine haciendo
Gracias a que tenia una lectora de dvds con un dvd de Linux, pude utilizar `mount` y `chroot` para acceder a la particion con todos mis datos, una vez en este punto reinstalé el kernel (`pacman -S linux`) para que se activen los hooks que corresponden a actualizar la información sobre las opciones de arranque del bootloader.

View File

@@ -0,0 +1,21 @@
---
title: "Primer Post"
date: 2023-09-22T12:28:17+08:00
tags: ["old_blog"]
math: false
draft: false
---
# buenas
buenas
Luego de sufrir bastante con el nginx y su *Reverse Proxy*, finalmente me decidí por poner la pagina del blog en el **WebRoot** y el _gitea_ en un subfolder.
## Como funciona esto
El programa que estoy usando para hacer este blog se llama [Hugo](https://gohugo.io), consiste de una especie de parceador de [Markdown](https://www.markdownguide.org/) a Html estático el cual hosteo con este [webServer](https://nginx.org/en/).
### Como hago nuevos posts
Dentro de la carpeta del proyecto del server hay una que se llama content, todos los `.md` que haya ahí cuando utilizo el comando:
```bash
hugo
```
se genera el html de la paginas del blog las cuales copio usando rsync dentro de la intranet de mi casa
> Luraschi no me robes las llaves del ssh🙏.

View File

@@ -0,0 +1,22 @@
---
layout: post
title: "String Interpolation"
date: 2023-10-24T22:24:17+08:00
tags: ["old_blog"]
math: false
draft: false
---
# ¿Que es?
Es un proceso de evaluado, en el cual se reemplazan placeholders en `string` por valores, en nuestro caso, de variables en momento de ejecución.
# Sintaxis
var manzanas = 4;
var bananas = 3;
Console.WriteLine($"Tengo {manzanas} manzanas");
Console.WriteLine($"Vendí {manzanas + bananas} frutas");
> Basicamente son plantillas.

View File

@@ -0,0 +1,52 @@
---
date : '2025-05-02T02:10:53-03:00'
draft : false
title : 'Gestor de Stock'
---
Este sistema de gestión de inventario está desarrollado en C# utilizando Windows Forms. La aplicación permite administrar eficientemente el stock de productos, registrar ventas, gestionar pedidos a proveedores y verificar remitos de entrega.
## Características Principales
### Gestión de Productos
- Alta, baja y modificación de productos
- Categorización de inventario
- Control de stock mínimo y máximo
- Alertas de stock bajo
### Registro de Ventas
- Generación de facturas
- Historial de ventas
- Seguimiento de productos vendidos
- Estadísticas de ventas
### Pedidos a Proveedores
- Creación automática de órdenes de compra
- Seguimiento de pedidos pendientes
- Historial de pedidos
### Verificación de Remitos
- Control de recepción de mercadería
- Validación de cantidades y productos
- Registro de discrepancias
- Alertas de productos faltantes
- Conformidad de recepción
## Tecnologías Utilizadas
- C# (.NET Framework)
- Windows Forms
- SQL Server (Base de datos)
- Entity Framework
## Capturas de Pantalla (WIP)
*(Aquí se insertarían capturas de las principales pantallas del sistema)*
## Requisitos del Sistema
- Windows 7 o superior
- .NET core 6
- 4 GB de RAM (recomendado) //podrias con menos pero no se si windows puede bootear en menos de 4gb
## Contacto
Para más información sobre este sistema de gestión de stock, contácteme a través de:
- Email: federico.nicolas.polidoro@gmail.com
- GitHub: github.com/fedpo2

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -0,0 +1,19 @@
---
date : '2025-05-02T01:47:53-03:00'
draft : false
title : 'CoordKeeper'
image : 'index.png'
---
es una aplicación web desarrollada con React diseñada específicamente para jugadores de Minecraft. Esta herramienta permite a los usuarios almacenar, organizar y gestionar fácilmente las coordenadas de ubicaciones importantes dentro del juego.
## Características
- Almacenamiento de coordenadas X, Y, Z de lugares importantes
- Organización por Dimensiones
- Interfaz intuitiva y fácil de usar
- Acceso rápido a tus coordenadas guardadas
Ya no tendrás que depender de notas dispersas o capturas de pantalla para recordar dónde encontraste ese templo submarino o aquella cueva de diamantes. CoordKeeper mantiene toda esta información organizada en un solo lugar.
Visita el [repositorio](https://git.sr.ht/~fedpo/Coord-Keeper-Minecraft) para más información o para contribuir al proyecto.

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

View File

@@ -0,0 +1,71 @@
---
date : '2025-05-02T02:13:53-03:00'
draft : false
title : 'Panel Web'
---
Este panel web es una herramienta de visualización y análisis de datos para una cadena hotelera, desarrollado como trabajo final para el curso de Base de Datos Aplicada. El sistema permite explorar métricas clave de rendimiento a través de una estructura jerárquica de tres niveles.
## Arquitectura Técnica
### Backend
- ASP.NET Core 7
- Entity Framework Core para acceso a datos
- API RESTful para comunicación con el frontend
- Autenticación JWT para seguridad
### Frontend
- React (18.x)
- Material UI para componentes de interfaz
- ChartJS para visualización de datos
- React Router para navegación entre secciones
## Estructura de Navegación (Drilling)
El panel implementa un sistema de navegación jerárquica de tres niveles:
### Nivel 1: Cadena Hotelera
- Nombre de la cadena hotelera
### Nivel 2: Locación/Hotel Específico
- Datos detallados de cada propiedad
### Nivel 3: Estadísticas Detalladas
- Análisis profundo de datos operativos
- Reportes especializados
## Características Principales
- **Dashboards Interactivos**: Gráficos dinámicos con ChartJS para visualización intuitiva de datos.
- **Filtros Avanzados**: Capacidad de filtrar datos por fecha, categoría de habitación, y segmento de cliente.
- **Alertas Personalizables**: Notificaciones cuando métricas clave superan umbrales definidos.
- **Responsive Design**: Adaptable a dispositivos móviles y tablets para monitoreo en movimiento.
## Modelo de Datos
El sistema se basa en un esquema relacional que incluye las siguientes entidades principales:
- Cadenas Hoteleras
- Hoteles/Propiedades
- Habitaciones
- Reservas
- Clientes
- Servicios
- Facturación
## Capturas de Pantalla (WIP)
*[Aquí se incluirían capturas de pantalla del panel mostrando los tres niveles de navegación y diferentes visualizaciones]*
## Implementación
El proyecto ha sido desarrollado siguiendo una metodología ágil, con énfasis en:
- Normalización de la base de datos
- Optimización de consultas para grandes volúmenes de datos
- Implementación de procedimientos almacenados para operaciones complejas
- Medidas de seguridad para protección de datos sensibles
## Conclusiones
Este panel web demuestra la aplicación práctica de conceptos avanzados de bases de datos relacionales en un entorno empresarial del sector hotelero, proporcionando una herramienta valiosa para la toma de decisiones basada en datos.

View File

@@ -1,6 +1,6 @@
baseURL = 'https://example.org/'
baseURL = 'https://fedesrv.ddns.net/'
languageCode = 'en-us'
title = 'My New Hugo Site'
title = 'Blog Fede'
[params]
author = "Federico Polidoro"

View File

@@ -2,17 +2,22 @@
"htmlElements": {
"tags": [
"a",
"article",
"blockquote",
"body",
"br",
"button",
"code",
"defs",
"dialog",
"div",
"em",
"footer",
"h1",
"h2",
"h3",
"head",
"header",
"hr",
"html",
"img",
@@ -22,6 +27,7 @@
"main",
"meta",
"nav",
"ol",
"p",
"path",
"pre",
@@ -29,65 +35,47 @@
"span",
"stop",
"strong",
"style",
"svg",
"title",
"ul"
],
"classes": [
"absolute",
"active:z-0",
"animate-bounce",
"bg-[radial-gradient(circle,rgba(0,0,0,0)_0%,rgba(0,0,0,0.5)_70%,#ffffff_100%),repeating-linear-gradient(45deg,#000000,#000000_10px,#ffffff_10px,#ffffff_20px)]",
"bg-[repeating-linear-gradient(transparent,transparent_27px,#333_28px)]",
"bg-[size:100%_28px]",
"bg-black",
"bg-blue-500",
"bg-blue-300",
"bg-cyan-200",
"bg-gray-200",
"bg-gray-600",
"bg-gray-700",
"bg-gray-800",
"bg-opacity-50",
"bg-sky-200",
"bg-sky-300",
"bg-sky-600",
"bg-white",
"border",
"border-2",
"border-3",
"border-4",
"border-black",
"border-gray-400",
"border-t",
"bottom-8",
"container",
"dark:bg-[radial-gradient(circle,rgba(0,0,0,0)_0%,rgba(0,0,0,0.7)_70%,#333333_100%),repeating-linear-gradient(45deg,#000000,#000000_10px,#333333_10px,#333333_20px)]",
"dark:bg-[repeating-linear-gradient(transparent,transparent_27px,#666_28px)]",
"cursor-context-menu",
"dark:bg-[repeating-linear-gradient(transparent,transparent_27px,#aaa_28px)]",
"dark:bg-[repeating-linear-gradient(transparent,transparent_27px,#ccc_28px)]",
"dark:bg-black",
"dark:bg-blue-600",
"dark:bg-cyan-500",
"dark:bg-cyan-800",
"dark:bg-emerald-500",
"dark:bg-emerald-950",
"dark:bg-gray-600",
"dark:bg-gray-700",
"dark:bg-gray-800",
"dark:bg-gray-900",
"dark:bg-sky-950",
"dark:bg-slate-600",
"dark:bg-white",
"dark:bg-zinc-800",
"dark:bg-zinc-900",
"dark:border-gray-600",
"dark:border-gray-700",
"dark:border-white",
"dark:hover:bg-gray-500",
"dark:hover:text-blue-300",
"dark:shadow-[0_4px_6px_-1px_rgb(200,200,200)]",
"dark:shadow-[0_4px_6px_-1px_rgba(0,0,0,0.5)]",
"dark:text-blue-400",
"dark:text-gray-200",
"dark:text-gray-300",
"dark:text-gray-400",
"dark:text-white",
"duration-100",
"duration-200",
"duration-300",
"ease-in",
"ease-in-out",
"ease-linear",
"fixed",
"flex",
"flex-col",
@@ -95,34 +83,46 @@
"font-light",
"font-medium",
"font-mono",
"font-sans",
"font-semibold",
"font-serif",
"gap-2",
"gap-4",
"gap-6",
"grayscale",
"grid",
"grid-cols-1",
"h-16",
"h-48",
"h-5",
"h-6",
"h-[20rem]",
"h-[80%]",
"h-auto",
"h-full",
"h-screen",
"hidden",
"highlight",
"hover:bg-blue-600",
"hover:bg-gray-600",
"hover:bg-gray-700",
"hover:-translate-y-1",
"hover:-translate-y-2",
"hover:grayscale-0",
"hover:rotate-z-2",
"hover:scale-105",
"hover:scale-120",
"hover:shadow-[0_8px_0_black]",
"hover:shadow-xl",
"hover:text-blue-700",
"hover:text-blue-900",
"hover:text-white",
"inline",
"hover:z-2",
"inline-block",
"inset-0",
"items-center",
"justify-between",
"justify-center",
"lg:grid-cols-3",
"lg:text-5xl",
"m-4",
"max-w-4xl",
"mb-2",
"mb-4",
"mb-6",
@@ -132,95 +132,143 @@
"md:hidden",
"md:text-4xl",
"md:text-xl",
"ml-4",
"mr-2",
"mt-12",
"mt-8",
"mt-16",
"mt-2",
"mt-6",
"muted",
"mx-auto",
"object-cover",
"opacity-100",
"overflow-hidden",
"p-1",
"p-12",
"p-2",
"p-4",
"p-5",
"p-8",
"pt-5",
"px-2",
"px-3",
"px-4",
"px-6",
"py-1",
"py-16",
"py-2",
"py-3",
"py-4",
"py-6",
"py-8",
"right-0",
"rounded",
"rounded-b-full",
"rounded-full",
"rounded-lg",
"rounded-md",
"rounded-t-full",
"rounded-t-lg",
"self-center",
"shadow-2xl",
"shadow-[0_4px_0_black]",
"shadow-[0_4px_6px_-1px_rgb(107,114,128)]",
"shadow-md",
"shadow-xl",
"shadow-xl/30",
"sm:flex",
"sm:flex-row",
"sm:mb-0",
"text-2xl",
"text-4xl",
"text-6xl",
"text-black",
"text-blue-500",
"text-blue-700",
"text-center",
"text-gray-300",
"text-gray-500",
"text-gray-600",
"text-gray-700",
"text-sm",
"text-white",
"text-xl",
"text-xs",
"top-0",
"top-16",
"transform",
"transition",
"transition-colors",
"transition-shadow",
"transform-3d",
"transition-all",
"transition-transform",
"translate-x-full",
"underline",
"w-100",
"w-22",
"w-5",
"w-6",
"w-64",
"w-[2px]",
"w-[50%]",
"w-[80%]",
"w-fit",
"w-full",
"w-screen",
"z-0",
"z-1"
"z-3",
"z-50"
],
"ids": [
"1.gif",
"1.png",
"2.png",
"almacenamiento-de-contratos-de-alquiler",
"apertura-de-la-coneccion",
"arquitectura-técnica",
"backend",
"buenas",
"capturas-de-pantalla-wip",
"características",
"coordkeeper",
"darkModeIcon",
"darkModeToggle",
"descripción",
"características-principales",
"cerrado-de-la-coneccion",
"como-funciona-esto",
"como-hago-nuevos-posts",
"conclusiones",
"contacto",
"cosas-que-necesitamos",
"creacion-del-sqlcommand",
"el-inicio-de-la-catastrofe",
"gestor-de-stock---sistema-de-inventario",
"estructura-de-navegación-drilling",
"frontend",
"gestión-de-productos",
"gimp",
"grad",
"imagemagick",
"implementación",
"instanciacion-del-sqlconnection",
"lightModeIcon",
"moonIcon",
"lo-que-termine-haciendo",
"modelo-de-datos",
"motivacion",
"nivel-1-cadena-hotelera",
"nivel-2-locaciónhotel-específico",
"nivel-3-estadísticas-detalladas",
"non-query",
"nota",
"notas",
"offCanvas",
"opcion-atomica",
"opcion-web",
"paso-a-paso",
"pedidos-a-proveedores",
"permisos-para-los-clientes",
"posibles-soluciones",
"que-es",
"que-es-advent-of-code",
"que-es-el-screen-tear",
"que-es-esto",
"sistema-de-inventario",
"sunIcon",
"themeIcon",
"themeStatus",
"themeToggle"
"que-tengo-pensado",
"registro-de-ventas",
"requisitos-del-sistema",
"sintaxis",
"solucion",
"sub-query",
"tecnologías-utilizadas",
"utilizacion-del-executereader",
"verificación-de-remitos"
]
}
}

View File

@@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ .Title }}</title>
<link rel="stylesheet" href="{{ "css/main.css" | resources.Get | css.PostCSS | resources.Minify | resources.Fingerprint | relURL }}">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
@@ -15,6 +16,5 @@
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© {{ now.Year }} {{.Site.Params.Author}}
</footer>
</body>
</html>

View File

@@ -1,115 +1,7 @@
{{ define "main" }}
<nav class="bg-gray-800 fixed w-full top-0 z-1">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<!-- Desktop Menu -->
<div class="hidden md:flex">
<a
href="/Blog"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Blog</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<!-- Mobile Menu Button -->
<div class="md:hidden">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<!-- Off-canvas Menu -->
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/Blog"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Blog</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
{{ partial "nav.html" . }}
<div
class="rounded flex dark:bg-black justify-center items-center h-screen w-screen bg-[repeating-linear-gradient(transparent,transparent_27px,#333_28px)] dark:bg-[repeating-linear-gradient(transparent,transparent_27px,#aaa_28px)] bg-[size:100%_28px] shadow-[0_4px_6px_-1px_rgb(107,114,128)]"
class="rounded flex dark:bg-black justify-center items-center h-screen w-full bg-[repeating-linear-gradient(transparent,transparent_27px,#333_28px)] dark:bg-[repeating-linear-gradient(transparent,transparent_27px,#aaa_28px)] bg-[size:100%_28px] shadow-[0_4px_6px_-1px_rgb(107,114,128)]"
>
<div
class="bg-cyan-200 dark:bg-emerald-500 border-2 dark:border-white rounded-lg p-2"
@@ -146,7 +38,10 @@
</div>
</div>
<hr class="m-4" />
<div class="flex justify-center p-8">
<!-- Aca esta la parte de abajo de la portada -->
<div class="flex justify-center p-8 flex-col items-center bg-sky-200 rounded-t-lg shadow-md">
<div
class="w-[80%] rounded-lg overflow-hidden border-2 shadow-2xl bg-[radial-gradient(circle,rgba(0,0,0,0)_0%,rgba(0,0,0,0.5)_70%,#ffffff_100%),repeating-linear-gradient(45deg,#000000,#000000_10px,#ffffff_10px,#ffffff_20px)]"
>
@@ -165,100 +60,7 @@
</span>
</div>
</div>
</div>
<div class="container mx-auto px-4 py-8">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{{ range first 3 (where .Site.RegularPages "Section" "proyectos") }}
<div
class="bg-white rounded-lg shadow-md overflow-hidden border hover:shadow-xl transition-shadow duration-300"
>
{{ if .Params.image }}
<img
src="{{ .Params.image }}"
alt="{{ .Title }}"
class="w-full h-48 object-cover"
/>
{{ else }}
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500">No image</span>
</div>
{{ end }}
<div class="p-4">
<h2 class="text-xl font-bold mb-2">{{ .Title }}</h2>
<p class="text-gray-700 mb-4">
{{ with .Params.description }}{{ . | truncate 150 }}{{ else
}}{{ .Summary | truncate 150 }}{{ end }}
</p>
<div class="flex justify-between items-center">
<a
href="{{ .Permalink }}"
class="text-blue-500 hover:text-blue-700"
>Ver más</a
>
{{ with .Params.tags }}
<div class="flex flex-wrap">
{{ range first 2 . }}
<span
class="text-xs bg-gray-200 rounded-full px-2 py-1 mr-1 mb-1"
>
{{ . }}
</span>
{{ end }}
</div>
{{ end }}
</div>
</div>
</div>
{{ end }}
</div>
</div>
<div class="container mx-auto px-4 py-8">
<h2 class="text-2xl font-bold mb-6 text-center">Todos los Posts</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{{ range first 6 (where .Site.RegularPages "Section" "posts") }}
<div
class="bg-white rounded-lg shadow-md overflow-hidden border hover:shadow-xl transition-shadow duration-300"
>
{{ if .Params.image }}
<img
src="{{ .Params.image }}"
alt="{{ .Title }}"
class="w-full h-48 object-cover"
/>
{{ else }}
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500">No image</span>
</div>
{{ end }}
<div class="p-4">
<h2 class="text-xl font-bold mb-2">{{ .Title }}</h2>
<p class="text-gray-700 mb-4">
{{ with .Params.description }}{{ . | truncate 150 }}{{ else
}}{{ .Summary | truncate 150 }}{{ end }}
</p>
<div class="flex justify-between items-center">
<a
href="{{ .Permalink }}"
class="text-blue-500 hover:text-blue-700"
>Leer más</a
>
<span class="text-sm text-gray-500"
>{{ .Date.Format "Jan 2, 2006" }}</span
>
</div>
</div>
</div>
{{ end }}
</div>
{{partial "proyectos.html" .}}
{{partial "posts.html" .}}
</div>
{{ end }}

View File

@@ -0,0 +1,27 @@
<div class="rounded-t-full bg-sky-600">.</div>
<div class="flex justify-center gap-2 p-8 bg-sky-600">
{{ range .pngFiles }}
<button class="p-1 rounded bg-white transform hover:scale-120
transition-all duration-100 ease-linear border-2 hover:z-2 active:z-0" onclick="openmodal({{.}})">
<img src="{{ . }}" alt="Carousel Image" class="
h-[20rem] rounded">
</button>
{{ end }}
</div>
<div class="rounded-b-full bg-sky-600 shadow-xl/30 mb-4">.</div>
{{ range .pngFiles }}
<dialog id="{{ . }}" class="fixed inset-0 flex items-center justify-center
z-50 w-full h-full bg-black bg-opacity-50"
style="background-color: rgba(0,0,0,0.2);" onclick="openmodal({{.}})" hidden>
<img src="{{ . }}" alt="Carousel Image" class="
mt-2 p-1 bg-white border-2
h-[80%] rounded-md opacity-100">
</dialog>
{{ end }}
<script>
function openmodal(id){
let dialog = document.getElementById(id);
dialog.toggleAttribute("hidden");
}
</script>

109
layouts/partials/nav.html Normal file
View File

@@ -0,0 +1,109 @@
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<!-- Desktop Menu -->
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<!-- Mobile Menu Button -->
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<!-- Off-canvas Menu -->
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>

View File

@@ -0,0 +1,56 @@
<div class="container mx-auto px-4 py-8">
<h2 class="text-2xl font-bold mb-6 text-center">Todos los Posts</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{{ range first 6 (where .Site.RegularPages "Section" "posts") }}
<div
class="
bg-white rounded-lg
border-4 border-black
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
hover:scale-105
transition-all duration-100 ease-linear
overflow-hidden
transform
mx-auto
hover:z-2
"
>
{{ if .Params.image }}
<img
src="{{ .Params.image }}"
alt="{{ .Title }}"
class="w-full h-48 object-cover"
/>
{{ else }}
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500 font-mono text-sm">No image</span>
</div>
{{ end }}
<div class="p-4">
<h2 class="text-xl font-bold mb-2">{{ .Title }}</h2>
<p class="text-gray-700 mb-4 font-sans">
{{ with .Params.description }}{{ . | truncate 150 }}{{ else
}}{{ .Summary | truncate 150 }}{{ end }}
</p>
<div class="flex justify-between items-center">
<a
href="{{ .Permalink }}"
class="text-blue-700 underline hover:text-blue-900 font-medium"
>Leer más</a
>
<span class="text-sm text-gray-600 font-mono">
{{ .Date.Format "Jan 2, 2006" }}
</span>
</div>
</div>
</div>
{{ end }}
</div>
</div>

View File

@@ -0,0 +1,51 @@
<div class="container mx-auto px-4 py-8">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{{ range first 3 (where .Site.RegularPages "Section" "proyectos") }}
<div
class="hover:scale-120 hover:z-2 transform-3d hover:rotate-z-2 duration-100 hover:-translate-y-2 bg-white rounded-lg shadow-md overflow-hidden border-3 hover:shadow-xl ease-in"
>
{{ if .Params.image }}
<img
src="{{path.Join .Path .Params.image}}"
alt="{{ .Title }}"
class="w-full h-48 object-cover"
/>
{{ else }}
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500">No image</span>
</div>
{{ end }}
<div class="p-4">
<h2 class="text-xl font-bold mb-2">{{ .Title }}</h2>
<p class="text-gray-700 mb-4">
{{ with .Params.description }}{{ . | truncate 150 }}{{ else
}}{{ .Summary | truncate 150 }}{{ end }}
</p>
<div class="flex justify-between items-center">
<a
href="{{ .Permalink }}"
class="text-blue-500 hover:text-blue-700"
>Ver más</a
>
{{ with .Params.tags }}
<div class="flex flex-wrap">
{{ range first 2 . }}
<span
class="text-xs bg-gray-200 rounded-full px-2 py-1 mr-1 mb-1"
>
{{ . }}
</span>
{{ end }}
</div>
{{ end }}
</div>
</div>
</div>
{{ end }}
</div>
</div>

View File

@@ -0,0 +1,13 @@
<div class="flex justify-center">
<div class="flex w-100 ">
<hr class="w-[50%] mt-6">
<p class="text-4xl">
{{if .text}}
{{.text}}
{{else}}
o
{{end}}
</p>
<hr class="w-[50%] mt-6">
</div>
</div>

59
layouts/posts/single.html Normal file
View File

@@ -0,0 +1,59 @@
{{ define "main" }}
{{ partial "nav.html" .}}
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<!-- Portada del post -->
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
{{ if .Params.image }}
<img
src="{{ .Params.Image | relURL }}"
alt="{{ .Title }}"
class="w-full h-auto object-cover"
/>
{{ else }}
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
{{ end }}
</div>
<!-- Título -->
<h1 class="text-4xl font-bold mb-4 text-center">{{ .Title }}</h1>
<!-- Metadata -->
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: {{ .Date.Format "Jan 2, 2006" }}</span>
{{ with .Params.tags }}
<div class="flex gap-2">
{{ range . }}
<span class="px-2 py-1 bg-gray-200 rounded-full">#{{ . }}</span>
{{ end }}
</div>
{{ end }}
</div>
<!-- Contenido del post -->
<article>
{{ .Content }}
</article>
<!-- Botón de volver -->
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
{{ end }}

View File

@@ -0,0 +1,42 @@
{{ define "main" }}
{{ partial "nav.html" .}}
{{ $filePath := .File.Path }}
{{ $dirPath := path.Dir $filePath }}
{{ $projectRoot := "content" }}
{{ $fullDirPath := path.Join $projectRoot $dirPath }}
{{ $files := readDir $fullDirPath }}
{{$pngs := slice}}
{{range $files}}
{{if strings.Contains .Name "index.png"}} {{continue}} {{end}}
{{if strings.Contains .Name "png" }} {{$pngs = $pngs | append .Name}} {{end}}
{{if strings.Contains .Name "gif" }} {{$pngs = $pngs | append .Name}} {{end}}
{{end}}
<style>
@font-face {
font-family: 'MiFuente';
src: url('/calamity.ttf') format('truetype');
}
header{
font-family: 'MiFuente', sans-serif;
}
</style>
<div class="mt-16 bg-sky-300">
<header class="text-center text-6xl pt-5">{{.Title}}</header>
{{ partial "separador.html" }}
<div class="flex flex-col justify-center w-fit mx-auto mt-2">
{{ partial "carousel.html" (dict "pngFiles" $pngs) }}
</div>
{{ partial "separador.html" }}
<div class="flex justify-center mt-2">
<article>{{ .Content }}</article>
</div>
</div>
<div class="bg-sky-300 rounded-b-full shadow-md">
<p>.</p>
</div>
{{ end }}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,93 @@
Copyright 2019 The Manufacturing Consent Project Authors (https://github.com/googlefonts/manufacturing-consent-font)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://openfontlicense.org
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

12
public/a/index.xml Normal file
View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>As on My New Hugo Site</title>
<link>http://localhost:1313/a/</link>
<description>Recent content in As on My New Hugo Site</description>
<generator>Hugo</generator>
<language>en-us</language>
<lastBuildDate></lastBuildDate>
<atom:link href="http://localhost:1313/a/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

BIN
public/calamity.ttf Normal file

Binary file not shown.

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on My New Hugo Site</title>
<link>http://localhost:1313/categories/</link>
<description>Recent content in Categories on My New Hugo Site</description>
<title>Categories on Blog Fede</title>
<link>https://fedesrv.ddns.net/categories/</link>
<description>Recent content in Categories on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<atom:link href="http://localhost:1313/categories/index.xml" rel="self" type="application/rss+xml" />
<atom:link href="https://fedesrv.ddns.net/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

BIN
public/cover copy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
public/cover.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
public/cover.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

BIN
public/cover2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

File diff suppressed because one or more lines are too long

130
public/css/styles.css Normal file
View File

@@ -0,0 +1,130 @@
/* Contenedor del artículo */
article {
max-width: 800px;
padding: 1.5rem;
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
font-family: "Inter", sans-serif;
color: #333;
line-height: 1.8;
}
/* Títulos */
article h1 {
font-size: 2.5rem;
font-weight: bold;
text-align: center;
margin-bottom: 1.5rem;
color: #222;
}
article h2 {
font-size: 1.8rem;
font-weight: 600;
margin: 2rem 0 1rem;
color: #444;
}
article h3 {
font-size: 1.4rem;
font-weight: 500;
margin: 1.5rem 0 1rem;
color: #555;
}
/* Párrafos */
article p {
margin: 1rem 0;
font-size: 1.1rem;
}
/* Imágenes */
article img {
width: 100%;
max-height: 400px;
object-fit: cover;
border-radius: 8px;
margin: 1.5rem 0;
display: block;
}
/* Listas */
article ul {
list-style: disc inside;
margin: 1rem 0;
padding-left: 1rem;
}
article ol {
list-style: decimal inside;
margin: 1rem 0;
padding-left: 1rem;
}
/* Citas */
article blockquote {
font-style: italic;
border-left: 4px solid #4b9ce2;
background: #f4faff;
padding: 0.75rem 1rem;
margin: 1.5rem 0;
}
/* Líneas divisorias */
article hr {
border: none;
border-top: 2px solid #ddd;
margin: 2rem 0;
}
/* Enlaces */
article a {
color: #4b9ce2;
text-decoration: underline;
transition: color 0.2s ease;
}
article a:hover {
color: #2563eb;
}
/* Código en línea */
article code {
background: #f3f4f6;
padding: 0.2rem 0.4rem;
border-radius: 4px;
font-family: monospace;
font-size: 0.95rem;
}
/* Bloques de código */
article pre {
background: #f3f4f6;
padding: 1rem;
border-radius: 8px;
overflow-x: auto;
font-family: monospace;
font-size: 1rem;
margin: 1.5rem 0;
}
/* Secciones dentro del artículo */
article section {
margin-top: 2rem;
}
/* Responsive */
@media (max-width: 600px) {
article h1 {
font-size: 2rem;
}
article h2 {
font-size: 1.5rem;
}
article h3 {
font-size: 1.2rem;
}
}

View File

@@ -1,17 +1,18 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta name="generator" content="Hugo 0.146.1"><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
<meta name="generator" content="Hugo 0.147.9">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My New Hugo Site</title>
<title>Blog Fede</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-1">
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
@@ -22,14 +23,14 @@
<div class="hidden md:flex">
<a
href="/Blog"
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Blog</a
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
@@ -53,7 +54,7 @@
>
</div>
<div class="md:hidden">
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
@@ -82,10 +83,10 @@
>
<div class="flex flex-col p-4">
<a
href="/Blog"
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Blog</a
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
@@ -120,10 +121,13 @@
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div
class="rounded flex justify-center items-center h-screen w-screen bg-[repeating-linear-gradient(transparent,transparent_27px,#333_28px)] bg-[size:100%_28px] shadow-[0_4px_6px_-1px_rgb(107,114,128)]"
class="rounded flex dark:bg-black justify-center items-center h-screen w-screen bg-[repeating-linear-gradient(transparent,transparent_27px,#333_28px)] dark:bg-[repeating-linear-gradient(transparent,transparent_27px,#aaa_28px)] bg-[size:100%_28px] shadow-[0_4px_6px_-1px_rgb(107,114,128)]"
>
<div class="bg-cyan-200 border-2 rounded-lg p-2">
<div
class="bg-cyan-200 dark:bg-emerald-500 border-2 dark:border-white rounded-lg p-2"
>
<div class="flex flex-col sm:flex-row items-center">
<img
src="fede.jpg"
@@ -156,7 +160,10 @@
</div>
</div>
<hr class="m-4" />
<div class="flex justify-center p-8">
<div class="flex justify-center p-8 flex-col items-center bg-sky-200 rounded-t-lg shadow-md">
<div
class="w-[80%] rounded-lg overflow-hidden border-2 shadow-2xl bg-[radial-gradient(circle,rgba(0,0,0,0)_0%,rgba(0,0,0,0.5)_70%,#ffffff_100%),repeating-linear-gradient(45deg,#000000,#000000_10px,#ffffff_10px,#ffffff_20px)]"
>
@@ -175,12 +182,379 @@
</span>
</div>
</div>
<div class="container mx-auto px-4 py-8">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div
class="hover:scale-120 hover:z-2 transform-3d hover:rotate-z-2 duration-100 hover:-translate-y-2 bg-white rounded-lg shadow-md overflow-hidden border-3 hover:shadow-xl ease-in"
>
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500">No image</span>
</div>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">Panel Web</h2>
<p class="text-gray-700 mb-4">
<p>Este panel web es una herramienta de visualización y análisis de datos para una cadena hotelera, desarrollado como trabajo final para el curso de Base …</p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/proyectos/paneldb/"
class="text-blue-500 hover:text-blue-700"
>Ver más</a
>
</div>
</div>
</div>
<div
class="hover:scale-120 hover:z-2 transform-3d hover:rotate-z-2 duration-100 hover:-translate-y-2 bg-white rounded-lg shadow-md overflow-hidden border-3 hover:shadow-xl ease-in"
>
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500">No image</span>
</div>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">Gestor de Stock</h2>
<p class="text-gray-700 mb-4">
<p>Este sistema de gestión de inventario está desarrollado en C# utilizando Windows Forms. La aplicación permite administrar eficientemente el stock de …</p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/proyectos/controlstock/"
class="text-blue-500 hover:text-blue-700"
>Ver más</a
>
</div>
</div>
</div>
<div
class="hover:scale-120 hover:z-2 transform-3d hover:rotate-z-2 duration-100 hover:-translate-y-2 bg-white rounded-lg shadow-md overflow-hidden border-3 hover:shadow-xl ease-in"
>
<img
src="/proyectos/coordkeeper/index.png"
alt="CoordKeeper"
class="w-full h-48 object-cover"
/>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">CoordKeeper</h2>
<p class="text-gray-700 mb-4">
<p>es una aplicación web desarrollada con React diseñada específicamente para jugadores de Minecraft. Esta herramienta permite a los usuarios almacenar, …</p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/proyectos/coordkeeper/"
class="text-blue-500 hover:text-blue-700"
>Ver más</a
>
</div>
</div>
</div>
</div>
</div>
<div class="container mx-auto px-4 py-8">
<h2 class="text-2xl font-bold mb-6 text-center">Todos los Posts</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div
class="
bg-white rounded-lg
border-4 border-black
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
hover:scale-105
transition-all duration-100 ease-linear
overflow-hidden
transform
mx-auto
hover:z-2
"
>
<img
src="cover.png"
alt="Coord Keeper"
class="w-full h-48 object-cover"
/>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">Coord Keeper</h2>
<p class="text-gray-700 mb-4 font-sans">
<h1 id="motivacion">Motivacion</h1>
<p>He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el <!-- raw HTML omitted -->f3<!-- raw HTML omitted -->) lo que lo hace cada vez más …</!--></!--></p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/posts/coord-keeper/"
class="text-blue-700 underline hover:text-blue-900 font-medium"
>Leer más</a
>
<span class="text-sm text-gray-600 font-mono">
Mar 19, 2025
</span>
</div>
</div>
</div>
<div
class="
bg-white rounded-lg
border-4 border-black
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
hover:scale-105
transition-all duration-100 ease-linear
overflow-hidden
transform
mx-auto
hover:z-2
"
>
<img
src="cover2.png"
alt="Sistema Alquileres DevLog n1"
class="w-full h-48 object-cover"
/>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">Sistema Alquileres DevLog n1</h2>
<p class="text-gray-700 mb-4 font-sans">
<h1 id="que-es-esto">¿Que es esto?</h1>
<p>Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &ldquo;Ingenieria de Software&rdquo; (asi se llama la …</p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/"
class="text-blue-700 underline hover:text-blue-900 font-medium"
>Leer más</a
>
<span class="text-sm text-gray-600 font-mono">
Nov 10, 2024
</span>
</div>
</div>
</div>
<div
class="
bg-white rounded-lg
border-4 border-black
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
hover:scale-105
transition-all duration-100 ease-linear
overflow-hidden
transform
mx-auto
hover:z-2
"
>
<img
src="cover.jpg"
alt="Fix Screen Tear x11"
class="w-full h-48 object-cover"
/>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">Fix Screen Tear x11</h2>
<p class="text-gray-700 mb-4 font-sans">
<h1 id="que-es-el-screen-tear">¿Que es el screen tear?</h1>
<p>buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover …</p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/"
class="text-blue-700 underline hover:text-blue-900 font-medium"
>Leer más</a
>
<span class="text-sm text-gray-600 font-mono">
Nov 9, 2024
</span>
</div>
</div>
</div>
<div
class="
bg-white rounded-lg
border-4 border-black
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
hover:scale-105
transition-all duration-100 ease-linear
overflow-hidden
transform
mx-auto
hover:z-2
"
>
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500 font-mono text-sm">No image</span>
</div>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">String Interpolation</h2>
<p class="text-gray-700 mb-4 font-sans">
<h1 id="que-es">¿Que es?</h1>
<p>Es un proceso de evaluado, en el cual se reemplazan placeholders en <code>string</code> por valores, en nuestro caso, de variables en momento de …</p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/posts/string-interpolation/"
class="text-blue-700 underline hover:text-blue-900 font-medium"
>Leer más</a
>
<span class="text-sm text-gray-600 font-mono">
Oct 24, 2023
</span>
</div>
</div>
</div>
<div
class="
bg-white rounded-lg
border-4 border-black
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
hover:scale-105
transition-all duration-100 ease-linear
overflow-hidden
transform
mx-auto
hover:z-2
"
>
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500 font-mono text-sm">No image</span>
</div>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">Anuncio Aoc 2023</h2>
<p class="text-gray-700 mb-4 font-sans">
<h1 id="que-es-advent-of-code">¿Que es Advent of Code?</h1>
<p>Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:</p>
<ul>
<li>Preparacion de …</li></ul>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/posts/anuncio-aoc-2023/"
class="text-blue-700 underline hover:text-blue-900 font-medium"
>Leer más</a
>
<span class="text-sm text-gray-600 font-mono">
Oct 3, 2023
</span>
</div>
</div>
</div>
<div
class="
bg-white rounded-lg
border-4 border-black
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
hover:scale-105
transition-all duration-100 ease-linear
overflow-hidden
transform
mx-auto
hover:z-2
"
>
<div
class="w-full h-48 bg-gray-200 flex items-center justify-center"
>
<span class="text-gray-500 font-mono text-sm">No image</span>
</div>
<div class="p-4">
<h2 class="text-xl font-bold mb-2">Bootloader Incident</h2>
<p class="text-gray-700 mb-4 font-sans">
<h1 id="el-inicio-de-la-catastrofe">El inicio de la catastrofe</h1>
<p>En pocas palabras, <strong>Nunca Corten Un <code>pacman -Syu</code></strong>.<br>
Si utilizan <strong>arch</strong> sabrán que se pueden configurar &lsquo;hooks&rsquo; antes …</p>
</p>
<div class="flex justify-between items-center">
<a
href="https://fedesrv.ddns.net/posts/bootloaderincident/"
class="text-blue-700 underline hover:text-blue-900 font-medium"
>Leer más</a
>
<span class="text-sm text-gray-600 font-mono">
Sep 26, 2023
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Mi Nombre
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -1,11 +1,103 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>My New Hugo Site</title>
<link>http://localhost:1313/</link>
<description>Recent content on My New Hugo Site</description>
<title>Blog Fede</title>
<link>https://fedesrv.ddns.net/</link>
<description>Recent content on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<atom:link href="http://localhost:1313/index.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Fri, 02 May 2025 02:13:53 -0300</lastBuildDate>
<atom:link href="https://fedesrv.ddns.net/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Panel Web</title>
<link>https://fedesrv.ddns.net/proyectos/paneldb/</link>
<pubDate>Fri, 02 May 2025 02:13:53 -0300</pubDate>
<guid>https://fedesrv.ddns.net/proyectos/paneldb/</guid>
<description>&lt;p&gt;Este panel web es una herramienta de visualización y análisis de datos para una cadena hotelera, desarrollado como trabajo final para el curso de Base de Datos Aplicada. El sistema permite explorar métricas clave de rendimiento a través de una estructura jerárquica de tres niveles.&lt;/p&gt;&#xA;&lt;h2 id=&#34;arquitectura-técnica&#34;&gt;Arquitectura Técnica&lt;/h2&gt;&#xA;&lt;h3 id=&#34;backend&#34;&gt;Backend&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ASP.NET Core 7&lt;/li&gt;&#xA;&lt;li&gt;Entity Framework Core para acceso a datos&lt;/li&gt;&#xA;&lt;li&gt;API RESTful para comunicación con el frontend&lt;/li&gt;&#xA;&lt;li&gt;Autenticación JWT para seguridad&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;frontend&#34;&gt;Frontend&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;React (18.x)&lt;/li&gt;&#xA;&lt;li&gt;Material UI para componentes de interfaz&lt;/li&gt;&#xA;&lt;li&gt;ChartJS para visualización de datos&lt;/li&gt;&#xA;&lt;li&gt;React Router para navegación entre secciones&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;estructura-de-navegación-drilling&#34;&gt;Estructura de Navegación (Drilling)&lt;/h2&gt;&#xA;&lt;p&gt;El panel implementa un sistema de navegación jerárquica de tres niveles:&lt;/p&gt;</description>
</item>
<item>
<title>Gestor de Stock</title>
<link>https://fedesrv.ddns.net/proyectos/controlstock/</link>
<pubDate>Fri, 02 May 2025 02:10:53 -0300</pubDate>
<guid>https://fedesrv.ddns.net/proyectos/controlstock/</guid>
<description>&lt;p&gt;Este sistema de gestión de inventario está desarrollado en C# utilizando Windows Forms. La aplicación permite administrar eficientemente el stock de productos, registrar ventas, gestionar pedidos a proveedores y verificar remitos de entrega.&lt;/p&gt;&#xA;&lt;h2 id=&#34;características-principales&#34;&gt;Características Principales&lt;/h2&gt;&#xA;&lt;h3 id=&#34;gestión-de-productos&#34;&gt;Gestión de Productos&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Alta, baja y modificación de productos&lt;/li&gt;&#xA;&lt;li&gt;Categorización de inventario&lt;/li&gt;&#xA;&lt;li&gt;Control de stock mínimo y máximo&lt;/li&gt;&#xA;&lt;li&gt;Alertas de stock bajo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;registro-de-ventas&#34;&gt;Registro de Ventas&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Generación de facturas&lt;/li&gt;&#xA;&lt;li&gt;Historial de ventas&lt;/li&gt;&#xA;&lt;li&gt;Seguimiento de productos vendidos&lt;/li&gt;&#xA;&lt;li&gt;Estadísticas de ventas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;pedidos-a-proveedores&#34;&gt;Pedidos a Proveedores&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Creación automática de órdenes de compra&lt;/li&gt;&#xA;&lt;li&gt;Seguimiento de pedidos pendientes&lt;/li&gt;&#xA;&lt;li&gt;Historial de pedidos&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;verificación-de-remitos&#34;&gt;Verificación de Remitos&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Control de recepción de mercadería&lt;/li&gt;&#xA;&lt;li&gt;Validación de cantidades y productos&lt;/li&gt;&#xA;&lt;li&gt;Registro de discrepancias&lt;/li&gt;&#xA;&lt;li&gt;Alertas de productos faltantes&lt;/li&gt;&#xA;&lt;li&gt;Conformidad de recepción&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;tecnologías-utilizadas&#34;&gt;Tecnologías Utilizadas&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;C# (.NET Framework)&lt;/li&gt;&#xA;&lt;li&gt;Windows Forms&lt;/li&gt;&#xA;&lt;li&gt;SQL Server (Base de datos)&lt;/li&gt;&#xA;&lt;li&gt;Entity Framework&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;capturas-de-pantalla-wip&#34;&gt;Capturas de Pantalla (WIP)&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;(Aquí se insertarían capturas de las principales pantallas del sistema)&lt;/em&gt;&lt;/p&gt;</description>
</item>
<item>
<title>CoordKeeper</title>
<link>https://fedesrv.ddns.net/proyectos/coordkeeper/</link>
<pubDate>Fri, 02 May 2025 01:47:53 -0300</pubDate>
<guid>https://fedesrv.ddns.net/proyectos/coordkeeper/</guid>
<description>&lt;p&gt;es una aplicación web desarrollada con React diseñada específicamente para jugadores de Minecraft. Esta herramienta permite a los usuarios almacenar, organizar y gestionar fácilmente las coordenadas de ubicaciones importantes dentro del juego.&lt;/p&gt;&#xA;&lt;h2 id=&#34;características&#34;&gt;Características&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Almacenamiento de coordenadas X, Y, Z de lugares importantes&lt;/li&gt;&#xA;&lt;li&gt;Organización por Dimensiones&lt;/li&gt;&#xA;&lt;li&gt;Interfaz intuitiva y fácil de usar&lt;/li&gt;&#xA;&lt;li&gt;Acceso rápido a tus coordenadas guardadas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Ya no tendrás que depender de notas dispersas o capturas de pantalla para recordar dónde encontraste ese templo submarino o aquella cueva de diamantes. CoordKeeper mantiene toda esta información organizada en un solo lugar.&lt;/p&gt;</description>
</item>
<item>
<title>Coord Keeper</title>
<link>https://fedesrv.ddns.net/posts/coord-keeper/</link>
<pubDate>Wed, 19 Mar 2025 02:53:57 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/coord-keeper/</guid>
<description>&lt;h1 id=&#34;motivacion&#34;&gt;Motivacion&lt;/h1&gt;&#xA;&lt;p&gt;He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el &lt;!-- raw HTML omitted --&gt;f3&lt;!-- raw HTML omitted --&gt;) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo&amp;hellip;. hacer una app de react.&lt;/p&gt;</description>
</item>
<item>
<title>Sistema Alquileres DevLog n1</title>
<link>https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/</link>
<pubDate>Sun, 10 Nov 2024 00:08:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/</guid>
<description>&lt;h1 id=&#34;que-es-esto&#34;&gt;¿Que es esto?&lt;/h1&gt;&#xA;&lt;p&gt;Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &amp;ldquo;Ingenieria de Software&amp;rdquo; (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.&lt;/p&gt;</description>
</item>
<item>
<title>Fix Screen Tear x11</title>
<link>https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/</link>
<pubDate>Sat, 09 Nov 2024 13:28:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/</guid>
<description>&lt;h1 id=&#34;que-es-el-screen-tear&#34;&gt;¿Que es el screen tear?&lt;/h1&gt;&#xA;&lt;p&gt;buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb&#34; alt=&#34;Imagen sacada de google donde se demuestra el screen tear&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.&lt;/p&gt;</description>
</item>
<item>
<title>String Interpolation</title>
<link>https://fedesrv.ddns.net/posts/string-interpolation/</link>
<pubDate>Tue, 24 Oct 2023 22:24:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/string-interpolation/</guid>
<description>&lt;h1 id=&#34;que-es&#34;&gt;¿Que es?&lt;/h1&gt;&#xA;&lt;p&gt;Es un proceso de evaluado, en el cual se reemplazan placeholders en &lt;code&gt;string&lt;/code&gt; por valores, en nuestro caso, de variables en momento de ejecución.&lt;/p&gt;&#xA;&lt;h1 id=&#34;sintaxis&#34;&gt;Sintaxis&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;var manzanas = 4;&#xA;var bananas = 3;&#xA;&#xA;Console.WriteLine($&amp;quot;Tengo {manzanas} manzanas&amp;quot;);&#xA;Console.WriteLine($&amp;quot;Vendí {manzanas + bananas} frutas&amp;quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Basicamente son plantillas.&lt;/p&gt;&lt;/blockquote&gt;</description>
</item>
<item>
<title>Anuncio Aoc 2023</title>
<link>https://fedesrv.ddns.net/posts/anuncio-aoc-2023/</link>
<pubDate>Tue, 03 Oct 2023 12:54:22 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/anuncio-aoc-2023/</guid>
<description>&lt;h1 id=&#34;que-es-advent-of-code&#34;&gt;¿Que es Advent of Code?&lt;/h1&gt;&#xA;&lt;p&gt;Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Preparacion de entrevistas.&lt;/li&gt;&#xA;&lt;li&gt;Training en empresas.&lt;/li&gt;&#xA;&lt;li&gt;Practica para familiarizarse con nuevos lenguajes de programacion.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;etc&amp;hellip;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;que-tengo-pensado&#34;&gt;Que tengo pensado&lt;/h1&gt;&#xA;&lt;p&gt;Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando &lt;code&gt;zig&lt;/code&gt; como un ejercicio para aprender ese lenguaje de programacion &lt;code&gt;(aunque de forma básica)&lt;/code&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>Bootloader Incident</title>
<link>https://fedesrv.ddns.net/posts/bootloaderincident/</link>
<pubDate>Tue, 26 Sep 2023 22:27:20 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/bootloaderincident/</guid>
<description>&lt;h1 id=&#34;el-inicio-de-la-catastrofe&#34;&gt;El inicio de la catastrofe&lt;/h1&gt;&#xA;&lt;p&gt;En pocas palabras, &lt;strong&gt;Nunca Corten Un &lt;code&gt;pacman -Syu&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;&#xA;Si utilizan &lt;strong&gt;arch&lt;/strong&gt; sabrán que se pueden configurar &amp;lsquo;hooks&amp;rsquo; antes y despues de las operaciones con el comando &lt;code&gt;pacman&lt;/code&gt;, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la &lt;strong&gt;UEFI&lt;/strong&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>Imagenes: Color a b&amp;w</title>
<link>https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/</link>
<pubDate>Sat, 23 Sep 2023 10:35:18 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/</guid>
<description>&lt;h1 id=&#34;gimp&#34;&gt;Gimp&lt;/h1&gt;&#xA;&lt;p&gt;Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar &lt;strong&gt;Gimp&lt;/strong&gt; con la opcion de &lt;code&gt;Color &amp;gt; Desaturacion &amp;gt; Color a gama de grises&lt;/code&gt;. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.&lt;br&gt;&#xA;&lt;img src=&#34;https://fedesrv.ddns.net/fedecomp.png&#34; alt=&#34;Comparación&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;imagemagick&#34;&gt;ImageMagick&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Es un conjunto de utilidades de código abierto para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Una de esas utilidades es llamada &lt;code&gt;convert&lt;/code&gt;, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada &lt;code&gt;-colorspace&lt;/code&gt; la cual si le damos el parametro &lt;strong&gt;Gray&lt;/strong&gt; la imagen resultante estará representada en una gama de grises.&#xA;&lt;img src=&#34;https://fedesrv.ddns.net/fedeg.jpg&#34; alt=&#34;Imagen en gama de grises&#34;&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Diseño de Software Incident</title>
<link>https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/</link>
<pubDate>Fri, 22 Sep 2023 15:08:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/</guid>
<description>&lt;h1 id=&#34;instanciacion-del-sqlconnection&#34;&gt;Instanciacion del SqlConnection&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; connection = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SqlConnection(configuration.GetConnectionString(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DefaultConnection&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Eso genera un sql connection que va a existir hasta que salga del scope del programa.&lt;/p&gt;&#xA;&lt;h1 id=&#34;creacion-del-sqlcommand&#34;&gt;Creacion del SqlCommand&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; var command = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SqlCommand();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.CommandText = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sp_RecuperaProductos&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.CommandType = System.Data.CommandType.StoredProcedure;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;apertura-de-la-coneccion&#34;&gt;Apertura de la coneccion&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.Connection = connection;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.Connection.Open();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;utilizacion-del-executereader&#34;&gt;Utilizacion del ExecuteReader&lt;/h2&gt;&#xA;&lt;p&gt;Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. &lt;strong&gt;MUY&lt;/strong&gt; importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).&lt;/p&gt;</description>
</item>
<item>
<title>RetroArchivements</title>
<link>https://fedesrv.ddns.net/posts/retroarchivements/</link>
<pubDate>Fri, 22 Sep 2023 13:30:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/retroarchivements/</guid>
<description>&lt;p&gt;Hace ya un par de dias que estoy usando un &lt;a href=&#34;https://retroachievements.org/user/fedpo2&#34;&gt;servicio&lt;/a&gt; que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.&lt;/p&gt;&#xA;&lt;p&gt;Uno de los que estoy jugando es &lt;code&gt;Kirby&#39;s dream land 2&lt;/code&gt;&lt;br&gt;&#xA;&lt;img src=&#34;https://media.retroachievements.org/Images/046585.png&#34; alt=&#34;kirby&#34;&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Primer Post</title>
<link>https://fedesrv.ddns.net/posts/sample-post/</link>
<pubDate>Fri, 22 Sep 2023 12:28:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/sample-post/</guid>
<description>&lt;h1 id=&#34;buenas&#34;&gt;buenas&lt;/h1&gt;&#xA;&lt;p&gt;buenas&#xA;Luego de sufrir bastante con el nginx y su &lt;em&gt;Reverse Proxy&lt;/em&gt;, finalmente me decidí por poner la pagina del blog en el &lt;strong&gt;WebRoot&lt;/strong&gt; y el &lt;em&gt;gitea&lt;/em&gt; en un subfolder.&lt;/p&gt;&#xA;&lt;h2 id=&#34;como-funciona-esto&#34;&gt;Como funciona esto&lt;/h2&gt;&#xA;&lt;p&gt;El programa que estoy usando para hacer este blog se llama &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;, consiste de una especie de parceador de &lt;a href=&#34;https://www.markdownguide.org/&#34;&gt;Markdown&lt;/a&gt; a Html estático el cual hosteo con este &lt;a href=&#34;https://nginx.org/en/&#34;&gt;webServer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;como-hago-nuevos-posts&#34;&gt;Como hago nuevos posts&lt;/h3&gt;&#xA;&lt;p&gt;Dentro de la carpeta del proyecto del server hay una que se llama content, todos los &lt;code&gt;.md&lt;/code&gt; que haya ahí cuando utilizo el comando:&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,191 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Anuncio Aoc 2023</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Anuncio Aoc 2023</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Oct 3, 2023</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#old_blog</span>
</div>
</div>
<article>
<h1 id="que-es-advent-of-code">¿Que es Advent of Code?</h1>
<p>Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:</p>
<ul>
<li>Preparacion de entrevistas.</li>
<li>Training en empresas.</li>
<li>Practica para familiarizarse con nuevos lenguajes de programacion.</li>
<li><em>etc&hellip;</em></li>
</ul>
<h1 id="que-tengo-pensado">Que tengo pensado</h1>
<p>Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando <code>zig</code> como un ejercicio para aprender ese lenguaje de programacion <code>(aunque de forma básica)</code>.</p>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Bootloader Incident</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Bootloader Incident</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Sep 26, 2023</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#old_blog</span>
</div>
</div>
<article>
<h1 id="el-inicio-de-la-catastrofe">El inicio de la catastrofe</h1>
<p>En pocas palabras, <strong>Nunca Corten Un <code>pacman -Syu</code></strong>.<br>
Si utilizan <strong>arch</strong> sabrán que se pueden configurar &lsquo;hooks&rsquo; antes y despues de las operaciones con el comando <code>pacman</code>, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la <strong>UEFI</strong>.</p>
<h1 id="posibles-soluciones">Posibles Soluciones</h1>
<h2 id="opcion-atomica">Opcion Atomica</h2>
<p>Consiste en reinstalar linux desde 0. ( pero no desde scratch 😳 ). Obviamente es una terrible idea pero es una a la que en otro momento antes de haber aprendido a usar arch hubiera solucionado de esa forma.</p>
<h2 id="lo-que-termine-haciendo">Lo que termine haciendo</h2>
<p>Gracias a que tenia una lectora de dvds con un dvd de Linux, pude utilizar <code>mount</code> y <code>chroot</code> para acceder a la particion con todos mis datos, una vez en este punto reinstalé el kernel (<code>pacman -S linux</code>) para que se activen los hooks que corresponden a actualizar la información sobre las opciones de arranque del bootloader.</p>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,188 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Coord Keeper</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<img
src="/cover.png"
alt="Coord Keeper"
class="w-full h-auto object-cover"
/>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Coord Keeper</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Mar 19, 2025</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#DevLog</span>
</div>
</div>
<article>
<h1 id="motivacion">Motivacion</h1>
<p>He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el <!-- raw HTML omitted -->f3<!-- raw HTML omitted -->) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo&hellip;. hacer una app de react.</p>
<p>Así que presento Coord-Keeper una app nefasta de React para guardar, compartir y importar Coordenas de minecraft. !!!11!!!</p>
<p>Esta disponible en <a href="/coords">Coord-keeper</a></p>
<p>su <a href="/git/fede/coord-keeper">codigo fuente</a> esta en mi instancia de gitea.</p>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,247 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Diseño de Software Incident</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Diseño de Software Incident</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Sep 22, 2023</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#old_blog</span>
</div>
</div>
<article>
<h1 id="instanciacion-del-sqlconnection">Instanciacion del SqlConnection</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> connection = <span style="color:#66d9ef">new</span> SqlConnection(configuration.GetConnectionString(<span style="color:#e6db74">&#34;DefaultConnection&#34;</span>)))
</span></span></code></pre></div><p>Eso genera un sql connection que va a existir hasta que salga del scope del programa.</p>
<h1 id="creacion-del-sqlcommand">Creacion del SqlCommand</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> var command = <span style="color:#66d9ef">new</span> SqlCommand();
</span></span><span style="display:flex;"><span>command.CommandText = <span style="color:#e6db74">&#34;sp_RecuperaProductos&#34;</span>;
</span></span><span style="display:flex;"><span>command.CommandType = System.Data.CommandType.StoredProcedure;
</span></span></code></pre></div><h1 id="apertura-de-la-coneccion">Apertura de la coneccion</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span>command.Connection = connection;
</span></span><span style="display:flex;"><span>command.Connection.Open();
</span></span></code></pre></div><h2 id="utilizacion-del-executereader">Utilizacion del ExecuteReader</h2>
<p>Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. <strong>MUY</strong> importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> reader = command.ExecuteReader();
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> (reader.Read())<span style="color:#75715e">//lee a traves de todas las filas que existen en la tabla</span>
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#75715e">//por cada fila que creo tengo que asignar manualmente cada columna con cada propiedad</span>
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> producto = <span style="color:#66d9ef">new</span> Producto();
</span></span><span style="display:flex;"><span> producto.Codigo = reader[<span style="color:#e6db74">&#34;Codigo&#34;</span>].ToString();
</span></span><span style="display:flex;"><span> producto.Nombre = reader[<span style="color:#e6db74">&#34;Nombre&#34;</span>].ToString();
</span></span><span style="display:flex;"><span> producto.Cantidad = Convert.ToInt32(reader[<span style="color:#e6db74">&#34;Cantidad&#34;</span>].ToString());
</span></span><span style="display:flex;"><span> producto.CantidadMinima = Convert.ToInt32(reader[<span style="color:#e6db74">&#34;CantidadMinima&#34;</span>].ToString());
</span></span><span style="display:flex;"><span> producto.Precio = Convert.ToDecimal(reader[<span style="color:#e6db74">&#34;Precio&#34;</span>].ToString());
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> codigoCategoria = reader[<span style="color:#e6db74">&#34;CodigoCategoria&#34;</span>].ToString();
</span></span><span style="display:flex;"><span> producto.Categoria = RepositorioCategorias.Instancia.RecuperarCategorias().FirstOrDefault(c =&gt; c.Codigo == codigoCategoria);
</span></span><span style="display:flex;"><span> <span style="color:#75715e">//////////////////////////////////////////////////////////////////////////////////////</span>
</span></span><span style="display:flex;"><span> <span style="color:#75715e">//////////////////////////////////////////////////////////////////////////////////////</span>
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> var commandProveedores = <span style="color:#66d9ef">new</span> SqlCommand();
</span></span><span style="display:flex;"><span> <span style="color:#75715e">//otra forma de hacerlo es usando Store Procedures</span>
</span></span><span style="display:flex;"><span> commandProveedores.CommandText = <span style="color:#e6db74">&#34;sp_RecuperarProveedoresProducto&#34;</span>;
</span></span><span style="display:flex;"><span> commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
</span></span><span style="display:flex;"><span> commandProveedores.Parameters.Add(<span style="color:#e6db74">&#34;@CodigoProducto&#34;</span>, System.Data.SqlDbType.NVarChar,<span style="color:#ae81ff">25</span>).Value = producto.Codigo;
</span></span><span style="display:flex;"><span> <span style="color:#75715e">/////////////////////////</span>
</span></span><span style="display:flex;"><span> commandProveedores.Connection = connection;
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> readerProveedoresProducto = command.ExecuteReader();
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> (readerProveedoresProducto.Read())<span style="color:#75715e">//lee a traves de todas las filas que existen en la tabla</span>
</span></span><span style="display:flex;"><span> {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> codigoProveedor = readerProveedoresProducto[<span style="color:#e6db74">&#34;CodigoProveedor&#34;</span>].ToString();
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> proveedor = RepositorioProveedores.Instancia.RecuperarProveedores().FirstOrDefault(x =&gt; x.Codigo == codigoProveedor);
</span></span><span style="display:flex;"><span> producto.AgregarProveedor(proveedor);
</span></span><span style="display:flex;"><span> <span style="color:#75715e">//una vez cargado el objeto completo lo agrego a la coleccion</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>productos.Add(producto);
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h1 id="cerrado-de-la-coneccion">Cerrado de la coneccion</h1>
<p>NOTA: no ser mamerto y cerrar la coneccion fuera del while-loop.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span>command.Connection.Close();
</span></span></code></pre></div><h1 id="sub-query">Sub-Query</h1>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> var commandProveedores = <span style="color:#66d9ef">new</span> SqlCommand();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
</span></span><span style="display:flex;"><span>commandProveedores.CommandText = <span style="color:#e6db74">&#34;SP_AGREGARPROVEEDORPRODUCTO&#34;</span>;
</span></span><span style="display:flex;"><span>commandProveedores.Connection = connection;
</span></span><span style="display:flex;"><span>commandProveedores.Transaction = sqlTransaction;
</span></span><span style="display:flex;"><span>commandProveedores.Parameters.Add(<span style="color:#e6db74">&#34;@CodigoProducto&#34;</span>, System.Data.SqlDbType.NVarChar,<span style="color:#ae81ff">25</span>).Value = producto.Codigo;
</span></span><span style="display:flex;"><span>commandProveedores.Parameters.Add(<span style="color:#e6db74">&#34;@CodigoProveedor&#34;</span>, System.Data.SqlDbType.NVarChar, <span style="color:#ae81ff">25</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">foreach</span> (<span style="color:#66d9ef">var</span> proveedor <span style="color:#66d9ef">in</span> producto.Proveedores)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> commandProveedores.Parameters[<span style="color:#e6db74">&#34;CodigoProveedor&#34;</span>].Value = proveedor.Codigo;
</span></span><span style="display:flex;"><span> commandProveedores.ExecuteNonQuery();
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h1 id="non-query">Non-Query</h1>
<p>Un query es una consulta de tipo UPDATE, INSERT, DELETE, para el ExecuteNonQuery se devuelve la cantidad de ramas afectadas, menos en el uso de un StoredProcedure donde devuelve -1.</p>
<h1 id="notas">Notas</h1>
<blockquote>
<p>&quot; Si compila y anda, aprueba &quot; ~Laureano</p></blockquote>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,226 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Fix Screen Tear x11</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<img
src="/cover.jpg"
alt="Fix Screen Tear x11"
class="w-full h-auto object-cover"
/>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Fix Screen Tear x11</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Nov 9, 2024</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#Fix</span>
</div>
</div>
<article>
<h1 id="que-es-el-screen-tear">¿Que es el screen tear?</h1>
<p>buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.</p>
<p><img src="https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb" alt="Imagen sacada de google donde se demuestra el screen tear"></p>
<p>Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.</p>
<h1 id="solucion">Solucion</h1>
<p>Esto Parece suceder porque muchos <a href="https://en.wikipedia.org/wiki/X_window_manager">WindowManagers</a> de linux muestran un frame nuevo independientemente de si la gpu logró terminar de dibujar el proximo frame(buffer).</p>
<p>Encontré un parametro que se le puede pasar al X11 para evitar que se muestre un frame que la gpu aun no termino de actualizar.</p>
<h2 id="cosas-que-necesitamos">Cosas que necesitamos</h2>
<ol>
<li>Tener <code>inxi</code> instalado</li>
</ol>
<p>En Arch se puede instalar con un</p>
<pre tabindex="0"><code>sudo pacman -S inxi
</code></pre><p>y supongo que lo mismo pero reemplazando <code>pacman -S</code> por <code>apt install</code> en distros debian-base.</p>
<ol start="2">
<li>Necesitamos editar uno(o dos) archivos en el <strong>/usr/share/</strong></li>
</ol>
<p>Asi que verifica que tengas permisos para poder escribir en ese path.</p>
<h2 id="paso-a-paso">Paso a Paso</h2>
<ol>
<li>Executamos <code>inxi -G</code>.</li>
</ol>
<p>Con esto nos daremos cuenta de que tipo de grafica tenemos. En mi caso es una integrada amd</p>
<pre tabindex="0"><code>i ➜ ~ inxi -G
Graphics:
Device-1: Advanced Micro Devices [AMD/ATI] Lucienne driver: amdgpu v: kernel
</code></pre><p>Por lo que el archivo que tengo que editar es &ldquo;/usr/share/X11/xorg.conf.d/10-amdgpu.conf&rdquo;</p>
<pre tabindex="0"><code>Section &#34;OutputClass&#34;
Identifier &#34;AMDgpu&#34;
MatchDriver &#34;amdgpu&#34;
Driver &#34;amdgpu&#34;
Option &#34;HotplugDriver&#34; &#34;amdgpu&#34;
EndSection
</code></pre><p>Donde añado la opcion &ldquo;TearFree&rdquo; &ldquo;on&rdquo;</p>
<pre tabindex="0"><code>Section &#34;OutputClass&#34;
Identifier &#34;AMDgpu&#34;
MatchDriver &#34;amdgpu&#34;
Driver &#34;amdgpu&#34;
Option &#34;HotplugDriver&#34; &#34;amdgpu&#34;
Option &#34;TearFree&#34; &#34;on&#34;
EndSection
</code></pre><p>Demostracion de como queda</p>
<p><img src="./tear.gif" alt="demo tear resuelto"></p>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

82
public/posts/index.xml Normal file
View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Posts on Blog Fede</title>
<link>https://fedesrv.ddns.net/posts/</link>
<description>Recent content in Posts on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<lastBuildDate>Wed, 19 Mar 2025 02:53:57 -0300</lastBuildDate>
<atom:link href="https://fedesrv.ddns.net/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Coord Keeper</title>
<link>https://fedesrv.ddns.net/posts/coord-keeper/</link>
<pubDate>Wed, 19 Mar 2025 02:53:57 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/coord-keeper/</guid>
<description>&lt;h1 id=&#34;motivacion&#34;&gt;Motivacion&lt;/h1&gt;&#xA;&lt;p&gt;He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el &lt;!-- raw HTML omitted --&gt;f3&lt;!-- raw HTML omitted --&gt;) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo&amp;hellip;. hacer una app de react.&lt;/p&gt;</description>
</item>
<item>
<title>Sistema Alquileres DevLog n1</title>
<link>https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/</link>
<pubDate>Sun, 10 Nov 2024 00:08:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/</guid>
<description>&lt;h1 id=&#34;que-es-esto&#34;&gt;¿Que es esto?&lt;/h1&gt;&#xA;&lt;p&gt;Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &amp;ldquo;Ingenieria de Software&amp;rdquo; (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.&lt;/p&gt;</description>
</item>
<item>
<title>Fix Screen Tear x11</title>
<link>https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/</link>
<pubDate>Sat, 09 Nov 2024 13:28:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/</guid>
<description>&lt;h1 id=&#34;que-es-el-screen-tear&#34;&gt;¿Que es el screen tear?&lt;/h1&gt;&#xA;&lt;p&gt;buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb&#34; alt=&#34;Imagen sacada de google donde se demuestra el screen tear&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.&lt;/p&gt;</description>
</item>
<item>
<title>String Interpolation</title>
<link>https://fedesrv.ddns.net/posts/string-interpolation/</link>
<pubDate>Tue, 24 Oct 2023 22:24:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/string-interpolation/</guid>
<description>&lt;h1 id=&#34;que-es&#34;&gt;¿Que es?&lt;/h1&gt;&#xA;&lt;p&gt;Es un proceso de evaluado, en el cual se reemplazan placeholders en &lt;code&gt;string&lt;/code&gt; por valores, en nuestro caso, de variables en momento de ejecución.&lt;/p&gt;&#xA;&lt;h1 id=&#34;sintaxis&#34;&gt;Sintaxis&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;var manzanas = 4;&#xA;var bananas = 3;&#xA;&#xA;Console.WriteLine($&amp;quot;Tengo {manzanas} manzanas&amp;quot;);&#xA;Console.WriteLine($&amp;quot;Vendí {manzanas + bananas} frutas&amp;quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Basicamente son plantillas.&lt;/p&gt;&lt;/blockquote&gt;</description>
</item>
<item>
<title>Anuncio Aoc 2023</title>
<link>https://fedesrv.ddns.net/posts/anuncio-aoc-2023/</link>
<pubDate>Tue, 03 Oct 2023 12:54:22 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/anuncio-aoc-2023/</guid>
<description>&lt;h1 id=&#34;que-es-advent-of-code&#34;&gt;¿Que es Advent of Code?&lt;/h1&gt;&#xA;&lt;p&gt;Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Preparacion de entrevistas.&lt;/li&gt;&#xA;&lt;li&gt;Training en empresas.&lt;/li&gt;&#xA;&lt;li&gt;Practica para familiarizarse con nuevos lenguajes de programacion.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;etc&amp;hellip;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;que-tengo-pensado&#34;&gt;Que tengo pensado&lt;/h1&gt;&#xA;&lt;p&gt;Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando &lt;code&gt;zig&lt;/code&gt; como un ejercicio para aprender ese lenguaje de programacion &lt;code&gt;(aunque de forma básica)&lt;/code&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>Bootloader Incident</title>
<link>https://fedesrv.ddns.net/posts/bootloaderincident/</link>
<pubDate>Tue, 26 Sep 2023 22:27:20 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/bootloaderincident/</guid>
<description>&lt;h1 id=&#34;el-inicio-de-la-catastrofe&#34;&gt;El inicio de la catastrofe&lt;/h1&gt;&#xA;&lt;p&gt;En pocas palabras, &lt;strong&gt;Nunca Corten Un &lt;code&gt;pacman -Syu&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;&#xA;Si utilizan &lt;strong&gt;arch&lt;/strong&gt; sabrán que se pueden configurar &amp;lsquo;hooks&amp;rsquo; antes y despues de las operaciones con el comando &lt;code&gt;pacman&lt;/code&gt;, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la &lt;strong&gt;UEFI&lt;/strong&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>Imagenes: Color a b&amp;w</title>
<link>https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/</link>
<pubDate>Sat, 23 Sep 2023 10:35:18 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/</guid>
<description>&lt;h1 id=&#34;gimp&#34;&gt;Gimp&lt;/h1&gt;&#xA;&lt;p&gt;Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar &lt;strong&gt;Gimp&lt;/strong&gt; con la opcion de &lt;code&gt;Color &amp;gt; Desaturacion &amp;gt; Color a gama de grises&lt;/code&gt;. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.&lt;br&gt;&#xA;&lt;img src=&#34;https://fedesrv.ddns.net/fedecomp.png&#34; alt=&#34;Comparación&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;imagemagick&#34;&gt;ImageMagick&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Es un conjunto de utilidades de código abierto para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Una de esas utilidades es llamada &lt;code&gt;convert&lt;/code&gt;, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada &lt;code&gt;-colorspace&lt;/code&gt; la cual si le damos el parametro &lt;strong&gt;Gray&lt;/strong&gt; la imagen resultante estará representada en una gama de grises.&#xA;&lt;img src=&#34;https://fedesrv.ddns.net/fedeg.jpg&#34; alt=&#34;Imagen en gama de grises&#34;&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Diseño de Software Incident</title>
<link>https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/</link>
<pubDate>Fri, 22 Sep 2023 15:08:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/</guid>
<description>&lt;h1 id=&#34;instanciacion-del-sqlconnection&#34;&gt;Instanciacion del SqlConnection&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; connection = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SqlConnection(configuration.GetConnectionString(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DefaultConnection&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Eso genera un sql connection que va a existir hasta que salga del scope del programa.&lt;/p&gt;&#xA;&lt;h1 id=&#34;creacion-del-sqlcommand&#34;&gt;Creacion del SqlCommand&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; var command = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SqlCommand();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.CommandText = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sp_RecuperaProductos&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.CommandType = System.Data.CommandType.StoredProcedure;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;apertura-de-la-coneccion&#34;&gt;Apertura de la coneccion&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.Connection = connection;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.Connection.Open();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;utilizacion-del-executereader&#34;&gt;Utilizacion del ExecuteReader&lt;/h2&gt;&#xA;&lt;p&gt;Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. &lt;strong&gt;MUY&lt;/strong&gt; importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).&lt;/p&gt;</description>
</item>
<item>
<title>RetroArchivements</title>
<link>https://fedesrv.ddns.net/posts/retroarchivements/</link>
<pubDate>Fri, 22 Sep 2023 13:30:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/retroarchivements/</guid>
<description>&lt;p&gt;Hace ya un par de dias que estoy usando un &lt;a href=&#34;https://retroachievements.org/user/fedpo2&#34;&gt;servicio&lt;/a&gt; que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.&lt;/p&gt;&#xA;&lt;p&gt;Uno de los que estoy jugando es &lt;code&gt;Kirby&#39;s dream land 2&lt;/code&gt;&lt;br&gt;&#xA;&lt;img src=&#34;https://media.retroachievements.org/Images/046585.png&#34; alt=&#34;kirby&#34;&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Primer Post</title>
<link>https://fedesrv.ddns.net/posts/sample-post/</link>
<pubDate>Fri, 22 Sep 2023 12:28:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/sample-post/</guid>
<description>&lt;h1 id=&#34;buenas&#34;&gt;buenas&lt;/h1&gt;&#xA;&lt;p&gt;buenas&#xA;Luego de sufrir bastante con el nginx y su &lt;em&gt;Reverse Proxy&lt;/em&gt;, finalmente me decidí por poner la pagina del blog en el &lt;strong&gt;WebRoot&lt;/strong&gt; y el &lt;em&gt;gitea&lt;/em&gt; en un subfolder.&lt;/p&gt;&#xA;&lt;h2 id=&#34;como-funciona-esto&#34;&gt;Como funciona esto&lt;/h2&gt;&#xA;&lt;p&gt;El programa que estoy usando para hacer este blog se llama &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;, consiste de una especie de parceador de &lt;a href=&#34;https://www.markdownguide.org/&#34;&gt;Markdown&lt;/a&gt; a Html estático el cual hosteo con este &lt;a href=&#34;https://nginx.org/en/&#34;&gt;webServer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;como-hago-nuevos-posts&#34;&gt;Como hago nuevos posts&lt;/h3&gt;&#xA;&lt;p&gt;Dentro de la carpeta del proyecto del server hay una que se llama content, todos los &lt;code&gt;.md&lt;/code&gt; que haya ahí cuando utilizo el comando:&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,195 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Imagenes: Color a b&amp;w</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Imagenes: Color a b&amp;w</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Sep 23, 2023</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#old_blog</span>
</div>
</div>
<article>
<h1 id="gimp">Gimp</h1>
<p>Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar <strong>Gimp</strong> con la opcion de <code>Color &gt; Desaturacion &gt; Color a gama de grises</code>. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.<br>
<img src="/fedecomp.png" alt="Comparación"></p>
<h1 id="imagemagick">ImageMagick</h1>
<blockquote>
<p>Es un conjunto de utilidades de código abierto para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.</p></blockquote>
<p>Una de esas utilidades es llamada <code>convert</code>, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada <code>-colorspace</code> la cual si le damos el parametro <strong>Gray</strong> la imagen resultante estará representada en una gama de grises.
<img src="/fedeg.jpg" alt="Imagen en gama de grises"></p>
<h2 id="nota">Nota</h2>
<p>Tambien se puede usar la flag <code>-monocrome</code> pero esta da un resultado el cual no me termina de gustar, a continuacion doy un par de muestras de como queda,
<img src="/fedebw.jpg" alt="Imagen monocroma"></p>
<h1 id="opcion-web">Opcion web</h1>
<p>Existe <a href="https://pinetools.com/es/imagen-escala-grises">esta</a> pagina en la cual para generar la imagen en gama de grises solo hay que poner la imagen y darle a <strong>Aplicar</strong>.<br>
<img src="/gamaDeGrises.jpg" alt="Gama de grises demo"></p>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,184 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>RetroArchivements</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">RetroArchivements</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Sep 22, 2023</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#old_blog</span>
</div>
</div>
<article>
<p>Hace ya un par de dias que estoy usando un <a href="https://retroachievements.org/user/fedpo2">servicio</a> que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.</p>
<p>Uno de los que estoy jugando es <code>Kirby's dream land 2</code><br>
<img src="https://media.retroachievements.org/Images/046585.png" alt="kirby"></p>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,192 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Primer Post</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Primer Post</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Sep 22, 2023</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#old_blog</span>
</div>
</div>
<article>
<h1 id="buenas">buenas</h1>
<p>buenas
Luego de sufrir bastante con el nginx y su <em>Reverse Proxy</em>, finalmente me decidí por poner la pagina del blog en el <strong>WebRoot</strong> y el <em>gitea</em> en un subfolder.</p>
<h2 id="como-funciona-esto">Como funciona esto</h2>
<p>El programa que estoy usando para hacer este blog se llama <a href="https://gohugo.io">Hugo</a>, consiste de una especie de parceador de <a href="https://www.markdownguide.org/">Markdown</a> a Html estático el cual hosteo con este <a href="https://nginx.org/en/">webServer</a>.</p>
<h3 id="como-hago-nuevos-posts">Como hago nuevos posts</h3>
<p>Dentro de la carpeta del proyecto del server hay una que se llama content, todos los <code>.md</code> que haya ahí cuando utilizo el comando:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hugo
</span></span></code></pre></div><p>se genera el html de la paginas del blog las cuales copio usando rsync dentro de la intranet de mi casa</p>
<blockquote>
<p>Luraschi no me robes las llaves del ssh🙏.</p></blockquote>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,204 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sistema Alquileres DevLog n1</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<img
src="/cover2.png"
alt="Sistema Alquileres DevLog n1"
class="w-full h-auto object-cover"
/>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">Sistema Alquileres DevLog n1</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Nov 10, 2024</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#DevLog</span>
</div>
</div>
<article>
<h1 id="que-es-esto">¿Que es esto?</h1>
<p>Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &ldquo;Ingenieria de Software&rdquo; (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.</p>
<p>Ahí arriba describi solo 2 o 3 de los casi 26 casos de uso que tengo descriptos. Además voy a reutilizar los conocimiento que adquirí haciendo el panel de control para la materia de base de datos.</p>
<blockquote>
<p>Se vienen cositas</p></blockquote>
<p>Bueno ahora voy a hacer un mini-informe sobre el modulo de seguridad</p>
<h1 id="permisos-para-los-clientes">Permisos para los clientes</h1>
<p>Cito de la entrega del segundo parcial.</p>
<blockquote>
<p>En cuanto a como va el desarrollo, te diria que bien encaminado, actualmente estoy usando svelte/bootstrap para el front y aspnet core 8 ( ? ) para el backend. ya tengo definido que acciones puede hacer un cliente en el sistema mediante un sistema usuario-grupo-permiso Similar a como los permisos son definidos en linux (donde por ejemplo un usuario para poder acceder al uso del audio del servidor necesita estar en un grupo &ldquo;audio&rdquo; o para escribir a un almacenamiento en cinta necesita pertenecer al grupo &ldquo;tape&rdquo;) En mi proyecto por ahora tengo 3 grupos que consisten en los 3 actores que tengo definidos (inquilino, propietario, administracion). Entonces cuando checkeo por si un cliente tiene acceso a un permiso lo puedo averiguar de forma sencilla:</p></blockquote>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">var</span> permisos = con.Clientes
</span></span><span style="display:flex;"><span>.Where(c =&gt; c.Dni == cli.Dni)
</span></span><span style="display:flex;"><span>.SelectMany(c =&gt; c.Idgrupos)
</span></span><span style="display:flex;"><span>.SelectMany(g =&gt; g.Idpermisos)
</span></span><span style="display:flex;"><span>.Distinct();
</span></span></code></pre></div><p>Esto dandome una lista de todos los permisos que posee el cliente.</p>
<p>Tambien tengo hechos los abm de inquilino/propietario pero hay menos que comentar sobre eso.</p>
<h1 id="almacenamiento-de-contratos-de-alquiler">Almacenamiento de Contratos de Alquiler</h1>
<p>Un requisito que considero muy importante es almacenamiento de los contratos de alquiler. En una primera instancia pense que almacenarlos en un campo blob de mysql podia ser factible pero entre lo que escuché sobre que hace los backups de la base de datos gigantes y el hecho de que estaria haciendo una query a la base de datos para obtener, ponele, 3MB me parece un montón</p>
<p>Almacenarlos con un fileserver simple como <a href="https://github.com/svenstaro/miniserve">Miniserve</a> que es una excelente herramienta si bien para casos donde tenes un solo servidor pareceria masomenos pasable al final termina no siendo tan buena idea si llegas a necesitar algo minimanente distribuido o que maneje permisos.</p>
<p>Así fue como luego de preguntarle a un amigo y a chatgpt. me decidí por darle una oportunidad a <a href="https://min.io/">Minio</a> que es una alternativa &ldquo;S3 pero hosteado en casa&rdquo;. tengo mucho que aprender aún sobre s3 porque tengo solo una idea general de como funciona. Así que voy a dejar una update de esto en unos dias o semanas (no hay chances que sea consistente publicando acá) sobre como va esto. bye.</p>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,192 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>String Interpolation</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<div class="bg-blue-300 p-12"></div>
<div class="bg-blue-300">
<div class="bg-white rounded-md flex flex-col items-center px-2 py-6 max-w-4xl mx-auto">
<div class="w-full mb-8 overflow-hidden rounded-lg shadow-xl border-4 border-black">
<div class="bg-gray-200 text-gray-600 font-mono text-center py-16">
No image
</div>
</div>
<h1 class="text-4xl font-bold mb-4 text-center">String Interpolation</h1>
<div class="text-sm text-gray-600 mb-6 font-mono flex gap-4 justify-center">
<span>Publicado el: Oct 24, 2023</span>
<div class="flex gap-2">
<span class="px-2 py-1 bg-gray-200 rounded-full">#old_blog</span>
</div>
</div>
<article>
<h1 id="que-es">¿Que es?</h1>
<p>Es un proceso de evaluado, en el cual se reemplazan placeholders en <code>string</code> por valores, en nuestro caso, de variables en momento de ejecución.</p>
<h1 id="sintaxis">Sintaxis</h1>
<pre><code>var manzanas = 4;
var bananas = 3;
Console.WriteLine($&quot;Tengo {manzanas} manzanas&quot;);
Console.WriteLine($&quot;Vendí {manzanas + bananas} frutas&quot;);
</code></pre>
<blockquote>
<p>Basicamente son plantillas.</p></blockquote>
</article>
<a
href="/"
class="
inline-block mt-6
border-2 border-black bg-white px-6 py-2
shadow-[0_4px_0_black]
hover:shadow-[0_8px_0_black]
hover:-translate-y-1
transition-all duration-100 ease-linear
font-medium
"
>
← Volver
</a>
</div>
</div>
<div class="bg-blue-300 p-5"></div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -0,0 +1,256 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Gestor de Stock</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<style>
@font-face {
font-family: 'MiFuente';
src: url('/calamity.ttf') format('truetype');
}
header{
font-family: 'MiFuente', sans-serif;
}
</style>
<div class="mt-16 bg-sky-300">
<header class="text-center text-6xl pt-5">Gestor de Stock</header>
<div class="flex justify-center">
<div class="flex w-100 ">
<hr class="w-[50%] mt-6">
<p class="text-4xl">
o
</p>
<hr class="w-[50%] mt-6">
</div>
</div>
<div class="flex flex-col justify-center w-fit mx-auto mt-2">
<div class="rounded-t-full bg-sky-600">.</div>
<div class="flex justify-center gap-2 p-8 bg-sky-600">
</div>
<div class="rounded-b-full bg-sky-600 shadow-xl/30 mb-4">.</div>
<script>
function openmodal(id){
let dialog = document.getElementById(id);
dialog.toggleAttribute("hidden");
}
</script>
</div>
<div class="flex justify-center">
<div class="flex w-100 ">
<hr class="w-[50%] mt-6">
<p class="text-4xl">
o
</p>
<hr class="w-[50%] mt-6">
</div>
</div>
<div class="flex justify-center mt-2">
<article><p>Este sistema de gestión de inventario está desarrollado en C# utilizando Windows Forms. La aplicación permite administrar eficientemente el stock de productos, registrar ventas, gestionar pedidos a proveedores y verificar remitos de entrega.</p>
<h2 id="características-principales">Características Principales</h2>
<h3 id="gestión-de-productos">Gestión de Productos</h3>
<ul>
<li>Alta, baja y modificación de productos</li>
<li>Categorización de inventario</li>
<li>Control de stock mínimo y máximo</li>
<li>Alertas de stock bajo</li>
</ul>
<h3 id="registro-de-ventas">Registro de Ventas</h3>
<ul>
<li>Generación de facturas</li>
<li>Historial de ventas</li>
<li>Seguimiento de productos vendidos</li>
<li>Estadísticas de ventas</li>
</ul>
<h3 id="pedidos-a-proveedores">Pedidos a Proveedores</h3>
<ul>
<li>Creación automática de órdenes de compra</li>
<li>Seguimiento de pedidos pendientes</li>
<li>Historial de pedidos</li>
</ul>
<h3 id="verificación-de-remitos">Verificación de Remitos</h3>
<ul>
<li>Control de recepción de mercadería</li>
<li>Validación de cantidades y productos</li>
<li>Registro de discrepancias</li>
<li>Alertas de productos faltantes</li>
<li>Conformidad de recepción</li>
</ul>
<h2 id="tecnologías-utilizadas">Tecnologías Utilizadas</h2>
<ul>
<li>C# (.NET Framework)</li>
<li>Windows Forms</li>
<li>SQL Server (Base de datos)</li>
<li>Entity Framework</li>
</ul>
<h2 id="capturas-de-pantalla-wip">Capturas de Pantalla (WIP)</h2>
<p><em>(Aquí se insertarían capturas de las principales pantallas del sistema)</em></p>
<h2 id="requisitos-del-sistema">Requisitos del Sistema</h2>
<ul>
<li>Windows 7 o superior</li>
<li>.NET core 6</li>
<li>4 GB de RAM (recomendado) //podrias con menos pero no se si windows puede bootear en menos de 4gb</li>
</ul>
<h2 id="contacto">Contacto</h2>
<p>Para más información sobre este sistema de gestión de stock, contácteme a través de:</p>
<ul>
<li>Email: <a href="mailto:federico.nicolas.polidoro@gmail.com">federico.nicolas.polidoro@gmail.com</a></li>
<li>GitHub: github.com/fedpo2</li>
</ul>
</article>
</div>
</div>
<div class="bg-sky-300 rounded-b-full shadow-md">
<p>.</p>
</div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

View File

@@ -0,0 +1,270 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CoordKeeper</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<style>
@font-face {
font-family: 'MiFuente';
src: url('/calamity.ttf') format('truetype');
}
header{
font-family: 'MiFuente', sans-serif;
}
</style>
<div class="mt-16 bg-sky-300">
<header class="text-center text-6xl pt-5">CoordKeeper</header>
<div class="flex justify-center">
<div class="flex w-100 ">
<hr class="w-[50%] mt-6">
<p class="text-4xl">
o
</p>
<hr class="w-[50%] mt-6">
</div>
</div>
<div class="flex flex-col justify-center w-fit mx-auto mt-2">
<div class="rounded-t-full bg-sky-600">.</div>
<div class="flex justify-center gap-2 p-8 bg-sky-600">
<button class="p-1 rounded bg-white transform hover:scale-120
transition-all duration-100 ease-linear border-2 hover:z-2 active:z-0" onclick="openmodal(&#34;1.gif&#34;)">
<img src="1.gif" alt="Carousel Image" class="
h-[20rem] rounded">
</button>
<button class="p-1 rounded bg-white transform hover:scale-120
transition-all duration-100 ease-linear border-2 hover:z-2 active:z-0" onclick="openmodal(&#34;1.png&#34;)">
<img src="1.png" alt="Carousel Image" class="
h-[20rem] rounded">
</button>
<button class="p-1 rounded bg-white transform hover:scale-120
transition-all duration-100 ease-linear border-2 hover:z-2 active:z-0" onclick="openmodal(&#34;2.png&#34;)">
<img src="2.png" alt="Carousel Image" class="
h-[20rem] rounded">
</button>
</div>
<div class="rounded-b-full bg-sky-600 shadow-xl/30 mb-4">.</div>
<dialog id="1.gif" class="fixed inset-0 flex items-center justify-center
z-50 w-full h-full bg-black bg-opacity-50"
style="background-color: rgba(0,0,0,0.2);" onclick="openmodal(&#34;1.gif&#34;)" hidden>
<img src="1.gif" alt="Carousel Image" class="
mt-2 p-1 bg-white border-2
h-[80%] rounded-md opacity-100">
</dialog>
<dialog id="1.png" class="fixed inset-0 flex items-center justify-center
z-50 w-full h-full bg-black bg-opacity-50"
style="background-color: rgba(0,0,0,0.2);" onclick="openmodal(&#34;1.png&#34;)" hidden>
<img src="1.png" alt="Carousel Image" class="
mt-2 p-1 bg-white border-2
h-[80%] rounded-md opacity-100">
</dialog>
<dialog id="2.png" class="fixed inset-0 flex items-center justify-center
z-50 w-full h-full bg-black bg-opacity-50"
style="background-color: rgba(0,0,0,0.2);" onclick="openmodal(&#34;2.png&#34;)" hidden>
<img src="2.png" alt="Carousel Image" class="
mt-2 p-1 bg-white border-2
h-[80%] rounded-md opacity-100">
</dialog>
<script>
function openmodal(id){
let dialog = document.getElementById(id);
dialog.toggleAttribute("hidden");
}
</script>
</div>
<div class="flex justify-center">
<div class="flex w-100 ">
<hr class="w-[50%] mt-6">
<p class="text-4xl">
o
</p>
<hr class="w-[50%] mt-6">
</div>
</div>
<div class="flex justify-center mt-2">
<article><p>es una aplicación web desarrollada con React diseñada específicamente para jugadores de Minecraft. Esta herramienta permite a los usuarios almacenar, organizar y gestionar fácilmente las coordenadas de ubicaciones importantes dentro del juego.</p>
<h2 id="características">Características</h2>
<ul>
<li>Almacenamiento de coordenadas X, Y, Z de lugares importantes</li>
<li>Organización por Dimensiones</li>
<li>Interfaz intuitiva y fácil de usar</li>
<li>Acceso rápido a tus coordenadas guardadas</li>
</ul>
<p>Ya no tendrás que depender de notas dispersas o capturas de pantalla para recordar dónde encontraste ese templo submarino o aquella cueva de diamantes. CoordKeeper mantiene toda esta información organizada en un solo lugar.</p>
<p>Visita el <a href="https://git.sr.ht/~fedpo/Coord-Keeper-Minecraft">repositorio</a> para más información o para contribuir al proyecto.</p>
</article>
</div>
</div>
<div class="bg-sky-300 rounded-b-full shadow-md">
<p>.</p>
</div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Proyectos on Blog Fede</title>
<link>https://fedesrv.ddns.net/proyectos/</link>
<description>Recent content in Proyectos on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<lastBuildDate>Fri, 02 May 2025 02:13:53 -0300</lastBuildDate>
<atom:link href="https://fedesrv.ddns.net/proyectos/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Panel Web</title>
<link>https://fedesrv.ddns.net/proyectos/paneldb/</link>
<pubDate>Fri, 02 May 2025 02:13:53 -0300</pubDate>
<guid>https://fedesrv.ddns.net/proyectos/paneldb/</guid>
<description>&lt;p&gt;Este panel web es una herramienta de visualización y análisis de datos para una cadena hotelera, desarrollado como trabajo final para el curso de Base de Datos Aplicada. El sistema permite explorar métricas clave de rendimiento a través de una estructura jerárquica de tres niveles.&lt;/p&gt;&#xA;&lt;h2 id=&#34;arquitectura-técnica&#34;&gt;Arquitectura Técnica&lt;/h2&gt;&#xA;&lt;h3 id=&#34;backend&#34;&gt;Backend&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ASP.NET Core 7&lt;/li&gt;&#xA;&lt;li&gt;Entity Framework Core para acceso a datos&lt;/li&gt;&#xA;&lt;li&gt;API RESTful para comunicación con el frontend&lt;/li&gt;&#xA;&lt;li&gt;Autenticación JWT para seguridad&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;frontend&#34;&gt;Frontend&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;React (18.x)&lt;/li&gt;&#xA;&lt;li&gt;Material UI para componentes de interfaz&lt;/li&gt;&#xA;&lt;li&gt;ChartJS para visualización de datos&lt;/li&gt;&#xA;&lt;li&gt;React Router para navegación entre secciones&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;estructura-de-navegación-drilling&#34;&gt;Estructura de Navegación (Drilling)&lt;/h2&gt;&#xA;&lt;p&gt;El panel implementa un sistema de navegación jerárquica de tres niveles:&lt;/p&gt;</description>
</item>
<item>
<title>Gestor de Stock</title>
<link>https://fedesrv.ddns.net/proyectos/controlstock/</link>
<pubDate>Fri, 02 May 2025 02:10:53 -0300</pubDate>
<guid>https://fedesrv.ddns.net/proyectos/controlstock/</guid>
<description>&lt;p&gt;Este sistema de gestión de inventario está desarrollado en C# utilizando Windows Forms. La aplicación permite administrar eficientemente el stock de productos, registrar ventas, gestionar pedidos a proveedores y verificar remitos de entrega.&lt;/p&gt;&#xA;&lt;h2 id=&#34;características-principales&#34;&gt;Características Principales&lt;/h2&gt;&#xA;&lt;h3 id=&#34;gestión-de-productos&#34;&gt;Gestión de Productos&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Alta, baja y modificación de productos&lt;/li&gt;&#xA;&lt;li&gt;Categorización de inventario&lt;/li&gt;&#xA;&lt;li&gt;Control de stock mínimo y máximo&lt;/li&gt;&#xA;&lt;li&gt;Alertas de stock bajo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;registro-de-ventas&#34;&gt;Registro de Ventas&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Generación de facturas&lt;/li&gt;&#xA;&lt;li&gt;Historial de ventas&lt;/li&gt;&#xA;&lt;li&gt;Seguimiento de productos vendidos&lt;/li&gt;&#xA;&lt;li&gt;Estadísticas de ventas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;pedidos-a-proveedores&#34;&gt;Pedidos a Proveedores&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Creación automática de órdenes de compra&lt;/li&gt;&#xA;&lt;li&gt;Seguimiento de pedidos pendientes&lt;/li&gt;&#xA;&lt;li&gt;Historial de pedidos&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;verificación-de-remitos&#34;&gt;Verificación de Remitos&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Control de recepción de mercadería&lt;/li&gt;&#xA;&lt;li&gt;Validación de cantidades y productos&lt;/li&gt;&#xA;&lt;li&gt;Registro de discrepancias&lt;/li&gt;&#xA;&lt;li&gt;Alertas de productos faltantes&lt;/li&gt;&#xA;&lt;li&gt;Conformidad de recepción&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;tecnologías-utilizadas&#34;&gt;Tecnologías Utilizadas&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;C# (.NET Framework)&lt;/li&gt;&#xA;&lt;li&gt;Windows Forms&lt;/li&gt;&#xA;&lt;li&gt;SQL Server (Base de datos)&lt;/li&gt;&#xA;&lt;li&gt;Entity Framework&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;capturas-de-pantalla-wip&#34;&gt;Capturas de Pantalla (WIP)&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;(Aquí se insertarían capturas de las principales pantallas del sistema)&lt;/em&gt;&lt;/p&gt;</description>
</item>
<item>
<title>CoordKeeper</title>
<link>https://fedesrv.ddns.net/proyectos/coordkeeper/</link>
<pubDate>Fri, 02 May 2025 01:47:53 -0300</pubDate>
<guid>https://fedesrv.ddns.net/proyectos/coordkeeper/</guid>
<description>&lt;p&gt;es una aplicación web desarrollada con React diseñada específicamente para jugadores de Minecraft. Esta herramienta permite a los usuarios almacenar, organizar y gestionar fácilmente las coordenadas de ubicaciones importantes dentro del juego.&lt;/p&gt;&#xA;&lt;h2 id=&#34;características&#34;&gt;Características&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Almacenamiento de coordenadas X, Y, Z de lugares importantes&lt;/li&gt;&#xA;&lt;li&gt;Organización por Dimensiones&lt;/li&gt;&#xA;&lt;li&gt;Interfaz intuitiva y fácil de usar&lt;/li&gt;&#xA;&lt;li&gt;Acceso rápido a tus coordenadas guardadas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Ya no tendrás que depender de notas dispersas o capturas de pantalla para recordar dónde encontraste ese templo submarino o aquella cueva de diamantes. CoordKeeper mantiene toda esta información organizada en un solo lugar.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,266 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Panel Web</title>
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<main>
<nav class="bg-gray-800 fixed w-full top-0 z-3">
<div class="mx-auto px-4">
<div class="flex items-center justify-between h-16">
<div class="flex items-center">
<a href="/" class="text-white font-bold text-xl"
>Fede Landing Site</a
>
</div>
<div class="hidden md:flex">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
href="https://fedesrv.ddns.net/git/fede/CV/media/branch/master/AltaCV_Template.pdf"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
<div class="md:hidden cursor-context-menu">
<button
onclick="toggleOffCanvas()"
class="border px-2 py-1 rounded text-white"
>
<svg
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M0 6h25M0 12h25M0 18h25"
/>
</svg>
</button>
</div>
</div>
</div>
<div
id="offCanvas"
class="fixed top-16 right-0 w-64 h-screen bg-gray-800 transform translate-x-full transition-transform duration-200 ease-in-out"
>
<div class="flex flex-col p-4">
<a
href="/git"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Git</a
>
<a
class="text-gray-300 hover:text-white px-3 py-2 muted"
title="Under Construction 🚧👷‍♂️🏗️"
target="_blank"
>CV</a
>
<a
href="https://github.com/fedpo2"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>GitHub</a
>
<a
href="mailto:federico.nicolas.polidoro@gmail.com"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>Email</a
>
<a
href="https://www.linkedin.com/in/federico-polidoro-40137a25b/"
target="_blank"
class="text-gray-300 hover:text-white px-3 py-2"
>LinkedIn</a
>
</div>
</div>
</nav>
<script>
function toggleOffCanvas() {
const offCanvas = document.getElementById("offCanvas");
offCanvas.classList.toggle("translate-x-full");
}
</script>
<style>
@font-face {
font-family: 'MiFuente';
src: url('/calamity.ttf') format('truetype');
}
header{
font-family: 'MiFuente', sans-serif;
}
</style>
<div class="mt-16 bg-sky-300">
<header class="text-center text-6xl pt-5">Panel Web</header>
<div class="flex justify-center">
<div class="flex w-100 ">
<hr class="w-[50%] mt-6">
<p class="text-4xl">
o
</p>
<hr class="w-[50%] mt-6">
</div>
</div>
<div class="flex flex-col justify-center w-fit mx-auto mt-2">
<div class="rounded-t-full bg-sky-600">.</div>
<div class="flex justify-center gap-2 p-8 bg-sky-600">
</div>
<div class="rounded-b-full bg-sky-600 shadow-xl/30 mb-4">.</div>
<script>
function openmodal(id){
let dialog = document.getElementById(id);
dialog.toggleAttribute("hidden");
}
</script>
</div>
<div class="flex justify-center">
<div class="flex w-100 ">
<hr class="w-[50%] mt-6">
<p class="text-4xl">
o
</p>
<hr class="w-[50%] mt-6">
</div>
</div>
<div class="flex justify-center mt-2">
<article><p>Este panel web es una herramienta de visualización y análisis de datos para una cadena hotelera, desarrollado como trabajo final para el curso de Base de Datos Aplicada. El sistema permite explorar métricas clave de rendimiento a través de una estructura jerárquica de tres niveles.</p>
<h2 id="arquitectura-técnica">Arquitectura Técnica</h2>
<h3 id="backend">Backend</h3>
<ul>
<li>ASP.NET Core 7</li>
<li>Entity Framework Core para acceso a datos</li>
<li>API RESTful para comunicación con el frontend</li>
<li>Autenticación JWT para seguridad</li>
</ul>
<h3 id="frontend">Frontend</h3>
<ul>
<li>React (18.x)</li>
<li>Material UI para componentes de interfaz</li>
<li>ChartJS para visualización de datos</li>
<li>React Router para navegación entre secciones</li>
</ul>
<h2 id="estructura-de-navegación-drilling">Estructura de Navegación (Drilling)</h2>
<p>El panel implementa un sistema de navegación jerárquica de tres niveles:</p>
<h3 id="nivel-1-cadena-hotelera">Nivel 1: Cadena Hotelera</h3>
<ul>
<li>Nombre de la cadena hotelera</li>
</ul>
<h3 id="nivel-2-locaciónhotel-específico">Nivel 2: Locación/Hotel Específico</h3>
<ul>
<li>Datos detallados de cada propiedad</li>
</ul>
<h3 id="nivel-3-estadísticas-detalladas">Nivel 3: Estadísticas Detalladas</h3>
<ul>
<li>Análisis profundo de datos operativos</li>
<li>Reportes especializados</li>
</ul>
<h2 id="características-principales">Características Principales</h2>
<ul>
<li><strong>Dashboards Interactivos</strong>: Gráficos dinámicos con ChartJS para visualización intuitiva de datos.</li>
<li><strong>Filtros Avanzados</strong>: Capacidad de filtrar datos por fecha, categoría de habitación, y segmento de cliente.</li>
<li><strong>Alertas Personalizables</strong>: Notificaciones cuando métricas clave superan umbrales definidos.</li>
<li><strong>Responsive Design</strong>: Adaptable a dispositivos móviles y tablets para monitoreo en movimiento.</li>
</ul>
<h2 id="modelo-de-datos">Modelo de Datos</h2>
<p>El sistema se basa en un esquema relacional que incluye las siguientes entidades principales:</p>
<ul>
<li>Cadenas Hoteleras</li>
<li>Hoteles/Propiedades</li>
<li>Habitaciones</li>
<li>Reservas</li>
<li>Clientes</li>
<li>Servicios</li>
<li>Facturación</li>
</ul>
<h2 id="capturas-de-pantalla-wip">Capturas de Pantalla (WIP)</h2>
<p><em>[Aquí se incluirían capturas de pantalla del panel mostrando los tres niveles de navegación y diferentes visualizaciones]</em></p>
<h2 id="implementación">Implementación</h2>
<p>El proyecto ha sido desarrollado siguiendo una metodología ágil, con énfasis en:</p>
<ul>
<li>Normalización de la base de datos</li>
<li>Optimización de consultas para grandes volúmenes de datos</li>
<li>Implementación de procedimientos almacenados para operaciones complejas</li>
<li>Medidas de seguridad para protección de datos sensibles</li>
</ul>
<h2 id="conclusiones">Conclusiones</h2>
<p>Este panel web demuestra la aplicación práctica de conceptos avanzados de bases de datos relacionales en un entorno empresarial del sector hotelero, proporcionando una herramienta valiosa para la toma de decisiones basada en datos.</p>
</article>
</div>
</div>
<div class="bg-sky-300 rounded-b-full shadow-md">
<p>.</p>
</div>
</main>
<br>
<footer class="text-center text-sm text-gray-500 mt-12 py-6 border-t">
© 2025 Federico Polidoro
</footer>
</body>
</html>

View File

@@ -2,10 +2,66 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>http://localhost:1313/categories/</loc>
<loc>https://fedesrv.ddns.net/</loc>
<lastmod>2025-05-02T02:13:53-03:00</lastmod>
</url><url>
<loc>http://localhost:1313/</loc>
<loc>https://fedesrv.ddns.net/proyectos/paneldb/</loc>
<lastmod>2025-05-02T02:13:53-03:00</lastmod>
</url><url>
<loc>http://localhost:1313/tags/</loc>
<loc>https://fedesrv.ddns.net/proyectos/</loc>
<lastmod>2025-05-02T02:13:53-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/proyectos/controlstock/</loc>
<lastmod>2025-05-02T02:10:53-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/proyectos/coordkeeper/</loc>
<lastmod>2025-05-02T01:47:53-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/coord-keeper/</loc>
<lastmod>2025-03-19T02:53:57-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/tags/devlog/</loc>
<lastmod>2025-03-19T02:53:57-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/</loc>
<lastmod>2025-03-19T02:53:57-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/tags/</loc>
<lastmod>2025-03-19T02:53:57-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/</loc>
<lastmod>2024-11-10T00:08:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/tags/fix/</loc>
<lastmod>2024-11-09T13:28:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/</loc>
<lastmod>2024-11-09T13:28:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/tags/old_blog/</loc>
<lastmod>2023-10-24T22:24:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/string-interpolation/</loc>
<lastmod>2023-10-24T22:24:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/anuncio-aoc-2023/</loc>
<lastmod>2023-10-03T12:54:22-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/bootloaderincident/</loc>
<lastmod>2023-09-26T22:27:20-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/</loc>
<lastmod>2023-09-23T10:35:18-03:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/</loc>
<lastmod>2023-09-22T15:08:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/retroarchivements/</loc>
<lastmod>2023-09-22T13:30:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/posts/sample-post/</loc>
<lastmod>2023-09-22T12:28:17+08:00</lastmod>
</url><url>
<loc>https://fedesrv.ddns.net/categories/</loc>
</url>
</urlset>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>DevLog on Blog Fede</title>
<link>https://fedesrv.ddns.net/tags/devlog/</link>
<description>Recent content in DevLog on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<lastBuildDate>Wed, 19 Mar 2025 02:53:57 -0300</lastBuildDate>
<atom:link href="https://fedesrv.ddns.net/tags/devlog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Coord Keeper</title>
<link>https://fedesrv.ddns.net/posts/coord-keeper/</link>
<pubDate>Wed, 19 Mar 2025 02:53:57 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/coord-keeper/</guid>
<description>&lt;h1 id=&#34;motivacion&#34;&gt;Motivacion&lt;/h1&gt;&#xA;&lt;p&gt;He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el &lt;!-- raw HTML omitted --&gt;f3&lt;!-- raw HTML omitted --&gt;) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo&amp;hellip;. hacer una app de react.&lt;/p&gt;</description>
</item>
<item>
<title>Sistema Alquileres DevLog n1</title>
<link>https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/</link>
<pubDate>Sun, 10 Nov 2024 00:08:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/</guid>
<description>&lt;h1 id=&#34;que-es-esto&#34;&gt;¿Que es esto?&lt;/h1&gt;&#xA;&lt;p&gt;Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &amp;ldquo;Ingenieria de Software&amp;rdquo; (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.&lt;/p&gt;</description>
</item>
</channel>
</rss>

19
public/tags/fix/index.xml Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Fix on Blog Fede</title>
<link>https://fedesrv.ddns.net/tags/fix/</link>
<description>Recent content in Fix on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<lastBuildDate>Sat, 09 Nov 2024 13:28:17 +0800</lastBuildDate>
<atom:link href="https://fedesrv.ddns.net/tags/fix/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Fix Screen Tear x11</title>
<link>https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/</link>
<pubDate>Sat, 09 Nov 2024 13:28:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/</guid>
<description>&lt;h1 id=&#34;que-es-el-screen-tear&#34;&gt;¿Que es el screen tear?&lt;/h1&gt;&#xA;&lt;p&gt;buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb&#34; alt=&#34;Imagen sacada de google donde se demuestra el screen tear&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.&lt;/p&gt;</description>
</item>
</channel>
</rss>

View File

@@ -1,11 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Tags on My New Hugo Site</title>
<link>http://localhost:1313/tags/</link>
<description>Recent content in Tags on My New Hugo Site</description>
<title>Tags on Blog Fede</title>
<link>https://fedesrv.ddns.net/tags/</link>
<description>Recent content in Tags on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<atom:link href="http://localhost:1313/tags/index.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Wed, 19 Mar 2025 02:53:57 -0300</lastBuildDate>
<atom:link href="https://fedesrv.ddns.net/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>DevLog</title>
<link>https://fedesrv.ddns.net/tags/devlog/</link>
<pubDate>Wed, 19 Mar 2025 02:53:57 -0300</pubDate>
<guid>https://fedesrv.ddns.net/tags/devlog/</guid>
<description></description>
</item>
<item>
<title>Fix</title>
<link>https://fedesrv.ddns.net/tags/fix/</link>
<pubDate>Sat, 09 Nov 2024 13:28:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/tags/fix/</guid>
<description></description>
</item>
<item>
<title>Old_blog</title>
<link>https://fedesrv.ddns.net/tags/old_blog/</link>
<pubDate>Tue, 24 Oct 2023 22:24:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/tags/old_blog/</guid>
<description></description>
</item>
</channel>
</rss>

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Old_blog on Blog Fede</title>
<link>https://fedesrv.ddns.net/tags/old_blog/</link>
<description>Recent content in Old_blog on Blog Fede</description>
<generator>Hugo</generator>
<language>en-us</language>
<lastBuildDate>Tue, 24 Oct 2023 22:24:17 +0800</lastBuildDate>
<atom:link href="https://fedesrv.ddns.net/tags/old_blog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>String Interpolation</title>
<link>https://fedesrv.ddns.net/posts/string-interpolation/</link>
<pubDate>Tue, 24 Oct 2023 22:24:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/string-interpolation/</guid>
<description>&lt;h1 id=&#34;que-es&#34;&gt;¿Que es?&lt;/h1&gt;&#xA;&lt;p&gt;Es un proceso de evaluado, en el cual se reemplazan placeholders en &lt;code&gt;string&lt;/code&gt; por valores, en nuestro caso, de variables en momento de ejecución.&lt;/p&gt;&#xA;&lt;h1 id=&#34;sintaxis&#34;&gt;Sintaxis&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;var manzanas = 4;&#xA;var bananas = 3;&#xA;&#xA;Console.WriteLine($&amp;quot;Tengo {manzanas} manzanas&amp;quot;);&#xA;Console.WriteLine($&amp;quot;Vendí {manzanas + bananas} frutas&amp;quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Basicamente son plantillas.&lt;/p&gt;&lt;/blockquote&gt;</description>
</item>
<item>
<title>Anuncio Aoc 2023</title>
<link>https://fedesrv.ddns.net/posts/anuncio-aoc-2023/</link>
<pubDate>Tue, 03 Oct 2023 12:54:22 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/anuncio-aoc-2023/</guid>
<description>&lt;h1 id=&#34;que-es-advent-of-code&#34;&gt;¿Que es Advent of Code?&lt;/h1&gt;&#xA;&lt;p&gt;Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Preparacion de entrevistas.&lt;/li&gt;&#xA;&lt;li&gt;Training en empresas.&lt;/li&gt;&#xA;&lt;li&gt;Practica para familiarizarse con nuevos lenguajes de programacion.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;etc&amp;hellip;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;que-tengo-pensado&#34;&gt;Que tengo pensado&lt;/h1&gt;&#xA;&lt;p&gt;Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando &lt;code&gt;zig&lt;/code&gt; como un ejercicio para aprender ese lenguaje de programacion &lt;code&gt;(aunque de forma básica)&lt;/code&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>Bootloader Incident</title>
<link>https://fedesrv.ddns.net/posts/bootloaderincident/</link>
<pubDate>Tue, 26 Sep 2023 22:27:20 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/bootloaderincident/</guid>
<description>&lt;h1 id=&#34;el-inicio-de-la-catastrofe&#34;&gt;El inicio de la catastrofe&lt;/h1&gt;&#xA;&lt;p&gt;En pocas palabras, &lt;strong&gt;Nunca Corten Un &lt;code&gt;pacman -Syu&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;&#xA;Si utilizan &lt;strong&gt;arch&lt;/strong&gt; sabrán que se pueden configurar &amp;lsquo;hooks&amp;rsquo; antes y despues de las operaciones con el comando &lt;code&gt;pacman&lt;/code&gt;, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la &lt;strong&gt;UEFI&lt;/strong&gt;.&lt;/p&gt;</description>
</item>
<item>
<title>Imagenes: Color a b&amp;w</title>
<link>https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/</link>
<pubDate>Sat, 23 Sep 2023 10:35:18 -0300</pubDate>
<guid>https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/</guid>
<description>&lt;h1 id=&#34;gimp&#34;&gt;Gimp&lt;/h1&gt;&#xA;&lt;p&gt;Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar &lt;strong&gt;Gimp&lt;/strong&gt; con la opcion de &lt;code&gt;Color &amp;gt; Desaturacion &amp;gt; Color a gama de grises&lt;/code&gt;. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.&lt;br&gt;&#xA;&lt;img src=&#34;https://fedesrv.ddns.net/fedecomp.png&#34; alt=&#34;Comparación&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;imagemagick&#34;&gt;ImageMagick&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Es un conjunto de utilidades de código abierto para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Una de esas utilidades es llamada &lt;code&gt;convert&lt;/code&gt;, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada &lt;code&gt;-colorspace&lt;/code&gt; la cual si le damos el parametro &lt;strong&gt;Gray&lt;/strong&gt; la imagen resultante estará representada en una gama de grises.&#xA;&lt;img src=&#34;https://fedesrv.ddns.net/fedeg.jpg&#34; alt=&#34;Imagen en gama de grises&#34;&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Diseño de Software Incident</title>
<link>https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/</link>
<pubDate>Fri, 22 Sep 2023 15:08:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/</guid>
<description>&lt;h1 id=&#34;instanciacion-del-sqlconnection&#34;&gt;Instanciacion del SqlConnection&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; connection = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SqlConnection(configuration.GetConnectionString(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DefaultConnection&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Eso genera un sql connection que va a existir hasta que salga del scope del programa.&lt;/p&gt;&#xA;&lt;h1 id=&#34;creacion-del-sqlcommand&#34;&gt;Creacion del SqlCommand&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; var command = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SqlCommand();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.CommandText = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sp_RecuperaProductos&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.CommandType = System.Data.CommandType.StoredProcedure;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;apertura-de-la-coneccion&#34;&gt;Apertura de la coneccion&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.Connection = connection;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command.Connection.Open();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;utilizacion-del-executereader&#34;&gt;Utilizacion del ExecuteReader&lt;/h2&gt;&#xA;&lt;p&gt;Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. &lt;strong&gt;MUY&lt;/strong&gt; importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).&lt;/p&gt;</description>
</item>
<item>
<title>RetroArchivements</title>
<link>https://fedesrv.ddns.net/posts/retroarchivements/</link>
<pubDate>Fri, 22 Sep 2023 13:30:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/retroarchivements/</guid>
<description>&lt;p&gt;Hace ya un par de dias que estoy usando un &lt;a href=&#34;https://retroachievements.org/user/fedpo2&#34;&gt;servicio&lt;/a&gt; que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.&lt;/p&gt;&#xA;&lt;p&gt;Uno de los que estoy jugando es &lt;code&gt;Kirby&#39;s dream land 2&lt;/code&gt;&lt;br&gt;&#xA;&lt;img src=&#34;https://media.retroachievements.org/Images/046585.png&#34; alt=&#34;kirby&#34;&gt;&lt;/p&gt;</description>
</item>
<item>
<title>Primer Post</title>
<link>https://fedesrv.ddns.net/posts/sample-post/</link>
<pubDate>Fri, 22 Sep 2023 12:28:17 +0800</pubDate>
<guid>https://fedesrv.ddns.net/posts/sample-post/</guid>
<description>&lt;h1 id=&#34;buenas&#34;&gt;buenas&lt;/h1&gt;&#xA;&lt;p&gt;buenas&#xA;Luego de sufrir bastante con el nginx y su &lt;em&gt;Reverse Proxy&lt;/em&gt;, finalmente me decidí por poner la pagina del blog en el &lt;strong&gt;WebRoot&lt;/strong&gt; y el &lt;em&gt;gitea&lt;/em&gt; en un subfolder.&lt;/p&gt;&#xA;&lt;h2 id=&#34;como-funciona-esto&#34;&gt;Como funciona esto&lt;/h2&gt;&#xA;&lt;p&gt;El programa que estoy usando para hacer este blog se llama &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;, consiste de una especie de parceador de &lt;a href=&#34;https://www.markdownguide.org/&#34;&gt;Markdown&lt;/a&gt; a Html estático el cual hosteo con este &lt;a href=&#34;https://nginx.org/en/&#34;&gt;webServer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;como-hago-nuevos-posts&#34;&gt;Como hago nuevos posts&lt;/h3&gt;&#xA;&lt;p&gt;Dentro de la carpeta del proyecto del server hay una que se llama content, todos los &lt;code&gt;.md&lt;/code&gt; que haya ahí cuando utilizo el comando:&lt;/p&gt;</description>
</item>
</channel>
</rss>

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"Target":"/css/main.min.73bbfd913fba24acb7fb544caf2b0d070f97fac0e249a4fde747d4bed19fea76.css","MediaType":"text/css","Data":{"Integrity":"sha256-c7v9kT+6JKy3+1RMrysNBw+X+sDiSaT950fUvtGf6nY="}}
{"Target":"/css/main.min.6657c43a041d4f8a4e1f6b27ef5daeae062d6a21292e0a06f3fa9ffa3fc3afde.css","MediaType":"text/css","Data":{"Integrity":"sha256-ZlfEOgQdT4pOH2sn712urgYtaiEpLgoG8/qf+j/Dr94="}}

Binary file not shown.

BIN
static/calamity.ttf Normal file

Binary file not shown.

BIN
static/cover.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
static/cover.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

BIN
static/cover2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

File diff suppressed because one or more lines are too long

130
static/css/styles.css Normal file
View File

@@ -0,0 +1,130 @@
/* Contenedor del artículo */
article {
max-width: 800px;
padding: 1.5rem;
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
font-family: "Inter", sans-serif;
color: #333;
line-height: 1.8;
}
/* Títulos */
article h1 {
font-size: 2.5rem;
font-weight: bold;
text-align: center;
margin-bottom: 1.5rem;
color: #222;
}
article h2 {
font-size: 1.8rem;
font-weight: 600;
margin: 2rem 0 1rem;
color: #444;
}
article h3 {
font-size: 1.4rem;
font-weight: 500;
margin: 1.5rem 0 1rem;
color: #555;
}
/* Párrafos */
article p {
margin: 1rem 0;
font-size: 1.1rem;
}
/* Imágenes */
article img {
width: 100%;
max-height: 400px;
object-fit: cover;
border-radius: 8px;
margin: 1.5rem 0;
display: block;
}
/* Listas */
article ul {
list-style: disc inside;
margin: 1rem 0;
padding-left: 1rem;
}
article ol {
list-style: decimal inside;
margin: 1rem 0;
padding-left: 1rem;
}
/* Citas */
article blockquote {
font-style: italic;
border-left: 4px solid #4b9ce2;
background: #f4faff;
padding: 0.75rem 1rem;
margin: 1.5rem 0;
}
/* Líneas divisorias */
article hr {
border: none;
border-top: 2px solid #ddd;
margin: 2rem 0;
}
/* Enlaces */
article a {
color: #4b9ce2;
text-decoration: underline;
transition: color 0.2s ease;
}
article a:hover {
color: #2563eb;
}
/* Código en línea */
article code {
background: #f3f4f6;
padding: 0.2rem 0.4rem;
border-radius: 4px;
font-family: monospace;
font-size: 0.95rem;
}
/* Bloques de código */
article pre {
background: #f3f4f6;
padding: 1rem;
border-radius: 8px;
overflow-x: auto;
font-family: monospace;
font-size: 1rem;
margin: 1.5rem 0;
}
/* Secciones dentro del artículo */
article section {
margin-top: 2rem;
}
/* Responsive */
@media (max-width: 600px) {
article h1 {
font-size: 2rem;
}
article h2 {
font-size: 1.5rem;
}
article h3 {
font-size: 1.2rem;
}
}