¡Camtasia 3 gratuito!

He de confesarlo: soy un absoluto fan de Camtasia Studio. Su última versión, la 5, es sencillamente espectacular. Con este programa hacemos muchos de los vídeos de ejemplo que tenemos en los cursos de campusMVP (antes usábamos Windows Media Encoder 9, pero nada que ver: está a años luz de Camtasia).


Camtasia Studio, the worlds best screen recorder.El caso es que ya hace tiempo que tenía pensado poner algo sobre este tema aquí porque cuando algo me gusta mucho me gusta comentarlo con los demás (como dicen los yankees: spread the word, que suena muy bíblico), pero ahora que me acabo de enterar de que hay una versión gratuita pues mejor que mejor…


Resulta que ahora puedes descargarte la versión 3 del producto y registrarla de forma gratuita. Para ello descárgate el archivo este, y luego regístralo aquí.


Es una oferta para los lectores de PC Plus en Reino Unido, pero te vale a ti también 🙂


Es una excelente oportunidad par que pruebes este producto, si bien su versión 3 es bastante antigua y no tiene las capacidades de la última, te servirá para hacer muchas cosas.


Y si realmente le sacas partido no olvides comprarte la versión 5. No te arrepentirás. Además, te valdría la actualización desde la 3 en lugar de comprar la completa, con lo que te ahorras algo de dinero. Ahora bien, tendrás que instalar la 3 siempre antes de instalar la 5 lo cual es un poco «rollo». Yo me compraría sin duda la 5. Es uno de los pocos productos de software que me parecen baratos para lo que te dan 🙂

Registro global de controles en ASP.NET

Cuando queremos utilizar un control en una página Web, sea este un Webcontrol o un control de usuario (.ascx) tenemos que añadir siempre en la cabecera, justo después de la directiva de página, una directiva especial que define dónde encontrar el control y cómo trabajar con él. Por ejemplo:



<%@ Page Language=»VB» AutoEventWireup=»false» CodeFile=»Default.aspx.vb» Inherits=»_Default» %>


<%@ Register Assembly=»ControlescampusMVP» Namespace=»ControlescampusMVP» TagPrefix=»mvp» %>
<%@ Register TagPrefix=»kwc» TagName=»cabecera» src=»Controles/Cabecera.ascx» %>


La primera línea es la directiva de página. Las que nos interesan son las otras dos.


La primera directiva de control registra todos los controles contenidos dentro del ensamblado controlescampusMVP.dll y, dentro de éste, todos los contenidos en el espacio de nombres ControlescampusMVP (lo he sacado de un ejemplo del curso de preparación del examen 70-528 de campusMVP) para que puedan ser utilizados enla página actual usando el prefijo «mvp». Así podríamos usar un control de esa DLL cone sta sintaxis:



<mvp:mailToLink ID=»MailtoLink1″ runat=»server» EMail=»yo@miservidor.com»>Mandame un correo</mvp:mailToLink>


La segunda línea se usa para definir un control de usuario «cabecera» cuyo código está ubicado en el archivo Cabecera.ascx dentro de la carpeta Controles. Algo muy típico para reutilizar partes de la interfaz de usuario. Este control sólo hay que arrastrarlo desde el explorador de proyectros sobre la página para obtener una sintaxis similar a esta:



<kwc:cabecera ID=»Cabecera1″ runat=»server» />


Bueno, hasta aquí todo normal y nada nuevo.


Lo que ocurre con la ténica anterior, que por otro lado es la que usa todo el mundo, es que si tenemos el control o controles ubicados en muchas páginas ASPX de nuestro proyecto y, de repente, decidimos cambiar la ubicación de los archivos .ascx o el nombre de una clase, o cualquier otra de las variables que están afectadas por las directivas Register, tendremos que recorrer todas y cada una de las páginas para retocar la defición de los controles. Mala cosa, sí señor 🙁


Existe una solución mejor que nos permite tener esas definiciones en un solo punto de la aplicación y poder utilizar los controles en cualquier página. De este modo sólo los definimos una vez y si necesitamos retocar esas directivas no tendremos que recorrernos la aplicación entera para hacerlo.


