Archive for octubre, 2010

0 30
10
2010

Propiedades autoimplementadas en C#

Sábado, octubre 30th, 2010

A partir de C# 3.0 nos encontramos con una nueva forma de implementar las propiedades de nuestras clases con las propiedades autoimplementadas.

Las propiedades autoimplementadas nos permiten escribir la declaración de la propiedad de forma más concisa y sencilla cuando no es necesaria ninguna lógica adicional en los descriptores de acceso a la propiedad, o en otras palabras, cuando no se requiere personalizar los bloques Set y/o Get.

Para verlo de forma más clara, mostraremos a continuación un ejemplo de la declaración de propiedades clásica, y la declaración de propiedades autoimplementadas:

Sin Propiedades Autoimplementadas

/// <summary>
/// Car class
/// </summary>
public class Car
{

    #region "Attributes"

    /// <summary>Brand car</summary>
    private string brand;
    /// <summary>Model car</summary>
    private string model;
    /// <summary>Vehicle registration plate</summary>
    private string plate;

    #endregion

    #region "Properties"

    /// <summary>Gets & sets the brand of car</summary>
    public string Brand
    {
        get { return brand; }
        set { brand = value; }
    }

    /// <summary>Gets & sets the brand of car</summary>
    public string Model
    {
        get { return model; }
        set { model = value; }
    }

    /// <summary>Vehicle registration plate</summary>
    /// <remarks>read-only property</remarks>
    public string Plate
    {
        get { return plate; }
    }

    #endregion

    /// <summary>Constructor</summary>
    /// <param name="plate"></param>
    public Car(string plate)
    {
        this.plate = plate;
    }
}

