viernes, 3 de abril de 2009

Evolución: C#2.0, C#3.0 y LINQ

Desde C++ se produce una evolución que trae nuevas características en C#1.0, C#2.0 y C#3.0, que bien utilizadas, dan facilidad a la programación, y eficiencia al programador.
Algunas de estas características las expongo a continuación, aunque sin entrar en detalle en el código, pretenden aclarar en qué consisten.

C# 2.0

* Nullable Types
Imaginemos un objeto de tipo “cliente”, que contiene los datos de un cliente, entre ellos, la fecha de defunción “fdef”. Si el cliente está aún vivo, ¿Qué valor tiene “fdef”? Nos vemos obligados a usar un valor centinela (01/01/1938), o bien incluir un campo “bool vivoq”. Lo que complica la lógica en el manejo de este objeto.
Solución:
Ahora podemos asignar NULL a los tipos simples:
int? numero = null;
DateTime? fdef = null;

* Partial Classes
Las librerías de IU se encargan de autogenerar código para los botones, cajas, y todos los elementos de la interfaz. Muchas veces modificamos este código y objetos autogenerados, por lo que si se realizan cambios en la interfaz, pueden perderse esos cambios al regenerar el código.
Solución:
Con Partial Classes podemos separar el código autogenerado de nuestro código mediante la división de una clase en dos o más clases parciales:
Código autogenerado:
public partial class Form1 : Form{
...
}
Y en otro fichero, nuestro código:
partial class Form1{
...
}

* Anonymous Methods
Ahora se pueden declarar métodos tipo “inline”. Por ejemplo:
this.button1.Click += delegate { MessageBox.Show("Click"); };
Nos hemos ahorrado:
private void button5_Click(object sender, EventArgs e){
MessageBox.Show(“Click”);
}

* Suporte para 64 bits:
Cualquier aplicación “pura .NET” puede elegir correr como 32 o 64 bits( es el JITTer el que genera el asm específico ). Si la aplicación utiliza una dll de 32 bits… catacrash

C# 3.0

* Automatic properties:
antes:
public string nombre{
get{
return nombre;
}
private set{
nombre = value;
}
}
ahora:
public int edad{
get;
private set;
}