El «truco» es incluir la definición de los controles en el web.config, así:



  <system.web>
    <pages>
      <controls>
        <add tagPrefix=»mvp» assembly=»ControlescampusMVP»/>
        <add tagPrefix=»kwc» tagName=»Cabecera» src=»~/Controles/Cabecera.ascx»/>
      </controls>
    </pages>
  </system.web>


Ahora tenemos definidos los prefijos y los controles en el ámbito global de nuestra aplicación y podemos ponerlos directamente en los formularios sin necesidad de tener que declararlos en cada uno, con las ventajas consabidas.


Antes de que nadie me lo pregunte: no, el hacer esto no implica ningún tipo de merma de rendimiento por el hecho de tener disponibles los controles en todas las páginas, ya que si no se utilizan ASP.NET hace caso omiso de la definición, y si se utilizan el código generado es exactamente el mismo (sólo hay que ir a la carpeta temporal de ASP.NET y ver el código autogenerado allí).


De hecho esta técnica es la que usa la propia plataforma .NET puesto que si vamos al archivo web.config global de la maquina vemos que lo usa, por ejemplo, para incluir a los controles de WebParts.

Web 2.0: tu pregunta chorradas que yo contestaré con otras mayores

Leyendo el otro día una conocida revista del sector, hablaban sobre el outsourcing de servicios informáticos, y en un lateral venía una pequeña columna «El consultor responde». Vale. La pregunta que le hácían al pobre consultor en cuestión (no daré nombres) era la siguiente:


«¿Cómo puede ayudar la Web 2.0 con toda su batería de herramientas (blogs, wikis, RSS, web services, etc..) al outsourcing» (sic)


Claro, la pregunta se las trae. A mi me hubieran pillado completamente fuera de juego, por no mencionar que, en general, eso de llamar Web 2.0 a todo ese batiburrillo de cosas que mencionan (así, en abstracto) me parece una confusión de términos, pero bueno… A lo que vamos. ¿qué creeis que le contesta el consultor?… Pues ahí va:


«Para que el outsourcing se realice con éxito, y al margen de las aplicaciones específicas que implique, existen un conjunto de herramientas, enmarcadas en lo que se conoce como Web 2.0, que ayudan a agilizar este proceso. Todas estas herramientas permiten manejar información no estructurada, lo que redunda en una mejor transferencia de conocimiento e información entre cliente y proveedor, al tiempo que se refuerzan los flujos de comunicación y permiten realizar una gestión colaborativa de todo el proceso.«


¡Comorrrll! ¿Mandé? Leedlo con calma… Yo tuve que leerlo varias veces para tratar de asimilar lo que dice. No me extraña que el hombre haya contestado algo tan vago porque la preguntita… en fin… pero ¿se puede decir menos sobre esto en ese espacio?. ¿No era mas facil decir «no me preguntes chorradas, tio» o «este mes me preguntas otra cosa que eso no pega ni con Loctite»?


En fin, es que me hizo mucha gracia todo el tema (ponte en la piel del pobre tipo que tiene que contestar a eso en un cuatro líneas) y me pareció simpático compartirlo 🙂

Cómo distinguir si un control de usuario está cacheado o no

Una de las principales ventajas de los controles de usuario de ASP.NET (User Controls) es que, al igual que las páginas ASPX, mediante el simple uso de unos atributos de directiva podemos hacer que se haga caché automática de su salida. De este modo podemos guardar en caché por un tiempo determinado una versión del control por cada valor que tome un parámetro, una cabecera del navegador, el valor de un control, etc… Ya he hablado repetidas veces sobre esto en este blog.


Hoy voy a comentar una técnica que nos permite saber si la instancia actual de un User Control en nuestra página es realmente resultado de haber ejecutado el control o, por el contrario, se ha obtenido directamente de la caché, sin procesamiento.


La utilidad de esto es, aparte de las cosas raras que puedan surgir por ahí que lo lleguen a requerir, para poder trabajar con él directamente cuando se instancia de manera dinámica en una página (con el método LoadControl de la clase Page). Normalmente el código que usamos es similar a éste:



MicontrolUsuario mcu = (MicontrolUsuario) LoadControl(«MicontrolUsuario.ascx»);
this.Controls.Add(mcu);
//Ahora hacer algo con él (normalmente asignarle un ID, texto, otras propiedades, etc…


Esto funciona de maravilla hasta que decidimos incluir en el control unos atributos de caché para no tener que procesarlo de cada vez. A partir de ese momento el código anterior «casca» y se produce un error en tiempo de ejecución.


