jueves, 14 de septiembre de 2023

API REST en Visual Studio 2022

 Aún para personas profesionales en las Tecnologías de la Información puede confundir y quizás hasta desconocer el término de API REST. Con un profundo respeto les comparto un video que a mi me sirvió mucho de referencia e introducción a este tema a pesar del nombre del video. 


 En las aulas utilizamos PHP con MariaDB, inclusive en mi canal hay algunos vídeos al respecto, Sin embargo ahora vamos a trabajar con la tecnología .NET y para ello nos encontramos un artículo en el siguiente blog.

Es interesante porque esta escrito en el pasado mes de mayo de este año con lo que ya se aborda la versión 2022 de Visual Studio.

Para darle un sabor diferente vamos a cambiar de ejemplo y podemos trabajar con una pequeña base de datos que contiene los datos generales de mis compañeros de trabajo. Entonces la base de datos estaría compuesta por:

idemp
nombre
apellido1
apellido2
diac
mesc

DataTable FrameWork 7 de .NET

Introducción.

 "Representa una tabla de datos en memoria" (Microsoft, 2023). Así es como se define en la referencia de Microsoft en línea, para los clásicos aquellos “cursores” de Microsoft FoxPro que, a diferencia de éstos, en .NET se cuenta con varios métodos y propiedades además que es homogéneo a la plataforma de desarrollo independientemente del motor de donde provenga la tabla.

A continuación, se muestra algunas operaciones con DataTable en Visual Studio 2022 usando el lenguaje de programación de C#.

 Crear el DataTable

          DataTable dt = null;

            string comando = "select * from tdbf";

            cadenaConexion = "Provider=vfpoledb;Data Source=rutadbf;Collating Sequence=machine";

            OleDbConnection cnn = new OleDbConnection(cadenaConexion);

            try

            {

                cnn.Open();

                OleDbCommand cmd = new OleDbCommand(comando, cnn);

                OleDbDataAdapter da = new OleDbDataAdapter();

                da.SelectCommand = cmd;

                dt = new DataTable();

                dt.Locale = System.Globalization.CultureInfo.InvariantCulture;

                try

                {

                    da.Fill(dt);

                }

                catch (Exception ex)

                {

                    Console.WriteLine(ex.Message);

                }

            }

            catch (Exception)

            {

 

                throw;

            }

 

En este código podemos ver como una tabla de un software que se quedó en su versión de 32 bits como lo es MS FoxPro gracias a las librerías de .NET lo puede leer primero utilizando un OleDbAdapter (objeto da) y a través de un comando select, utilizando el método Fill() es como poblamos el DataTable con todo el contenido de la tabla tdbf. Comentaré la analogía que normalmente hacía a mis alumnos cuando explicaba del adaptador y que acababa de vivir al encargar un teléfono móvil que me llegó con un cargador para Europa o Asia y entonces tuve que comprar un “adaptador” para nuestras tomas de corriente de 120v de América, así mismo la tabla puede venir de MS FoxPro, de Oracle, de Microsoft SQL Server, SQLite, etc. Para que al final quede en un objeto de .NET el cual inclusive puede ser modificable e impactar a la estructura origen que no es tema de este artículo.

Leer el nombre de las columnas de un DataTable

            string[] aNamesCols = new string[dt.Columns.Count];

            for (int i = 0; i < dt.Columns.Count; i++)

            {

                aNamesCols = dt.Columns[i].ColumnName;

            }

En el ejemplo anterior vamos a crear un arreglo de cadenas (strings) que contiene el nombre de las columnas del DataTable que se acaba de crear en el primer ejemplo de código gracias a las propiedades Count y ColumnName de las columnas (Columns) del DataTable.