* Collection Initializers
Antes:
Cliente cliente = new Cliente( );
Cliente.Edad = 34;
Cliente.Nombre = “Pepe”;
Cliente.Dirección = new Dirección(“Calle Los Molinos 10”, 28220);
Ahora:
Cliente cliente = new Cliente { Edad = 34, Nombre = “Pepe”,
Direccion = new Direccion{Calle= “…”, CP=28220} ;

* El compilador infiere tipos:
var nombre = “pepe”;
var edad = “42”;
En tiempo de compilación nombre es un string a todos los efectos.
Podemos hacer :
int anios = edad; // conversión posible
Es de mucha utilidad cuando utilizamos tipos muy complejos, y también ahorra código a la hora de realizar conversiones de tipos de forma manual.
Podremos incluso pasar a una misma función parámetros de distintos tipos.

* Extension Methods
Podemos añadir métodos a una clase sin modificarla ni derivar de ella

* Lambda expressions
Sintaxis funcional y concisa para la implementación de funciones anónimas. Muy útiles.
Sintáxis:
(TipoParámetro parámetros de entrada) => expresión
Ejemplo:
Contar el número de nombre que empiezan por p:
int pNames = names.Count( name => name.StartsWith("P") );

* Querry Expressions
Con el lenguaje SQL podemos emitir consultas tipo SELECT contra una base de datos con mucha facilidad, ¿Y si pudiéramos emitirlas contra una estructura en memoria? Hecho:
var pNames = from n in names
where n.StartsWith("P")
orderby n.Length descending
select new { Name = n, Length = n.Length };
Los Query Operators se catalogan como Inmediates o Deferred: Los que provocan la evaluación inmediata o no.

C# 3.0: LINQ

Con LINQ se consigue integrar la capacidad de realizar queries contra “cualquier DataSource” de forma integrada en el lenguaje:
- LinqObjects: Queries contra colecciones tipadas en memoria
- LinqXML: Queries contra XML, especialmente contra el nuevo API System.Xml.Linq
- LinqSQL : Queries contra SqlServer.
- LinqEntities: Queries contra el EntityFramework, completo OR-Mapper con soporte a distintas BBDDs
- LinqDataSets: Queries contra DataSets. Extensión de LinqObjects específica para facilitar el trabajo con DataSets y sus clases relacionadas.
- Extensibilidad: Creación de extensiones para otros DataSources , como por ejemplo los existentes LinqAmazon, LinqLDAP...

sábado, 7 de marzo de 2009

Y Firefox rebasó a Explorer


Recientemente la W3C ha publicado nuevas estadísticas sobre el uso de navegadores en Internet. ¿Algun novedad realmente significativa? Pues sí, porque por primera vez Internet Explorer ha sido superado por un competidor: Mozilla Firefox, que se lleva el gato al agua con el 45'5% de accesos. Mientras, el navegador de Microsoft "sólo" suma el 44'8% entre sus tres versiones. Además, Explorer 6 (18'5%) continúa su imparable caída y es posible que en 2010 ya esté por debajo del 5%, un dato que permite que nos ilusionemos con un futuro de CSS únicos.

Por otro lado, Opera (2'3%) no termina de despegar y eso provoca que Chrome (3'9%) y Safari (3%), a pesar de la debilidad que supone el hecho de dirigirse a una sola plataforma, sean ahora mismo los navegadores minoritarios más importantes, todavía con porcentajes discretos pero sin detener su crecimiento.

http://www.w3schools.com/browsers/browsers_stats.asp

lunes, 2 de marzo de 2009

PHP: Toca actualizarse


Ya podemos descargar una nueva versión, la 5.2.9, que soluciona algunos problemas presentes en las últimas entregas del intérprete PHP. En concreto, se han reparado funciones gráficas (imagerotate), de manejo de archivos comprimidos, de decodificación (json_decode) y de manipulación de cadenas de texto (explode), todas ellas suficientemente conocidas y utilizadas como para justificar por sí mismas la actualización en todos nuestros servidores.

http://www.php.net/

martes, 27 de enero de 2009

HTML 5, más cerca


La W3C (World Wide Web Consortium) acaba de publicar un nuevo borrador sobre la especificación HTML 5. Sus autores, Ian Hickson de Google) y David Hyatt de Apple completan las cosas que ya nos habían contado con otras novedades que apuntan el camino tomado por el WHATWG (Web Hypertext Application Technology Working Group): adaptar el lenguaje a la web como la conocemos hoy. Esta intención se manifiesta a la hora de:

- Incluir elementos propios de HTML que permitan realizar las mismas cosas para las que ahora recurrimos a tecnologías propietarias como Flash, Silverlight o XUL.

- Dividir el contenido a través de nuevas etiquetas como section (un grupo temático dentro del mismo documento), article(que se puede utilizar para marcar un artículo de una revista, una entrada de un blog, un comentario de cualquier tipo o una publicación en un foro, por ejemplo), aside (texto breve que puede pertenecer a un grupo mayor pero se aleja de la narración lineal del contenido, como en el caso de una cita que se inserta en mitad de un artículo, no necesariamente dentro del contexto del mismo), header y footer (incluirán todo el contenido relacionado con cabeceras y pies de página, respectivamente, que hoy solemos meter en capas con identificadores arbitrarios como "header", "cabecera", "arriba", "pie" o cualquier cosa que se nos pase por la cabeza), address (contendrá una referencia de contacto para la sección en la que se aplique y normalmente aparecerá dentro del footer). A su vez estas etiquetas tendrán atributos que aportarán información sobre el autor, fecha o categoría de cada texto, que en la vida real son distintos aunque se engloben dentro de la misma página. Todos estos cambios se notarán sobre todo a la hora de indexar los contenidos y, por lo tanto, de recuperarlos a través de los buscadores. Además, como desarrolladores también veremos como se estandarizan las estructuras de nuestros documentos y hojas de estilo.

- Marcar claramente los elementos no textuales mediante figure (que admitirá un texto "legend" a modo de pie de foto) y contendrá indiferentemente ilustraciones, fotos, ejemplos de código o gráficos); video, que representará una animación o película; y audio para representar sonidos independientemente de su formato (el navegador tendrá que soportar el códec necesario en cada caso). Todo esto sin necesidad de usar ningún plugin adicional.

- Separar textos que tienen un papel funcional, por ejemplo con la etiqueta nav, que se usaría para contener elementos textuales que se refieran a la navegación entre documentos pero no aportan nada a nivel de contenido.

- Cubrir las carencias semánticas que tanto XHTML2 como XForms manifiestan a la hora de marcar algunas aplicaciones web como foros, buscadores, tiendas virtuales, juegos de estrategia en tiempo real, mapas virtuales o el propio correo web.

- Actualizar el modelo de objetos (DOM) para que podamos manipular todos los elementos nuevos de HTML 5 con hojas de estilo (CSS) o apoyándonos en lenguajes de script como JavaScript, pero sin necesidad de emplear componentes ajenos al navegador.


Por lo tanto, la idea sigue siendo la misma que ya nos anunciaron: acercar el HTML a la web actual. Si en su momento fuimos los desarrolladores y diseñadores quienes adaptamos nuestras prácticas de trabajo al lenguaje disponible (a veces cometiendo auténticas barrabasadas como usar imágenes transparentes para delimitar espacios o usar formatos de vídeo para incluir sonido en nuestras webs), ahora es el lenguaje el que se acerca al uso real que le dan los usuarios. Además, parece que esta vez todo el mundo se va a poner de acuerdo en soportar el mismo estándar, ya que además de Mozilla, Apple, Opera y Google como participantes más activos, también Microsoft ha declarado que el futuro Internet Explorer 8 también podría implementar la mayoría de especificaciones de HTML 5. Esperemos que estos cambios no tarden mucho en llegar y la "versión única" para todos los navegadores deje de ser sólo un sueño ;-)

lunes, 6 de octubre de 2008

Banco de Sonidos


Muy útil y práctico como banco de sonidos. Nosotros no lo conocíamos pero realmente merece la pena echar un vistazo y escuchar que se puede descargar de este banco.

Ya forma parte de nuestros favoritos


Esta dirección que muestra el portfolio de muchos e interesantes trabajos on, ya forma parte de nuestros favoritos. ¡Espero que os guste!

:D