miércoles, 28 de abril de 2010

Descargando vídeos desde YouTube (forma manual)

Cualquier contenido que pueda ser visualizado en un navegador web se puede descargar a la computadora, esto incluye cualquier formato que se vea vía streaming.

Hay una gran cantidad de sitios web, plugins y programas que permiten descargar vídeos de YouTube, pero qué pasa si queremos descargar un contenido de GoEar, MySpace Music o cualquier otro sitio? Habría que buscar una solución individual para cada caso.

Por suerte los navegadores nos permiten acceder a todos los archivos que se han descargado (o que se están descargando en ese momento) y simplemente habrá que sacar una copia o cuando mucho, habrá que cambiar la extensión a flv, mp3, etc...

Para descargar un vídeo de YouTube, podemos seguir estos pasos:
(Nota, en este ejemplo utilizaremos Google Chrome)

1. Encontrar el vídeo que se desea descargar
Al tener el enlace que nos llevará a la página en donde se va a reproducir el vídeo, lo abrimos en una ventana de navegación de incógnito.

Las ventanas de navegación de incógnito siempre tienen la caché vacía, así que nos será más fácil encontrar allí la dirección de descarga directa del vídeo (o audio).

Luego de abrir esa ventana es recomendable reproducir el vídeo y esperar hasta que se haya descargado por completo.






2. Acceder a la caché del navegador y encontrar el enlace del vídeo.
Una vez el vídeo se ha reproducido por completo, abrimos una nueva pestaña en la ventana de navegación de incógnito y en el espacio de dirección escribimos:

about:cache

Como el vídeo fue lo último que el navegador descargó, generalmente lo encontraremos entre los primeros enlaces. En el caso de YouTube, las direcciones de acceso directo a los vídeos llevan la palabra videoplayback, así que para ubicar el enlace con más facilidad podemos buscar esta palabra (Ctrl + F -> buscar).






3. Descargar el fichero del vídeo
Por último debemos copiar esa dirección que acabamos de encontrar y pegarla en una nueva pestaña en la misma ventana de navegación de incógnito. Cabe aclarar que no funciona simplemente haciendo clic sobre la dirección ni tampoco utilizando guardar destino como. Se debe copiar tal cual y pegarla en una nueva pestaña. (Ctrl + C, Ctrl + T, Ctrl + V -> copiar, nueva pestaña, pegar y luego Enter.)

El archivo se descargará de forma inmediata con el nombre videoplayback. Ya que los vídeos en YouTube se almacenan en formato flv, bastará con renombrar el archivo agregando dicha extensión para que el reproductor lo reconozca.






Si no tienen ningún reproductor de FLV, les recomiendo buscar e instalar el K-Lite Codec Pack que instala un codec para flv, de modo que se pueda abrir en nuestro reproductor favorito.

viernes, 2 de abril de 2010

Comprimir archivos CSS y JavaScript con GZip (Todos los navegadores)

Las razones principales para reducir el peso de tus páginas web son evidentes:

- Cargan con mayor rapidez
- Ahorras ancho de banda

El problema es que no todos los navegadores soportan la codificación con gzip.

La solución que utilizo es subir una versión comprimida y una versión plana del mismo fichero, luego determino si el navegador soporta la codificación GZip y de esta maneja envío uno u otro archivo.

En este ejemplo cambio la extensión de los archivos comprimidos de Javascript .jsgz y la de los archivos CSS a .csgz.

1- Editando el .htaccess
Añadir las siguientes lineas al .htaccess

# Apache Content Negotiation http://bit.ly/cYepUl
Options MultiViews

# Compressed javascript and CSS files
AddEncoding x-gzip .jsgz .csgz

# Añadir los tipos (cómo se interpretará el fichero)
AddType application/x-javascript .jsgz
AddType text/css .csgz


2- Añadir la comprobación a las páginas que utilicen los archivos comprimidos (PHP)

