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.
Artículos sobre lenguajes de programación y aplicaciones
jueves, 14 de septiembre de 2023
API REST en Visual Studio 2022
DataTable FrameWork 7 de .NET
Introducción.
"Representa
una tabla de datos en memoria"
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.
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.
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>
}
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
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.
sábado, 8 de abril de 2023
POO ¡Vive! (o al menos para mi)
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.
jueves, 6 de abril de 2023
La motivación de este blog
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...
-
Introducción . "Representa una tabla de datos en memoria" (Microsoft, 2023) . Así es como se define en la referencia de Micr...
-
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...