Dicatio y su primer proyecto

Como se puede ver fácilmente en el menú izquierdo de este blog, y como saben todos los que me conocen, no me puedo estar quieto y siempre estoy pensando en nuevos proyectos Web.

En los últimos meses sólo había tenido tiempo para mantener los proyectos que fui creando compulsivamente con mi no menos compulsiva "creatividad".

Ahora sólo mantengo el control de GoogleMaps para ASP.NET, y los contenidos de discotequeros.com

Los demás proyectos los he hecho OpenSource... ojalá tuviera tiempo para mantenerlo :(

Este mismo blog sufre de mi falta de tiempo, pero más sufren otros de mis proyectos que considero que son herramientas muy buenas, sobretodo tusencuestas.com. Es una lástima que a una Web que está tan bien posicionada en Google (aparece el tercero por "encuestas") no pueda dedicarle tiempo. ¡¡Por falta de ideas no será!!

Postrándose ante la teoría del de quien mucho abarca poco aprieta, creo que ha llegado el momento de centrarse en un solo proyecto, aunque continuando un mínimo mantenimiento de los más importantes (discotequeros y googlemaps).

De ahí ha nacido Dicatio. Dicatio es el nombre en clave de un grupo de amigos/socios con ideas frescas y ganas de trabajar. Bajo el nombre de Dicatio tenemos pensado agrupar una serie de proyectos (unos Web y otros no tanto), y ya estamos comenzando por el primero.

De momento no os puedo hablar de ese nuevo proyecto, porque está en fase de desarrollo y no me gusta enseñar cosas que están a medio hacer, pero a mí me gusta mucho la idea. De hecho me motiva mucho, y la motivación es la clave de tener ganas de trabajar cuando acabas de trabajar.

Este sábado 8 de Noviembre tenemos la Primera Jornada Dicatio, en una reunión maratoniana donde definiremos las bases de Dicatio y de su  primer proyecto.

Por cierto, el nombre de Dicatio significa "Dedicación" en latín. Es curiosa la similitud con Avanzis, la empresa en que trabajo... pero no tiene nada que ver. De hecho, el nombre "Dicatio" surgió años antes de que yo comenzara a trabajar en Avanzis, y el que se lo inventó (no sé si fue Roberto o Jaumonla) ni tal si quiera conocía que existía Avanzis.

De hecho, lo más curioso es que la empresa de mi padre se llama Vincit Decoración, que fue creada en el siglo pasado (1998), así que por lo visto estoy rodeado de latinismos, jajaja.

Lo dicho, ya os iré hablando más de Dicatio, de sus componentes, de su primer proyecto, etc.



Concurso SEO de Hazruido.com: comunactivo es la palabra elegida.

El pasado 15 de Octubre comenzó la tercera edición del concurso de Hazruido.com en busca de "quién hace más ruido en Internet".

El concurso tiene dos modalidades: posicionamiento y marketing viral.

Personalmente siempre me había llamado la atención este concurso así que este año he decidido participar en la modalidad de posicionamiento.

En esta modalidad, Hazruido.com hizo pública una palabra que no estaba indexada en Google, de modo que el ganador será quien esté en primera posición en una búsqueda de Google España el día 15 de diciembre a las 12:00.

La palabra en cuestión es comunactivo. Es una palabra graciosa, la verdad. La Web desde la que concurso es "http://comunactivo.subgurim.net" y como podréis comprobar es un clon de este blog si tengo tiempo ya le cambiaré el diseño.

Así pues, el que crea que este blog le ha servido de algo en el mundo de ASP.NET y quiere agradecérmelo de alguno forma, puede hacerlo de forma muy sencilla sin más que enlazar a "http://comunactivo.subgurim.net" utilizando el anchor "comunactivo". Aunque os creáis que vuestra web/blog es demasiado pequeña y que no servirá de ayuda, estáis equivocados. Un pequeño enlace es también muy importante. Para facilitaros más el trabajo, os pongo el código HTML que más me beneficiaría:

<a href="http://comunactivo.subgurim.net" alt="comunactivo">comunactivo</a>

¡¡Gracias por vuestro apoyo!!



Vídeo tutorial: Introducción a ASP.NET AJAX

Con ASP.NET AJAX podemos transformar nuestra aplicación Web normal en una aplicación AJAX en pocos minutos y sin ningún código adicional.

En menos de 10 minutos de vídeo tutorial conoceremos cómo usar el UpdatePanel, el UpdateProgress y el Timer.

Sobretodo nos haremos hincapié en el primero (el UpdatePanel) por tratarse del elemento mágico que es capaz de llevarlo todo a cabo:

DESCAGAR VÍDEO TUTORIAL



jQuery para ASP.NET

JQuery es un framework código abierto, ampliamente aceptado y reconocido por Microsoft... Pero es que además es muy bueno, hace que javascript sea fácil y dispone funciones avanzadas muy sencillas de utilizar.

En mi blog de Avanzis he escrito algunos artículos al respecto que quería compartir desde aquí:
El primero es una introducción, y los otros son ejemplos en forma de plugins.



Geolocalización a partir de la IP

La geolocalización de usuarios a partir de la IP está al orden del día.

Seguro que habéis entrado alguna vez en una Web donde, sorprendentemente ofrecían productos o servicios referentes a una zona muy cercana a donde os encontrábais. Por ejemplo, la típica web donde nos dice "Esta chica es de TALSITIO y quiere conocerte", y TALSITIO es tu ciudad o la de al lado.

En principio hay cierta complejidad. Recoger nuestra IP es muy sencillo, pero luego necesitamos una BBDD donde se asocie nuestra IP a una región... y ¿dónde encuentro esa BBDD?, ¿es esa BBDD muy grande?, ¿qué hay de la eficiencia: velocidad, concurrencia...)

