JavaScript – Introducción

En esta entrada inauguro un nuevo lenguaje (sin ánimo de polemizar 😉 ) en el blog: JavaScript.
JavaScript está estrechamente relacionado con el diseño de páginas web y HTML. Como tal, podemos incrustar el código JavaScript entre las etiquetas , dentro de…en el código HTML:

Comentarios

Para comentar código en JavaScript, usamos la misma sintaxis que en Java:

  1. Comentarios de una sóla línea: // Comentario de una sola línea.
  2. Comentarios de varias líneas: Usamos /* al principio del bloque de líneas a comentar, y */ al final del bloque a comentar.

Variables

A diferencia de Java, donde tenemos que especificar de qué tipo es cada variable que declaramos, en JavaScript bastará con usar la palabra reservada var. Las variables se pueden inicializar al mismo tiempo que se declaran.

Arrays o Vectores

También se utiliza la palabra reservada var para declarar un Array en JavaScript. La diferencia estriba en el momento de inicializarlo, donde deberemos emplear la sintaxis: var nuevoArray = new Array('valores','separados','por','comas'). Además, se permite insertar nuevos valores al final del array, haciendo uso del método push. Por ejemplo:

Si te has fijado en el ejemplo de sintaxis, los valores de un array se separan con comas. Aprovecho también para señalar que los valores de tipo cadena se pueden introducir entre comillas simples o dobles, de manera indistinta.

Para hacer referencia a un valor del array, empleamos corchetes ([ ]) para definir el índice del elemento al que queremos acceder. Debemos tener en cuenta que el primer elemento del array tiene índice 0.

Mostrar mensajes en pantalla

Si deseamos mostrar un mensaje en pantalla utilizamos el método alert. Por ejemplo, la sentencia:

muestra el mensaje siguiente en pantalla:

Mensaje Alert

Requerir la introducción de datos por parte del usuario

Si el alert equivaldría a un MessageBox, la instrucción prompt sería un InputBox. Como ya habrás supuesto, pide que el usuario introduzca datos en un formulario. La sintaxis sería la siguiente:

En este ejemplo pedimos que el usuario introduzca su nombre, y lo guardamos en la variable correspondiente. Ya habrás adivinado que el segundo parámetro es el texto por defecto que aparece en el formulario:

Prompt.gif

Funciones

Por último, en esta introducción me queda explicarte cómo se usan las funciones en JavaScript. La definición de una función en JavaScript sigue esta sintaxis:

En la próxima entrega te diré cómo acceder a los distintos objetos HTML (formularios, botones, etc…), y de qué forma iniciar la ejecución del código JavaScript.

Java – Reproducir audio WAV

En esta nueva entrada voy a mostrar cómo podemos reproducir un fichero de audio fácilmente utilizando Java. Así que vete buscando algún archivo .WAV para hacer las pruebas.

Estos son los pasos necesarios:

AudioProcedure

Distribuiremos el código en dos clases. Una de ellas contiene el método para reproducir el fichero de audio que le pasemos como parámetro (SoundHandler.class), y la otra será la clase principal del programa, que contendrá el método Main (SoundTest.class).

Clase SoundHandler

Esta clase sólo contiene el método playSound.Como ves, hemos seguido escrupulosamente el esquema que mostraba al principio:

  1. Recibimos como parámetro la ruta del fichero de audio y la guardamos en la variable soundFile.
  2. Creamos un nuevo objeto InputStream, usando como parámetro la variable del punto anterior.
  3. Creamos un nuevo objeto AudioStream, usando como parámetro, a su vez, el objeto InputStream del punto anterior.
  4. Ejecutamos el método AudioPlayer.player.startpara reproducir el audio.

Clase SoundTest

Como era de esperar esta clase es aún más sencilla. Simplemente creamos un objeto de la clase SoundHandler (al que he llamado sound, línea 3), y luego llamamos a su método playSound pasando como parámetro la ruta completa del archivo wav que deseamos reproducir (línea 5).

Java – El operador ternario ?

Por poco que hayas tocado Java seguro que estás acostumbrado al uso de la estructura condicional if … else :

Pues existe una manera alternativa de escribir estas sentencias if…else tan cortas, que las abrevia incluso más: usando el operador ternario ?. La sintaxis es la siguiente:

Y se interpretaría diciendo que si expresion1 es verdadero, entonces se evalua expresion2, y de lo contrario se evalua expresion3

Repitamos el ejemplo cambiando la estructura if-else por el operador ternario ?:

Como ves, en una única línea asignamos a la variable k el valor que le correspondería dependiendo de si i es negativa o es positiva. Y hemos reducido el número de líneas de código a la mitad.

