Últimos artículos
Estas son las últimas entradas en el blog.
De todo un poco para solucionar los problemas diarios de un administrador de IT y DBA
Estas son las últimas entradas en el blog.
De todo un poco para solucionar los problemas diarios de un administrador de IT y DBA
Desde que apareció WSL en Windows ya no tuve la necesidad de tener que tener una VM con alguna distro de Linux.
Si no sabes lo que es WSL (Windows Subsystem for linux) aquí te dejo la documentación oficial Instalación de WSL | Microsoft Learn
Pero en pocas palabras es la capacidad que tiene Windows (desde win 10) de exponer el acceso al procesador a través de una capa controlada, pudiendo tener otro mini sistema operativo corriendo a la par. A diferencia de la emulación, aquí lo que se intenta es que ambas sistemas operativos puedan acceder al procesado, y ahorrar recursos sobre todo.
En mi caso, para acceder a servidores y programar, suele tener dos distros:
Ambos con dos versiones diferentes de WSL. Esto es debido a que el performance del disco en la versión 2 de WSL, se vio afectada, y por otro lado hay problemas de compatibilidad, aún con la versión dos.
El espacio destinado a cada una es de unas 10gigas, y aveces resulta cómodo tenerlas en algún disco diferente. Por ello hoy veremos el proceso para mover las mismas a otra ubicación.
Listar las distro instaladas:
wsl --list -v

Con este simple comando podrás ver que distro tienes disponibles y que versión son.
Detener la distro a mover.
En mi caso la de Debian
wsl -t Debian

Exportar la distro
wsl --export Debian "D:\WSL\debian.tar"
Esta parte demora unos minutos dependiende del tamaña de tu distro. En mi caso la voy a mover al disco D:, a una carpeta denominada WSL

Desregistrar la distro
wsl --unregister Debian
Actualizamos el registro, eliminando distro actual, y luego volviendo a crear pero con la nueva ubicación

Importar la distro
wsl --import Debian "D:\WSL\Debian" "D:\WSL\debian.tar"
Ya estamos llegando a su fin. Aquí solamente le decimos que queremos importar nuestro distro, indicando el nombre de la misma, la ubicación en donde va a quedar, y el donde en donde esta el backup.