Recuperar los valores de las columnas de un DataTable

               

                   int cols = torigen.Columns.Count;

 

  foreach (DataRow row in torigen.Rows)

                  {

                    for (int i = 0; i < cols; i++)

                    {

                        if (row[i].GetType() == typeof(string))

                        {

                            InsCmd = InsCmd + "'" + row[i] + "',";

                        }

                        else

                        {

                            InsCmd = InsCmd + row[i] + ",";

                        }

                    }

 

Si queremos obtener los valores de una columna (campo en el argot de los lenguajes XBase) podemos realizar el código mostrado arriba donde para empezar solicitamos el número de columnas, luego recorremos la colección de Rows (registros o tuplas en el lenguaje formal de las bases de datos) y de cada objeto Row (row) accesamos a él, por medio de su índice (segundo ciclo que recorre las columnas de la tupla).

Un extra a este código de ejemplo es la condición row[i].GetType() == typeof(string) donde de manera intuitiva (o diciendo coloquialmente “le dimos como el burro que toco la flauta”) el compañero Paco Díaz y un servidor programamos para saber si el dato extraído era de cadena (string) u otro tipo de dato ya que se estaba construyendo una instrucción insert de SQL.

Hasta aquí el contenido del post y seguimos escribiendo hallazgos en el vasto mundo que ahora cuenta con un colaborador más eficaz como lo son las plataformas de inteligencia artificial.

Bibliografía

Microsoft. (14 de septiembre de 2023). Microsoft Learn. Obtenido de Referencia de .NET 7: https://learn.microsoft.com/es-es/dotnet/api/system.data.datatable?view=net-7.0

jueves, 7 de septiembre de 2023

Configuración de Visual Studio 2022 para el IIS para WebApps de 32 Bits

 Antes de cerrar el día, había quedado pendiente de como es posible así como en el IIS del equipo local, como probar las aplicaciones web puedan desplegarse para apps y dlls de 32 bits en el Visual Studio 2022.

Mostramos aquí la WebApp de juguete en el VS2022.


Ahora vamos a las opciones Herramientas-Opciones y aquí en Proyectos y Soluciones - Proyectos web se desmarca el checkbox de Usar la opción de 64 bits de IIS Express para proyectos y sitios web.

Probamos el ejecutar la aplicación web y observamos que se despliegue el resultado esperado.


Por lo que se puede continuar con el desarrollo web para acceso con tablas de FoxPro.

Miguel Araujo.

Aplicaciones ASP.NET con Visual Studio 2022 - C# usando tablas de FoxPro

En el Instituto donde laboro se tiene un formato que lleva años usando y que parece que ya, al no tener versiones de 64bits y Microsoft concluir su desarrollo, se está cambiando por formatos de texto como el CSV, sin embargo debido a los sistemas heredadas que aun no se aun podido migrar se tiene aun versiones de archivos de lenguajes XBase (DBF).

Se pretende migrar este tipo de formato a CSV para después subir a una base de datos de Oracle. En principio al hacer que los archivos dbf se podían leer desde aplicaciones .NET de consola no se tuvo problema, por lo que, auguramos el éxito de este mismo caso de uso en aplicaciones web.

No fue así, y esto nos costó todo un día de buscar la solución, que hasta ahora solo se ha podido resolver en el Servidor Web (el Internet Information Services) de nuestras máquinas locales, pero es importante también darle salida, en el IIS Express del propio VS2022.

La solución se expresa en texto y en este artículo se detallará un poco más la misma. Como siempre la web te saca de varios apuros sin duda alguna y esta vez la solución vino de <lwp> Comunidad de Programadores.

El error que desplegaba el sitio web era lo siguiente:

Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.


Detalles de la excepción: System.InvalidOperationException: El proveedor 'vfpoledb' no está registrado en el equipo local.

Pues bien, se trato de instalar el OleDb Provider de FoxPro, una solución marcaba que se instalará el Power BI Desktop, el Service Pack de Visual FoxPro, en fin muchas soluciones que al final al leer cuidadosamente dicha página, menciona que la solución aplicaba hasta VS 2019.

Entonces empezamos de cero e hicimos una aplicación web con un botón y una etiqueta, se definió la arquitectura x86 y se agregaron las instrucciones directamente (utilizamos bibliotecas de clases) de OleDb y la estrategia era desplegar esta aplicación ultra sencilla en el IIS local.


Para definir la plataforma a trabajar (equipos de 32 o 64 bits) se elige la opción Proyecto - Propiedades del <AppWeb> donde en la pestaña Compilar en el combo Plataforma destino, se elige x86.

Después de esto procedimos a Publicar esta pequeña aplicación que hacía un comando SELECT COUNT(*) FROM TablaDbf para saber cuantos registros tiene la tabla de FoxPro, el método fue usar el resultado de dicha publicación a una carpeta, misma que sería copiada al wwwroot de nuestra máquina que funge como servidor.

Ahora vamos a nuestra consola del IIS para permitir que se desplieguen aplicaciones de 32 bits como es este caso, ya que es lógico que como mencioné la dll del OleDb (vfpoledb.dll) es una versión de este tipo ya que Microsoft ya no actualizó el producto a 64bits.
Elegimos primero en el panel izquierdo Grupo de Aplicaciones, luego DefaultAppPool y por último Configuración avanzada.

Aquí es donde se activa que sea posible la ejecución de aplicaciones de 32 bits.


Por seguridad al copiar la aplicación al directorio por omisión se detenía el servicio del IIS y luego se inicia para probar los cambios.
Para cerrar la pinza ahora se hizo lo mismo pero usando nuestro kit de clases y sigue funcionando. Otra moraleja es que en la desesperación baje la WebApp hasta el FrameWork 2.0 y al querer incorporar las bibliotecas compiladas con Framework 4.8 y marcaba errores en la compilación, se solucionó al dejar la WebApp con 4.8.

Hasta aquí el post de hoy, y pues quizás ayude a otro hermano programador que sufra lo mismo que sufrimos entre ayer y hoy.

Miguel Araujo.



domingo, 23 de abril de 2023

Uso de pair, vector, string en programas de C++ (Mac OS 10.x y Visual Studio Code)

No cabe duda que estás personas de la OMI (Olimpiada Mexicana de Informática) me invitan a dar una interesante revisión, en este caso al lenguaje de programación de C (C++ para ser específicos) ya que lo poco que lo use no había o al menos no investigué o me ensañaron ciertas colecciones o tipos de datos complejos, aparte de las clases.

Mi hija con mucho pesar me dijo que al menos vídeos no hay muchos acerca de pair, sin embargo información escrita si hay un  poco más. Es por eso que escribo este breve post.

Pues bien antes de eso para darle sabor quería capturar un dato de tipo string, encontrándome  que no es tan simple como poner string var; por lo que investigando en stackoverflow vi una forma de solucionarlo.

#include <string>
#include <vector>

using namespace std;

int main(){
int n, c, dato;
std::string nombre;


Hay que poner el include del string, poner el using namespace std y definir la variable como std::string.

Volviendo a pair como su nombre lo indica es un pareja de datos, que no necesariamente tiene que ser del mismo tipo. Esta es una clase que tiene sus métodos y dos propiedades muy importantes como lo son el first y el second ya que con estas se leen los pares de valores.

Por un momento creí encontrar similitud con los Dictionary o Map, de C# y Java respectivamente sin embargo pair no es una colección, yo diría que es un tipo de datos compuesto, entonces si queremos tener una colección de pair una opción es usarlas con un otra clase llamada vector. 

Cuando explicaba a mis alumnos las colecciones, les decía que son arreglos con anabólicos, ya que nos resuelven muchas cosas que con los arreglos teníamos que programar tanto sus métodos como sus propiedades (que tiempos aquellos de estructura de datos con la maestra Lucía Barrón) es por ello que podemos dimensionar al vuelo, aplicar métodos para insertar, borrar, actualizar, sortear y un largo etcétera.

 Les dejo un código que muestra el uso de pair y vector.

#include <vector>

#include <iostream>

#include <string>
#include <utility>

using namespace std;

int main(){
vector <std::string> ciudades;
vector <int> distancias;
ciudades.push_back("Zac");
ciudades.push_back("Gto");
ciudades.push_back("Gdl");
ciudades.push_back("León");
ciudades.push_back("Col");

distancias.push_back(118);
distancias.push_back(180);
distancias.push_back(221);
distancias.push_back(127);
distancias.push_back(410);

vector <pair<std::string, int> > vciudad_distancia;

int i=0;

while(i<5){
pair <std::string, int> ciudad_distancia;
ciudad_distancia.first = ciudades[i];
ciudad_distancia.second = distancias[i];
vciudad_distancia.push_back(ciudad_distancia);
i++;
}

// Obtener la ciudad más lejana
int distanciamayor = vciudad_distancia[0].second;
i=0;
std::string ciudad_mas_lejana = vciudad_distancia[0].first;
while(i<5){
if(distanciamayor<vciudad_distancia[i].second){
distanciamayor = vciudad_distancia[i].second;
ciudad_mas_lejana = vciudad_distancia[i].first;
}
i++;
}

std::cout << "Ciudad más lejana:" << ciudad_mas_lejana << " ";
std::cout << "Distancia:" << distanciamayor << endl;

return 1;

} 

Tenemos 2 objetos de tipo vector, en una vienen las ciudades y en el otro las distancias hacia ellas, en base a ellos creamos un nuevo objeto de tipo 

vector que contiene un tipo pair en cada uno de sus elementos (vciudad_distancia), en algunos ejercicios que probamos se puede usar o no usar el objeto de tipo pair para introducirlo en el vector, aquí se utilizó la forma en como lo explican los materiales de la OMI, por lo cual creamos el objeto ciudad_distancia que es un pair al cual en la propiedad first se guarda el nombre de la ciudad destino y en second la distancia a la que se encuentra de Aguascalientes.

Hacemos el algoritmo para determinar la distancia más larga - un clásico de mis tiempos - y se muestra en la consola dicho resultado.

 Mi hija muy apurada encontró un vídeo de pair, en un inglés algo suigéneris por lo que yo grabé uno donde hago este ejemplo y si bien tengo algunos tropiezos, es parte también del quehacer del programador, ya que en este rol pasa mucho, sobre todo cuando estamos iniciando en un nuevo lenguaje o bien retomándolo después de mucho tiempo como es mi caso. Pueden checar el vídeo aquí.

Bueno espero haber sido claro y que los que llegaran a usar el vídeo no digan esta en español, pero parece como si hablará en chino. Hasta el siguiente post.

Miguel Araujo.

viernes, 21 de abril de 2023

C++ en Visual Studio Code para MacOS 10.x

 Aunque no soy un usuario asiduo al sistema operativo MAC OS, me he percatado que cada vez es más difícil instalar aplicaciones de App Store ya que se necesita un sistema operativo de la versión 11 en adelante, para este caso es un equipo que aunque tiene un procesador i5 ya es un modelo de hace más de 10 años por lo que la actualización quedó en la versión Mac OS High Sierra 10.13.6.

Sin embargo para beneplácito mío, al querer programar un poco de C++ recurrí a Visual Studio Code ya que XCode no lo pude instalar por la razón que ya mencioné anteriormente. En principio pensé en solo usarlo como un un editor sin embargo es posible, aunque con un mensaje de error, también ejecutar los programas desde la terminal desde el mismo Visual Studio Code.

Primero instalé las extensiones, con instalar una, que me base en el número de estrellas que tiene el plug-in, el mismo IDE me recomendó otras del mismo lenguaje, quedando como se muestra en la imagen.

Otra cosa importante es que a la gente de Microsoft no le importa tanto la versión del Mac OS y si se tiene una versión muy actualizada del producto.
Con esto ya podemos escribir código con todas las ayudas que brinda es popular y poderoso IDE, entonces procedí a escribir un código de ejemplo, como el siguiente:


Hay un botón y una opción de menú para "ejecutar y depurar ("debuguear")", al querer hacer esta acción me pidió el compilar de C++ y tal parece que el IDE detecta los que tiene el equipo, elegí el primero de la lista y procedí a ejecutar y con esto compilar el código. Para consultar que compilador se tiene elige la opción de "Terminal - Configure Tasks" donde para este caso quedó "C/C++: clang compilar archivo activo". Al dar la opción de "Debug C/C++ File" se muestra el siguiente mensaje:


Después de algunos segundos el IDE manda una ventana con el mensaje "Unable to start debugging. LLDB exited unexpectedly with exit code 134 (0x86)" se tienen 2 botones, más sin embargo al volver a solicitar la terminal, se ejecuta el comando "sudo ./holamundo", con el siguiente resultado:


Aquí nos damos cuenta que Mac OS es una derivación de Unix al igual que Linux, por lo que es necesario dar contraseña de superusuario para ejecutar un compilado de C++.

Hasta aquí con este artículo, hasta la próxima.

Miguel Araujo.


sábado, 8 de abril de 2023

POO ¡Vive! (o al menos para mi)

 

Sería entre los años 1987 y 88 cuando nuestro maestro de una de las materias de programación en el CETis 155, Luis Ignacio Ortiz Villaseñor, nos dejó como actividad traducir un artículo de una de las revistas de aquella época de más renombre, la memoria no da, pero una de ellas era la BYTE, sin embargo en una búsqueda en internet me di cuenta que hay varias, no se si todas, digitalizadas para su consulta y descarga y no encontré una imagen que se quedó en mi mente hasta ahora.

El artículo era sobre una "nueva" forma de programar denominada como "Programación Orientada a Objetos (POO)", la imagen era un dibujo de un bebé jugando con unos dados, se convirtió un poco en mi obsesión buscándola en la web pero como mencioné anteriormente no tuve éxito, por lo que ilustro este artículo con una fotografía que da la misma idea.

La lectura de este artículo no fue suficiente para desde aquellos entonces hubiéramos aplicado y explorado este nuevo paradigma ya que en la retícula de nuestro añorado plantel cubría tres lenguajes básicos de programación los cuales eran BASIC, COBOL y PASCAL los cuales en aquellos tiempos no tenían la posibilidad de poder aplicar esta nueva forma de programar.

En lugar de ello teníamos las llamadas "unidades" de nuestra arma como programadores de mucho tiempo que era el PASCAL, las unidades pudiéramos decir que "encapsulaban" las tareas comunes a varias aplicaciones y que las podíamos escribir en un código aparte y de ahí utilizarlas en nuevos programas aunque todo esto usando el paradigma que nos enseñaron que era el de la "Programación Estructurada".

Ya en la carrera profesional aunque las autoridades se esforzaban por tener la retícula de la carrera actualizada, no tuvimos un curso de Programación Orientada a Objetos.

Fue hasta el entorno laboral, donde gracias a capacitaciones de mucho valor, conocimos algo de este nuevo paradigma con cursos de C++  así como algo de Análisis y Diseño Orientado a Objetos tanto por Manuel Cota padre y su hijo que creo llevaba el mismo nombre.

Sin embargo y nuevamente los lenguajes que se usaban en el Instituto - específicamente en el área que trabajaba - no tenían esa capacidad, entonces muchas de aquellas valiosas enseñanzas se quedaban a la deriva coqueteando con el olvido.

Mi primer intento con una aplicación real fue un instalador (ignoro si para esos años existía el InstallShield) que usábamos para hacer actualizaciones a nuestros sistemas de estatales y regionales. Ya enterado que Borland Turbo Pascal ya era un híbrido y que soportaba el enfoque de la POO, esta aplicación definía una clase con un par de métodos, aunque en el sentido real solo usaba el encapsulamiento no la herencia ni el polimorfismo. Orgulloso de este primer paso cité a Neil Armstrong con las palabras que dijo al pisar la Luna "un pequeño paso para el hombre, un gran salto para la humanidad", una exageración claro esta.

Siguieron pasando los años y el Instituto se organizaba una "Semana de la Tecnología" y dentro esta misma había un maratón de programación, mi compañera Stella Díaz y un servidor nos inscribimos sin mucho éxito, pero ahí mi compañero de la prepa Marco Alfonso López me decía que lo mejor era "pensar y programar" en objetos, la verdad no entendí el mensaje y pues igual sentí que no le había servido mucho a él, pues tampoco ganó :), sin embargo dejó nuevamente sembrada la inquietud de migrar a este paradigma.

Esta inquietud la transmití a un nuevo integrante del equipo, mi a veces némesis y a veces gran amigo Fernando Díaz quien desprecio mi propuesta, para ese entonces ya llevaba algunos sistemas ya migrados a Visual Basic de los sistemas antes en DOS con Turbo Pascal e IMPS.

Cuando inició a estudiar la maestría en Informática y Tecnologías Computacionales ahí ya se convenció de migrar el sistema de Cultura a web usando para aquel entonces la naciente y popular plataforma de .NET en su versión 2003 y ya con el paradigma de POO, el dirigió el proyecto en la parte de desarrollo y yo negociaba con el cliente y los usuarios, además que las validaciones en el cliente con JavaScript y algunas rutinas estaban a mi cargo, también participaron mis compañeros Francisco Díaz y Ángel Mauricio López usando el patrón Modelo-Vista-Controlador (MVC), también contamos con el valioso acompañamiento y asesoramiento de nuestro compañero Juan Aguilar Puebla.

El equipo al cambiar de área donde formamos parte de la Dirección de Informática de la Dirección General de Estadística y poco a poco fuimos dejando de dar mantenimiento a dichos sistemas y paulatinamente el área de Informática del Instituto junto con nuestra anterior área tomó los sistemas, para nosotros dedicarnos a elaborar sistemas de captura, validación y algunas ocasiones de explotación de encuestas en hogares los cuales nos pedían en cuestión de meses a lo mucho 3 y ante esta situación dejamos de lado la plataforma .NET para hacer interfaces (lanzadores) en Visual Basic que conectaban a aplicaciones de CSPro cayendo nuevamente en el sueño de los justos :).