¡Hasta la próxima!

MySQL – Consultas básicas (I): SELECT e INSERT INTO

Siguiendo con el lenguaje SQL, y más concretamente usando MySQL, en este post voy a mostrar unas cuantas consultas de las más comunes y a la vez más útiles que tendremos que utilizar. Te recuerdo que también escribí tiempo atrás una entrada con los comandos para crear bases de datos y tablas.

Evidentemente puedes usar cualquier base de datos que tengas, pero si quieres seguir exactamente los ejemplos con los mismos datos que yo estoy utilizando, puedes descargar este archivo SQL. Cuando ejecutes el script tendrás la base de datos dbJuegos funcionando en tu equipo. Te recomiendo que eches un vistazo a mi anterior post sobre cómo crear y restaurar backups de bases de datos MySQL.

Para ejecutar las consultas puedes usar directamente el shell de MySQL o hacer uso de MySQL Workbench. Yo prefiero este último método, pues es mucho más cómodo de utilizar y más agradable a la vista 😉

Mostrar todos los registros

La consulta más sencilla es una de las más útiles, pues te muestra todos los registros de una o varias de las tablas de la base de datos. Su sintaxis es:

En nuestra base de datos:

Esto nos mostraría lo siguiente en workbench:
Mostrar todos los resultados

Como verás, las columnas idgenero e idplataf sólo muestran los índices. Al final veremos una versión modificada de esta consulta para que salga más entendible. Mientras tanto, te invito a que hagas las correspondientes consultas sobre las tablas tblgeneros y tblplataf para ver qué géneros y plataformas corresponden cada uno de los índices.

Insertar un nuevo registro

Usamos la siguiente sintaxis para el comando INSERT INTO:

Ahora queremos insertar en nuestra base de datos un juego cuyo titulo es ‘Blood of old’ (los campos de tipo texto los encerramos entre comillas simples), que es del género arcade (idgenero 1) y de la plataforma Steam (idplataf 1). La nota de gamerankings es 0.00 (porque no existe) y en el campo terminado también le ponemos un 0 porque no nos lo hemos pasado aún (si ponemos un 1 significa que ya lo hemos terminado). La consulta definitiva sería la siguiente:


Ufff… se me está quedando mucho más largo de lo que pensé en un principio. Dejo para próximaS entregaS los comandos para actualizar o eliminar un registro ya existente, así como el uso de las cláusulas WHERE y ORDER BY, que resultan indispensables.

¡Ah! Ahora ejecuta la siguiente consulta para ver todos los registros y fíjate en las columnas que contienen el género y la plataforma:

Mostrar todos los registros en potito

MySQL – Crear y restaurar copias de bases de datos MySQL

MySQL incorpora un comando llamando mysqldump que nos permite crear copias de seguridad y restaurarlas de bases de datos mysql. Para usarlo debemos abrir un terminal (en Linux) o línea de comandos (en Windows). En esta ocasión yo voy a hacerlo en Windows.

Para abrir la línea de comandos en Windows ya sabrás que es tan fácil como pulsar [Win]+R, escribir cmd, y pulsar Enter:

Windows_Command_Line

Ahora deberemos cambiar al directorio donde tenemos instalado MySQL, en mi caso teclearía:

A continuación teclearemos el comando necesario para crear el backup o para restaurarlo.

Crear backup de una base de datos MySQL

La sintaxis es la siguiente:

Es decir, para el usuario root, cuyo password es PasswordRoot, si queremos crear un backup de la base de datos dbJuegos en el directorio raíz de la unidad E:\, teclearemos:

Con ello se habrá creado en E:\ el fichero miBackup.sql

Backups de múltiples bases de datos

En este caso se incorpora el parámetro –databases justo antes del nombre de las bases de datos:

Si además queremos hacer una copia de todas las bases de datos, usamos el parámetro –all-databases:

Restaurar backup de una base de datos MySQL

Para restaurar bases de datos a partir de ficheros .sql, primero tenemos que cerciorarnos de que la base de datos YA EXISTE. En este post te explico cómo hacerlo. Cuando estemos seguros de que la base de datos existe, ejecutamos la siguiente sentencia:

En nuestro ejemplo:

Para el próximo post tengo preparadas 4 sentencias SQL sencillas, pero te hará falta restaurar la base de datos que adjuntaré, haciendo uso de todo lo anterior. Sólo espero que no pase un año entero hasta que me apetezca publicarlo 😉

Visual Basic – Generar archivo PDF desde código

Continuando con el post que inicié el pasado 1 de Agosto (“Visual Basic – Leer y obtener datos de Excel”), ahora voy a explicar cómo resolví el problema de generar la “pseudo-factura” en PDF que me exigían.

