05 octubre 2017

Aplicación Android que muestra dónde estoy

Ya tengo un rato jugando con AppInventor al enseñar programación y la verdad se me hace una herramienta excelente ya que es sencillo de programar y generas una app para Android,

Aquí les comparto un ejemplo que hice para mis alumnos.  No es un ejemplo de principiantes, pero tampoco es complicado.  Esta aplicación se encarga de mostrar un mapa del lugar donde está el usuario usando su localización del GPS y haciendo interfaz con el API de Google Static Maps.

En este primer video se crea la interfaz de la app:


En el segundo, explico como funciona la localización del celular y una explicación muy breve sobre GPS:



En el último video integro lo que aprendí sobre el API de Google Static Maps y el sensor de localización para terminar la app:



Espero que hayan encontrado esta aplicación de utilidad.  Si quieren bajar el archivo AIA (para ver los bloques en AppInventor) para revisarlo lo pueden descargar aquí.  ¡Se divierten!


22 septiembre 2017

Características del lenguaje C

Es muy común que mis alumnos me preguntan si el lenguaje C todavía sirve o es usado para algo.  No solo porque es el "padre" de casi todos los lenguajes de programación modernos, sigue siendo de muchísima utilidad.

Hoy encontré éste artículo de makeuseof que detalla las características del lenguaje C, incluyendo una breve historia (más breve que la que escribí aquí) y algunas de las características que la hacen un lenguaje sumamente útil.

Aquí les dejo la liga: http://www.makeuseof.com/tag/characteristics-of-c-programming/

P.D. La imagen del lenguaje C usando en este post es cortesía de la página C Online Test.

17 noviembre 2016

Poster retro de GameBoy

Éste es un tutorial sencillo e interesante para crear un póster, estilo "retro", de un Game Boy en Photoshop.  Lo encontré en el sitio de Tutorial9, un buen sitio para encontrar tutoriales de Photoshop.

Solo para asegurar si en el futuro ya no existe esta página, aquí les dejo una liga para descargar un PDF con las instrucciones y los archivos fuentes.  ¡Saludos!

10 noviembre 2016

Nike de Fuego


Hace tiempo me topé con este tutorial en el sitio de Abduzeedo (que tiene tutoriales excelentes para aprender y mejorar tus habilidades en Photoshop) que hace un anuncio de Nike de una forma interesante y se los quiero compartir.  En caso que la liga ya no funcione en el futuro, aquí pueden descargar los archivos: un PDF con las instrucciones y los archivos que usa en el tutorial.

Si te gustan los efectos de fuego, no dejes de ver el tutorial de una mujer caliente en Photoshop.

Nota: no recibo regalías de Nike por el tutorial, jejeje.

¡Saludos!

07 noviembre 2016

Ángeles divinos

Hace tiempo vi un tutorial muy interesante que trata de combinar imágenes para dar lugar a un ángel en medio del bosque.

Esta es la liga de Tutorial9, donde está el tutorial.  Como no se sabe en el futuro si siga existiendo la página (cosa que me ha sucedido con otros tutoriales,  como el que compartí hace unos días), también les dejo un archivo ZIP con todos los archivos necesarios, incluyendo un PDF con las instrucciones.

Espero que lo disfruten.

04 noviembre 2016

Escenas del espacio

Hace mucho tiempo, vi un tutorial en Cute Little Factory acerca de cómo crear una escena en el espacio.  Lo bueno es que lo imprimí en un archivo PDF porque ya no existe en ese sitio.

Creo que es un buen tutorial para personas que se están adentrando a Photoshop.  Aquí les dejo el PDF con las instrucciones y la imagen del mundo que se usa.

Espero que les sea útil.  ¡Saludos!

21 junio 2016

Curso de programación en C

En este blog hay muchas entradas sobre lenguaje C, pero están de forma dispersa, sin orden.  Mi blog fue pensado en aportar material para mis alumnos, pero son apoyo de cursos que doy de forma presencial y solo les aporto las ligas hacia el material adicional en este blog.

A petición de un muy querido exalumno, pongo este temario de C con recursos (tanto propios como de terceros) que explican cada tema.  Espero que esto sirva como un curso en línea o para despejar dudas en diversos temas.

Intoducción al curso
Espero que con estas referencias puedan aprender un poco más de C.  Me parece un curso completo, que comienza por lo básico y va avanzando hasta llegar a tener un buen dominio del lenguaje.  Si tienes ligas o material de otros sitios que crees que sería útil incluirlo aquí, déjeme un mensaje.

Nota: la imagen de C que usé en este post lo tomé del blog de Aficiones LAMS

10 junio 2016

Clases y objetos en Java

Hace mucho tiempo escribí sobre diferentes paradigmas de programación e hice una introducción a la programación orientada a objetos en C++.  Ahora vuelvo a tomar la idea para enfocarlo a la programación en Java y, para que sea más fácil de entender, preferí hacerlo en una serie de videos, mismas que presento aquí en orden.

El primer video habla sobre lo que es la programación orientada a objetos en general.  Da bases para hablar de conceptos posteriores. 



El segundo video habla sobre lo que son las clases y objetos y da un ejemplo cómo usarlos en Java.


Y en éste tercer (y último) video, se ejemplifica lo descrito en Java.


El código fuente los puedes encontrar aquí:


Nota: la imagen de Duke (mascota de Java) lo tomé de la página de jaxenter.

18 abril 2016

Tutorial SQL

Les comparto la liga a esta página que tiene unos tutoriales excelentes de SQL de la página de W3Schools.  Están interesantes porque te permite probar tus sentencias en línea.

La liga a los tutoriales es este: http://www.w3schools.com/sql/default.asp

¡Espero que les sirva!

25 enero 2016

Visual Basic: cientos de ejemplos resueltos

Muchas veces aprendemos por medio de ejemplos, de ejercicios resueltos que resuelven problemas similares a los que me enfrento.  Como maestro es complicado estar inventando ejemplo una y otra vez, y para los que desean afinar sus habilidades para programar, y especialmente para los que quieren aprender a programar, es un paraíso encontrarse con muchos ejemplos resueltos.

El otro día, al vagar por Internet buscando ejemplos para mis alumnos, me topé con este archivo en el sitio de Software.informer.  Lo subo aquí porque no sé si después siga existiendo esa página.  Son 101 ejemplos creados en Visual Basic 2005 hechos por Microsoft.

Es un archivo ejecutable que descomprime en una carpeta (por default, en la carpeta Documentos\MSDN\VB101SamplesAll) muchas carpetas con soluciones que van desde conectarse por FTP, escuchar por HTTP, trabajando con hilos (multiprocesamiento), programando el puerto serial, encriptar y desencriptar datos, accesar bases de datos de diversas formas, hacer proyectos para la web y muchos más.

Aquí les dejo el enlace para que lo descarguen.  La imagen la tomé de la página de Forbes, quienes a su vez le dan crédito a Wikipedia.

¡Espero que les sea útil!

15 octubre 2015

¡Auxilio! Mi hijo es un adicto a los videojuegos

¿Alguna vez has pensado que puedes sacarle más provecho a tus videojuegos que solo gozar de un rato de entretenimiento pasajero?  ¿Qué opinas sobre los mitos que presentan sobre estos juegos?  ¿Sabías que un buen videojuego tiene importantes beneficios psicológicos que te pueden ayudar en tu vida personal y profesional?

No hay suficiente análisis sobre estas formas de entretenimiento y es casi inexistente una voz informada sobre los beneficios de estos juegos y consejos acerca de como sacarles más provecho.  Por eso escribí este libro, ¡Auxilio! Mi hijo es un adicto a los videojuegos, que está orientado hacia padres de familia para que comprendan mejor el fenómeno de los videojuegos y puedan orientar mejor a sus hijos gamers.  Y seguramente los videojugadores de hueso colorado también encontrarán algunas claves que les pueden ser de utilidad.

Fue publicada en agosto de este año y hasta ahora ha tenido muy buena aceptación por los lectores.  Si te interesa conseguir uno, te invito a que te comuniques con nosotros en nuestra página de Facebook en Crea.

01 octubre 2015

Primer Torneo LOL Prepa Univa



Sí, por fin el momento ha llegado.  ¡Arrancamos el primer torneo de League of Legends en la Preparatoria Univa, cortesía de mis alumnos de 5 TPO.

Aquí les dejo las bases y la información de contacto.  ¡Se reciben inscripciones hasta el día 14/Octubre/2015!