En el código anterior, hemos creado una simple clase de ejemplo Car con 3 atributos privados, y sus correspondientes 3 propiedades públicas, siendo la tercera de ellas (platepropiedad de sólo lectura.

Comprobemos a continuación cómo declarar el código con propiedades autoimplementadas sobre la misma clase de ejemplo.

Con Propiedades Autoimplementadas

/// <summary>
/// Car class
/// </summary>
public class Car
{

    #region "Attributes"

    /// <summary>Brand car</summary>
    private string brand;
    /// <summary>Model car</summary>
    private string model;
    /// <summary>Vehicle registration plate</summary>
    private string plate;

    #endregion

    #region "Properties"

    /// <summary>Gets & sets the brand of car</summary>
    public string Brand { get; set; }

    /// <summary>Gets & sets the brand of car</summary>
    public string Model { get; set; }

    /// <summary>Vehicle registration plate</summary>
    /// <remarks>read-only property</remarks>
    public string Plate { get; private set; }

    #endregion

    /// <summary>Constructor</summary>
    /// <param name="plate"></param>
    public Car(string plate)
    {
        this.plate = plate;
    }
}
0 23
10
2010

TypeRacer: practica tu mecanografía

Sábado, octubre 23rd, 2010

¿Un juego en el que además practicas tu agilidad frente al teclado? ¿Quieres competir frente a tus amigos para ver quién escribe más rápido? Tu juego es Typeracer.

typeracer: practica tu mecanografía

TypeRacer: practica tu mecanografía

Trasteando por la red, me encuentro con este entretenido juego de carreras frente al volante, digo …  frente al teclado.

Typeracer te permite practicar tu mecanografía de una forma entretenida y divertida, compitiendo contra otros usuarios, y por qué no decirlo, frente a ti mismo intentando superar tus propias marcas.

La idea es muy sencilla, la página va mostrando diferentes textos (citas célebres, de películas, de libros, etc) que debemos ir escribiendo en el menor tiempo posible, y antes que tus contrincantes. Acompañando al texto que hay que escribir y a la «caja» donde iremos escribiendo nosotros, podrás conocer en todo momento el estado de la carrera de forma visual, gracias a un gráfico que simula la carrera con pequeños volkswagen beetle que representan a cada de los usuarios de la competición.

TypeRacer: Partida

TypeRacer: Competición de mecanografía

Si te registras en la web, algo por otra parte muy rápido y sencillo (no te llevará más de un minuto), podrás conocer tus mejores registros o tu media de wpm y cmp, es decir, tu velocidad frente al teclado medida en palabras por minutocaracteres por minuto.

No te confíes en las primeras partidas, en las que seguro ganarás a tus rivales, pues parece que la web te va a enfrentando a rivales de tu nivel según vas quemando partidas.

Además, afortunadamente, dispone de multitud de lenguajes, entre los que se encuentra el ESPAÑOL, así que ya no tienes excusa para practicar y mejorar tu mecanografía.

Ale, a echar el rato aporreando el teclado de tu ordenador, pero ten cuidado ¡que engancha!

0 20
10
2010

Trim en JavaScript

Miércoles, octubre 20th, 2010

De forma similar a como implementamos hace unos días nuestro método ReplaceAll en Javascript, hoy vamos a realizar lo propio con la función trim con javascript.

Para aquellos que no conozcáis la función trim, esta nos permitirá eliminar los espacios en blanco del comienzo y del final de una cadena.

La idea es parecida a la que utilizamos para crear nuestra función ReplaceAll en Javascript, es decir, utilizar expresiones regulares llamando al método replace.


function trim (text) {
    return text.replace(/^\s+|\s+$/g,'');
}

Como véis, simplemente hemos utilizado la expresión regular /^\s+|\s+$/ y la hemos reemplazado por un espacio vacío.

Fácil, rápido y efectivo.

1 19
10
2010

Cómo desactivar conversaciones en GMail

Martes, octubre 19th, 2010

No seré yo quien diga que la idea de GMail de agrupar los correos con un mismo asunto en conversaciones fue un error, de hecho sólo tenéis que echar un vistazo por ejemplo una de las nuevas características del próximo Outlook 2010.

Sin embargo, son muchos (yo me incluyo en algunas ocasiones) los que desearíamos desactivar el modo de conversaciones en nuestro correo electrónico favorito: GMail.

Pues bien, el pasado 29 de Septiembre hicieron pública la noticia desde el blog oficial de GMail: Turn off Gmail’s conversation view, es decir, «Desactivar la vista de conversación de GMail«.

Pero vamos a la práctica, para desactivar las conversaciones de GMail únicamente deberemos:

  1. Acceder a la página de opciones (settings) de nuestro GMail
  2. Dentro de la pestaña General, busca la sección Vista de conversación
  3. Selecciona la opción Desactivar vista de conversación
  4. Guarda tus cambios

desactivar vista de conversación

Listo, ya disponemos de nuestro GMail con la vista clásica de toda la vida. Eso sí, si nos arrepentimos, siempre podemos volver a la vista de conversación de GMail.

0 12
10
2010

Crea diagramas UML online con yUML

Martes, octubre 12th, 2010

Navegando por la red, y de casualidad (como la mayoría de los grandes descubrimientos), encontré yUML.

yUML es una aplicación web que nos permite crear diagramas UML totalmente on-line y de una forma rápida y sencilla.

yUML: create UML diagrams online

Lejos de las típicas pesadas aplicaciones de escritorio que solemos utilizar a la hora de crear un diagrama UML, podremos generar con yUML diagramas sencillos (y agradables a la vista) en pocos minutos; y lo que es mejor y más importante, es una herramienta gratuita y no requiere ningún tipo de registro.

Al tratarse por lo tanto de una herramienta online, podemos a partir de ahora compartir nuestros diagramas en blogs, foros, emails, wikis, etc con un simple enlace de imagen, que como veremoa a continuación, incorpora el código del diagrama.

Lejos además también de los entornos gráficos del estilo drag & drop con los que solemos trabajar, yUML trabaja con un entorno de texto en el que indicaremos cada acción o relación existente en el diagrama UML.

A día de hoy, la herramienta yUML nos permite crear hasta 3 tipos de diagramas UML (que normalmente son los más utilizados):

La idea es sencilla, veámoslo con un ejemplo de diagrama de clases UML.

Conceptos básicos:

  • – las clases se identifican entre corchetes [].
  • – el orden de la relación con flechas ->
  • – la cardinalidad con números y asteriscos *
  • – los colores de fondo con la indicación: {bg: coloreninglés}, ejemplo: {bg: orange}

Aquí os dejo un diagrama de clases muy sencillo generado a partir el siguiente código:

# Travel UML Diagram
[Transport]^-[Train]
[Transport]^-[Flight]
[Transport]^-[Bus]

y su resultado final

diagramas UML online con yUML

Para los curiosos, fijaros en la URL de la imagen:

<img class="aligncenter" src="http://yuml.me/diagram/scruffy/class/%23%20Cool%20UML%20Diagram,%20%5BTransport%5D%5E-%5BTrain%5D,%20%5BTransport%5D%5E-%5BFlight%5D,%20%5BTransport%5D%5E-%5BBus%5D" alt="uml class diagram" width="323" height="235" />

Efectivamente, el código que habíamos creado inicialmente se incrusta dentro del html para poder generar nuestro diagrama final.

0 12
10
2010

ReplaceAll en JavaScript

Martes, octubre 12th, 2010

Javascript cuenta con múltiples funciones relacionadas con el objeto string, entre las que podemos encontrar el método replace.

El método replace de javascript nos permite buscar una subcadena en un String para ser sustituida por otra subcadena. Tal y como conocemos y solemos utilizar este método, replace() únicamente nos reemplazará la primera ocurrencia que haya encontrado en la caden original.

La primera idea que puede venirse a la cabeza para implementar una función replaceAll con javascript es recorrer la cadena original y reemplazar el subcadena deseada tantas veces como apariciones puedan existir en la misma. Este código quedaría algo así:

        /**
         * Función que permite reemplazar TODAS las subcadenas encontradas
         * en un string por otra nueva subcadena.
         */
        function replaceAll(text, search, newstring ){
            while (text.toString().indexOf(search) != -1)
                text = text.toString().replace(search,newstring);
            return text;
        }

Sin embargo, esto no es necesario.
Lo que mucha gente no sabe o simplemente pasamos por alto, es que la función replace de javascript soporta expresiones regulares (suele pasar también con la mayoría de lenguajes).
Esta funcionalidad, nos permite implementar un nuevo método replaceAll mucho más sencillo utilizando nuestras queridas expresiones regulares.

El código quedaría ahora algo como:

        /**
         * Función que permite reemplazar TODAS las subcadenas encontradas
         * en un string por otra nueva subcadena.
         */
        function replaceAll(text, search, newstring ){
            var out = text.replace(new RegExp(search, 'g'), newstring);
            return out;
        }

o simplemente:

// El texto a reeplazar deberá indicarse entre barras
text = text.replace(/find/g,”replace”)

NOTA: No es ninguna errata, cuando queramos indicar una expresión regular en el primer parámetro de la función replace de javascript, el texto irá indicado entre barras y SIN comillas.

Veamos algunos ejemplos:

        // Resultado: a234ea234ea234e
        var ejemplo1 = "abcdeabcdeabcde".replace(/bcd/g, "234");
        // Resultado: 323232409121
        var ejemplo2 = "3232,32409,121".replace(/,/g, "");
        // Resultado: sn notcas del mundo
        var ejemplo3 = "sin noticias del mundo".replace(/i/g, "");

Hemos visto por lo tanto 2 formas para implementar nuestro propio método replaceAll en javascript utilizando 2 fórmulas diferentes:

  • – Utilizando un bucle para recorrer y reemplazar tantas veces como sea necesario la cadena original
  • – Haciendo uso de expresiones regulares

En próximas entradas, veremos más en profundidad cómo utilizar expresiones regulares en javascript.

4 05
10
2010

Letra Capital Con SQL

Martes, octubre 5th, 2010

Cuando hablamos de letra capital, estamos hablando del estilo de texto en el que la primera letra de cada palabra aparece en mayúscula, y el resto de la palabra, en minúscula.

Es Decir, Algo Como Esta Frase Que Estás Leyendo Ahora Mismo, O Como El Título De Este Post.

Esto puede ser útil por ejemplo para formatear nombres propios de personas, o por ejemplo, nombres de ciudades: Gran Canaria.

En algunos lenguajes de programación,  existen funciones ya predefinidas que te ofrecen esta posibilidad (como por ejemplo ucwords en PHP), pero … ¿y en lenguaje SQL?

En motores de gestión de base de datos como Oracle, contamos con una función predefinida que convierte a mayúsculas el primer caracter de cada palabra de una cadena: InitCap.

Sin embargo, en otros sistemas de gestión de base de datos como MySql o SqlServer, tendremos que «buscarnos la vida«.

A continuación veremos 2 funciones que nos permitirán modificar nuestras cadenas de texto combinando MAYÚSCULAS y minúsculas directamente en nuestras consultas SQL.

La idea es sencilla: recorreremos la cadena de texto letra por letra en búsqueda de espacios en blanco o cualquier otro carácter separador, marcando con ayuda de una bandera o flag, la indicación de que debemos convertir la siguiente letra en mayúscula.

Letra Capital / Mayúscula-Minúscula En MYSQL

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`UCWORDS` $$
CREATE FUNCTION `test`.`UCWORDS` (input VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
  -- Declaración de variables
  DECLARE i INT DEFAULT 0;
  DECLARE length INT;
  DECLARE flag TINYINT DEFAULT 1;
  DECLARE output VARCHAR(255) DEFAULT '';

  -- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
  SET input = LOWER(input);
  -- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
  SET length = LENGTH(input);

  -- Recorremos toda la cadena de texto
  WHILE (i <= length) DO
    IF (flag=1) THEN
      -- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
      SET output = CONCAT(output, UPPER(MID(input, i, 1)));
      SET flag = 0;
    ELSE
      SET output = CONCAT(output, MID(input, i, 1));
    END IF;
    IF (MID(input, i, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) THEN
      -- Hemos encontrado un espacio en blanco, por lo que activamos nuestra bandera para la próxima iteración.
      SET flag = 1;
    END IF;
    SET i = i+1;
  END WHILE;

  RETURN output;

END $$

DELIMITER ;

Letra Capital / Mayúscula-Minúscula En SQLSERVER


-- =============================================
-- Author:		v3rgu1.com
-- Description:	Función que permite capitalizar
--              un String
-- =============================================
ALTER FUNCTION [dbo].[InitCap]
(
	-- Parámetros
	@INPUT AS VARCHAR(4000)
)
RETURNS VARCHAR(4000)
AS
BEGIN
	-- Declaración de variables
	DECLARE @I AS INT
	DECLARE @LENGTH AS INT
	DECLARE @FLAG AS BIT
	DECLARE @OUTPUT AS VARCHAR(4000)

	-- Inicializamos el contador a 0
	SET @I = 0;
	-- Para evitar sorpresas, pasamos toda la cadena de texto a minúsculas
	SET @INPUT = LOWER(@INPUT);
	-- Guardamos la longitud de la cadena a recorrer para utilizarla a continuación
	SET @LENGTH = LEN(@INPUT);
	-- Inicializamos la bandera como activa para capitalizar la primera letra de la cadena
	SET @FLAG = 1;
	SET @OUTPUT = '';

	-- Recorremos toda la cadena de texto
	WHILE (@I <= @LENGTH) BEGIN
		IF (@FLAG = 1) BEGIN
			-- El flag estaba activado, lo que significa que habíamos encontrado un espacio en blanco y debemos pasar a mayúscula el carácter actual.
			SET @OUTPUT = @OUTPUT + UPPER(SUBSTRING(@INPUT, @I, 1));
			SET @FLAG = 0;
		END ELSE BEGIN
			SET @OUTPUT = @OUTPUT + SUBSTRING(@INPUT, @I, 1);
		END
		IF (SUBSTRING(@INPUT, @I, 1) IN (' ', ',', ';', '.', ':', '!', '?', '_', '-', '/', '&', '''', '(', ')')) BEGIN
			-- Hemos encontrado un espacio en blanco o algún caracter separados,
			-- por lo que activamos nuestra bandera para la próxima iteración.
			SET @FLAG = 1;
		END
		SET @I = @I + 1;
	END -- WHILE

	RETURN @OUTPUT
END

0 04
10
2010

Imágenes con efecto reflejo en photoshop

Lunes, octubre 4th, 2010

Uno de mis efectos preferidos a la hora de editar una imagen (aunque seguramente peque en exceso), es aplicarle un efecto espejo o reflejo; como algunos de los que se pueden visualizar en la propia web.

Vamos a explicar en la siguiente entrada cómo conseguir este efecto utilizando el programa editor de imágenes photoshop.

En primer lugar, lógicamente abrimos con photoshop la imagen ya preparada a la que le vamos a aplicar el efecto reflejo, o simplemente creamos una nueva.

En mi caso, he creado una nueva imagen y le he añadido un texto «REFLEJO» con algunos estilos como podréis visualizar en la siguiente imagen (a partir de ahora, llamaré a esta capa con el nombre de «Original»):

photoshop efecto reflejo imagen original

A continuación, vamos a duplicar la capa «Original» (a esta nueva capa la voy a llamar «Reflejo»). Para duplicar una capa con photoshop, podemos dirigirnos a la opción Menú –> Capa (o Layer) –> Duplicar Capa (o Duplicate Layer); o simplemente pulsar el botón derecho del ratón sobre la capa deseada, y seleccionar la opción «Duplicar Capa«.

photoshop efecto reflejo duplicar capa

Teniendo seleccionada la capa «Reflejo», procedemos a voltear verticalmente la misma. Para ello iremos a la opción Menú –> Edición –> Transformar –> Voltear verticalmente.

Es el momento ahora de posicionar esta nueva capa («Reflejo») volteada por debajo de la capa «Original». Ajusta ambas capas tan unidas como desees para personalizar tu efecto reflejo.

NOTA: Te habrás fijado, que en un principio, mi imagen original contaba con bastante espacio inferior, es decir, con espacio suficiente por debajo del texto original. Esto lo hice así con vistas a poder situar en ese espacio libre la nueva capa volteada que hará las veces de capa reflejada. Si tu imagen no disponía de ese espacio inferior, no te preocupes, simplemente redimensiona el tamaño del lienzo ahora con la opción Menú –> Imagen –> Tamaño de lienzo.

photoshop tamaño de lienzo

IMPORTANTE: En el ejemplo que estamos realizando estamos trabajando con textos. Por lo tanto, antes de continuar con los siguientes pasos, es importante que rasterices esta capa «Reflejo» si no lo has hecho todavía. Para ello, asegurándote de tener seleccionada la capa «Reflejo», dirígete a la opción Menú –> Capa –> Rasterizar; o bien, pulsa sobre el botón derecho en la capa «Reflejo» dentro del navegador de capas de Photoshop, y seleccionando la opción «Rasterizar».

Dispondrás en estos momentos en tu pantalla de algo como la siguiente imagen:

photoshop efecto reflejo imagen duplicada

OJO, es importante que prestes atención en los siguientes pasos, ya que son los más delicados e importantes.

photoshop editar en modo máscara
Con la capa «reflejo» seleccionada, pincha en «Editar en modo máscara» (sabrás que lo tienes marcado si al pasar el ratón por encima aparece de color vino como en la siguiente imagen).


Selecciona ahora la herramienta de Degradado, y traza una línea de arriba hacia abajo, comenzando más o menos hacia la mitad de la capa «Original», hasta casi el final de la capa «Reflejo» (varía estas referencias orientativas a tu gusto para variar el resultado final), como se muestra en la siguiente imagen.

photoshop efecto reflejo degradado

Tendrás ahora en tu lienzo de photoshop una imagen parecida a la que se muestra a continuación:

photoshop efecto reflejo degradado

Vuelve ahora a la «edición en modo estándar» pulsando el mismo botón que pulsaste en el paso anterior «editar en modo máscara» para que aparezca seleccionado por «hormiguitas» un área de tu imagen.

Pulsa ahora el botón «Delete» o «Suprimir» y podrás visualizar por primera vez el efecto reflejo con photoshop que has conseguido hasta ahora.

photoshop efecto reflejo suprimir

Ahora ya sólo nos queda decorar un poco la imagen y ajustar sus dimensiones para obtener el efecto deseado.

Aquí os dejo mi resultado final:

resultado final efecto reflejo con photoshop

Si lo deseáis, podéis descargaros el archivo psd utilizado en este ejemplo para que juguéis un poco con vuestro photoshop.