lunes, 18 de junio de 2018

Leer N caracteres en C/C++ con scanf + vaciar buffer

Hola, en esta ocasión quería compartirles un pequeño snippet de código de C/C++ que encontré un día de estos: Como leer una cadena de N caracteres con scanf.

Supongamos que queremos leer como máximo los primeros 8 caracteres que ingrese el usuario en la entrada estándar (stdin), y guardaremos el resultado en un arreglo de caracteres. Para ello, primero declaramos el arreglo con una longitud de 9 posiciones, que corresponderán a los 8 caracteres que deseamos leer, más una posición más para el caracter nulo, que marcará el fin de la cadena.

char cadena[9];

Luego procedemos a leer con scanf los 8 caracteres desde la entrada estandar:

scanf("%8s",cadena); 

Lo importante a notar es el especificador de formato s, que indica que lo que se leerá es una cadena de caracteres (string). La entrada se termina con un espacio en blanco, pero el número 8 indica que solamente se tomarán los primeros 8 caracteres que se encuentran en el buffer de la entrada estándar. Además, un caracter nulo es guardado al final de la cadena de caracteres. Es por ello que el arreglo utilizado debe ser por lo menos un caracter más grande que la longitud de entrada especificada. De no ser así podría darse el caso que se sobrescriban porciones de memorias adyacentes, generando resultados inesperados.

Finalmente, para limpiar el buffer de la entrada estándar: leer mientras se encuentre el caracter de salto de línea (\n) o el caracter de finalización.

char c;
while ((c = getchar()) != '\n' && c != EOF) { }

El código completo es el siguiente:



Saludos.

miércoles, 6 de junio de 2018

Requisitos para trabajadores independientes y de servicio doméstico para cotizar en el ISSS

Actualmente es posible para trabajadores independientes, así como empleados del servicio doméstico, cotizar en el Instituto Salvadoreño del Seguro Social, para poder acceder a los servicios de salud que brinda.

Afiliación del trabajador de servicio doméstico

Los trabajadores del servicio doméstico pueden afiliarse al ISSS desde el 1 de julio de 2010. Las consideraciones son los siguientes:

Tipo de trabajo

  • Las personas beneficiadas serán aquellas que laboran en los hogares salvadoreños desempeñándose en cargos como cocinera, personal de limpieza, niñera, ama de llaves, mayordomo, jardinero y similares.
  • Estos empleados no deben generar ganancia económica a su empleador, así como lo establece el Artículo 77 del Código de Trabajo de El Salvador.

Salario

  • El salario mínimo para poder cotizar en el ISSS es de $300 para 30 días, y $310 para 31 días.

Porcentajes de contribución

  • 3.0% del salario, por parte del trabajador.
  • 7.5% del salario, por parte del patrono.

Documentación a presentar

  • Por parte del trabajador:
    • Formulario “Aviso de Inscripción de Trabajador” debidamente completado y firmado por empleador y trabajador (puede encontrarse acá).
    • Fotografía reciente de frente tamaño cédula*.
    • Documento Único de Identidad (para el menor de edad Carné de Minoridad extendido por la Alcaldía de su municipio y para extranjero Documento de Identidad del país de origen, Carné de Residente o Pasaporte).
    • Número de Identificación Tributaria (NIT).
  • Por parte del patrono:
    • Formulario “Aviso de Inscripción de Empleador” debidamente completo y firmado por empleador y trabajador.
    • Documento Único de Identidad (para extranjero Documento de Identidad del país de origen, Carné de Residente o Pasaporte).
    • Número de Identificación Tributaria (NIT).
  • Para afiliar a beneficiario:
    • Tarjeta de afiliación del trabajador.
    • Documento Único de Identidad (para extranjero Documento de Identidad del país de origen, Carné de Residente o Pasaporte).
    • Partida de Nacimiento del menor.
    • Fotografía (si es mayor de 2 años)*.