Es importante mencionar que por ejemplo ya casi todos los lenguajes de programación inclusive el popular y por algunos despreciado Visual FoxPro tenía la opción de programar con clases (que recuerdo que junto con Adán Aguilera - un joven que hizo sus practicas profesionales con nosotros - se hizo otro intento de programar alguna clase en VFP) sin embargo se seguía trabajando con el mismo paradigma y si acaso agregando el enfoque de programación basada en eventos.

Antes de que Fernando Díaz dejará el área nos aconsejó cambiar al lenguaje de programación a C# en la misma plataforma de .NET, ya que nosotros iniciamos con Visual Basic .NET, sin embargo poco a poco y ante el empuje de los capturadores que algunos compañeros desarrollaron junto con el naciente IKTAN además de la partida de otro de los programadores el área donde estaba paso a lo mucho a realizar procesos que auxiliaban a los de captura, validación y explotación con lo cual ya no se hacían sistemas integrales.

Quiero mencionar que abrirse al nuevo paradigma no es una cuestión sencilla para algunos, es algunas ocasiones es como forjar la roca, sin embargo otro acontecimiento importante fue el tomar un curso con Alejandro Jiménez de otro de los grandes protagonistas en el escenario de los lenguajes de programación como lo es Java. Alejandro nos enseñó el lenguaje, muy cercano a los contenidos de la certificación, era aprender el paradigma si o si, con el no vimos las aplicaciones para Windows así que la programación era totalmente con clases y objetos.