$jsgz = substr_count($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip')?'.jsgz':'.js';
$csgz = $jgz?'.csgz':'.css';

y finalmente, al momento de incluir los archivos CSS y JS pegar la extensión con PHP

<link type="text/css" href="style<?php echo $csgz; ?>" rel="stylesheet">
<script type="text/javascript" src="script<?php echo $jsgz; ?>"></script>

De esta forma se cargarán los archivos comprimidos solamente si el cliente los soporta.


martes, 30 de marzo de 2010

Videojuegos con Irrlicht 3D y Raknet




Hace cerca de dos años presenté un proyecto en la universidad sobre desarrollo de videojuegos. Básicamente es un documento que consta de dos partes:

- Una introducción teórica a los videojuegos 3D (partiendo desde temas básicos de Álgebra lineal) y

- El desarrollo de un pequeño videojuego de primera persona (con fines únicamente demostrativos)

Parte del contenido del documento está basado en los tutoriales oficiales de Irrlicht Engine que están publicados en http://irrlicht.sourceforge.net/tutorials.html

El documento se compone de cuatro capítulos que explican de forma general y secuencial los fundamentos utilizados para crear un videojuego 3D. Se asume que el lector tiene conocimientos de álgebra y programación, específicamente del lenguaje C++. Los primeros tres capítulos aportan la base teórica y el cuarto capítulo describe el juego irrArena (La aplicación de demostración).

Contenido de los capítulos

El capítulo I presenta una introducción a las Matemáticas de los videojuegos. Se tratan temas como sistemas lineales, vectores, interpretación geométrica de las operaciones vectoriales, proyecciones y transformaciones lineales.

El capítulo II incluye documentación y ejemplos del Engine Irrlicht 3D, cubriendo temas que van desde el manejador de video, el entorno GUI, manejo de escena, carga de mapas de Quake 3, intercepción de eventos del teclado y del ratón (movimiento), colisiones, iluminación de escena, sonido 2D y 3D con irrKlang y carga de archivos XML con irrXML.

En el capítulo III se presenta una introducción a la librería de funciones de Red RakNet, la cual ha sido diseñada específicamente para videojuegos. Se incluyen algunos ejemplos de comunicación de red, tales como el envío de cadenas y una pequeña aplicación que ilustra cómo envíar estructuras de datos genéricos y cómo combinar esta librería con Irrlicht.

El capítulo IV es la parte demostrativa del texto. Se desarrolla el videojuego “irrArena”, de primera persona, multijugador, para ello se utiliza Irrlicht3D y Raknet, presentando la documentación correspondiente y el diseño del mismo.

Índice del documento

Pg. Tema
- - - - - - - - - - - - - - - - -
1 Introducción
3 Propuesta de proyecto
5 Objetivo general
5 Objetivos específicos

7 Capítulo I – Álgebra lineal
9 1.1 Antecedentes
10 1.2 Introducción
10 1.3 Vectores
17 1.4 Transformaciones lineales

25 Capítulo II – Irrlicht 3D Engine
26 2.1 Introducción
26 2.2 Características
27 2.3 Configurando el IDE (vs2005) y un ejemplo básico
33 2.4 Cargar mapas de Quake 3 y agregar una cámara FPS
37 2.5 Manejo de eventos y movimiento
42 2.6 Graphical User Inrface (GUI)
47 2.7 Detección de colisiones
53 2.8 Audio 2D y 3D con irrKlang
59 2.9 irrXML

61 Capítulo III – RakNet
63 3.1 Introducción
63 3.2 Características
64 3.3 Incluir RakNet en un proyecto
65 3.4 Comunicación básica: envío de cadenas
71 3.5 Irrlicht y RakNet, envío de estructuras

81 Capítulo IV – Aplicación: irrArena
83 4.1 Introducción
83 4.2 Características del juego
84 4.3 Instalación del juego
91 4.4 Diseño del juego

95 Conclusiones
97 Glosario
101 Bibliografía
103 Apéndice A – Licencia de Irrlicht Engine
105 Apéndice B – Contribuciones y recursos
107 Apéndice C – Contenido del CD


Actualización: El enlace roto se ha corregido. Los archivos ahora están en un hosting propio. Saludos.




Texto en formato PDF:
Videojuegos3D-Irrlicht Raknet.pdf


Recursos Necesarios para ejecutar los ejemplos del texto:
irrlicht-1.4, RakNet-3.24, irrxml-1.2, irrKlang-1.1.0

Codigo fuente de ejemplo (se hace referencia en el texto [PDF]).
sources-Cap2.zip
sources-Cap3.zip
sources-Cap4.zip




Creative Commons License
Desarrollo de Videojuegos 3D con Software Libre by Cristian dlr is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 Unported License.
Based on a work at cristiandlr.blogspot.com.

Envía SMS a Guatemala

Bienvenido a mi blog!

Al igual que en todas las materias, la creación de software comprende un área muy extensa, existen un sin fin de lenguajes, plataformas, sistemas, frameworks, protocolos, etc. sobre los cuales se puede trabajar, así que siempre hay algo nuevo que aprender.

En este espacio publicaré -con tanta frecuencia como me sea posible- pequeños artículos prácticos acerca de lo que voy aprendiendo en mi trabajo como desarrollador, esperando sean de utilidad para otros.

Cristiandlr