Vale aclarar que con este proceso no pierdes nada de lo que tengas en tu distro, como así también el perfil que tengas en tu terminal ya configurado.
Espero que te sea útil. En mi caso no demoró mas de 5 min todo el proceso.
¿Porque un systemctl enable myservice.service da este error?
Hoy es unos de esos días donde algo tan simple deja de funcionar. Te pongo en contexto: Un worker service creado en .NET 7.0 encargado de interactuar con un servicio de telefónia Asteriks y una API de .NET
Este servicio funciona correctamente en el servidor linux que cuenta con CentOS y una distro de «FreePBX». Por lo que se decidió pasar a servicio la ejecución del mismo.
Para ello, de acuerdo a la documentación de .NET tan solo con el siguiente archivo de texto es suficiente:
Host ASP.NET Core on Linux with Nginx | Microsoft Learn
[Unit]
Description=Example .NET Web API App running on Linux
After=network.target
[Service]
WorkingDirectory=/var/ami
ExecStart=/usr/bin/dotnet /var/ami/WorkerServiceAMI.dll
Restart=always
KillSignal=SIGINT
SyslogIdentifier=dotnet-ami
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
Una vez generado el mismo tan solo al ejecutar systemctl enable myservice.service debería funcionar pero recibía constantemente este error:
Failed to execute operation: No such file or directory
Luego de romperme la cabeza y no encontrar la solución en Google me puse analizar el porque no encontraba el archivo. Y entendí lo siguiente: Systemctl es parte del administrador de servicios del sistema, por lo tanto busca los archivos de forma predeterminada en /etc/systemd/system o /usr/lib/systemd/system.
Solución:
Copia el archivo dentro de esa ubicación y asunto arreglado.
Espero que te sirva este dato.
Sino sábes lo que es net MAUI te dejo un video donde está bien explicado.
La historia corta es que es el framework de Microsoft para desarrollar aplicaciones móviles nativas para iOs, Android, MacOs y Windows.
En caso de que requieras persistencias historicamente se ha trabajado siempre con el motor SQLLite de forma local. Pero si quieres algo más robutos te conviene buscar un motor de bases de datos como PostgreSQL, MySQL, MSSQl, etc.
Pero la cuestión aquí es: «Puedo conectarme directamente a MySQL desde Net MAUI?
La respuesta corta es: «No, Lamentablemente no es posible». El problema está en la forma en que se realiza la encriptación de la conexión al motor, y el sistema operativo que la intenta hacer, por ejemplo Android.
Tuve varias horas cacharreando con el asunto, y cada paso que avanzaba, se compensaba con dos mas de retroceso.
¿Porque lo intente hacer?
A fines educativo, ya que no es la manera correcta.
¿Como deberías hacerlo?
Siempre a través de un servicio web (WebService Rest Ful). Es la mejor alternativa ya que simplemente con un cliente web (http client) podrás realizar la integración de una manera standarizada.
Seguramente para serializar / deserializar tus json ocupas la librería externa de Newtonsoft Json.NET – Newtonsoft
Esta librería nos acompaña desde el 2011, y durante todo el furor de .NET framework fue la mejor alternativa que teníamos disponible.
Luego con la aparición de Net Core (2016) y su enfoque en el rendimiento estaba claro que había que tener algo nativo para el trabajo con JSON ya que es un estándar a la hora de pasar información entre servicios web del tipo WebAPI. Por ello surgió la clase nativa System.Text.Json. De manera muy tímida fue adquiriendo mayor funcionalidad, pero sobre todo un mejor rendimiento en performance frente a su competidor mas estable.
Al día de hoy tenemos Net 7.0 y en la puerta Net 8.0 que será liberado en noviembre del 2023. Por ello me propuse realizar una comparativa para ver que tan cierto era esto de que System.Text.Json es 100% más rapido que NetwtonSoft.
Aquí te dejo el video y los resultados te sorprenderán
Para ello haremos un #benchmark usando los frameworks de #net7 y #net8.
Errores como esto puede significar que algo anda mal con tu TempDB
The operating system returned error 1117(No se puede realizar la solicitud por un error del dispositivo de E/S.) to SQL Server during a write at offset 0x0000003f840000 in file 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb.mdf'
Se puede tratar de indagar el motivo, pero en esta ocasión, vamos a mover directamente la TempDB que está en producción. Quedó actualmente en el disco del sistema operativo (mal ahí), y llegó la hora de llevarla a un nuevo disco preparado para todas las E/S que estaba recibiendo.
Aquí te explico en esta tutorial como realizar el proceso
Paso 1: Creamos la nueva ubicación: En mi caso H:\TempDB

Paso 2: Con la siguiente consulta podremos generar el script necesario para poder moverlo directamente
declare @destiny as varchar(20)
set @destiny = 'G:\TempDB\'
SELECT 'ALTER DATABASE tempdb MODIFY FILE (NAME = [' + t.name + '],'
+ ' FILENAME = ''H:\TempDb\' + t.name
+ CASE WHEN t.type = 1 THEN '.ldf' ELSE '.mdf' END
+ ''');' as command
FROM sys.master_files t
WHERE t.database_id = DB_ID(N'tempdb');

En mi caso 5 archivos MDF (4 en la posición anterior, y 1 que ya había movido a fines de prueba) y un 1 archivo LDF
La respuesta ya te indica que en el próximo reinicio ocuparán la nueva ubicación


Estamos a full con el nuevo framework de Microsoft, y en esta oportunidad te enseñamos a capturar la pantalla y activar el menú de compartir.
La ventaja de Net MAUI ( al igual que con Xamarin) es que es multiplaforma y nativo.
¿Esto que significa? Que desde unas pocas líneas podremos acceder a las funciones nativas de la plataforma en donde se esté ejecutando, y para nosotros será indiferente.
En este caso vamos a dividir esta situación en dos partes:
Gracias a la interface IScreenShot podremos capturar la pantalla actual en la que nos encontremos. Esto funcionará para cualquiera de las plataformas disponibles por Net MAUI
Screenshot – .NET MAUI | Microsoft Learn
El resultado de la misma será en un conjunto de bytes (Stream), disponibles para nuestro siguiente paso
2. Guardar el archivo
Para ello haremos uso de la clase histórica de .NET llamada System.IO
System.IO Namespace | Microsoft Learn
Ya teniendo nuestra captura convertida a un archivo procedemos a pasarselo a la clase encargarda de las funciones de «compartir»
Share – .NET MAUI | Microsoft Learn
Como siempre, te dejo un video con todos los pasos bien explicado y acceso al código. Recuerda dejar tu like y tu comentario. Nos vemos…
IT CallCenters
Desarrollo de aplicaciones web y mobile