El torneo es de equipos de 5 vs 5 y se va a armar el torneo con 8, 16 o 32 equipos inscritos.  Lo que se necesita de cada equipo es lo siguiente:
  • Nombre de Equipo
  • Nombre de invocador de cada integrante
  • División de cada integrante
  • Nombre de líder del equipo y teléfono
  • $100 de inscripción por equipo
Las reglas son las siguientes:
  • Están permitidas 3 pausas por equipo.
  • Solo tienen 15 minutos de tiempo de pausa por equipo.
  • El equipo tiene un límite de 20min después de la hora acordada para llegar a la partida, de ser así se le dará el gane automático al rival contrario, en caso de ser un mejor de 3 se le dará el gane para la primera partida y se les darán otros 10 min para llegar a la partida siguiente, de ser así si el equipo no llega se le dará el set al equipo contrario, en caso de un mejor de 5 se darán otros 10 min para llegar, si el equipo no llega se le dará el set al equipo contrario.
  • El lado del mapa se decidirá por un volado, el equipo ganador del volado elegirá el lado del mapa, en un mejor de 3 o un mejor de 5 se cambiaran los lados del mapa en el segundo, tercero, cuarto o quinto juego de ser necesario.
  • Sera en modo torneo con 3 bans, NO se permitirá usar a un campeón nuevo con menos de 3 semanas de su lanzamiento en la fase de grupos, en la fase de eliminación directa sí.
  • A un jugador se le permitirá una falta de atención, por flamear a sus rivales.
  • Si un jugador tiene 2 faltas de atención acabando la partida se notificara al jugador y al equipo, y el jugador con las faltas de atención no se le permitirá jugar en la siguiente partida, en caso de ser así se puede conseguir un suplente1.
  • Todo jugador tiene que tener minino 16 campeones.
  • La primera etapa del juego será en fase de grupos y se van a drafteara a los equipos dependiendo de la liga que tenga cada uno de sus jugadores en el equipo.
  • En caso de que el suplente y el titular no estén se puede jugar 4v5 si así lo desea el equipo
  • La partida la creara un moderador para poder espectar la partida
Draft
  • Se sumara la liga de los integrantes del equipo con las siguientes puntuaciones: bronce/unranked – 0, plata -1, oro -2, platino-3, diamante-4, liga maestra-5, challenger-6.
  • De ahí se tomaran los 2, 4 o 8 equipos con mayor puntuación y se les pondrá en el pool 1, después se tomaran los 2, 4 o 8 equipos con menor puntuación y se pondrán en el pool 3, el resto de los equipos estarán en el pool 2.
  • De ahí se pondrán los nombres de los equipos de cada pool en bolsas diferentes y se sacaran un papel para cada grupo. *Del pool 1 y el pool 3 no puede haber equipos del mismo pool en el mismo grupo.
  • Después de eso cada equipo de cada grupo jugara contra todos los demás equipos de su grupo 1 vez, de ahí se verán cuáles son los mejores 2 de cada grupo dependiendo de su número de victorias. A la fase de eliminación
Fase de eliminación:
  • Se pasa a la fase de eliminación hasta donde se jugaran al mejor de 3 en octavos y en cuartos de final, en las semifinales y finales se jugaran un mejor de 5.
El premio se dividirá con un 65% del dinero al ganador, al segundo lugar 15% y un 10% para el tercero. Se va a cobrar una comisión del 10% para los moderadores, organizadores, etc.

Dudas con Marco Antonio Rivera Neri en el salón 1114.

Para inscribirse vengan al 1114 durante los recesos con su dinero y el nombre del equipo, después manden un correo a torneosloluniva@gmail.com con toda la información requerida.

20 mayo 2015

Leyendo archivos en Java

Algo que es muy importante para cualquier programa o aplicación, es poder leer y escribir a archivos.  De otra manera, nuestra información se pierde al apagar la computadora.

En Java se puede leer de y escribir a archivos de diferentes maneras.  En el video que presento, usé streams (concretamente un FileInputStream) para leer los datos de un archivo MP3 y obtener la información sobre la canción, si es que se almacenó.

Aquí les presento el video y abajo hay una liga para descargar el código fuente.


El código fuente se puede descargar aquí.

La imagen de Duke (la mascota de Java) tocando la guitarra lo tomé del blog de La Playina del Norte y la idea de este proyecto surgió del siguiente libro:


01 abril 2015

Imágenes y sonidos en Java

Con este último post del proyecto de autos de carreras (si no has visto la serie completo, aquí está la parte donde se dibuja la pista, luego donde se mueven los carros usando Threads y donde se revisan colisiones y se escucha al teclado para mover los carros).  Ahora se va a mostrar la manera en que los carros parezcan carros (vamos a dibujar un bitmap en lugar de dibujar un rectángulo como en las parts anteriores) y poner un poco de sonido de fondo.

Dibujando imágenes
Antes que nada, hay que tener la imagen que deseas poner en la ventana (o JFrame como dijimos antes).  Lo puedes dibujar en Paint, Photoshop o bajar de internet.  En mi caso bajé esta imagen de dos carros que luego giré en las 4 direcciones (arriba, abajo, izquierda y derecha) para tener el total de 8 imágenes:

    

Luego estas imágenes se tienen que copiar a la carpeta donde está tu proyecto, dentro de la carpeta /build/classes donde  es el nombre que le asignaste al proyecto hecho en NetBeans.

Ahora para dibujar una de estas imágenes en la ventana, el código necesario antes de dibujar la imagen (en el constructor, por ejemplo) es algo como este:

Image img = null;
try {
    URL url1 = this.getClass().getResource("nombre del recurso");
    img = Toolkit.getDefaultToolkit().getImage(url1);
}
catch (Exception e) { }

Luego para dibujar la imagen, usa este código (que debe reemplazar el dibujo de los 2 rectángulos con los que estábamos representando a los carritos hasta ahora):

g.drawImage(img,x,y,this);

Obviamente, x y y son las coordenadas de la esquina superior derecha de la imagen (en nuestro caso, son las del Rectangle p1 y p2) y this hace referencia a la ventana actual (el JFrame donde está todo).

Para que todo esto funcione, se tiene que incluir al principio de la clase este import (para la clase URL):

import java.net.*;

¡Y listo!  Con eso debería quedar.  En el video mostraré el código que usé en este proyecto, mismo que puedes descargar aquí.

Audio en Java
Es muy sencillo poner audio en formato WAV (el método aquí descrito no funciona para MP3).  Al igual que con las imágenes de mapa de bits, hay que copiar el o los archivos a la carpeta donde está el proyecto.

Después de esto, deberá ingresar un código como este:

URL url1 = this.getClass().getResource("archivo.wav");
AudioClip sonido = JApplet.newAudioClip(url1);
sonido.loop();

Como se podrá suponer el lector archivo.wav es el nombre del archivo que se copió a la carpeta del proyecto.  Las instrucción sonido.loop() hace que el sonido suene y cuando termine vuelva a sonar y así repetir indefinidamente hasta que se termina el programa.  Si desea que solo suene una vez, en lugar de eso escriba sonido.play().

No olvides de importar la librería con import java.applet.AudioClip.

Explicación en video
Aquí les dejo el video donde comento los cambios realizados al proyecto.  El código fuente del proyecto final se puede descargar aquí.


¿Y qué sigue?
Hay mil cosas que se podrían hacer para que este proyecto quedara mejor.  Se puede crear una imagen que diga las instrucciones al entrar al juego, se pueden contar el número de vueltas que da cada jugador (revisando si el rectángulo del carro hace colisión con el rectángulo de la meta y que va en dirección UP) y que gane el primer jugador en completar 3 vueltas.  Pero eso ya lo dejo para que sea implementado por el lector.

Agradecimientos
La pintura hecha en una oficina de Duke (la mascota de Java) con un rubí, lo tomé del blog de JRuby.  Y como ha sucedido con los posts del proyecto de la carrera de carros, las ideas principales salieron de este libro:



¡Hasta la próxima!

26 marzo 2015

Detección de colisiones y escuchando al teclado

Hemos estado trabajando con un proyecto en Java que dibuja una pista de carreras (no muy estético, pero funcional) y luego usamos threads para mover 2 carros.  Hasta allí todo bien, pero no muy divertido que digamos.  Por eso, en este post, vamos a hacer dos cosas: detectar colisiones (para que los "carros" no puedan pasar por los obstáculos ni por encima del otro carro) y escuchar eventos del teclado para poder controlar los carros.  En pocas palabras, nuestro juego por fin va a ser funcional.

