martes, 6 de marzo de 2018
¿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:
- Extensión de ejemplo de Microsoft de una vista previa de propiedades CSS.
- La extensión Live HTML Previewer de Harshdeep Gupta.
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.
jueves, 8 de febrero de 2018
SQL Server Snippets - Buscar columna en base de datos
Publicado originalmente el 2013-02-19, en https://itsouvenirs.wordpress.com/2013/02/19/sql-server-snippets-buscar-columna-en-base-de-datos/.Saludos a todos. Aprovechando un poco mi hora de almuerzo (para escribir el post, aunque lo publiqué en la noche, jejeje), quería compartirles este pequeño snippet, que consiste en una consulta para obtener el listado de tablas en las que exista una determinada columna, y es básicamente el siguiente:
Dónde nombre_columna es el nombre de la columna que se desea buscar.
El snippet puede modificarse para buscar también las columnas en cuyo nombre se incluya cierta palabra, cambiando el igual (=) de la condición por un LIKE, así:
En este caso, el nombre de las tablas podría repetirse, en casos en los que más de una columna de la tabla posea la palabra buscada.
A modo de ejemplo, al ejecutar el siguiente script en la base de datos AdventureWorks:
La consulta nos devuelve los siguientes resultados:
Esta consulta me ha sido de gran ayuda en casos en los que la base de datos “relacional” no posee todas las debidas relaciones entre las tablas, ya que me permite encontrar las tablas en las que aparece cierta columna, para tratar de descubrir las posibles relaciones faltantes.
La consulta ha sido probada en SQL Server 2005 hasta SQL Server 2012, y funciona sin problemas. Muy posiblemente funcionará en versiones posteriores.
SQL Server Snippets - Pausa
Publicado originalmente el 2013-02-13, en https://itsouvenirs.wordpress.com/2013/02/13/sql-server-snippets-pausa/.En esta ocasión les dejo un snippet corto, pero muy interesante, que consiste en hacer cómo hacer una pausa en SQL Server. Esto vendría siendo similar a un sleep en otros lenguajes de programación.
El comando es sencillo:
waitfor delay '00:01:00'En dicho ejemplo se muestra el comando para hacer una pausa por un minuto.
Ahora, ¿por qué diantres quería yo hacer una pausa en SQL Server? En mi caso, lo utilicé para hacer pruebas con un trigger. Puse el comando dentro de un trigger "on update" porque quería saber si la aplicación actualizaba los datos de cierta tabla antes de realizar una determinada acción. Si la acción se realizaba luego de la pausa, sabría que el trigger se ejecutaba antes de dicha acción, y esto a su vez me indicaría que los datos de la tabla eran actualizados antes de la acción.
Este es solo un ejemplo, pero pueden haber muchos otros casos. La verdad es que si la sentencia existe, es porque alguien pensó que serviría para algo, jejeje...
Por cierto, esta sentencia solo la he probado en SQL Server 2005, pero probablemente aún siga disponible, incluso en la versión
domingo, 14 de enero de 2018
WP - Atributo de MVC 2 para filtrar acciones para solicitudes AJAX
Ya llevo un par de meses trabajando con ASP.NET MVC Framework 2, y debo decir que me ha encantado. Y sé que van por la versión 4, pero en el trabajo contamoscon Visual Studio 2008, así que hay que aprovechar lo que se tiene, y debo decir que en realidad no es poco.En esta ocasión quiero mostrar una forma de crear un atributo de filtrado para acciones que deben ser ejecutadas solamente mediante solicitudes Ajax. Esto es útil para acciones que deseamos utilizar exclusivamente para estas solicitudes, y que queremos que el usuario común tenga acceso a ellas solamente a través de esta forma, mediante alguna interacción con la interfaz de usuario (UI), por ejemplo.
Primero, es necesario encontrar una forma de identificar que el tipo de solicitud es XML HTTP request, que es la clase de solicitudes que se hacen mediante AJAX. El objeto HttpRequest del que disponemos en una aplicación ASP.NET no cuenta con un método propio para identificar este tipo de solicitud, por lo que es necesario trabajar un poco en esta parte. Para ello, crearemos un método de extensión que se encargue de verificar esto. El método que presento a continuación es prácticamente una copia de la respuesta de Charlino a la pregunta de StackOverflow titulada How to check if request is ajax or not in codebehind - ASP.NET Webforms, que a su vez se basa en el código fuente del MVC Framework (que es open source, o código libre, por cierto).
Como puede observarse, el método revisa directamente el encabezado del request, para verificar el tipo de solicitud. Si el tipo de solicitud es XMLHttpRequest, devuelve verdadero, y falso en caso contrario.
Actualización: Existe un método de extensión para la clase HttpRequestBase en el espacio de nombres System.Web.Mvc, con el mismo nombre y funcionalidad que el del método propuesto (IsAjaxRequest). Podría usarse este en vez de crear una nueva extensión, solamente incluyendo el espacio de nombres System.Web.Mvc.
Teniendo este método disponible, podemos proceder a crear el atributo de filtro. Este es un atributo de filtro convencional, por lo que será descendiente o derivado de la clase ActionFilterAttribute. Como se observa a continuación, el atributo es bastante simple:
Como puede observarse, todo el proceso de verificación se realiza sobrecargando el método OnActionExecuting, que se ejecuta justo antes de proceder a ejecutar la acción. Acá hacemos uso del método de extensión para verificar si la solicitud (request) es de tipo Ajax, y si no lo es, devolvemos como resultado una vista completa, que bien puede ser una página de error personalizada. Cabe mencionar que digo vista completa porque el resultado a generar es un ViewResult. Dado que sabemos que no es una solicitud Ajax, lo común no sería devolver una vista parcial, sino una página completa (.aspx). También, en vez de devolver de una sola vez la página de error, podríamos redireccionar hacia otra acción que consideremos conveniente, a través de un RedirectResult.
Finalmente, decoramos la acción que deseamos filtrar con el atributo que hemos creado, de la siguiente manera:
Acá les dejo un enlace que encontré por allí, que tiene varios ejemplos de atributos de filtro de acciones bastante interesantes, que puede que les sean de utilidad: Creating Custom Action Filters in ASP.NET MVC
NOTA: Aunque este atributo fue elaborado y probado en MVC Framework 2, creería que de igual forma es aplicable para las versiones 3 y 4 del framework.
Cualquier comentario será bien recibido, y como dicen por allí, Happy coding!
Publicado originalmente el 30/10/2012, en https://itsouvenirs.wordpress.com/2013/02/13/diseno-web-panel-de-carga-loading-panel/.
jueves, 4 de enero de 2018
Hola mundo con Kotlin, Gradle y Akka
Hola, por acá les dejo mi primer prueba con Kotlin, un hola mundo utilizando Gradle y la librería Akka, creado con el IDE IntelliJ IDEA Community Edition 2017.
Repositorio: https://github.com/guillegr123/hello-kotlin-akka-gradle
Quedé algo picado por la imagen de arriba. Pero después mi primera prueba, de momento me sigue gustando más el pattern matching de Scala a la hora de extraer valores de las case classes, ya que aparentemente Kotlin no puede hacer eso con sus data classes.
Por otra parte, parece que la programación funcional y la orientada a objetos es la tendencia.
Saludos.
Con la tecnología de Blogger.