Académique Documents
Professionnel Documents
Culture Documents
Por
@pixelscode.com
@
Herramientas
para el diseador
Connecting
to server
Por Dbora Oru
uy complacidos con el
recibimiento del primer nmero de Pixels&Code, aqu
estamos retomando nuestro contacto mensual con todos ustedes.
Escuchamos atentamente todas las
sugerencias que nos fueron acercando referentes a las temticas
que quieren ver desarrolladas en
esta publicacin. En la tapa de este
nmero vern la respuesta al tema
ms solicitado: social media.
JEFA
DE REDACCIN
Dbora Oru
COLUMNISTAS
Adrin Ortiz
Cristian Hernn Gaitano Ornia
Gabriel Walter Gaitano Ornia
Juan Gutmann
Roxana Miguel
Natalia Cantero
COMERCIALIZACIN
DATOS DE CONTACTO
Direccin Comercial:
publicidad@pixelscode.com
Las opiniones expresadas en los artculos son exclusiva responsabilidad de sus autores y no coinciden necesariamente
con la opinin de Dattatec.com SRL.
NOTA CENTRAL
26 // EL NUEVO REY:
CONOCIENDO HTML5
6 // PROGRAMACIN
Consejos para agilizar la carga
de una pgina web
12 // BASES DE DATOS
Introduccin a las bases de
datos relacionales (V)
20 // DISPOSITIVOS MVILES
Programacin mobile web para
Windows Phone 7
30 // JUEGOS
Programacin de video juegos
con Microsoft XNA Game
Studio
36 // ALGORITMOS
Algoritmos: selection sort
36 // NOVEDADES
y un da los desarrolladores
jugaron con Kinect
Herramientas
para
el diseado
Programaci
nr
Los sites compiten entre s en el globo de Internet con su formato y diseo. Ms all del contenido y hacia dnde estn dirigidos, algunos pecan de tener demasiados artilugios que aunque
atractivos terminan por alejar a los usuarios. Aqu recorreremos un completo listado de tips
para mejorar tus propuestas y no caer recurrentemente en los pintorescos errores.
() hay que
poner en duda
si lo que acabamos de crear
no cuenta con muchas
pompas que no se podrn apreciar en todas las
computadoras de la misma
forma.
>PROGRAMACIN-
Mide tu paciencia
Genera vnculos
>PROGRAMACIN-
Recuerda que
el sitio que
imaginas y ests por crear
debe alojarse en un servidor compatible con las funcionalidades que elegirs
para que una falla tcnica
no sea la razn por la que
tu pgina demore ms de
30 segundos en cargar.
},
Este es un caso de Java Script comprimido que lograr mejores resultados de rapidez:
(function() {var 1=this,
g,y=1.jQuery,p=1.&,o=1.
jQuery=1.$function(E,F) {return
prototype= {init:function(E,H)
{E=E document;if(E.nodeType)
{this[0] =E;this.leng(G[1]) {E=o.
clean([G[1]] ,H) }else{var I=document.
getElemtById(G[3] ) ;if(I&&I.
idreturn o(H).find(E) }}else{if(o.
isFunction(E) ) {return o(document)
. ready(E) }}if(o.isArray(E) E:omakeArray(E) ) }, selector: ,
jquery:1.3.2, size:function(){ret
pushStack:function(F,H,E) {var
G=o(F) ;G.prevObjetct=this,G.
context=this.
context;selector+.+H+ (+E)}}
return G},setArray:function(E) {this.
length=0;Array-p function(E) {return o.inArray(E&&E.jquery?E[0]
: E, this) },attr:function(F,H,G)
{va F] =H}}return this.attr(E,F,
curCSS)}, text:function(F)
{if(typeof F! ==object&&F!=))}
var E= ;o.each(F this,function ()
{o.each(this.childNodes,function()
{if(thisfunction(E) {if(this[0]. ownerDocument).clone() ;if(this[0].pa
firstChild}return G}) . append(this) }
return this}, wrapInner:function(E)
{return t
Archivos CSS
Body {
front-size: 11px;
front-family: Arial, Helvetica,
sans-serif;
color: #000000;
}
#header {
Margin-top: 10px;
Margin-right: 5px;
Margin-bottom: 10px;
Margin-left: 5px;
}
na demore ms de 30 segundos en
cargar.
Cuando el cliente ya posee un proveedor debes corroborar que, por
barato, no tengas que pagar caras
las maniobras de un sitio rpido.
Comnmente las compaas de
bajo costo tienen tambin equipos
de bajo costo, por lo que habra que
pensar en un cambio estratgico
que permita el flujo de visitantes.
De la misma manera corrobora que
el ancho de banda que utiliza tu
proveedor est a la altura del sitio
que ests desarrollando. El hoster
que elijas debe contar con infraestructura comprobable, como se ve
en http://conocedattatec.com.
***
Herramientas
para
el diseado
Bases
de datosr
Introduccin
a las bases de datos
relacionales (V)
Por Juan Gutmann
juan.gutmann@pixelscode.com
BREVE HISTORIA
DE PL/PGSQL
>BASES DE DATOS-
PGADMIN III
Para quienes no se sientan cmodos trabajando desde la
consola en modo texto, las distribuciones habituales de PostGreSQL incluyen un cliente de escritorio, llamado PGAdmin. La
ltima versin de PGAdmin 3 es la 1.12, y podemos encontrar
su ejecutable en el directorio X:\psql\bin. Bajo Windows su
nombre es pgAdmin3.exe. Esta aplicacin nos permitir trabajar en forma amigable y sencilla con PostGres, habilitando
tanto la administracin de cualquier objeto de la base de datos
(tablas, vistas, funciones, etc.) como la ejecucin de sentencias
SQL, ya sean del conjunto DDL (definicin del modelo de datos),
DML (generacin o modificacin de la informacin almacenada)
o DQL (consulta). Su uso es muy intuitivo, afortunadamente, ya
que en la ltima versin la ayuda sufre de algn problema y
no est disponible, ya sea la que se instala con el cliente como
la que podemos encontrar en Internet, en el sitio de PGAdmin:
[http://www.pgadmin.org]. Aunque desde aqu nuestra recomendacin personal es trabajar con el cliente de consola, es
indiscutible que a la hora de crear y modificar procedimientos
almacenados, PGAdmin facilita mucho las cosas.
los dos lenguajes pueda ser migrado al otro casi sin esfuerzo.
QU ES UN
PROCEDIMIENTO
ALMACENADO?
PROCEDIMIENTOS
EN POSTGRES
EJEMPLO DE CDIGO
ALMACENADO
>BASES DE DATOS-
Las funciones
de PostGres
pueden escribirse en varios
lenguajes. SQL puro y PL/
PGSQL son las dos opciones ms comunes, y las
nicas que normalmente
vienen preinstaladas de
fbrica, pero tambin existen implementaciones de
la mayora de los lenguajes
de scripting ms populares,
que dejan a los programadores con experiencia
en lenguajes como PHP,
Python o Ruby desarrollar
procedimientos almacenados en estas tecnologas.
FUNCIN F_SALARIO_
ACTUAL
>BASES DE DATOS-
f_salario_actual(an_legajo
salario.legajo%TYPE)
RETURNS salario.
salario%TYPE AS $$
DECLARE
v_salario
salario.
salario%TYPE;
BEGIN
SELECT salario
INTO v_salario
FROM salario
WHERE legajo = an_legajo
AND periodo_desde =
(SELECT MAX(periodo_desde)
FROM salario
WHERE legajo = an_legajo
AND periodo_desde <=
NOW());
IF NOT FOUND THEN
RETURN 0;
END IF;
RETURN v_salario;
END;
$$ LANGUAGE plpgsql;
Ntese que podemos dividir a
la funcin almacenada en tres
bloques. Un primer bloque, que
podemos llamar nominativo,
establece el nombre de la funcin, el
tipo y nombre de sus argumentos,
y el tipo de valor que devolver. En
este caso, en lugar de indicar explcitamente un tipo de datos, como
NUMERIC o VARCHAR, hemos
optado por indicarle a la base que
debe heredar los tipos de datos y
las precisiones del atributo que se le
indica a travs de la palabra reservada %TYPE. De esta manera,
Cuando en
una consulta
tenemos dos o ms tablas,
habitualmente se las relaciona a travs de un JOIN.
Esta operacin permite
combinar datos de las tablas involucradas, a travs
de las relaciones entre ellas
previamente establecidas.
PROBANDO LA FUNCIN
lario_actual
--------+---------+------------------+----------------
1 | GTEGRAL | DIAZ
FRANCISCO
|
8500.60
(1 fila)
------------+----------------
2 | SUPERV | PEREZ
JOSE
|
0
Dijimos antes que las variables no
inicializadas explcitamente por
defecto adoptan el valor nulo. Por
qu no obtenemos entonces el
valor nulo como valor retornado,
si el query dentro de la funcin no
encontr ningn registro correspondiente al legajo 2 en la tabla salario?
La respuesta est en el uso de la
variable interna FOUND. Como
queremos evitar que se devuelva
nulo si no se ha cargado el salario
de un empleado, consultamos con
un IF el valor de esta variable,
que se carga con cada ejecucin de
un SELECT INTO con TRUE si se
encontr un registro, o con FALSE
en el caso contrario.
Herramientas
para
el diseado
r
Aplicaciones
mviles
Programacin
mobile web
para Windows
Phone 7
La edicin pasada realizamos una introduccin sobre la plataforma de programacin .NET
para Windows Phone 7. Repasamos sus caractersticas principales, similitudes y diferencias en
el IDE de desarrollo y conocimos el lenguaje elegido para los desarrollos mviles, Visual C#.
En este nmero veremos la manera de integrar dentro de una aplicacin Windows Phone, un
desarrollo web, y tratar al mismo tal como si fuese una aplicacin local ms del telfono.
Fernando Luna
fernando.luna@pixelscode.com
YA CONOCIMOS exteriormente el
sistema operativo Windows Phone 7
y el IDE de desarrollo de aplicaciones
para ste, que Visual Studio .Net
2010 integra de manera nativa en sus
versiones pagas, o el complemento
para descargar gratuito bautizado
Visual Studio 2010 for Windows Phone 7 Express Edition. Repasamos las
caractersticas bsicas del lenguaje y
llevamos a cabo un pequeo desarrollo para esta plataforma. A continuacin haremos un repaso sobre un
sitio web, comn y corriente, sobre el
cual desarrollaremos una aplicacin
visible desde los telfonos Windows
Phone 7, pero en lugar de usar esta
webApp desde el navegador, veremos cmo integrarla dentro de una
App WP7 de manera transparente,
permitiendo as que ningn usuario
deba recordar la URL de la aplicacin
ni tenga que iniciar varias ventanas o
sesiones del navegador.
La idea principal del sistema operativo Windows Phone 7 es que
todas las aplicaciones desarrolladas
de manera nativa para el celular
tengan internamente la filosofa de
una aplicacin XML. Como vimos
en la edicin de Julio-2011 de Pixels
& Code, Visual Studio 2010 para
Windows Phone compila las aplicaciones en un archivo de extensin
ZAP, que no es ms que un archivo
comprimido en formato ZIP. Dentro
de este la aplicacin creada es un
XAML, variante de XML orientado
al desarrollo de aplicaciones con
mayor funcionalidad y complejidad
que el XML comn no ofrece. Como
todo proviene desde algn punto
del XML, sabemos que todos los
navegadores de hoy pueden inter-
Otro Navegador?
>APLICACIONES MVILES-
webBrowser1.Navigate(new
Uri(webURL));
}
En la primera lnea estamos declarando una variable de tipo String
llamada webURL. La segunda lnea
carga el valor ingresado en textBox1.
Text en la variable declarada, (por
supuesto que faltan las validaciones
de ingreso de texto, validez de la
direccin URL, entre otros. Aclaramos que dichos pasos se obviaron
en este ejemplo para evitar complicaciones y la extensin de esta
nota), y por ltimo aprovechamos
la propiedad Navigate del control
webBrowser1, para dirigir el navegador web hacia dicha URL. Slo nos
resta ejecutar el proyecto y probar
su funcionamiento.
Hasta ahora slo hicimos un repaso
general para conocer la manera de
trabajar del control WebBrowser
y la interaccin que logramos con
ste en las aplicaciones WP7. Si
bien no es necesario, y hasta sera
redundante hacer un browser para
Windows Phone 7 basado en Internet Explorer, cuando ya de por s el
sistema operativo mvil incluye el
Internet Explorer como navegador,
el control WebBrowser ser el elemento principal de cualquier aplicacin basada en Web que pensemos
para esta plataforma mvil.
APP o WEBAPP?
>APLICACIONES MVILES-
La webApp de ejemplo. En
la misma cargamos las pginas a una direccin Web,
luego accedimos desde el
Browser del telfono desarrollador para ver el website que apuntara a nuestra
aplicacin.
La webApp con su look&feel
definitivo. Si bien es un
navegador creado por nosotros mostrando una pgina
web, quienes utilicen la
misma no notarn esto en
lo ms mnimo si tenemos
en cuenta los detalles finos.
Nuestra aplicacin concebida desde el cono inicial
del tile WP7, pasando por
la pantalla principal de
la misma y el ingreso a
la visualizacin de revistas. Todo solucionado con
algunos controles simples
y no ms de tres lneas de
cdigo.
() nuestro
trabajo ser
fino, poco complejo, y no
necesitaremos ms que los
principios bsicos de programacin WP7 y conocimientos de desarrollo web para
poder crear nuestras propias
aplicaciones mviles.
y en su lista de propiedades ubicamos Source. En esta propiedad ingresamos la direccin URL del sitio
web que ser nuestra webApp, por
ejemplo: http://www.misitio.com/
pixelscode/ o http://www.misitio.
com/pixelscode/paginaprincipal.
html (esto ltimo si no utilizamos
como pgina inicial index.html).
El resultado de nuestra webApp
deber quedar tal como muestra la
figura 5.
Como ya hemos dicho anteriormente, Microsoft ha realizado un
Herramientas
para
diseador
NotaelCentral
El nuevo rey:
Conociendo HTML5
La renovacion ha llegado a la Web
El protocolo HTML
Anatoma
de un protocolo
desde que HTML 4 se torn un estndar, a fines de los aos 90, e Internet
ha cambiado mucho. Hoy, algunos
elementos en HTML 4 son obsoletos,
no se los usa nunca o no se los utiliza
de la manera originalmente prevista.
Los diseadores de la nueva versin
tuvieron esto en cuenta para eliminarlos o, si se les ve una utilidad continuada, reescribirlos.
Para manejar mejor el uso real y
actual de la red, HTML5 incluye
tambin elementos para estructurar
mejor la pgina, dibujar, manejar
formularios y utilizar audio o video.
As aparecen tags como <article>,
<header>, <nav>, <footer>, etc.
Y quines son los perdedores, nos
preguntamos? Los tags que desaparecen son, entre otros: acronym,
applet, basefont, big, center, dir,
font, frame, frameset, isindex, noframes, etc. La vieja discusin entre los
defensores y detractores del uso de
los frames en el diseo web concluye as con la desaparicin de estos
elementos primigenios del HTML.
b- Nuevas APIs de Javascript
Hay varias interesantes. Por ejemplo,
podemos mencionar una destinada
a gestionar los dispositivos que permitan realizar geoposicionamiento,
como un dispositivo celular con GPS.
Otra que muestra interesantes
capacidades son los WebWorkers,
a travs de esta API sera posible
en un script generar varios hilos de
ejecucin, incluso permitiendo (en
una futura ampliacin) que los hilos
queden ejecutndose an despus
de que el usuario cerr el navegador.
E incluso tenemos una API para
manipular el drag and drop de
elementos dentro de la pgina, siempre a travs del lenguaje que se abre
paso aceleradamente como el nuevo
dominador de la web, Javascript.
WebSockets, nuestra siguiente API,
imgenes.
<script type=text/javascript>
var canv=document.
getElementById(nuevoCanvas);
var llenar=canv.getContext(2d);
llenar.fillStyle=#FF0000;
llenar.fillRect(0,0,150,75);
Como vemos, Javascript utiliza el
atributo id para encontrar el elemento canvas
var canv=document.
getElementById(nuevoCanvas);
Y luego genera un objeto contexto,
para lo cual utiliza el mtodo incorporado en HTML5
getContext(2d).
Las dos lneas siguientes dibujan un
rectngulo rojo:
llenar.fillStyle=#FF0000;
llenar.fillRect(0,0,150,75);
Este nuevo tag abre un mundo de
posibilidades para el diseador web,
antes inimaginadas con las versiones anteriores.
e- Soporte mejorado para almacenamiento offline:
HTML5 ofrece dos nuevos objetos
para almacenar datos en el cliente:
-localStorage: almacena datos sin
lmite de tiempo
-sessionStorage: almacena datos
>NOTA CENTRAL-
Desde la
aparicin de
HTML 4 se vena esperando una nueva versin que
definiera temas pendientes y
que adoptara cambios en la
forma de ver y usar la web,
solucionando problemas y
evitando el uso de plug-ins y
programas externos para poder llevar el protocolo al siglo
XXI. Esa nueva y por momentos revolucionaria versin
lleg al fin, el HTML5.
<script type=text/javascript>
if (localStorage.pagecount)
{
localStorage.
pagecount=Number(localStorage.
pagecount) +1;
}
else
{
localStorage.pagecount=1;
}
document.write(Visitas + localStorage.pagecount + vez(veces).);
</script>
Por el contrario, el objeto SessionStorage almacena datos transitorios, que
slo duran lo que dura la sesin donde
son creados. Estos datos se pierden
cuando el usuario cierra el navegador.
<script type=text/javascript>
sessionStorage.apellido=Lannister;
sessionStorage.nombre=Tyrion;
document.write(sessionStorage.
apellido);
document.write(sessionStorage.
nombre);
</script>
f- Etiquetas orientadas al manejo de
material multimedia:
Hasta el da de hoy, nunca haba
existido un estndar para mostrar
videos en una pgina web. An hoy
la mayora de los videos se visualizan en un plugin, como por ejemplo
Flash. De todos modos, no todos
los navegadores tienen acceso a los
mismos plugins.
Por el contrario, y muy de acuerdo
con su deseo de transformarse en el
estndar vemos que HTML5 especifica una manera homognea de incluir
video a travs de la etiqueta video.
Formato de video
10.0 No
niveles altos de polmica, ms
search No 4.0 11.0
all del hecho de la adecuada o
10.0 No
no adaptacin de cada navegador.
color
No No 11.0 12
Por ejemplo, mucho se ha hablado
<audio src=song.ogg
No
del futuro del plugin ms famoso
controls=controls>
y utilizado en la actualidad, Flash.
</audio>
Como es posible ver, el mejor sopor- Concebido como una forma de
suplir la carencia de posibilidades
te para estos nuevos tags lo tiene
Este ejemplo utiliza un archivo
multimedia en el HTML clsico,
Opera. De todas formas es posible
del tipo Ogg, y funcionar bien en
ha llegado a alcanzar un nivel de
Firefox, Opera y Chrome. Para lograr empezar a utilizarlos con los ms
aceptacin muy alto, incluso fuera
conocidos browsers del mercaque tambin lo reconozcan Internet
de su papel original. Pero con el
Explorer y Chrome el tipo de archivo do. Si no son soportados por los
navegadores, se comportarn como surgimiento de las nuevas etiquedeber ser mp3.
tas de HTML5, el mismo sentido
campos de texto estndar.
de su uso comienza a peligrar, mal
g- Nuevos controles de formulario
que les pese a los desarrolladores
Dentro de HTML5 nos encontramos Guerra de Navegadoque ms firmemente lo defienden
con varios nuevos tipos de ingreso
res: Soporte de HTML5
tras muchos aos de fiel uso.
para los formularios. Estas nuevas
Como ha sucedido otras veces,
Y siempre dentro del uso multimedia
capacidades mejoran el ingreso y la
los estndares no son universalde la web, tambin se han producido
validacin de nuestros formularios.
mente aceptados. De hecho, por
encontronazos entre fundamenel momento lo que tenemos es un
talmente grandes empresas como
Sin examinarlos exhaustivamente,
borrador, pero ha resultado tan exipodemos mencionar los siguientes:
toso que muchos navegadores ya lo Google y Apple, luchando para poder
imponer el formato grfico, el cdec
estn soportando de modo crecienque se utilizar en definitiva dentro
email
te. Y esto cambia con cada nueva
de la etiqueta <video>.
url
versin, con cada release dentro de
number
una versin, siempre yendo a ms.
range
Hablando de un modo muy genUsando HTML5
Date pickers (date, month, week,
rico, y de acuerdo a la tendencia
Para terminar, mostraremos algunos
time, datetime, datetime-local)
histrica detectada, en general
sitios con usos muy interesantes para
search
Google Chrome suele estar entre
el nuevo estndar. De ms est decir
color
los navegadores mejor rankeados
que deberemos utilizar un navegador
en el cumplimiento y adaptacin
lo ms capaz y compatible posible
Como suele suceder, no todos los
del estndar. En el extremo opues- para poder disfrutar los demos:
navegadores tienen respaldo para
to nos encontramos con Internet
estas capacidades, como podemos
Explorer, cuyo soporte no ha sido el Efectos visuales muy atractivos:
ver a continuacin:
mejor aunque ha mejorado notahttp://www.effectgames.com/deblemente en sus ltimas encarnamos/canvascycle/?sound=0
Soporte de navegadores:
ciones.
Tipo de Input t IE
Firefox
Si deseamos testear por nosotros
Experimentos de mesa de pool
Opera Chrome Safari
mismos, un muy buen sitio donde
http://mrdoob.com/projects/chroemail No 4.0 9.0
probar los navegadores que usemos meexperiments/ball_pool/
10.0 No
es http://html5test.com/. All nos
url No 4.0 9.0
dir, cuidadosamente desglosados
Uno de los mejores juegos con
10.0 No
en distintos apartados segn la
HTML5:
number
No No 9.0 7.0
capacidad a testear, cul es el grado http://www.effectgames.com/effect/
No
de cumplimiento actual de nuestro
games/crystalgalaxy/
range
No No 9.0 4.0
navegador.
4.0
Algunos elementos del surgimienEste ltimo no tiene nada de Flash,
Date pickers No No 9.0
to del nuevo estndar han tenido
pero los efectos son magnficos.
Juegos
Programacin de video
juegos con Microsoft
XNA Game Studio
Por Matas Iacono
matias.iacono@pixelscode.com
>JUEGOS-
Instalando Microsoft
XNA Game Studio
en-us/products/2010-editions). Si bien
podemos optar por adquirir Microsoft
Visual Studio 2010, contamos con
otras alternativas sin costo alguno.
Este es el caso de las herramientas Express, versiones gratuitas, pero reducidas, de las herramientas de desarrollo
pagas. (http://www.microsoft.com/
visualstudio/en-us/products/2010editions/express) Para desarrollar
nuestros juegos con Microsoft XNA
necesitaremos instalar Visual C# 2010
Express (O Visual Studio 2010).
El siguiente paso es la instalacin de
Microsoft XNA en s, ya que hasta ahora slo hemos instalado las
herramientas para crear el cdigo.
Podemos descargar Microsoft XNA
desde el sitio oficial de esta tecnologa
(http://create.msdn.com/en-US/).
En el siguiente ejemplo usaremos Visual Studio 2010 y C# como lenguaje
de programacin, de cualquier manera
el mismo puede ser replicado bajo las
versiones Express.
El primer proyecto
con XNA
Objeto/Funcin
Descripcin
Microsoft.Xna.Framework.Game
GraphicDeviceManager
SpriteBatch
LoadContent()
Update()
Draw()
Explorando Game1.cs
La funcin
Draw (Dibujar),
la cual se ejecuta cada vez
que la pantalla del juego
debe ser redibujada, es la
que borra todo el contenido
de la pantalla pintndola
de azul mediante la lnea
GraphicsDevice.Clear(Color.
CornflowerBlue);.
>JUEGOS-
Una de las
grandes ventajas de esta plataforma es que
podemos obtener todo el set
de herramientas de desarrollo
de forma gratuita, tanto por
parte del SDK (Software Development Kit) de Microsoft
XNA como de la interfaz y
lenguaje de programacin.
estos componentes tendr un comportamiento especfico y nos ayudar en la construccin del juego.
Mostrando un Sprite
en pantalla
base.Draw(gameTime);
}
La funcin Draw (Dibujar), la cual se
ejecuta cada vez que la pantalla del
juego debe ser redibujada, es la que
borra todo el contenido de la pantalla
pintndola de azul mediante la lnea
GraphicsDevice.Clear(Color.CornflowerBlue);.
Para mostrar algn grfico o Sprite
en el contexto del juego, lo primero
que necesitaremos ser una imagen
en algn formato conocido. Posiblemente para nuestros primeros
desarrollos el formato ms adecuado pueda ser el PNG (Portable Network Graphics), ya que este incluye
informacin sobre transparencias
en las imgenes. Para entender
este ltimo concepto slo diremos
que la imgenes son representadas
por rectngulos a pesar de que su
contenido muestre un dibujo con
curvas o bordes no rectangulares,
por lo tanto, para poder superponer
diferentes imgenes ser necesario
recortarla para que la imagen sobrante, esto es, la que no represente
el dibujo en s, no sea dibujada en
la pantalla. Si no queremos crear
cdigo para eliminar estos fragmentos sobrantes en las imgenes, el
formato PNG puede simplificarnos
esta tarea.
Para poder trabajar con un Sprite
primero deberemos agregar la imagen a nuestro proyecto de contenidos. De la lista de proyectos creados
automticamente, el de contenidos
es el segundo que aparece en el
explorador de soluciones. Simplemente copiaremos todas las imgenes dentro de este. Para el ejemplo,
hemos colocado una imagen llama-
da lupa.png.
El siguiente paso ser la creacin de
un objeto que pueda contener este
Sprite y para manipularlo y colocarlo
en la pantalla.
Texture2D lupa;
GraphicsDevice.Clear(Color.White);
spriteBatch.Begin();
spriteBatch.Draw(lupa, new Vector2(200, 200), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Para dibujar nuestra imagen colocaremos algunas lneas de cdigo
entre la que limpia la pantalla y la
que dispara el redibujado de los
objetos que pudieran estar a nivel
de nuestra clase base. Usando el
lienzo de dibujo asignado al objeto
spriteBatch, marcamos el inicio del
dibujado mediante el uso de Begin
(Comienzo), dibujando la imagen
contenida en el objeto lupa, asignndole una posicin en base a las
coordenadas X e Y por medio del
objeto Vector2 (punto de coordenada), y finalmente, un color modi-
Conclusin
Herramientas
para
el diseador
Algortmos
Algoritmos:
selection sort
CARACTERSTICAS
hasta haber pasado de esta manera por la lista completa. Este mecanismo en la prctica divide la lista en dos sub-listas: una conformada por los
elementos ya ordenados, y otra por los que restan ordenar. Al comenzar el
proceso, la primera se encuentra vaca, mientras que la segunda contiene
la lista completa que se desea ordenar. Puede verse la ejecucin del algoritmo como un iterador que recorre la lista conformada por los elementos
desordenados, tomando el elemento de menor valor y desplazndolo a la
ltima ubicacin de la sub-lista ya ordenada, reiterando el proceso hasta
que la lista sin ordenar quede vaca.
Escrito en pseudocdigo se ve de esta manera:
FuncinSelection Sort
Dada una lista L, de N elementos:
Este mecanismo
en la prctica
divide la lista en dos sublistas: una conformada por
los elementos ya ordenados, y
otra por los que restan ordenar. Al comenzar el proceso,
la primera se encuentra vaca, mientras que la segunda
contiene la
lista completa
que se desea
ordenar.
>ALGORITMOS-
Y=I
X = L[I]
return L
Z = [1, 4, 8, 2, 5, 3, 9, 7, 10, 6]
selectionsort(Z)
Al ejecutarlo, obtendremos lo siguiente:
Iteracin
Iteracin
Iteracin
Iteracin
Iteracin
Iteracin
Iteracin
Iteracin
Iteracin
1 [1, 4, 8, 2, 5, 3, 9, 7, 10, 6]
2 [1, 2, 8, 4, 5, 3, 9, 7, 10, 6]
3 [1, 2, 3, 4, 5, 8, 9, 7, 10, 6]
4 [1, 2, 3, 4, 5, 8, 9, 7, 10, 6]
5 [1, 2, 3, 4, 5, 8, 9, 7, 10, 6]
6 [1, 2, 3, 4, 5, 6, 9, 7, 10, 8]
7 [1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
8 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
9 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
El hecho de que Selection Sort funcione con una cantidad fija de pasadas
para la lista lo vuelve extremadamente ptimo para listas de pocos elemen-
1 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
2 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
3 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
4 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
5 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
6 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
7 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
8 [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
9 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ASPECTOS TERICOS
>ALGORITMOS-
mente menor. No obstante, en la comparacin con otros de implementacin similar, pierde la batalla en la mayora de los casos. Por ejemplo, suele
ser superado ampliamente por Insertion Sort. Aunque ambos usan una
estrategia parecida, dividiendo la lista a ordenar en dos, una ya ordenada y
la otra con los elementos que restan ordenar, y moviendo tems desde una
hacia la otra, la cantidad total de permutaciones de Insertion Sort es ms
baja, ya que a diferencia del algoritmo que nos ocupa en esta oportunidad,
no necesita recorrer la lista completa en cada iteracin. Esta superioridad
del ordenamiento por insercin se ve atenuada por el gran impacto que
tiene las caractersticas de la lista en la cantidad total de pasadas, por lo
cual en aplicaciones o sistemas operativos que trabajan en tiempo real se
suele preferir el empleo de Selection Sort por sobre Insertion Sort. No obstante, debe tenerse en cuenta que el tiempo de respuesta del ordenamiento
por insercin es muy superior al trabajar sobre listas ya ordenadas o casi
ordenadas. Todas estas consideraciones pierden validez al momento de
inclinarse por un algoritmo de ordenamiento que deba trabajar sobre una
lista con grandes cantidades de elementos (cientos de miles o millones), ya
que en ambos casos la performance de este tipo de estrategias se degrada
tan seriamente que las torna de escasa utilidad, siendo preferible el empleo
de mtodos recursivos estilo divide y conquistars, como Merge Sort
o QuickSort, ambos ya expuestos recientemente en estas pginas. Como
ya mencionamos al analizar estos algoritmos recursivos, un approach
bastante comn a esta problemtica es analizar primero el largo de la lista,
recurriendo a Insertion Sort o Selection Sort cuando cuentan con un bajo
nmero de elementos, pero aplicando Merge Sort o QuickSort en el caso
contrario.
OPTIMIZACIONES POSIBLES
Debido a la extrema simplicidad de Selection Sort, no existen optimizaciones sencillas, sino variantes basadas en l que ameritan estudiarlas individualmente. Sin embargo, vale la pena mencionarlas. Heap Sort es considerado uno de los mtodos de ordenamiento ms eficientes que existe. Aplica
una estructura de datos en forma de heap (montculo) de prioridad, que
en realidad se trata de un rbol binario en el cual uno de los extremos de
la lista se encuentra ubicado en su raz. Este rbol acelera notoriamente
la bsqueda del prximo valor ms bajo a ser trasladado desde la lista sin
ordenar hacia la ya ordenada. En la prctica, su implementacin es compleja y requiere una cantidad mucho mayor de lneas de cdigo, que incluso
suelen descomponerse en tres funciones separadas. En este caso se logra
una complejidad para el peor caso ms ptima que la de Selection Sort:
O(n log n). Una variante ms simple es la conocida como Cocktail Sort:
consiste en buscar tanto el valor mnimo con el mximo en cada pasada
por la sub-lista desordenada, reduciendo a la mitad la cantidad de recorridas de la lista, aunque manteniendo una cantidad equivalente de intercambios. Por ltimo, vale la pena mencionar otra derivacin de Selection Sort,
El hecho de que
Selection Sort
funcione con una cantidad
fija de pasadas para la lista
lo vuelve extremadamente
ptimo para listas de pocos
aunque tambin comparte caractersticas con otro mtodo conocido como
Counting Sort. Este algoritmo, llamado Bingo Sort, recorre la sublista
desordenada buscando el mximo valor entre sus elementos, y desplaza
todos los elementos que tengan este valor. Aunque realiza una pasada extra
para cada valor respecto del ordenamiento de seleccin, como procesa en
cada iteracin todos los elementos con ese valor, es mucho ms eficiente
para listas que tengan muchos tems duplicados.
CONCLUSIN
Novedades
y un da los
desarrolladores
jugaron con Kinect
Por Roxana Miguel
roxana.miguel@pixelscode.com
@roxanamiguel
Empieza la tarea
El Software
Development
Kit, tambin conocido por su
abreviatura SDK de Kinect
para Windows ya se puede
descargar de forma gratuita
de la web oficial para crear
aplicaciones no comerciales.
>NOVEDADES-
El da despus
del lanzamiento
Por
@pixelscode.com
@
Herramientas
para el diseador