Afortunadamente aun conservo mi suscripción MSDN de Microsoft que junto con mis labores en la academia a pesar de ya no estar en el desarrollo de software en el Instituto seguí trabajando con la plataforma .NET y poco con Java.

De ahí adelante ya programe siempre usando clases y a pesar de tratar de transmitirlo en mis grupos ha sido labor casi imposible, y es que ocurre que parece ser que ya los patrones de diseño así como los frameworks de desarrollo, así como las bibliotecas ya tienen una madurez que difícilmente los programadores desarrollan una clase.

Sin embargo debo decir que mis bibliotecas de clases me han ahorrado muchísimas horas de desarrollo y otro factor importante es que el lenguaje de programación C# sigue muy vigente por lo que solo se agregan las nuevas características que brinda el mismo.

Dichas bibliotecas me han brindado pequeños logros y grandes satisfacciones, la última fue que debido a lo delicado de la información que manejamos mi jefe me pidió que generará información aleatoria para tratar de desarrollar un prototipo de "Lago de datos", años atrás ya había hecho una aplicación para generar scripts aleatorios de SQLite de información para encuestas donde la verdad casi todos eran valores numéricos, en este caso necesitamos nombres (textos), por lo que esas bibliotecas me sirvieron mucho, sin embargo había que adecuarlas y crear algunas nuevas clases para atender este nuevo requerimiento.

Es aquí donde me viene a la mente esa imagen del bebé, tomo mis cubos, les agrego pequeñas partes y funcionalidades y listo puedo usar mucho de lo ya programado y solo agrego lo faltante, tal como si fuera un mecano o lego, y de una aplicación que yo creo me hubiera llevado mínimo un mes siendo muy optimista la terminé en a lo mucho 4 días.

Clases que fueron programadas para propósitos distintos y otras creadas para este problema en específico, trabajando juntas para lograr el objetivo de crear registros aleatorios es una versión un poco "silvestre" que puede tener muchas mejoras para versiones posteriores.
Otra ventaja es el bajo número de "bugs" al programar de esta manera, ya que mucho de la clase esta ya probada, y solo se tiene que hacer pruebas de los nuevos métodos y las nuevas clases.

Concluyendo, no se si ya no sea necesaria diseñar nuestras propias clases y quizás el diseño de mis clases no sea lo mejor, sin embargo para responder mis casos de uso específicos, mis clases han funcionado de forma muy eficaz y con una eficiencia muy respetable, un código independiente y que permite específicamente ir donde se proviene el error y una revisar cientos o miles de líneas de código de una aplicación completa y monolítica.

Hasta aquí este primer artículo donde expongo mi visión del desarrollo de software y que si seguimos con las fuerzas y la lucidez necesaria seguiremos explorando nuevas soluciones a nuevas necesidades. Hasta el siguiente artículo.