El resultado esperado debía ser algo similar al siguiente:

De los requisitos que especifiqué en el primer post, te recuerdo los que vamos a usar ahora:

  • Una imagen para el logo (“logo.png”, por ejemplo).
  • Librerías iTextSharp.

Pongámonos y manos a la obra.

Descargar y configurar iTextSharp en nuestro proyecto

  1. Descarga las librerías iTextSharp desde este enlace.
  2. Una vez descargado, extrae los siguientes archivos dentro de la carpeta de tu proyecto:
    • itextsharp.dll
    • itextsharp.pdfa.dll
    • iTextSharp.xml
    • itextsharp.xtra.dll

  3. Agregamos las referencias a iTextSharp a nuestro proyecto:
    • Menú “PROYECTO” – “Propiedades de xls2pdf”.
    • En la parte izquierda de la ventana, pinchamos la pestaña “Referencias”.
    • En la parte inferior, pinchamos en “Agregar.”
    • Con el botón “Examinar” buscamos dónde habíamos extraído los archivos anteriormente descargados y los agregamos como referencia.
  4. Importamos las referencias en nuestro proyecto. Con un doble click en cualquier parte vacía de nuestro formulario, justo encima de donde empieza la clase frmPrincipal teclearemos (la primera de las siguientes líneas ya deberías tenerla si seguiste la primera parte de este tutorial):

Generar el PDF

Recordemos cómo funcionaba nuestro formulario.

  1. Cargábamos el archivo Excel con el botón btnCargar.
  2. Leíamos el archivo Excel con el botón btnLeer. Con esto se rellenaba la lista de facturas.
  3. Haciendo doble click en una línea de la lista lstFacturas se generará un archivo PDF con el nombre que le indiquemos a través de un cuadro de diálogo.

El funcionamiento de los botones btnCargar y btnLeer (también btnSalir) ya lo programamos en la primera parte de este tutorial. Ahora pues corresponde codificar el evento de doble click sobre lstFacturas.

Doble click sobre un elemento de la lista lstFacturas

En nuestra ventana de código, copia las siguientes líneas (recuerda cambiar lstFacturas por el nombre que le hayas dado a tu lista):

Como vemos, el código anterior podría dividirse en 3 bloques:

  1. Líneas 02 a 30: obtenemos los datos de la factura seleccionada.
  2. Líneas 32 a 36: mostramos un mensaje con los detalles de la factura, pidiendo confirmación al usuario.
  3. A partir de la línea 37: si el usuario acepta, llamamos al método que efectivamente genera el PDF (concretamente la llamada se realiza en la línea 44).

El método generarPDF

Este método recibe como parámetros todos los detalles de la factura, como acabamos de ver en la mencionada línea 44 del código anterior. Es en este método dónde hacemos uso efectivo de las librerías iTextSharp. La idea para obtener un formato similar al de una factura, como se ve en la imagen al inicio de este post, es dividir el futuro PDF en una tabla. Trabajando con celdas resulta mucho más cómodo.

Así pues, copia el siguiente código en tu proyecto:

Aunque creo que con los comentarios incluidos en el propio código será suficiente, me gustaría destacar los siguientes puntos por ser específicos de las librerías iTextSharp:

Preparar el nuevo documento

  1. Línea 05: Declaramos un objeto tipo Document.
  2. Línea 06: Declaramos un objeto tipo PdfWriter, y le asignamos los datos del fichero PDF que deberá escribir.
  3. Línea 13: Una vez hemos preparado el nuevo documento, lo abrimos.
  4. Línea 110: Añadimos al documento todos los elementos con el método .Add(). En este ejemplo únicamente añadimos nuestra tabla (ya que ésta contiene a su vez todo lo que nos interesa).
  5. Línea 111: Cerramos el documento con el método .Close()

Imágenes

  1. Línea 04: Declaramos una variable tipo Image.
  2. Línea 10: A esta variable, mediante el método GetInstance le asignamos la ruta donde se halla la imagen en nuestro equipo.
  3. Línea 17: Definimos la celda que va a contener la imagen.

Tablas

  1. Línea 16: Definimos una nueva tabla, pasando como parámetro el número de columnas que va a contener (en nuestro caso 4).
  2. Líneas 57 a 107: A la tabla le vamos añadiendo celdas con el método .AddCell(). Este método puede recibir como parámetro un texto que se mostrará dentro de la celda, o bien un objeto Celda (pdfPCell) definido previamente.
  3. Línea 110: Recordar añadir el objeto tabla al documento.

