viernes, 23 de octubre de 2009

Mi primer día con Windows 7

Hoy se entregó oficialmente al mercado el nuevo Windows 7 del que se han hablado tantas cosas y que parece por fin arreglar todos los inconvenientes que tenía Vista…Hoy a sido mi primer día usando Windows 7, aquí les dejo las cosas para las que me alcanzó el primer día y que ya sin duda me hacen ver que me harán tener una mejor experiencia que con Vista.

Performance: Aunque tampoco es algo milagroso si se siente mas “ligero” que Vista se ven menos esos interminables cursores de espera y ya no piensa tanto para hacer las cosas…al menos eso parece primera Vista.

Calculadora: Puede parecer algo menor, pero creo que ya era tiempo de que Microsoft le hiciera justicia a está tan popular utilería… entre las cosas nuevas es que tiene dos tipos nuevos (programmer y estadística) además del estándar y científica así como una sección de historial y un track de las operaciones que has realizado para llegar a un resultado

 image

Paint: Otro que se mejoró con todo y su Ribbon a la Office 07…image

La TaskBar:

image 

Lo nuevo aquí es que puedes hacerle un “pin” que es como  agregar un tipo menú de acceso rápido, bastante útil, además de que aparece un pop-up con las instancias de esa misma aplicación.

Los backgrounds intercambiables: Ahora puedes crear un tema que contiene una serie de imágenes que pueden ir cambiando aleatoriamente cada determinado tiempo y así tener un tipo de slideshow en el desktop.

Los jumplist:

image

En el menu de inicio ahora además de tener las aplicaciones favoritas cerca podemos poner el cursos sobre esas flechas y ver la lista de los archivos mas recientes que han sido manipulados por ese programa en particular… (Disculpen esa rola de la emo de Avril Lavigne era la primera en la lista del media center).

Resource Monitor: Fue esta utilería lo que más disfrute de Vista y en 7 hace de nuevo su aparición con algunas mejoras, especialmente en la sección de memoria donde se muestra gráficamente el estado de la RAM.

image

Y también la sección de Networking, donde podemos revisar las conexiones TCP así como los puertos que están escuchando y saber específicamente que programas están utilizando recursos de Red…este resource monitor es de hecho también mi antivirus ñ_ñ

image

Snipping Tool: Otra utilería que faltaba y que le viene bien al Win 7 es está que te permite capturar pantallas y aunque hay varias mejores en el mercado, la que se incluye con este OS está bastante decente.

image

Y pues esto es lo más destacado que encontré en las primeras horas de uso con Win 7, esperemos a ver que otras monerías encontramos.

Nota: Yo lo instalé como Upgrade a Vista y funciona muy bien, ninguna de mis aplicaciones dejo de funcionar, ningún driver, no hubo problemas de compatibilidad, a pesar de que marcaba un warning con iTunes no pasó nada.

Saludos!

jueves, 8 de octubre de 2009

Polymorphism for dummies


(aka: Polimorfismo pa los pasguatones)
No deja de sorprenderme las cosas que los reclutadores o head hunters les preguntan en entrevistas a candidatos para desarrolladores senior en Java o .NET.

Ya van varias veces que me toca reírme de experiencias de amigos que fueron cuestionados sobre cosas tan básicas como “Qué es herencia?”, “Permite C# herencia múltiple…y Java?”, “Una clase sealed se puede heredar?”… Todas estas cosas son preguntas que un candidato a ese puesto debería considerar sencillas y casi rayar en lo grosero.

Sin embargo hay varios amigos que los han agarrado en curva con la pregunta “Cómo defines tú el polimorfismo?” y siendo uno de los pilares de la OOP es elemental entenderlo. Sin embargo aunque muchos entienden como usarlo, la definición se torna complicada aún para los “expertos”.
He aquí pues una breve reseña del polimorfismo narrada en “mexicano” para los que les de flojera entender lo que encuentran en Google o que simplemente encuentran los textos y ejemplos muy aburridos y difíciles.