Atte.
Miguel Araujo.





jueves, 6 de abril de 2023

La motivación de este blog

 

Ada Lovelace (1815-1852) es considerada la primer mujer programadora, hay un lenguaje de programación que lleva su nombre y en un reciente descubrimiento de mi parte supe que su padre fue Lord Byron un noble y poeta inglés. Otra nota curiosa es que se dice que su madre temerosa que pudiera heredar "la locura poética" se esforzó en estimular y apoyar el interés de Ada en las matemáticas y la lógica.

En mis aproximadamente 15 años de docente tuve 2 blogs y ahí escribí junto con algunos alumnos que quisieron participar y otros más que lo hicieron para obtener una nota, escribí quizás poco más de 50 artículos, generalmente sin un orden o secuencia, eran simples descubrimientos que me habían costado varias horas de investigación y prueba.

Hoy día, ambos blogs están fuera del aire (quedando solo uno de esta misma plataforma "Aplicaciones para Estadística") y creo me será imposible recuperarlos, aunque como es bien sabido, en temas de Tecnologías de la Información esta información en su mayoría se vuelve poco útil y aplicable debido a la velocidad con que evolucionan las mismas.

Por lo anterior y casi cumpliendo un año que estoy fuera de la academia, inicio este blog que tiene un tinte y matiz enfocado en la programación de aplicaciones.