El motivo es que cuando un control está en caché en lugar de instanciarse a través de su verdadera clase, se instancia un objeto de la clase PartialCachingControl que se usa para devolver únicamente los contenidos de la salida del verdadero control. Por ello al intentar convertirlo en un objeto de la clase original (como en el fragmento anterior), es cuando se produce un error, porque no lo es…


Por lo tanto, el código que nos permite detectar si un control de usuario está siendo usado desde la caché es tan simple como comprobar si es un objeto de la clase mencionada, así:



MicontrolUsuario mcu = (MicontrolUsuario) LoadControl(«MicontrolUsuario.ascx»);
this.Controls.Add(mcu);
if (mcu is MicontrolUsuario)
{
  //Ha sido procesado (no caché)
}
else if ( (mcu is PartialcachingControl) && 
          ((PartialCachedControl)mcu).CachedControl != null))
{
    //El control está en caché y se almacena dentro de esa propiedad
    MicontrolUsuario cacheado = (MicontrolUsuario)((PartialCachedControl)mcu).CachedControl;
    //ahora se hace lo que haga falta con él
}


Como vemos es relativamente sencillo, pero hay que controlar este truco para poder hacerlo como es debido.


Espero que te resulte útil 🙂

Descárgate las patentes de mucha tecnología de Microsoft, por ejemplo, ASP.NET :-)

Lo cierto es que Google ha perdido un poco el factor «cool» que tenía hace tan solo unos meses. Sí, se ha hecho demasiado grande y poderoso, y eso asusta. A partir de ahora le tocará sufrir paulatinamente lo mismo que otros, como Microsoft, han padecido a lo largo de los años debido a ello.


No obstante yo sigo siendo un gran fan de esta empresa y sus aplicaciones. Una de las que menos se conocen es Google Patent Search. A través de esta aplicación puedes buscar todas las patentes de la oficina de patentes de los EEUU, filtrando por palabras, nombre del inventor, nombre de la empresa asociada o código de clasificación entre otros. Ello puede ser muy interesante para encontrar información sobre una determinada tecnología, un determinado proceso industrial, o para ver si alguien ha patentado ya esa brillante idea que tuviste hoy en la ducha 😉


El caso es que el otro día, curioseando con esta aplicaicón encontré algunas patentes muy interesantes relacionadas con mi área de especialidad técnica, es decir, el desarrollo de aplicaciones Web y más en concreto con tencología de Microsoft, como por ejemplo:



State management of server-side control objects, o sobre cómo se guarda el estado de los controles ASP.NET entre un envío de la página y los siguientes.


Postback input handling by server-side control objects, o lo que es lo mismo, cóimo funcionan los postback de las páginas ASP.NET, una verdadera revolución en el desarrollo Web.


Databinding using server-side control objects.


Web controls validation, el sistema utilizado por ASP.NET para permitir la validación tanto en cliente como en servidor de los controles Web.


System and method for providing language localization for server-based applications, todo el sistema de localización cultural de páginas ASPX.


Y hay muchas más. Échales un vistazo y busca alguans más. Te resultará muy interesante 🙂

Ayer presentamos Krasis Press en Madrid. Ahí van unas fotos…

Krasis PressAyer hicimos en Madrid la presentación oficial a la prensa y a los amigos de nuestra nueva aventura en el ámbito de la divulgación y la formación: Krasis Press.


La presentación fue un éxito con muchos amigos, alumnos, personas de Microsoft, representates de la prensa (y gente que era varias cosas a la vez, jeje), en la sala Marie Curie del edificio corporativo de Microsoft en Madrid.


Yo, como máximo responsable de la nueva editorial, me encargué de presentar al respetable la nueva editorial, repasando brevemente la historia de Krasis, campusMVP y cómo todo ello nos ha llevado a crear Krasis Press y porqué creíamos que nuestra iniciativa iba a funcionar incluso en un mercado en clara recesión como es el editorial. Cristina González Herrero, responsable del programa MVP de Microsoft en España y Portugal también habló un rato para explicar a los presentes qué son los MVP y en qué consiste el programa. Asimismo tuvieron la oportunidad de hablar algunos autores de la editorial, en concreto Octavio Hernández, Unai ZorrillaAlejandro Mezcua y yo mismo.