* No estoy seguro si las fotografías aún son requeridas, pues esta información se extrajo de un artículo del año 2010.

    Edad

    • De14 a 60 años para el trabajador.

    Afiliación del trabajador independiente

    Los trabajadores independientes pueden afiliarse al seguro social desde el 2 de mayo del 2018. Es posible hacerlo en dos modalidades: INDIVIDUAL (sin beneficiarios) y FAMILIAR (con beneficiarios). Es necesario tomar en cuenta las siguientes consideraciones:

    Tipo de trabajo

    • Profesiones libres o realice de forma habitual, personal y directa, una actividad económica, física o intelectual, sin sujeción por ella a contrato de trabajo, ni con trabajadores a su cargo.
    • Que no se encuentre sujeto al régimen general u a ningún de los otros regímenes especiales (no estoy muy seguro a qué se refiere esto, las disculpas del caso). 

    Montos de contribución

    • Cobertura INDIVIDUAL: $40
    • Cobertura FAMILIAR: $56

    Documentación a presentar

    • Documento Único de Identidad.
    • Número de Identificación Tributaria (NIT).
    • Formulario de inscripción según la modalidad: INDIVIDUAL o FAMILIAR (pueden encontrarse al final de esta página).
    • Declaración jurada de Actividad Económica que realiza (NOTARIADA).
    • Declaración jurada no notariada, en caso de inscribir a compañera o compañero de vida.

    Edad

    • De 18 a 60 años de edad.

      ¿Dónde solicitar el servicio?

      Las oficinas de Aseguramiento a nivel nacional, están habilitadas para la inscripción de los trabajadores:
      • Oficinas Administrativas del ISSS San Salvador: Alameda Juan Pablo II y 39 avenida norte, Condominio El Salvador, costado sur de Metrocentro, San Salvador. Horario: De lunes a viernes de 7:00 a.m. a 4:00 p.m.
      • Sucursal Plaza Mundo: Centro Comercial plaza Mundo 1er. nivel parqueo sur local #88, Boulevard del Ejercito Nacional Km 5 1/2, calle Montecarmelo, Soyapango. Horario: De lunes a viernes de 8:00 a.m. a 4:00 p.m. (sin cerrar al mediodía)
      • Sucursal Plaza Merliot: Centro Comercial Plaza Merliot 3a. Planta, local 394, contiguo a Maxi Efectivos, calle Chiltiupán, Ciudad Merliot. Correo electrónico: aseg.merliot@isss.gob.sv. Horario: De lunes a viernes de 8:00 a.m. a 4:00 p.m. (sin cerrar al mediodía).
      • Sucursal San Miguel: 2a. Avenida Norte y 8a Calle oriente, antiguo local del Banco Central de Reserva. Horario: De lunes a viernes de 8:00 a.m. a 4:00 p.m.
      • Sucursal Usulután: 3ra. Av. Norte, Número 9, Barrio la Merced, Usulután. Horario: De lunes a viernes de 7:00 a.m. a 4:00 p.m.
      • Sucursal Santa Ana: Final 10a. Avenida sur, El Palmar. Horario: De lunes a viernes de 7:00 a.m. a 4:00 p.m.
      • Sucursal Sonsonate: Carretera a Acajutla Km 66, contiguo a Metrocentro Sonsonate. Horario: De lunes a viernes de 7:00 a.m. a 4:00 p.m.

      Fuentes

      La presente información fue recopilada a inicios de junio de 2018. Las fuentes de la información mostrada acá son las siguientes:
      Se agradecerá mucho informar mediante comentario si la información acá presentada está desactualizada o es incorrecta.

      martes, 15 de mayo de 2018

      Tutorial de Vue.js 2 - 2. Creación de proyecto desde plantilla

      Índice:

      Hola nuevamente, en esta ocasión continuaré con la segunda entrega del tutorial de Vue.js 2. En esta ocasión trataremos los siguientes puntos:
      • Definición general del ejemplo
      • Descarga de plantilla WebPack.
      • Ejecución de proyecto de ejemplo.
      • Introducción a la estructura del proyecto

      Definición del ejemplo

      Para este tutorial, como ejemplo se elaborará una lista de contactos telefónicos, que permita hacer las operaciones ACME con ellos: Añadir, Consultar, Modificar o Eliminar. Los requerimientos específicos se irán describiendo a medida se vaya avanzando en el tutorial.

      Descarga de plantilla WebPack

      Asumiendo que se instalaron los componentes necesarios indicados en la primera parte del tutorial, podemos proceder a crear la carpeta que contendrá nuestro proyecto en el lugar que deseemos. Luego, abrimos la consola en dicha carpeta, y procedemos a generar el nuevo proyecto a partir de la plantilla de webpack, haciendo uso de la herramienta de línea de comandos de Vue (vue-cli), para ejecutar el siguiente comando:

      $ vue init webpack vue2-tutorial-contactos

      Con ese comando, le indicamos a la línea de comandos de Vue que deseamos iniciar un nuevo proyecto, a partir de la plantilla webpack, y cuyo nombre será vue2-tutorial-contactos. Luego de ello, para completar la creación del proyecto, la herramienta interactiva preguntará al usuario la información necesaria para generarlo:


      En algunos casos, la herramienta mostrará los valores por defecto a un lado del dato requerido, en un tono más claro, y entre paréntesis. Tal es el caso del nombre del proyecto, que como puede notarse es el mismo que le enviamos como tercer parámetro al comando para generar el proyecto. Si deseamos utilizar el valor por defecto, solamente presionamos ENTER. Si no, digitamos el nuevo valor, y presionamos ENTER.

      Luego de ello nos solicita la descripción del proyecto. En este caso, ingresamos una pequeña sinopsis de nuestro proyecto de prueba:


      El siguiente dato solicitado es el autor del proyecto, el cual se obtiene de la configuración global de GIT:


      Seguidamente el asistente nos indica que elijamos el tipo de compilación a utilizar con Vue. En este ejemplo utilizaremos la recomendada, la cual es más fácil de utilizar, pero levemente más pesada (de acuerdo a la descripción, no he probado la segunda opción, jejeje):


      Luego debemos elegir si instalar o no el vue-router en nuestro proyecto, el cual se utiliza para navegar entre distintas partes de la aplicación. Si bien no es necesario poseer un componente de enrutamiento elaborado para este proyecto, ya que no tendremos una gran cantidad de "páginas", lo utilizaremos a modo de ejemplo, ya que puede ser de utilidad para proyectos de mayor envergadura. Para instalarlo ingresamos la letra Y, o bien presionamos ENTER solamente, ya que esta es la opción por defecto.


      Después se solicita indicar si se utilizará la herramienta ESLint para analizar el código fuente (linter). Si bien no es necesario, ya que Vetur lo hará dentro del Visual Studio Code, dejaremos que el asistente lo instale, para ver cómo se ejecuta y muestra esta herramienta al momento de correr el proyecto.


      Luego elegimos la configuración estándar de reglas de ESLint (he aquí una comparación de las configuraciones de lint):


      En el siguiente paso, se nos pide indicar si deseamos que el asistente prepare pruebas unitarias para el proyecto. Indicaremos que sí (Y), y seguidamente elegiremos a Karma y Mocha como herramientas para la creación y ejecución de las pruebas.


      Como penúltimo paso, se nos pregunta si deseamos que se preparen las pruebas de extremo a extremo (end-to-end) utilizando Nightwatch. Indicaremos que sí.


      Y finalmente, el asistente nos consulta si deseamos que se ejecute el comando npm install, una vez creado el proyecto, para instalar todas las librerías y componentes necesarios para poderlo ejecutar. Seleccionaremos que sí, utilizando la herramienta NPM:


      Una vez completados estos pasos, el asistente procede a crear el proyecto, e instalar los paquetes necesarios:


      Y nos indica cuando el proceso ha finalizado:


      Ejecución del proyecto de ejemplo

      Allí, en color mostaza, nos indica como podemos ejecutar el proyecto. Tal como dice allí, basta con ingresar a la carpeta vue2-tutorial-contactos, que es la que contiene el proyecto (nótese que el nombre de la carpeta es el mismo que indicamos al iniciar el asistente de vue-cli), y ejecutar el comando npm run dev. Con ello se procede a construir el proyecto.


      Una vez finalizada la construcción, se nos indica que se puede ver la aplicación en la URL: http://localhost:8080


      Al abrir la ruta en el navegador, vemos el resultado:


      Introducción a la estructura del proyecto

      Ahora que el proyecto ya esta listo, podemos abrir la carpeta que lo contiene utilizando Visual Studio Code, con la opción de menú File > Open Folder:


      En este punto las partes de la estructura del proyecto que más nos interesan son las siguientes:
      • src: contiene el código fuente de Vue del proyecto.
      • index.html: es la página de inicio de la aplicación.
      Una gran ventaja de que este proyecto haya sido generado con WebPack es que posee la característica de hot-reload, lo cual quiere decir que luego de modificar un archivo, este es recompilado, y la página web es refrescada automáticamente para ver los cambios. Para probar esto, podemos modificar el mensaje dentro archivo src/components/HelloWorld.vue, así:


      Al guardar el archivo, WebPack detecta el cambio, y recompila el archivo modificado, lo cual puede observarse en la terminal donde está corriendo la aplicación:


      Y una vez finalizada la compilación, la página es refrescada automáticamente en nuestro navegador (y si no es el caso, basta que la refresquemos nosotros mismos). Nótese el cambio en el texto del mensaje:


      Esto es todo en esta ocasión. Pueden encontrar el código fuente de esta parte del tutorial acá: https://github.com/guillegr123/vue2-tutorial-contactos/tree/tutorial-parte-02. Espero próximamente poder mostrar como crear nuestra lista inicial de contactos. Saludos.

      martes, 6 de marzo de 2018

      Baúl de los recuerdos: Gravity Well 2



      Saludos a todos. En esta ocasión quería compartirles acerca de un viejo juego que de casualidad recordé un día de estos, de la nada. O bueno, no tan de la nada: hablando con un compañero del trabajo, estaba recordando las cosas que solía hacer cuando al regresar de la escuela, y recordé que en 8o o 9o grado, luego de almorzar, jugaba un rato en la computadora (una Compaq Presario con Pentium 4 y Windows XP, que fué la segunda computadora que compraron mis papás, la cual todavía está guardada en mi cuarto). Uno de esos juegos era Gravity Well, un juego Shareware que venía incluido en un disco llamado The House of Games for Windows 95.


      Este disco venía incluido con la primera computadora que compraron mis papás, por allá por 1998 (hace casi 20 años, y creo que aún tengo el disco por allí), la cual era una clon que traía Windows 95. Este disco traía un montón de mini juegos en la modalidad Shareware, lo que quiere decir que eran más que todo demostraciones o juegos completos con limitaciones de tiempo. Muchos de ellos no los comprendía, pero entre los pocos que logré comprender estaba el juego tema de esta entrada.

      Gravity Well es un juego arcade y de estrategia, de combate espacial, desarrollado por Cactus Software Productions (Colorado, EE.UU.), en el año 1995. La descripción del juego dice:
      The age old conflict rages onward, spreading into another previously uncharted region of space. The race is on once again to establish strategic footholds and vital supply lines. Four separate races struggle for dominance in a continuing battle for the stars. Planet by planet, sector by sector, the galaxy is claimed by those who can take it.

      Traducido:
      El viejo conflicto se continúa y se extiende a otra región del espacio anteriormente desconocida. La carrera es una vez más para establecer puntos de apoyo estratégicos y líneas de suministro vitales. Cuatro razas separadas luchan por el dominio en una batalla continua por las estrellas. Planeta por planeta, sector por sector, la galaxia es reclamada por aquellos que pueden tomarla.

      Suena bastante épico, ¿verdad?. Esta sinopsis da una idea de qué se trata el juego, la cual extenderé a continuación con mis experiencias. Diría que Gravity Well es una especie de combinación entre el clásico Asteroides con Aterrizaje Lunar, en esteroides. En este juego formas parte del equipo azul, y conduces una nave de combate, la cual aparece estacionada en el "puerto espacial" que orbita tu planeta. Tu misión es explorar y conquistar otros planetas en el sector del espacio que estás asignado. Para ello, debes aterrizar en los planetas, para "marcarlos" como sitios de aterrizaje. Luego de ello, naves de carga son enviadas desde tu planeta hacia el nuevo, para completar su colonización. Sin embargo, el sector no está solo, ya que hay otras razas (roja, morada y amarilla), las cuales también lucharán por poder conquistar los planetas, e incluso podrían destruir toda tu presencia en el sector. Pierdes el juego si todas tus naves y colonias son destruidas.



      Para los estándares actuales, el juego parece bastante simple, pero examinándolo detenidamente, creo que es un bonito ejemplo de los programas de su época, por las siguientes características:
      • Poseía varios ejecutables, que dependían de la versión de Windows que se usara, y las características de la computadora: si tenía o no co-procesador de punto flotante, si la computadora poseía Win32 en la instalación de Windows, etc. En estos tiempos, al menos a un alto nivel, solo nos preocupamos en saber si el procesador es de 32 o 64 bits. Cabe mencionar que el ejecutable para Windows de 32 bits aun funciona en Windows 10, aunque no del todo bien, al menos en lo que pude probar yo.
      • Es un juego vectorial. Cada objeto se define por un conjunto de puntos, incluidos en un archivo llamado SYMBOLS.DAT, que no es mas que texto plano con un formato particular para listar los elementos y los puntos. Esto quiere decir que no sería muy difícil modificar la forma de los objetos en la pantalla.
      • Cada objeto en el juego se maneja de forma individual, y posee características distintas. El desarrollador afirma en sus notas haber probado hasta 300 objetos en una sesión de juego en la versión de Windows de 32 bits. Cabe mencionar también que la posición de los planetas se determina de forma aleatoria, y estos no son estáticos, sino que orbitan alrededor de alguna estrella.
      • Todos los planetas y estrellas poseen gravedad, por lo que tu nave es atraída hacia ellos. Las estrellas poseen mayor fuerza de gravedad que los planetas, por lo que su atracción es mayor. Controlando la propulsión de la nave, es posible orbitar los planetas, y aterrizar en ellos.
      • El juego posee manejo de colisiones. Tu nave es destruida si tocas una estrella, o te acercas demasiado rápido a un planeta. Si intentas aterrizar con un planeta en una posición incorrecta, tu nave es dañada. También, aunque puedes atravesar otras naves espaciales, tu nave sufre un porcentaje de daño al hacerlo. Por otra parte, tu disparas y tus enemigos también, así que los contactos de los proyectiles también son tomados en cuenta. Con un motor gráfico no ha de ser tan difícil manejar esto, pero codificarlo a mano, aunque sea en 2 dimensiones, no ha de ser una tarea tan sencilla.
      • El ratón es opcional, pero si se tenía uno, se permitía seleccionar los objetos en el sector, para ver qué estaba pasando cerca de ellos.
      • El juego soporta múltiples resoluciones, y parece ser que ajusta el tamaño de los objetos de acuerdo a la resolución.
      • Posee una especie de inteligencia artifical básica, ya que uno puede escoger el caracter de las razas contrincates, y esto determina la forma en que estos se comportan: agresivo, cobarde, tenaz, etc.
      • Todos los archivos en conjunto utilizan un espacio de solamente 273 Kb, siendo solamente el ejecutable 170.5 Kb. El resto de archivos incluyen los sonidos (en formato WAV), el archivo de objetos, el archivo leéme, y un archivo de ayuda de Windows.
      Estuve intentando correr el programa en Windows 10, en modo de compatibilidad con Windows 95, pero parece ser que el fondo negro no se pinta, sino solo los objetos. Solamente cuando se mueven estos objetos, se pinta de negro los píxeles donde antes estaban, produciéndose el siguiente efecto:



      Por otra parte, lo intenté correr también en Linux (una distro basada en Arch) utilizando Wine, pero corre demasiado rápido. Creo que se puede deber a que usa el procesador para dibujar la pantalla, basado en las notas y debido a que intenté reducir los frames por segundo con strangle, pero no obtuve ninguna reducción. Así que ni modo, tal vez pueda en otra ocasión.

      Sin embargo, es sorprendente que a pesar de tener más de 20 años, ¡aún corre! Aunque puede ser un poco corto, es bastante entretenido, y cada sesión de juego será diferente gracias a su AI y los elementos aleatorios. Lo recomiendo bastante.

      Si alguien sabe como correrlo agradecería mucho sus comentarios. Saludos, y hasta la proxima.

      ¿Qué es un script?

      Ante la noticia de que un "script" causó un error en la forma en la que se estaba presentando el listado de preferencias electorales de los candidatos a diputados para las elecciones 2018 de El Salvador, quería explicar un poco acerca de qué es un script. Pero iré paso a paso, así que empezaré por explicar el concepto más básico del que parte todo: qué es un programa de computadora.

      Programa de computadora

      Un programa de computadora es una lista de instrucciones que le dicen a una computadora qué tareas debe realizar y de cómo debe hacerlas, con el fin de obtener un resultado específico. Una buena analogía a un programa es una receta de cocina, en la que se nos dice qué ingredientes utilizar, y cómo prepararlos, siguiendo una lista de pasos, para obtener como resultado un platillo específico.

      Ejemplos de programas de computadora son Microsoft Word, Photoshop, las aplicaciones de los teléfonos móviles, y el navegador web que usted está utilizando para ver esta página web. Los sinónimos más comunes de programa de computadora son aplicación y software.

      Los programas son elaborados por programadores, también conocidos como desarrolladores de software. Los programadores usualmente escriben las instrucciones de los programas en forma de texto (similar al que usted estña leyendo ahorita) utilizando uno o más lenguajes de programación.

      Lenguaje de programación

      Un lenguaje de programación es, al igual que el lenguaje escrito que está leyendo ahorita, un conjunto de palabras (por lo general en inglés), números y símbolos, que permiten describir las instrucciones que un programa debe realizar. Estos lenguajes son una forma simplificada de un lenguaje humano, ya que su objetivo es facilitar a los humanos comunicarse con las computadoras para decirles qué deben hacer. El conjunto de instrucciones de un programa, escritas en un lenguaje de programación determinado, es conocido como código fuente.

      El siguiente es un ejemplo de código fuente de un programa escrito en el lenguaje de programación COBOL:

      SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

      En este caso esta instrucción es fácil de entender, ya que lo que realiza es su traducción literal del inglés: RESTAR DESCUENTO DEL COSTO DANDO COMO RESULTADO COSTO FINAL.

      Compilación e interpretación

      En términos generales, el código fuente de los programas debe ser traducido a una secuencia de unos y ceros, para que la computadora pueda comprenderlo. Esto es realizado por otros programas, y se puede hacer de dos formas, lo cual depende del momento en que se haga la traducción. La primera forma es llamada compilación, la cual consiste en que un programa llamado compilador traduce el código fuente y lo empaqueta en uno o más archivos. Uno de estos archivos es conocido como ejecutable, que es el encargado de iniciar el programa. Ejemplo de ello es el archivo que se utilizó para iniciar el navegador que está utilizando para ver esta página web, o el archivo que se utiliza para iniciar la aplicación de Facebook en su teléfono celular.

      La otra forma de traducción se conoce como interpretación, que consiste en que el código fuente es leído instrucción por instrucción por un programa llamado intérprete. Cada instrucción que se lee es traducida e inmediatamente ejecutada (realizada o "corrida"). En resumen, la diferencia entre la compilación y la interpretación es que en el primer caso todo el programa es traducido al lenguaje de la máquina (unos y ceros) para poder ser ejecutado posteriormente; mientras que en el segundo, cada instrucción se lee, se traduce y se ejecuta, una por una.

      Existen programas que combinan ambas formas de traducción, pero será tema para otra ocasión.

      Script

      Finalmente llegamos a nuestro objetivo: ¿qué es un script? La palabra script traducida literalmente del inglés significa guión. En el contexto informático, un script es una forma en la que se le conoce a un programa elaborado en un lenguaje de programación que puede ser interpretado. Es decir, es un programa que puede ser traducido al lenguaje de la máquina (unos y ceros) paso a paso, y cada paso o instrucción es ejecutado inmediatamente después de ser traducido.

      ¿A qué se refiere "script" en el contexto de los sitios web?

      En esta sección se pretende dar una idea más especifica de a qué se pueden referir con el término "script" en el contexto de las llamadas aplicaciones web, que son sitios web que muestran información que no es estática, sino que puede cambiar a lo largo del tiempo. Un buen ejemplo de ello es el sitio web de Facebook.

      Para el funcionamiento de una aplicación web común, existen uno o más programas corriendo tanto en computadoras llamadas servidores, como en el navegador web que se está utilizando para ver el sitio web (Google Chrome, Mozilla Firefox, Microsoft Internet Explorer o Microsoft Edge, por ejemplo). Su navegador web solicita la información a un servidor enviando un mensaje a través del internet con una dirección específica (por ejemplo https://www.facebook.com). El mensaje llega al servidor, el cual ejecuta uno o más programas (los cuales podrían ser scripts), y luego responde con otro mensaje que lleva toda la información que se muestra en la página, así como uno o más scripts, los cuáles son interpretados por su navegador, para ubicar la información de la forma que usted la ve en la página web, o bien realizar otras tareas.

      Por otra parte, en un servidor, la información requerida es usualmente almacenada en bases de datos, que son uno o más archivos, los cuáles son administrados por un programa llamado gestor de bases de datos. Para extraer la información de esta base de datos, en ocasiones se utilizan scripts que indican cuáles son los datos que se desean obtener y cómo se desean obtener. Los datos se comúnmente se obtienen en forma de listas o tablas, las cuales pueden ordenarse de una forma particular.

      Esto sería todo, espero no haberlos aburrido, y de paso haberles compartido algo de lo que me gusta, aprovechando la ocasión :P

      sábado, 24 de febrero de 2018

      Jasonetor - Mi primera extensión para VS Code

      ¡Saludos! En esta ocasión quería presentarles mi primera extensión para Visual Studio Code, llamada Jasonetor. El nombre suena un poco chistoso, pero se me ocurrió de JSON Editor (JaSONE[ed]itor), pues en efecto la intención es ser un visor y editor de JSON. También viene un poco del nombre Jasonette, que es una herramienta para crear aplicaciones móviles utilizando JSON. Y cabe mencionar que también medio suena a Terminator XD.

      ¿Qué es Jasonetor?

      La idea principal es que Jasonetor llegue a ser un editor amigable de JSON. Sin embargo actualmente se encuentra en pañales (v0.0.2 al momento de escribir esta entrada), por lo que solamente muestra el JSON como una vista de árbol, en la que se puede minimizar o expandir cada nodo, y además resalta nodos al hacer clic izquierdo en ellos. Por otra parte, aún posee dependencias que se descargan desde internet, por lo que no funcionará si no se posee conexión a internet, al menos al iniciar la extensión.

      ¿Cómo surgió Jasonetor?

      Jasonetor surgió de la necesidad de encontrar una mejor forma de editar archivos JSON en mi actual trabajo. Esto se debe a que trabajamos de cuando en cuando con archivos JSON, los cuales se han vuelto bastante extensos. Es por ello que el proceso de edición de estos se ha vuelto sumamente engorroso, lento y propenso a errores. Así que el principal objetivo de Jasonetor es disminuir el tiempo que invertimos y perdemos debido a errores en la edición de estos archivos.

      Aunque Jasonetor pretende ser una herramienta para ser utilizada en mi actual trabajo, no está limitado solamente a este, y no forma parte directa de él, ya que es un proyecto que estoy desarrollando en mi tiempo fuera de la oficina. Por eso mismo, Jasonetor ha sido concebido como un proyecto de software libre (open source), cuyo código fuente se encuentra en GitHub, por lo que cualquier apoyo o contribución es bienvenida y muy agradecida.

      Inicialmente la idea era hacer una herramienta de edición que mostrara el JSON en una vista de árbol, y lo permitiera editar. Mi elección fue utilizar Electron JS, que es un framework para crear aplicaciones de escritorio nativas utilizando JavaScript, HTML y CSS, y resulta muy natural utilizar estas tecnologías web para graficar JSON de forma fácil y amigable. Cabe mencionar que conocí sobre Electron gracias a Hans Hernández, compañero de trabajo y creador de CatFactory.

      Sin embargo, luego pensé que sería mucho mejor si se pudiera editar el JSON no solamente de forma gráfica, sino de forma textual, en dos vistas paralelas, ya que usualmente nos resulta más rápido editar el texto en lugar de mover el ratón para seleccionar los elementos en una vista de árbol. Pero sería demasiado difícil incluir un editor de texto con colorización de sintaxis. Luego recordé que Visual Studio Code ya es un editor que ha sido creado con Electron, y hay una gran cantidad de extensiones de código libre desarrolladas por la comunidad, así que pareció la opción más sensata, en lugar de re-inventar la rueda. Luego de ver los fuentes de ejemplo, más algunas extensiones similares, me animé a intentar crear una extensión por mí mismo.

      ¿Cómo funciona Jasonetor?

      Jasonetor fue creado a partir de la extensión de ejemplo de Hola Mundo, provista en la documentación sobre el desarrollo de extensiones para Visual Studio Code.
      Internamente posee un TextDocumentContentProvider, el cuál se utiliza para mostrar el cuerpo de una página HTML en una vista que se abre a la par del editor de texto, al presionar F1 e ingresar el comando JSON editor. Esta parte se basó en:


      La página HTML es una pequeña aplicación de Vue JS 2, que utiliza un componente recursivo basado en el ejemplo de Anthony Gore para dibujar el JSON en vista de árbol. Para la selección y de-selección de nodos se utiliza el concepto de bus de eventos, mediante la creación de una instancia adicional de Vue.


      Siguientes pasos

      De momento no he decidido por completo los pasos a seguir con Jasonetor, pero tratando de ordenar las características cronológicamente según las necesidades que tenemos actualmente, más algunos ítems de la lista de deseos  (porque aún no sé hasta donde se pueda llegar :P), creo que serían los siguientes:
      • Incluir dependencias dentro del proyecto, para no requerir conexión a Internet.
      • Separar los componentes de Vue en archivos propios, y comprimir el código fuente utilizado para dibujar la vista de árbol (creo que lo segundo va a tener que ser realizado como parte de lo primero).
      • No actualizar vista de árbol si el JSON no es válido, y notificar de esto al usuario.
      • Parsear o mapear el JSON, para poder detectar la ubicación de los cambios que realice el usuario (si no encuentro una librería, voy a tener que buscar mis cuadernos de Teoría Matemática de la Computación y Compiladores).
      • Editar el JSON en la vista de árbol, y actualizar el texto en el editor.
      • Desplazar la vista de árbol de forma paralela a la edición de código.
      • Actualizar la vista de árbol de forma parcial, solamente con los cambios detectados.
      • Soporte para búsqueda mediante JSON Path.
      • Soporte para XML, YAML y otros lenguajes de metadatos (se vale soñar).

      lunes, 12 de febrero de 2018

      Tecnología - Google Glass

      Publicado originalmente el 2013-02-22, en https://itsouvenirs.wordpress.com/2013/02/22/tecnologia-google-glass/. Es posible que algunos enlaces ya no estén disponibles o posean un contenido distinto el descrito en esta entrada.

      Hola a todos. Solo quería compartirles este vídeo que acabo de encontrar en YouTube. Es acerca de la propuesta de tecnología de Google en la categoría de los aparatos "Smart", llamada "Glass". Básicamente consisten en unos lentes con cámara integrada, reconocimiento de voz, y conexión a Internet y redes sociales. Así como existen Smart Phones y Smart TV's, esto podría llamarse algo así como "Smart Glasses", jejeje.

      Aparentemente este proyecto fue revelado desde el año 2012, y ya se han realizado demostraciones y pruebas con algunas personas. El vídeo es una especie de vídeo promocional del aparato, e incluye una compilación de tales pruebas: https://youtu.be/wTxFxk2dwaQ (en febrero de 2018 ya no está disponible el vídeo que ví originalmente, así que dejo el link a una copia del vídeo).

      Para mayor información pueden visitar el Sitio web oficial de Google Glass. Y si viven en Estados Unidos, podrían aplicar para ser una de las personas elegidas para ser uno de los "Exploradores", respondiendo la pregunta: ¿Qué harías si tuvieras Glass?.

      Realmente la tecnología está avanzando muy rápido a tal punto de ver cosas que hace unos 20 años solo existían en las películas de ciencia ficción.
      Con la tecnología de Blogger.