Así lo dijo Wikipedia
In computer science, polymorphism is a programming language feature that allows
values of different data types to be handled using a uniform interface. The
concept of parametric polymorphism applies to both data types and functions. A
function that can evaluate to or be applied to values of different types is
known as a polymorphic function. A data type that can appear to be of a
generalized type (e.g., a list with elements of arbitrary type) is designated
polymorphic data type like the generalized type from which such specializations
are made.

Parece muy largo para una definición…así que sigamos buscando algo más sencillo

Ven los pajaritos que están en la imagen de arriba (sin albur), bueno pues ahí está el ejemplo más claro de polimorfismo y que la naturaleza nos deja apreciar gratis. Es fácil darse cuenta que las tres aves son de la misma especie, sin embargo sus colores y plumaje varia un poco esto los hace diferentes unos de otros, eso es el polimorfismo.

Tenemos una clase base Humano que será abstracta, en nuestro ejemplo esto significa que todas aquellas acciones que puede hacer un humano pueden ser redefinidas por sus clases concretas, es decir los tipos de humanos que definamos, en el ejemplo serán 2 clases de humanos: Hombre y Mujer

Hay una publicidad de cerveza muy buena que usaré como ejemplo.

Este será nuestro método HaveSex


Este otro es el GoToBathroomWhileParty



Y por ultimo el HaveDrink




Esta es la definición de nuestra clase base.

using System;
using System.Collections.Generic;
using System.Text;

namespace Polymorphism
{
public abstract class Human
{
public abstract void HaveSex();
public abstract void GoToBathroomWhileParty();
public abstract void HaveDrink();
}
}


Hombres y mujeres hacemos las mismas cosas pero vean como lo hace un hombre


using System;
using System.Collections.Generic;
using System.Text;

namespace Polymorphism
{
class Man : Human
{
public override void HaveSex()
{
DrinkBeer();
GetGirl();
GetBed();
}

public override void GoToBathroomWhileParty()
{
DrinkBeer();
FindBathroom();
TakeALeak();
}



public override void HaveDrink()
{
JustGoGetIt();
}
}
}


…Y como lo hace una mujer


using System;
using System.Collections.Generic;
using System.Text;

namespace Polymorphism
{
class Women:Human
{
public override void HaveSex()
{
SexRating howGoodisHe;
FindADrink();
FindABoy();
howGoodisHe = FindBed();
switch (howGoodisHe)
{
case SexRating.Gentleman:
GetRomanticDate();
WaitRing();
GetMarried();
HaveAFamily();
break;
case SexRating.Heartbreaker:
HaveAnIceCream();
break;
case SexRating.JustSex:
WaitForCall();
FindItWasJustSex();
HaveAnIceCream();
break;
}
}

public override void GoToBathroomWhileParty()
{
Boolean isEnoughPaper = false;
FindADrink();
WaitsASit(new TimeSpan(0,10,0)); //Ten minutes!
TalkSillyThingWithFriend(new TimeSpan(0, 5, 0)); // Five minutes!
if (isEnoughPaper)
CleanYourSit();
else
DontEvenTouchTheSit();
WaitYourSillyFriend();

}

public override void HaveDrink()
{
Boolean HasBeenThreeHours= false;
while (!HasBeenThreeHours)
{
TryToGetDressed();
}
ChooseADrink();
}

enum SexRating
{
Gentleman,
Heartbreaker,
JustSex
}


}
}


Esto es un claro ejemplo de polimorfismo, ambos géneros hacemos lo mismo, pero vaya que hay “implementaciones” complicadas.

Dicho esto podemos decir del polimorfismo:

Es la capacidad de una clase concreta para renegar de la voluntad de su clase abstracta padre y hacer las cosas como se le pegue la gana.


Ya por último me atrevo a medio recomendar esto, un ejemplo grotesco…pero eficaz y cuando aprendes a programar a los 17, este tipo de ejemplos sin duda ayudan bastante.


Saludos!