Intentamos (creo que con éxito) que no fuera la típica rueda de prensa aburrida con cifras y charla técnica, así que todo fue con un estilo desenfadado y creo que nos lo pasamos muy bien todos tanto en la presentación como en la invitación que hubo después (café, zumo, bebidas, cruasanes, pastas…).


He dejado en Spaces unas pocas fotos del evento para que podáis ver un poco como fue la cosa.


¡Muchas gracias a los que asistísteis!

Popfly: una esfera 3D con las fotos de nuestros tutores

Llevo ya unos meses en la beta de PopFly, el creador de elementos interactivos y páginas con Silverlight de Microsoft. La verdad es que es muy fácil crear aplicaciones sencillas que saquen información de Internet y la consuman de diversos modos, normalmente bastante espectaculares.


Por ejemplo, he creado en unos 5 minutos y sin necesidad de programar, un control que muestra en una esfera tridimensional las fotos de todos los tutores de campusMVP sacadas directamente y en tiempo real de nuestra página.  Puedes probarlo en:


http://www.popfly.ms/users/jalarcon/Tutores%20campusMVP.small


Necesitarás tener Silverlight 1.0 instalado, claro,pero si no lo tienes ya te salta la posibilida de instalarlo, así que nada.


En tiempo real quiere decir que si quito y añado fotos de allí, automáticamente este control las va a coger, lo cual está muy bien porque se adapta a condiciones cambiantes. Fíjate además en que en la página hay más imágenes aparte de las de los tutores, y sólo coge las fotos de los tutores con un pequeño truco en la configuración que he hecho y que, en realidad, implica saber un poquito de programación 😉 Se muestra el truco en la captura de imagen de abajo…



Pulsa para agrandar


Como vemos es muy fácil: basta con arrastrar un bloque ImageScrapper, un bloque de filtrado para seleccionar sólo las imágenes que nos interesan (es tal vez el único truco que tiene) y un bloque Photosphere que hace el efecto 3D que nos interesa. enlazarlos y confgurar unos pocos parámetros. Listo.


¡Espero que os guste! 🙂

Google Phone es Android: lanzado oficialmente el proyecto y la ‘Open Handset Alliance’

El esperado proyecto Google Phone acaba de ser presentado oficialmente hace unas horas (el lunes día 5), y toma la forma del proyecto Android, la firma que adquirió en julio de 2005 y cuyo software ha servido de base para crear el Sistema Operativo móvil que Google nos acaba de anunciar.


GMobileAdemás, se presentó también la Open Handset Alliance, un grupo de más de 30 firmas de tecnologías móviles que se unen para, entre otras cosas, impulsar Android, que se define como «la primera plataforma completa, abierta y libre para dispositivos móviles«. En la alianza encontramos nombres como T-Mobile, HTC (sí, los que siempre han usado Windows Mobile), Qualcomm, Motorola, Telefónica de España (atención a esto) China Mobile, Texas Instruments, eBay, Sprint Nextel o Samsung (lista completa de la OHA).


Se anuncia que los primeros dispositivos con Android se comercializarán en la segunda mitad de 2008, y un SDK (un conjunto de herramientas de desarrollo) para programadores estará disponible para ser descargado a partir del 12 de noviembre desde ‘android.com’ (el sitio web de la antigua firma Android). Además, hace unas semanas se rumoreaba que 50.000 dispositivos móviles con Android instalado iban a ser distribuidos entre miles de desarrolladores para que fuesen probando la plataforma.


Le ha salido un duro competidor tanto a Nokia como a Microsoft.


Lo que promete Android



Basada en Linux: El núcleo de Android está construído sobre Linux, aunque su código fuente es totalmente nuevo para permitir que las aplicaciones desarroladas sobre él puedan usar las funciones de acceso a disco, mensajería o la cámara de manera sencilla. El software se ejecuta en una máquina virtual que optimiza todo de acuerdo a las capacidades de energía y hardware del equipo sobre el que se ejecute. Por cierto, el SO es GPL, vía licencia de Apache v2.


Sin distinción entre dentro y fuera: Android no hará distinciones entre aplicaciones propietarias y de terceros; es decir, todas serán creadas de la misma manera. No habrá que estar atado a un diseño u orden establecido pudiendo hacer, en efecto, lo que te de la gana sobre esa máquina virtual.