Celdas

  1. Líneas 17 a 26: Definimos una nueva celda como “New PdfPCell()”. Como parámetros puede recibir cualquier tipo de objeto de iTextSharp (Image, Phrase, Paragraph…)
  2. Líneas 29 a 54: Asignamos los atributos de cada celda. Por ejemplo, en este ejemplo yo he definido las siguientes propiedades:
    • .Colspan: número de columnas que ocupará la celda (celdas combinadas).
    • .Padding: margen interior de la celda.
    • .Border: estilo del borde de la celda.
    • .HorizontalAlignment: tipo de alineación horizontal.
  3. Líneas 57 a 107: Como he dicho anteriormente, las celdas se añaden a la tabla mediante el método AddCell()

Al final ha resultado un post más extenso de lo que pensaba en un principio. Incluso puede que algo confuso. Por ello, pongo a tu disposición el código completo del proyecto en el siguiente repositorio de github: https://github.com/garciafigueres/xls2pdf.git

Además, aprovecho para recordarte que AQUÍ tienes una introducción muy básica del uso de repositorios git.

Como siempre, espero tus sugerencias, aportaciones, críticas…

Muchas gracias.

Visual Basic – Leer y obtener datos de Excel

Recientemente, en una entrevista de trabajo, he tenido que realizar una prueba de conocimientos que consistía en acceder desde Visual Basic 2008 a una hoja de cálculo Excel, obtener los datos que contenía y luego generar un documento que imitaba el formato de una factura en PDF con los mismos.

Más allá de lo extraño que pareciese el planteamiento (para almacenar facturas lo normal es usar bases de datos, y además la hoja de cálculo no contenía todos los datos exigibles en una factura), me pareció que constituía un buen ejercicio para estrenar el apartado de Visual Basic en el blog.

Lo he dividido en dos partes: en la primera de ellas accederemos a la hoja de cálculo. En la segunda parte, publicada el 8 de agosto de 2014, nos encargamos de generar el documento PDF.

Así pues, sin más dilación, vayamos a por la primera parte.

Leer y obtener datos de una hoja Excel desde Visual Basic

Qué necesitaremos

Para este ejercicio necesitaremos lo siguiente en nuestro ordenador:

  • Sistema operativo Windows.
  • Una versión de Visual Studio. Yo uso 2013 Premium porque es la que tengo licenciada como estudiante.
  • Microsoft Excel 2007 o superior. En nuestro proyecto vamos a tener que echar mano de la Referencia “Microsoft Excel 14.0 Object Library”, que corresponde a la versión 2010, pero si tienes la versión 2007 deberías poder usar la referencia “Microsoft Excel 12.0 Object Library” obteniendo los mismos resultados. En internet he encontrado páginas que dicen cómo contar con estas librerías sin tener Excel instalado, pero a mí no me ha funcionado, así que me curo en salud y tiro por el camino de en medio: hace falta Excel 2007 o superior.
  • Una hoja de cálculo con los datos a obtener. En mi caso la he llamado “llistat_factures.xlsx” y contiene los siguientes datos:
    Los datos en sí dan igual, pero ten en cuenta que en mi ejemplo trato con el rango de celdas A1:J6. Rangos distintos provocarán errores en la ejecución del proyecto.
  • Para la siguiente entrega: Una imagen que hará las funciones de logotipo en nuestra factura PDF. La mía se llama “logo.png” y tiene unas dimensiones de 69×90 píxeles.
  • Para la siguiente entrega: Las librerías iTextSharp, que deberás descargar desde la página oficial. Estas librerías son las que nos permitirán generar nuevos PDFs desde nuestro código.

Añadir referencias al proyecto

En Visual Studio crearemos un nuevo proyecto de Visual Basic. Yo lo he llamado “xls2pdf”. Lo primero que vamos a hacer es añadir la referencia al proyecto que nos va a permitir manipular archivos Excel 2007+. Para ello, seguimos los siguientes pasos con nuestro proyecto abierto: (repito, uso Visual Basic 2013, en otras ediciones este procedimiento puede variar ligeramente):

  1. Menú “PROYECTO” – “Propiedades de xls2pdf”.
  2. En la parte izquierda de la ventana, pinchamos la pestaña “Referencias”.
  3. En la parte inferior, pinchamos en “Agregar.”
  4. Nos aparece la ventana “Administrador de referencias”. En la izquierda de la misma desplegamos la pestaña “COM” y seleccionamos “Biblioteca tipos”. En la parte principal de la ventana buscaremos la referencia “Microsoft Excel 14.0 Object Library”. Y hacemos doble click sobre ella para añadirla al proyecto. (También podemos situar el cursos sobre el espacio vacío a la izquierda del nombre para que aparezca la casilla de selección y marcarla). Por favor, ten en cuenta, que si tienes instalada una versión de Excel distinta a la 2010 esta referencia podría tener un número de versión distinto al 14.0.

El formulario

La idea es abrir la hoja Excel, cargar los datos de las facturas que se mostrarán en una lista, y al hacer doble click en un elemento de la lista generar el PDF correspondiente. Mi formulario es el siguiente. Además incluyo un botón para salir de la aplicación, y una etiqueta en la parte inferior a modo de barra de estado.

Es bastante sencillo y se explica por sí mismo:

Los controles que vamos a usar son los siguientes, con sus correspondientes nombres:

  • Formulario: frmPrincipal
  • Botones: btnCargar, btnLeer, btnSalir
  • Etiquetas: Label1 (“Resumen facturas”) y lblEstado.
  • Lista: lstFacturas.
  • OpenFileDialog: ofd
  • SaveFileDialog>: sfd

Importar referencia y variables globales

Primero importamos la referencia al objeto Excel. Hacemos doble click en una parte vacía del formulario. Justo encima de donde empieza la clase frmPrincipal tecleamos:

Justo por debajo de donde empieza la clase frmPrincipal añadirmos las variables y los arrays globales que almacenarán los datos de cada factura:

Botón Cargar

En el formulario, hacemos doble click sobre el botón btnCargar para programar su funcionamiento. Este botón simplemente mostrará el cuadro de diálogo para abrir el archivo .xlsx que nos interese. Cuando el usuario lo haya seleccionado, al hacer click en “Aceptar”, el archivo Excel quedará abierto y dispuesto para su manipulación. El código resultante será el siguiente:

Botón btnLeer

Una vez abierto el archivo .xlsx, al pulsar este botón leeremos su contenido, generaremos una línea resumen por cada factura y la añadiremos a la lista de facturas. Como siempre, para añadir el código correspondiente haremos doble clic sobre el botón en el formulario (btnLeer):

Botón btnSalir

Cuando el usuario haga clic en este botón, se le pedirá confirmación antes de abandonar la aplicación. El código para btnSalir es el siguiente:

Y por ahora basta…

Con lo dicho hasta ahora nuestro proyecto debería ser capaz de abrir un archivo .xlsx indicado por el usuario, generar un resumen por cada una de las filas contenidas en dicho archivo, y mostrar esos resúmenes en el cuadro de lista. En la próxima entrega seguiremos programando para que al hacer doble click en cualquier elemento de la lista se genere un PDF con la factura correspondiente.

Y con esto termina la primera parte. Como digo, en la siguiente entregatratamos exclusivamente la generación de los archivos PDF con la librería iTextSharp. Por favor, si encuentras errores o una manera más sencilla o elegante de conseguir esto, no dudes en hacérmelo saber. Mi entrevistador ya me dijo que había una (tal vez por eso no me han vuelto a llamar 😉 ).Ya sabes que yo también soy novato y siempre estoy ansioso por aprender 🙂

¡Muchas gracias por leerme!

Java – Ejercicio: Calcular letra NIF

Ejercicio clásico donde las haya, muy útil para practicar cuando se dan los primeros pasos en cualquier lenguaje de programación. En este caso, como ya habrás adivinado, lo vamos a realizar usando en Java. Con él veremos cómo recibir datos desde la consola y cómo llamar a funciones. Usaremos el operador módulo (%).

El algoritmo para calcular la letra del NIF

El algoritmo usado simplemente consiste en dividir el DNI (la parte numérica) entre 23. El resto obtenido será un entero que estará asociado a la letra que queremos obtener. Para calcular el resto de la división se usa el operador módulo (%).

La relación “resto – letra” es la siguiente:

Estructura del programa

En este ejemplo vamos a seguir la siguiente estructura:

  1. Escribir un método llamado calculaLetra que recibirá como parámetro un dni de tipo entero. Este método calculará el resto de dividir dni entre 23 y devolverá la letra correspondiente.
  2. Escribir un método llamado esEnteroPositivo que recibirá como parámetro una cadena. Intentará convertirla a entero. Si lo consigue, comprobará que sea mayor que 0, en cuyo caso devolverá true. En cualquier otro caso devolverá false.
  3. En el método main pediremos al usuario que introduzca un dni (sin letra) a través de la consola. Si el dni introducido es entero y positivo, calcularemos la letra correspondiente y la mostraremos por consola. En cualquier otro caso, mostraremos un mensaje indicándolo.

Código del programa

Puedes descargar el código desde mi cuenta en GitHub. Ya sabes que espero tus comentarios 🙂