Afortunadamente, los chicos de MaxMind han resuelto todos los problemas, y nos ofrecen tanto la base de datos como el código fuente que la accede de forma eficiente. Podéis encontrar toda la información aquí.

Yo por mi parte, os he hecho la vida un poco más fácil y os he dejado para descarga directa una Website en ASP.NET 2.0 con todo bien facilito y preparado para el uso.

En este website, tres son las líneas que hacen el trabajo mágico:

        string databaseFile = Server.MapPath("~/App_Data/GeoLiteCity.dat");
        LookupService service = new LookupService(databaseFile);
        Location location = service.getLocation(tbIP.Text);

En la primero indicamos el path donde hemos ubicado la base de datos. Ésta no se incluye en la descarga porque es muy pesada y porque en MaxMind la actualizan mensualmente. La podéis encontrar aquí (descarga directa).

La segunda línea inicializa LookupService, que practicamente lo hace todo. El método más completo del LookupService es el getLocation (tercera línea), que te devuelve un objeto de tipo Location desde el que podremos acceder a varias propiedades interesantes:

- Latitude
- Longitude
- Region
- Area_Code
- Countryname
- Countrycode
- City
- Postalcode

Pues dicho y hecho. Así de fácil y así de sencillo.

DESCARGAR CÓDIGO



Google AJAX Language API

Gracias a Google y una de sus múltiples APIs, la Google AJAX Language API, podemos jugar a detectar un idioma e incluso traducirlo con unas pocas líneas de código.

Como siempre digo, un ejemplo vale más que mil palabras (y más si son mías). En el siguiente ejemplo tenemos un textarea y dos botones:
- En el textarea escribimos un texto cualquiera en el idioma que queramos.
- El primer botón detectará el idioma en que está escrito el texto.
- El segundo botón traducirá del castellano al inglés. Podríamos haber hecho una detección automática de la lengua y que se tradujese al inglés, pero no quedaba tan claro como para una introducción al uso de esta API.

Language.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Introducción al Google </title>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>

    <script type="text/javascript">
        google.load("language", "1");

        function GetLanguage() {
            var text = document.getElementById('Text').value;
            google.language.detect(text, function(result) {
                if (!result.error) {
                    var language = 'unknown';
                    for (l in google.language.Languages) {
                        if (google.language.Languages[l] == result.language) {
                            language = l;
                            break;
                        }
                    }
                    SetResultValue(language); 
                    return language;
                }
            });
        }

        function TranslateFromSpanishToEnglish() {
            var text = document.getElementById('Text').value;
            google.language.translate(text, "es", "en", function(result) {
            if (!result.error) {
                SetResultValue(result.translation);
                }
            });
        }

        function SetResultValue(result) {
            var resultDiv = document.getElementById('Results');
            resultDiv.innerHTML = result;
        }
    </script>
</head>
<body>
    <textarea cols="200" rows="7" id="Text"></textarea>
    <input type="button" value="¿En qué lengua está escrito?" onclick="GetLanguage()" />
    <input type="button" value="Traducir de castellano a inglés" onclick="TranslateFromSpanishToEnglish()" />
    <div id="Results"></div>
</body>
</html>


El primer paso es llamar y cargar la API de Google Traslation, lo que se consigue ubicando en el HEAD la llamado al fichero javascript:

    <script type="text/javascript" src="http://www.google.com/jsapi"></script>

Y cargando la API de idioma:

    <script type="text/javascript">
        google.load("language", "1");
        ...
    </script>

Una vez hecho esto, la magia la hacen dos funciones javascript: GetLanguage() y TranslateFromSpanishToEnglish().

En ambos casos se llama al método javascript correspondiente, google.language.detect y google.language.translate que aceptan los siguientes parámetros:

google.language.detect:
1.- Texto a detectar el idioma
2.- Función callback que recoge una variable json que llamamos result, y en la que usamos las propiedades "error" y "language".

google.language.translate:
1.- Text a traducir
2.- Lengua origen
3.- Lengua destion
4.- Función callback que recoge una variable json que llamamos result, y en la que usamos las propiedades "error" y "traslation".

Como veis es muy sencillo. Encontraréis la info que queráis en su documentación.



Lucene para ASP.NET: Un buscador avanzado para tu Web

Toda aplicación Web que se precie debe tener un buscador. Pero un buscador en condiciones, nada de cosas a medias.

Desde Intranets hasta Webs personales, pasando por blogs o redes sociales, el hecho de permitir que el usuario busque contenidos en tu Web es muy recomendable e incluso en algunos casos totalmente imprescindible.

En una serie de cuatro artículos en mi blog de Avanzis, analizo la necesidad de un buscador avanzado, introduzco Lucene para .NET y explico cómo indexar documentos y buscar información en ellos:



Rendimiento en MySql

Si ya escribo menos de lo que quisiera en este blog, ahora hemos abierto un blog para cada componente de la empresa (Avanzis) y me tengo que repartir (este es mi blog en Avanzis) :D

Pero los artículos más interesantes los iré enlazando aquí.

Hace un par de meses estuve luchando con el rendimiento de MySql en Todoexpertos.com... la lucha me enseñó mucho. Sobretodo me enseñó que yo no tenía ni idea de muchas cosas de MySql y de bases de datos en general

Pero bueno, no se nace aprendido, y menos sabiendo MySql. En una serie de dos artículos hablo sobre mi aprendizaje: