miércoles, 8 de octubre de 2025

Sonidos en .NET MAUI y la duda sobre Miriam

 En la sesión de ayer, después de tocar los temas de trabajo y seguir con una actividad recreativa, a pesar de tener Miriam un interventor visual (Germán) sacó por segunda (no se si tercera o cuarta vez) el "Toma todo", las protestas en el equipo no se hicieron esperar :).

Por esta razón y para no generar sospechas que para la siguiente versión de la Pirinola se investigó como agregar sonidos a una aplicación MAUI.

Esto primero la IA de Google indicó un método, aunque al final nos fuimos por el siguiente video:


Entonces lo primero según el video es bajar por medio de NuGet el paquete Plugin.Maui.Audio


Podemos ver que la tecnología MAUI es nueva y en desarrollo, entonces Microsoft ofrece la siguiente literatura que es muy recomendable consultarla y podemos descargar el libro en pdf, aquí:


Aquí vamos a seguir los pasos del video, lo que sigue es abrir el programa MauiProgram.cs en el Explorador de Soluciones.


Aquí en el código según la persona que dicta la solución se agregan un par de instrucción (yo agregué el using, por si acaso).


Según la narración del video, con estas instrucciones "se inyecta" este componente que es el reproductor de sonidos a la aplicación. En el internet busqué sonidos que espero que no tenga derechos de autor, bajé un efecto de los que se mostraban al principio, después de descargarlo, se guardó en la carpeta Resources/Raw.


Aquí tenemos las instrucciones que habilitarán el sonido en la app, en el archivo MainPage.xaml.cs.


Esto es simplemente, que aparte del funcionamiento de la app (lanzar la pirinola) , al dar clic en el botón "Lanzar" se reproduce este sonido. Por alguna razón la máquina virtual que teníamos para probar la app, no funcionó, por lo que se creo otro teléfono de un modelo anterior de Pixel. Se probó en esta máquina virtual de Android con Pixel y con la máquina de Windows (el host), se tuvo que cambiar a Debug para que al ver que hacia el comportamiento requerido, nuevamente se genera el apk y se firmó para instalarlo en mi teléfono, la app funciona también en el dispositivo real.



Hasta el próximo artículo.

Miguel Araujo.





 

lunes, 6 de octubre de 2025

Ubuntu 24.04 y una compu i5 del 2011

 Hasta ahora con algunos mensajes de advertencias en esta distro de Linux, estamos ya con un sistema operativo instalado que se planea sea un sistema de prueba, de uno que es productivo y lo tenemos en el área de trabajo.

Este equipo por increible que sea y aunque es un procesador que todavía esta en el mercado (aunque en generaciones más avanzadas) para la marca Apple, ya NO se actualiza a los sistemas operativos más recientes de la marca (se puede pero de forma legal u oficial).

Entonces una de las opciones fue en principio mejorar la RAM, de tener 4Gb se aumentó a 8Gb, lo siguiente es cambiar a un disco duro magnético - fijo, por un estado sólido (SSD).

El primer intento, fue poner un sistema operativo de Linux "ligero" para que el sistema funcionara de forma más fluida, por lo que se optó por Zorin OS, pero cuando se intentó trabajar con R y Posit RStudio no fue posible descargar algunas librerías.

La primera sospecha, al menos para mi, es que Zorin OS esta basado en Ubuntu 20.x y la estación de trabajo pues esta en una versión posterior.

Viendo los requerimientos de hardware, me di cuenta que este equipo viejo, en teoría podría soportar la última versión de Ubuntu que es la versión 24.x.

 Sin embargo, ahora en el arranque se iba a este sistema operativo llamado Zorin, y me surgió la duda si estos equipos tuvieran un "BIOS" como la mayoría de los que conocía que tienen procesadores Intel o AMD, Deep me dijo que estos modelos era la EFI, me dijo de algunos accesos con un teclado Apple (recordar que tienen diferentes teclas específicas para MacOS), sin embargo el teclado bluetooh de la marca al no detectar el SO para el cual fue fabricado, no detecta estos periféricos así que mi amigo José Luis, me prestó uno de Windows, y ¡Eureka! si funcionó la opción para entrar en este caso a la EFI, pulsando en el arranque la tecla "Alt" (ambos teclados la tienen) entonces ahora si detectaba la unidad USB que contenía la instalación con Ubuntu.

