jueves, 10 de noviembre de 2011

Recursos Java Recomendados

Durante los últimos meses me estuve preparando para la certificación de Programador Java (Oracle Certified Professional Java Programmer). Sin lugar a dudas el libro recomendado es SCJP Sun Certified Programmer for Java 6 por Katherine Sierra y Bert Bates. Sin embargo, algunos tópicos requirieron materiales extra. Aún cuando existe una cantidad abrumadora de recursos y tutoriales acerca de Java, me gustaría compartir cuatro de los sitios que fueron de gran ayuda durante mi preparación.

1) Especificación de la API de Java

Fue de gran ayuda para estudiar métodos y parámetros, por ejemplo de las clases “Wrapper” (Integer, Double, Long, …). Además siempre que estemos desarrollando en Java debemos tener a la mano esta API.

2) Jdocs

El propósito de este sitio es presentar una versión aumentada de la tradicional API de Java. Lo que realmente me ayudó es que también permite visualizar el código fuente. Con ello entendí más detalles acerca del comportamiento de varias clases, en una ocasión lo usé para ver cómo estaban implementados los métodos equals, compareTo y hashCode de la clase Integer.

3) Vídeo Tutoriales por Clive Scott

Si son más del tipo de aprender a través de vídeo tutoriales, este sitio les fascinará. En youtube hay muchos tutoriales Java que generalmente cubren aspectos básicos o introductorios. Esta página presenta un compendio de vídeos que cubren a profundidad temas como overriding, overloading, clases anidadas, modificadores de acceso, entre otros. Si acabas de tomar alguna clase básica o intermedia de Java, estos tutoriales son de gran ayuda para repasar y profundizar varios temas. Altamente recomendable.

4) Tutoriales en mindprod.com

Este sitio contiene tutoriales que cubren tópicos con gran detalle. Por ejemplo, el tutorial acerca de la operación módulo menciona qué pasa si uno de los operandos es negativo (-10%4, 10%-4, -10%-4), presenta un par de tablas para poder comparar el módulo en java vs. el módulo de acuerdo a su definición matemática y menciona ejemplos de la utilidad de este operador. El tutorial de clases anidadas, además de conceptos básicos, tiene una tabla para mostrar los modificadores de acceso válidos para los diferentes tipos de clases y otra para mostrar las combinaciones de qué tipo de clases pueden heredar qué tipo de clases, por ejemplo una clase definida en un método sólo puede ser extendida por otra clase definida en el mismo método o una clase anónima en el mismo método. En general, un gran nivel de detalle con varios ejemplos.

5) Extra

Estos son algunos posts o tutoriales extras que también les recomiendo:

Por último, si alguien está interesado en certificarse les recomiendo los exámenes del sitio Whizlabs. Ofrece un examen de muestra. Y si deciden comprar el paquete de exámenes de práctica, les serán de gran utilidad ya que el nivel de dificultad es similar al examen de certificación. De hecho originalmente el examen tenía una duración de 3 horas, pero unos quince días antes de presentar mi examen, el tiempo límite cambió a 2.5 horas. Afortunadamente, gracias a los exámenes de práctica completé el examen de certificación en tiempo con 95% (57 de 60).

Espero que los recursos recomendados les sirvan y ayuden.

miércoles, 12 de octubre de 2011

Apuntes de la Unidad 2 de Matemáticas 5

En este apartado se encuentran los apuntes de la unidad 2 del curso de matemáticas 5 del Instituto Tecnológico de Toluca.

El examen de la segunda unidad abarca hasta donde aparece una nota dentro de los apuntes. Si existe alguna aclaración respecto a la legibilidad de éstos, no duden en comentarla.

Descargar apuntes dando click derecho y luego "Guardar como".

domingo, 2 de octubre de 2011

SQL Sakila: rentas por día

Nota: Para seguir mejor este ejemplo y ejecutar las consultas, les recomiendo seguir las instrucciones para configurar el ambiente de trabajo en la parte 1 del tutorial de SQL. Además, en el siguiente enlace pueden ver el modelo de Sakila versión 0.8.

En este ejemplo continuaremos usando la base de datos Sakila. El objetivo es obtener el promedio de rentas por día de la semana. Esto puede ser útil para lanzar una promoción en el día con menos rentas (por ejemplo: martes de 2x1).

Usaremos la tabla rental que tiene un registro por cada renta realizada. El campo que nos interesa es rental_date que es de tipo fecha (datetime). Primero, tenemos que obtener el día de la semana para esa fecha, es decir, a partir de “3 de Julio de 2011” debemos obtener “Domingo”. La función WEEKDAY es justo lo que necesitamos, retorna 0 para lunes, 1 para martes, ... 6 para domingo. La siguiente consulta retorna el día de la semana cuando se realizó la renta.

SELECT WEEKDAY(rental_date) AS wday FROM rental;

Ahora, todo lo que tenemos que hacer es agrupar y contar las ocurrencias para cada día de la semana.

mysql> select weekday(rental_date) as wday, count(*)
    -> from rental
    -> group by weekday(rental_date);

Noten que en la cláusula group by podemos usar el resultado de una función, en este caso weekday. La siguiente imagen muestra el resultado.

Podemos observar, que jueves es cuando se han realizado menos rentas en total con 2200. Noten que obtuvimos el total de rentas, pero ¿cómo podemos obtener el promedio por día? En otras palabras, hasta el momento sabemos que de todos los jueves en la tabla hay un total de 2200 rentas, pero no sabemos cuántas películas se rentan por jueves (por ejemplo, en un jueves se rentan normalmente 70 películas).

Recordemos que la tabla rental tiene una renta por registro. Lo primero que tenemos que hacer es agrupar las retas por día, es decir, una consulta que nos permita obtener: el 17 de Julio se realizaron 45 rentas. Sin embargo, un simple group by rental_date no funciona ya que rental_date contiene fecha y hora (dos rentas en el mismo día pero a diferente hora no serían agrupadas en el mismo día). Para ello utilizaremos la función DATE() que nos permite extraer sólo la fecha. La siguiente consulta agrupa por fecha.

mysql> select date(rental_date) as solo_fecha, count(*) as rentas 
    -> from rental 
    -> group by solo_fecha;

Ahora podemos agrupar por día de la semana y obtener un promedio. Además del promedio, también desplegamos el número de días y el total (es decir, el promedio por día x número de días, éste debe ser igual al total que obtuvimos en la primer consulta).

mysql> select weekday(solo_fecha) as wday, 
    ->        avg(rentas), count(*) as ndias, 
    ->        avg(rentas) * count(*) as total 
    -> from ( 
    -> select date(rental_date) as solo_fecha, count(*) as rentas 
    -> from rental 
    -> group by solo_fecha 
    -> ) agrupado_por_dia 
    -> group by wday;

La siguiente imagen muestra el resultado de la consulta.

En la primer consulta obtuvimos que el día con menos rentas en total era jueves; sin embargo, con esta consulta vemos que en promedio se rentan menos películas los martes. Esto se debe a que en la base de datos hay más días martes en comparación con el resto de los días.

Como pueden ver es posible manipular los datos de la base de diferentes formas para tener varias perspectivas de la misma información. Además existen muchas funciones predeterminadas que nos ayudan a transformar los datos, en este post vimos 2 funciones para la manipulación de fechas (DATE y WEEKDAY).

Compartan sus consultas favoritas de la BD Sakila o describan alguna consulta que les gustaría que explicáramos en un post.

sábado, 24 de septiembre de 2011

Ejercicios de Matemáticas V (Parte 2)

En este post podrán descargar la segunda parte de los ejercicios de Matemáticas 5 del Instituto Tecnológico de Toluca, semestre Agosto-Diciembre de 2011.

Estos ejercicios son los 4 problemas de aplicación que la profesora dictó el viernes pasado. Simplemente da click sobre el enlace que se presenta a continuación.

Descargar Ejercicios: problemas de aplicación

domingo, 18 de septiembre de 2011

Videos y tutoriales para comenzar a programar el PIC 16F628A

A continuación se encuentra una serie de videos que encontré y que pueden ser muy útiles en la programación del PIC 16F628A, que es el que actualmente utilizamos en el curso de Arquitectura de Computadoras. Quizá alguno de ellos parezca demasiado sencillo e introductorio para quienes ya cuentan con un poco de experiencia, pero para los que aún somos neófitos en este tema, pueden ser de gran ayuda.

Estos son también tutoriales acerca de cómo utilizar MPLAB, la herramienta que manejaremos a la hora de programar el PIC. Por supuesto existen muchos más videos, así que si tienen alguna sugerencia será bienvenida.

Ejercicios Matemáticas V (Parte 1)

En el siguiente enlace pueden descargar la primera parte de los ejercicios de Matemáticas V (Ecuaciones Diferenciales). De acuerdo con la profesora, solamente faltan 2 temas por anexar pero podemos ir resolviendo los que se encuentran en esta primera parte.

Descargar ejercicios

domingo, 11 de septiembre de 2011

Diagrama Sakila DB

En septiembre del año pasado inicié una serie de SQL y posteriormente publiqué un par de posts describiendo cómo formular ciertas consultas (trivia sql y filtrar por columnas resultado de agrupado)

En el primer post de la serie de SQL, también proporcioné un enlace a un diagrama de la base de datos para tener mayor referencia al crear las consultas. Sin embargo, mientras preparaba un nuevo post, noté algo raro en el diagrama.

El archivo zip de sakila contiene tres archivos: uno con comandos para crear la base de datos, otro para poblarla y el último es un archivo del modelo de base de datos que se puede abrir con MySQL Workbench.

Hasta el momento no había usado el modelo de Workbench, pero al ver que las relaciones del diagrama parecían invertidas, decidí instalar MySQL Workbench y abrir el modelo. Esto me permitió corroborar que las relaciones del diagrama que se encuentra en la página principal de Sakila están invertidas.

Observen las siguientes dos imágenes. La primera es el diagrama en la página principal de Sakila: los símbolos de 'muchos' no están del lado de film_actor. La segunda es una imagen del modelo de Workbench: los símbolos de 'muchos' sí están del lado de film_actor.

Diagrama Página Sakila

Diagrama Workbench

Así que recomendaría mejor usar el modelo de Workbench (también subí la siguiente imagen del modelo de Sakila versión 0.8).

Ahora sí podemos hablar de la siguiente consulta en el próximo post.