No solo es la añoranza de las aulas, sino que me mueve un sentimiento paternal a mi hija adolescente, que con sus debidas excepciones, tiene similitudes con Ada.

Desde sus primeros años, al igual que yo, la vena musical y artística despertó y fue floreciendo con el apoyo de mi esposa que a diferencia de Anabella Milbanke - mamá de Ada -  a ella le agradaba esta faceta de mi hija en relación con las artes, claro a sabiendas que la música tiene una fuerte relación con las ciencias puras específicamente las matemáticas, llevándola desde los 4 años al Centro Cultural "Los Arquitos". Debido a esto parecía que la carrera de artes era el destino natural de mi hija, sin embargo al crecer tomo gusto por los derechos humanos y ahora tenía - y según me dice aun no descarta - la carrera de leyes. Sin embargo en los meses pasados y no solo heredando el gusto musical mío sino la tenacidad de su mamá, empezó a interesarse en participar en concursos relacionados no con las humanidades sino ahora con las ciencias puras, le llamó la atención un par de eventos en la cual de manera grupal lograron un primer lugar nacional en el "International Young Physicists’ Tournament (IYPT)" y de manera individual se encuentra en la fase estatal de la "Olimpiada Mexicana de la Informática".

Por lo anterior esta es la  segunda y más importante motivación de abrir este blog, ya que en los meses anteriores, me consultaba algunos de los ejercicios básicos de programación los cuales reconozco tienen una complejidad muy interesante y que se sale de los viejos ejercicios que me tocaron en mi época de estudiante, y con mas de uno requirieron de mucho esfuerzo intelectual para darle caminos a mi hija y pudiera obtener soluciones a tales retos.

La verdad y en base a mi experiencia de docente, veo con agrado que parece que mi hija tiene vocación y nivel para seguir esta carrera, ya que el no rendirse y el pensar "fuera de la caja" es fundamental para la creación de aplicaciones debido a la calidad dual que aun tienen las ciencias computacionales - específicamente la programación de aplicaciones - de ciencia y arte.

Es por ello que como todo padre orgulloso, la URL de este blog es la unión de las dos mujeres programadoras, una consagrada y la otra incipiente, además de las siglas IT que aunque mi buen compañero Ernesto Espinoza, me sugiere - y le he hecho caso - castellanizar las cosas, este termino la verdad es que siempre me ha agradado. 

Dicho pues, a mis pocos y a veces no tan pocos lectores, esperen mi próximo artículo.

Siempre buscando el compartir conocimiento, su seguro amigo y compañero.

Miguel Araujo.


API REST en Visual Studio 2022

 Aún para personas profesionales en las Tecnologías de la Información puede confundir y quizás hasta desconocer el término de API REST . Con...