La instalación se hizo sin problemas, pero no se pudo conectar a la red Wifi, entonces conecté el equipo de forma alámbrica y apliqué dos soluciones que me contó la IA.

Una de ellas fue instalar el software del firmware con el siguiente comando:

sudo apt install firmware-b43-installer

Lo hizo pero marcó un error, entonces fuimos a la parte del menu de aplicaciones en "Mas controladores" donde se eligió la opción "usando dkms source for the Broadcom STA Wireless driver desde broadcom-sta-dkms (privativo)" y con ello funcionó la red wifi.

 

 Lo que seguía ahora es instalar nuestra herramienta por excelencia: R y su ecosistema, usando la opción que indica la IA instala una versión anterior, pero entrando a la página de Posit RStudio hay una serie de instrucciones que funcionan para instalar la última versión disponible del CRAN.

 

Al usar ese conjunto de instrucciones ya se instala la última versión disponible de  R.

 

Para Posit RStudio no hubo mucho problema se descargó el archivo .deb y así se instaló la versión más actual, se aplica la instrucción:

sudo dpkg -i nombre_del_archivo.deb 

 

que en este caso en pantalla se ve la versión más actual. Tanto R como Posit RStudio ya aparecen en las aplicaciones del sistema, aquí una captura de pantalla del Posit RStudio.

 

 Para asegurarnos que todo funciona bien se instalaron varios paquetes tanto de uso coloquial hasta especializados en estadística y por ahora todo ha funcionado bien, algunos con algunos mensajes de advertencia, pero han funcionado.

Seguiremos con este sistema operativo esperando que todo funcione bien.

 Miguel Araujo.

 

miércoles, 24 de septiembre de 2025

Visual Studio con Python usando base de datos de Oracle (II) - oracledb

En nuestra reunión semanal, Germán mi compañero, me comentó que no había tenido éxito con el paquete cx_Oracle (supongo que por ese requisito del cliente) entonces procedimos a probar lo que el hizo que le funcionó es decir con el paquete oracledb.

Se hizo un segundo proyecto para probar este nuevo paquete, creando una carpeta, y usando la opción Open Folder, procedimos a crear un nuevo entorno virtual al que se le nombró Datos_Sinteticos usando:

python -m venv Datos_Sinteticos

Ahora se procede a instalar este nuevo paquete que según la IA, es mejor...

Una cosa, que no la entendí, es el hecho de que al crear el programa que usa este nuevo paquete no reconocía el mismo, por lo que volví a instalarlo y ya con esto lo reconoció, parecería que faltaba copiarlo al entorno virtual que habíamos creado. También el mismo interprete me sugirió actualizar el pip, mediante:

python -m pip install --upgrade pip

Con esto escribimos el siguiente código, trayendo las tuplas de una tabla que contiene una clasificación (catalogo) de una variable de la estadística de defunciones, nuevamente las credenciales se ocultan por motivos de seguridad.


En la parte inferior, podemos observar el resultado de la consulta.

Con esto, tenemos dos formas de acceder a la base de datos de Oracle.

Seguimos con más temas en los siguientes artículos.

Atte.
Miguel Araujo


Después de Xamarin - .NET MAUI para aplicaciones móviles (y multiplataforma)

 Hace algunos años cuando estaba en la docencia exploré y exploramos una tecnología  nueva en esa versión de Visual Studio (quizás 2019) el llamado Xamarin, que era para construir aplicaciones móviles tanto para Android como iOS ( y parece ser que lo que quedaba de Windows Phone) y la verdad me y nos costo mucho poder hacer la primer aplicación, de tal forma que cuando se pudo hacer el artículo lo intitule como "Xamarin, Xamarin como me has hecho sufrir".

Debido a que nos estamos capacitando mi equipo y un servidor, me enteré que ahora para Visual Studio 2022 la tecnología es .NET MAUI, ya que la idea es que las bibliotecas (ahora de .NET Core) pueden crear aplicaciones de consola, escritorio, web y móviles, por lo que el juego de la Pirinola quería llevarlo a una aplicación móvil.

Para ello me fui al  YouTube para buscar la aplicación más básica, y el primer video que sentía que cumplía este objetivo estaba en inglés era algo muy sencillo y básico además el video no era muy extenso.


.NET MAUI que significa Multi-platform App UI, además de hacer aplicaciones móviles, también se pueden desarrollar aplicaciones de escritorio para Windows y MAC OS.

Un primer requisito es ver que el equipo tenga habilitada la característica de virtualizar que se tiene que revisar desde el setup de cada equipo.

Para desarrollar aplicaciones de este tipo se tiene que verificar o agregar este tipo revisando en el Visual Studio Installer, donde se puede verificar esto.


Para crear el proyecto se elige "Nuevo Proyecto" con los filtros de C#-Android-Móvil y se crea una aplicación de prueba que es un contador que se va modificando (aumenta en 1 su valor) cada vez que se da clic en un botón, que al ejecutarla se presenta en una ventana como una aplicación de escritorio.

El funcionamiento es parecido a aquellas aplicaciones llamadas Windows Presentation Foundation (WPF) , que sustituyeron en teoría a las Windows Forms de las primeras versiones de .NET, es decir tenemos una página de xaml ( eXtensible Application Markup Language - Lenguaje de Marcado de Aplicaciones Extensible) con los controles requeridos para la aplicación - etiquetas, botones, contenedores, etc y un código "atrás" de este archivo (code-behind)  que es el código que hace funcionar la aplicación (la lógica).

Para la aplicación de ejemplo el archivo que tiene los controles de la vista es MainPage.xaml



Aquí el código en C# (MainPage.xaml.cs).
Esto tiene sentido, en primera instancia, es verlo correr en un dispositivo móvil  (o para empezar) en un máquina virtual que simula un smartphone. Para ello nos vamos a la opción Herramientas -Android - Android Device Manager.



El dispositivo default es un Pixel 7 - API 35 de la marca Google (que por cierto acaba de llegar al mercado mexicano con su versión 10) y fue con el que probamos la aplicación para verla en un tamaño acorde a un dispositivo móvil. Aquí es necesario "iniciarla" para poder dirigir la salida a este dispositivo.


En la barra que esta debajo del menú principal de VS podemos observar en un combo los destinos donde queremos que se ejecute la aplicación.



Y aquí vemos como el resultado se despliega en la máquina virtual que es Pixel 7 de la marca Google.


Como muchas veces, al tener un ejemplo funcional, lo que se hace es modificarlo para cambiar el objetivo y la funcionalidad, tenemos ahora una biblioteca de clases que es de tipo .NET Core.



Código C#



Vamos implementar el juego de la Pirinola en un dispositivo móvil, primero agregamos la dll de la clase en el Explorador de Soluciones dando clic derecho en la carpeta dependencias.


Localizamos la .dll (en este caso BC_Juegos_de_Azar_3.dll) nótese que en este caso no aparece la dll que acaba de agregar (pareciera que la encapsula-empaca en algún archivo).

Tenemos una serie de imágenes (las caras de la pirinola) y las vamos a pasar a la carpeta Resources-Images (muy importante dejar los nombres en minúsculas sino marca error a la hora de compilar).




En la vista (MainPage.xaml) hacemos las siguientes modificaciones:




  • A la imagen de inicio la cambiamos por la imagen de la pirinola con la cara de "Toma todo" y le ponemos un nombre con x:Name
  • A la etiqueta del Hola Mundo, le ponemos un nombre (EtiqVPirinola) y blanqueamos el texto de inicio (propiedades x:Name y Text)
  • Le cambiamos el nombre al botón (BtLanzar) y la propiedad de texto le ponemos "Lanzar"
En el código (MainPage.xaml.cs) hacemos lo siguiente:


Ponemos el using para poder usar la clase Pirinola, creamos variables para detectar el resultado del lanzamiento y así modificar la etiqueta y el contenido de la imagen. Además modificamos lo que hay en recursos (la verdad no se del todo como fue pero funcionó así: en la carpeta recursos le di clic derecho y Propiedades, luego le di clic al aplicación (Proyecto CalcNet) y apareció este código de XAML, que revisando a detalle es el archivo CalcNet.csproj, aquí busco las imágenes y la cambio por la imagen inicial.


Vamos a ver primero el resultado en una aplicación para Windows (Windows Machine), para mayor seguridad se limpió la app y se recompiló (opciones Compilar-Limpiar Solución / Compilar-Recompilar Solución).



Ahora vamos a ver que funcioné en la máquina virtual del Pixel 7.


Tenemos una primera versión, muy rudimentaria, pero funcional por lo que ahora vamos a cambiar la solución de Debug a Release esto lo hacemos en el menú Compilar - Administrador de Configuración.


Además seleccionamos la columna Implementar.

Otra modificación que se tiene que hacer es que por omisión la aplicación se manda a un formato llamado Conjunto de Productos (extensión aab), entonces vamos a cambiar a extensión apk.


Esto nos abrirá el conjunto de propiedades de la aplicación, en el menú de la izquierda se elige  Android, y en la opción Formato de paquete Android en el combo se elige apk.


Y con esto la salida ya es en formato apk.

Vamos ahora a la publicación de la aplicación, esto lo hacemos a nivel proyecto CalcNet con clic derecho vamos a la opción Publicar.


E inicia el proceso de publicación:


Aquí es cuando inicia todo la magia en la participó uno de los referentes - mexicano por cierto - del desarrollo de software Miguel de Icaza, si todo va bien se lanza la siguiente pantalla.


Casi terminamos, en teléfonos anteriores se podían instalar aplicaciones con el simple archivo apk, ahora en teléfonos actuales se deben de "firmar".

Vamos a esto, damos clic en el botón Distribuir ...


Vamos a seleccionar la opción (botón) Ad hoc.


En este caso, ya existe este archivo, sino se tiene es un proceso muy sencillo que podemos crearlo dando los siguientes datos:


En este caso, ya existe el archivo de firmas por lo que simplemente lo firmamos dando la contraseña que definimos al crear el archivo, para ello se elige el archivo (mickey) y se nos va a presentar una caja de dialogo para guardar el apk firmado.


Seleccionamos la ubicación y damos clic en el botón Guardar.


Proporcionamos la contraseña de la firma e inicia el proceso de "Firmado de la aplicación".

Con esto tenemos el archivo listo para poder ser instalado en teléfono inteligente. Para este ejemplo, el archivo se pasará usando un cable que lo conectaremos a la computadora para pasar el archivo, el teléfono que tomamos como destino fue el de Paco Díaz que es un Motorola G50.


Otra cosa interesante sería que usando los sensores del teléfono (por ejemplo agitarlo) se pudiera también tirar la pirinola.

Esta es una tecnología relativamente nueva y ya se reportó una vulnerabilidad como lo vemos aquí:

https://thehackernews.com/2025/03/hackers-use-net-maui-to-target-indian.html

Las imágenes fueron diseñadas (modificadas) por mi compañero y amigo Paco Díaz que promete ahora implementar el Piedra - Papel y Tijera.

Hasta ahora es una de las formas más sencillas de crear una aplicación móvil aparte del CSPro y un kit de desarrollo creado por el MIT App Inventor (https://appinventor.mit.edu/).

Hasta el siguiente artículo.

Atte.

Miguel Araujo.

















lunes, 22 de septiembre de 2025

Visual Studio Code con Python usando base de datos de Oracle

 Después de tanto ataque, aunque claro haciendo notar que es por el campo de aplicación la ciencia de datos va de la mano de este lenguaje, empezamos a tratar de migrar software a Python.

En un post anterior cuando empezamos a tocar el tema de algebra lineal usando Python  mencionaba que estaba usando una máquina virtual para que -ahora lo se - poder ejecutar la consola de Power Shell ya que esta bloqueada por directivas de seguridad.

Entonces mi compañera Blanca Torres, me enseñó lo siguiente y gracias a esto ya se puede utilizar la máquina real para trabajar con Python.

Cambiar la terminal de Power Shell a Línea de Comando. 




Para poder cambiar la terminal, vamos a los ajustes de VS Code (recuadro blanco - ícono de engrane) y damos clic.



Después vamos a elegir la opción Settings.


 Ahora se elige en el menú del lado izquierdo las opciones Features - Terminal para después continuar en la opción Integrated -> Default Profile on Windows del combo se selecciona Command Prompt.

Con estas acciones ya es posible poder ejecutar programas en Python, además de poder descargar módulos o paquetes usando pip.

Conectar al motor de la base de datos de Oracle.

Si Visual Basic, Java, C# y R pueden leer tablas de Oracle, no había razón para que no lo pueda hacer Python.

Las búsquedas para investigar en la web ya mezclan la consulta tradicional y las respuestas generadas por la Inteligencia Artificial que dieron pronta respuesta a esto que se pretende hacer.

Lo primero es instalar la librería cx_Oracle (que en una consulta que acabó de realizar hablan de ya usar en cambio python-oracledb quizás sea materia del siguiente artículo).

La instalación se hace con pip install cx_Oracle lo cual no tuvo ningún problema. Entonces adaptamos un código encontrado en la web o bien generado con Inteligencia Artificial con nuestras credenciales y tablas de nuestra base de datos (que por cuestiones de seguridad no se muestran los datos reales).


Lanzando el siguiente error:

cx-oracle-connection-fails-with-dpi-1047-cannot-locate-a-64-bit-oracle-client

Por ahora será necesario investigar más acerca del llamado cliente de Oracle, nuestro Instituto maneja la versión 19c, y hasta hace poco se instalaba y se trabajaba con el cliente 12c. A raíz de que la biblioteca de clases de C# que "negocian" con la base de datos en Oracle dejaron de funcionar entre las varias teorías era actualizar la este cliente.

Como se ha mencionado en otros artículos es bueno tener el software más reciente y por esto se instaló el cliente de Oracle versión 23i.

Sin embargo al querer instalarlo no permitía elegir cualquier dirección de la computadora, requería "el directorio de Oracle".

Instalación del cliente de Oracle 23ia

Al momento de escribir este artículo este software pareciera que es una "caja negra" describo un poco el procedimiento que realice que a la vez parece que las personas que son nuestro enlace informático les dictaron la dirección general que se encarga del software y hardware que se utilizan en el Instituto.

Se proporcionó un empacado con la siguiente organización de directorios:


En mi caso desempaqué el contenido del archivo en una partición del disco duro, para después ejecutar el archivo llamado setup.exe.

En este caso el instalador solo permitió instalar en un directorio de la unidad de arranque C:/ en  Archivos de programa (Program Files) pues pareciera, sin estar seguro, que al tener una instalación previa del software VirtualBox también de la compañía Oracle toma este directorio como el predeterminado, haciendo una organización de directorios como esta:



Yo supuse que aquí se depositarían los archivos de la instalación, e inclusive se crea una serie de subdirectorios (diag con el mayor número de subdirectorios) donde en  principio creía que estaban los archivos necesarios para la conexión con las tablas, sin embargo estos directorios estaban vacías.


Aquí un ejemplo de como las carpetas están vacías (donde por el nombre de la carpeta puede una deducir que esta el controlador para  hacer la conexión).


Sin embargo el programa de instalación informa que instaló con éxito el software, inclusive modifica la variables de entorno que apuntan a donde esta el software que para este caso son los archivos que contiene el empacado original (como casi siempre la carpeta bin) que contiene los archivos ejecutables, inclusive modifica las variables de entorno para todo el equipo no solo para un  usuario.

En el tema de la configuración se abordará en otro artículo, pero después de esta instalación se procedió a probar, ahora si, el programa de ejemplo.


Un entorno virtual de Python es "un mecanismo para crear <<entornos virtuales>> ligeros con sus propios directorios de paquetes, que pueden estar aislados de los directorios de paquetes del sistema. Cada entorno virtual tiene su propio ejecutable de Python (lo que permite crear entornos con diferentes versiones de Python) y puede tener su propio conjunto independiente de paquetes instalados en sus directorios, aunque comparte la biblioteca estándar con la instalación principal de Python"

Antes de crear el "entorno virtual" se crea el proyecto dentro de una carpeta y en Visual Studio Code se utiliza la opción:


Por seguridad VS Code pregunta si se confía en la creación (ubicación) de esta carpeta, después ya se puede agregar código de Python.

Por buenas prácticas y siguiendo un tutorial se creo un entorno virtual de Python, el cual se construyó mediante la instrucción:

python -m venv datsint

En este momento se crea una estructura del directorio al interior del que previamente se definió como inicio del proyecto como se puede observar con el nombre (que es una carpeta) que se define al crear el entorno virtual.


Ejecución del código Python.

Por último se ejecuta el código donde podemos ver que se traen 5 registros sintéticos de la base de datos de Oracle, como podemos observar en la salida de este programa.


La forma de leer la base de datos es muy afín a otros lenguajes donde se hace por medio de una conexión donde se dan las credenciales (datos) necesarias para ello.

En este caso se utilizan objetos llamados cursores, donde con una cadena que contiene la instrucción SQL hace que se accede a tablas de esta base de datos en conjunto con el cursor.

Seguiremos con más ejemplos y muy seguramente con el otro objeto que conecta a esta tecnología.

Hasta el otro artículo.











Sonidos en .NET MAUI y la duda sobre Miriam

 En la sesión de ayer, después de tocar los temas de trabajo y seguir con una actividad recreativa, a pesar de tener Miriam un interventor v...