Muy basado en Internet: Puedes recabar de Internet los datos que quieras (por ejemplo de Google maps) y juntarlo con los datos que estén en el teléfono (como los contactos, el calendario o la posición GPS) y crear una aplicación para Android. Se abren muchas posibilidades. 


Más información: Anuncio oficial de Android en el blog de Google

La anti-caché: sustitución post-caché en ASP.NET 2.0

En este blog y en otros ámbitos (charlas, libros, artículos…) he hablado muchas veces sobre la caché en ASP.NET. Usar la caché en todas sus variantes es un método fundamental para obtener alto rendimiento en nuestras aplicaciones web, aunque sorprende ver cuántas aplicaciones Web hay por ahí que no le sacan partido en absoluto. Así que debemos aplicarla cuando sea pertinente. Eso sí, hay que hacerlo con cuidado y pensando bien cómo lo vamos a hacer, pues puede darnos más problemas de los que nos soluciona.


Hoy voy a hablar de una característica nueva que apareció en ASP.NET 2.0 y que no usa demasiada gente. Y es que realmente de lo que voy a hablar es más bien de una anti-caché 🙂


Se trata de dela sustitución post-caché. Ésta trabaja justo al contrario que una caché de salida normal. Es decir, en lugar de hacer caché de una parte de la página, deja que ésta se actualice, manteniendo todo lo demás. Se entiende mucho mejor con un ejemplo.


Imaginemos una página grande, con diversas zonas, que apenas cambia excepto por una o dos pequeñas zonas. Es decir, entre petición y petición a la página prácticamente todo es igual siempre menos algún dato o algún texto determinados. El caso típico es que debamos actualizar la fecha y hora actuales o el número de registros que hay en una base de datos. ¿Cómo haríamos caché de una página como ésta?.


En ASP.NET 1.x no nos quedaría más remedio que descomponer las partes de la página en varios controles de usuario. De este modo componemos la página a partir de los controles, y en lugar de hacer caché de la página, haríamos caché de los controles de usuario (que ya sabéis que soportan también las directivas OutputCache para hacer caché de salida. Debe de haber un montón de páginas por ahí hechas de esta forma.


Control SubstitutionEn ASP.NET 2.0 tenemos una opción mucho más práctica. Se trata del control Substitution. Lo podemos encontrar al final de los controles estándar de la barra de controles, listo para ser arrastrado a la página.


Este control lo colocaríamos en la zona de nuestra página que queremos que no se mantenga dentro de la caché, es decir, que debe variar en cada petición.


Dispone de una propiedad que se llama MethodName y que, como su propio nombre deja entrever, permite especificar el nombre de un método estático (Shared en VB) de la página, que se llamará durante el renderizado del control para obtener el texto o el HTML que queremos que aparezca en su ubicación al visualizar la página. De este modo devolvemos lo que necesitemos en cada caso olvidándonos de la caché que esta afectando al resto de la página.


El método estático se puede llamar como queramos (claro), pero debe tener la firma siguiente:


public static string MiAntiCache(HttpContext contexto)
{
}

Es decir, devuelve una cadena y toma comop parámetro el contexto actual de la llamada a la página, de forma que podamos usarlo para acceder a toda la información sobre ésta (como la sesión o las variables de contexto, por ejemplo).


¡Listo! con esto conseguiremos hacer caché de todo menos de trocitos de la página, lo que en ciertos casos nos va a resultar muy útil.

Nuevo asistente para crear un proyecto desde archivos sueltos en VS2008

En Visual Studio 2008 2005 han incluido un asistente sencillo pero muy práctico que permite crear un nuevo proyecto para trabajar con él a partir de archivos sueltos que tengamos en una carpeta y sus subcarpetas:



De este modo si perdemos el archivo de proyecto (o directamente nunca lo hemos tenido) podemos crear uno nuevo sin tener queorganizar manualmente los archivos o crear uno vacío e ir añadiendo cosas:



A ver, no es que sea la bomba, pero puede llegar a ahorrarnos bastante tiempo 🙂


NOTA: He rectificado este post porque alguien me hizo notar muy correctamente que este asistente estaba ya en VS2005, y no sólo en VS2008 como yo pensaba. Nunca me había fijado y cuando lo vi en VS2008 pensé que era nuevo 🙁


Ya está corregido 🙂