Pero como dijo Jack el destripador, vámonos por partes: primero vamos a ver que onda con la detección de colisiones y luego veremos que onda con  el teclado.  Así que sin más preámbulos, arrancamos...

Colisiones
Hacer la detección de colisiones (en otras palabras, ver si un objeto "choca" con otro) es bastante sencillo en Java cuando se usan objetos de la clase Rectangle (por eso los usamos desde el primer momento: era más sencillo dibujar sin ellos, pero nos sirven en este momento) porque tiene un método que revisa si hay colisión. Este método se llama intersects.

Digamos que quiero saber si el Rectangle r1 se intersecta (o colisiona) con un Rectangle r2, puedo usar el siguiente código:

if (r1.intersects(r2)) {
    // Código que se ejecuta si hay colisión
}

Y como podrán imaginar, para revisar múltiples colisiones, puedo usar el operador booleano AND (representado como &&) para ver si dos condiciones se cumplen o el operados OR (representado como ||) para ver si uno de los dos condiciones son verdaderos.

Por ejemplo, si quiero ver si el rectángulo r1 chocó con el rectángulo r2 o el r3, usaría este código:

if (r1.intersects(r2) || r1.intersects(r3)) {
    // Código que se ejecuta si choca con r2 o con r3
}

Esta imagen muestra si hay colisiones entre rectángulos (en otras palabras, si se intersectan):


Escuchando el teclado (KeyListener)
Ya en un post anterior hablé sobre "escuchar" eventos en Java (incluyendo el teclado), pero aquí me concentraré solo en el teclado para completar este proyecto.  Si desea profundizar, sugiero que vea el post Interfaces gráficas 4: Escuchando eventos.

El KeyListener permite recibir lo que ha escrito el usuario en el teclado.  Para usarlo, es necesario agregar, al final de la línea de "public class ..." lo siguiente (esto también aplica para clases internas como las que hicimos en los threads del post anterior):

implements KeyListener

Después de esto, en el constructor (o el método run si estás en un thread), hay que agregar el siguiente código para "despertar" al KeyListener y ponerlo a trabajar:

addKeyListener(this);

Recuerda que el this asocia los eventos que "escucha" del teclado a esta clase.

Después de esto, hay que agregar 3 métodos a la clase

public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) { }

Estas funciones, al igual que el paint del que hablamos en el primer post de esta serie, son ejecutadas de forma automática: el keyPressed se llama cuando se presiona una tecla, el keyReleased se ejecuta cuando el usuario quita el dedo de la tecla y ésta se levanta y el keyTyped ocurre cuando el usuario presiona y suelta la tecla.  El mas usado de los tres es el keyTyped, que es precisamente el único que vamos a codificar en este ejemplo.

Finalmente, para saber qué tecla presionó el usuario, uso el código:

e.getKeyChar()

(Si te fijas, e es el parámetro que viene en los métodos y es objeto de la clase KeyEvent que tiene información sobre lo que se ha tecleado).

Integrando este rollo con el proyecto
Como explico con más detalle en el video, voy a crear variables para indicar la dirección del carrito: si vale 0 el carrito viaja hacia arriba, 1 a la izquierda, etc.  Para hacerlo más fácil, los voy a hacer constantes porque no quiero que se modifiquen en el código (usando la palabra final al declararlos).

Después de esto, voy a usar el KeyListener para cambiar la dirección del carrito del jugador.  También vamos a hacer que el rumbo del carrito cambie al alterar la coordenada x si se mueve hacia la izquierda o derecha y la coordenada y si va hacia arriba o abajo.

Finalmente hay que revisar si el usuario no chocó con un obstáculo o con el otro jugador.  Si sucede, vamos a poner la velocidad del jugador en un valor negativo para que el carro retroceda hasta "agarrar vuelo".

Aquí les dejo el video donde lo explico y el código fuente completo (bueno, completo hasta este momento) lo pueden descargar aquí.


Agradecimientos
La imagen de Duke evitando colisiones en patineta lo tomé del blog de CPU y la de los rectángulos que se intersectan son de una página de Tufts University.  Y como ha sucedido con los 2 posts anteriores, la idea vino de este libro:



¡Hasta la próxima!
Related Posts Plugin for WordPress, Blogger...