Cómo usar legalmente Windows Vista durante 120 días sin pagarlo y como ahorrarte una pasta en la licencia

Parece que suena raro ¿verdad? Pues no. es posible y ademas totalmente legal según reconoce la propia Microsoft.


Lee si quieres en el blog de Brian Livinsgton la forma de hacerlo. Y es que todas las veresiones de Vista te dan 30 días de uso sin necesidad de activar el producto (excepto la Ultimate que te da 3 días). Lo que ocurre es que existe una pequeña utilidad oculta -puesta por la propia Microsoft- llamada slmgr.vbs que está en C:WindowsSystem32 y ejecutarla con cscript.exe desde la línea de comandos así:



slmgr -rearm


Lo que conseguimos es que el periodo de evaluación de Vista se prorogue otros 30 días a partir de la fecha actual, y podemos repetir el proceso hasta tres veces, lo que nos da un periodo extendido de prueba ¡de hasta 120 días!


Esto es estupendo por ejemplo en entornos de formación: para impartir un curso que dure dos o tres meses sin necesidad de comprar licencias.


Además es legal y no rompe las condiciones de licencia de Windows. Incluso Microsoft documenta esta característica en Windows Vista Volume Activation 2.0 Step-By-Step Guide.


Vale la pena leer completo el artículo de Livingston que reseño arriba pues trae más cosas interesantes y algunas observaciones curiosas.


Otro truco también interesante es el que te cuenta cómo te puedes ahorrar una pasta comprando la versión de actualización de Vista en lugar d ela completa e instalarla aún sin disponer de una versión anterior legal del sistema operativo. Esto ya es mucho más dudoso legalmente pero lo cuenta el mismísimo Paul Thurrot en su sitio, así que si lo dice él no voy a ser yo quien le lleve la contraria desde luego 😉

Utilizar diversos navegadores para probar nuestras aplicaciones ASPX

Este truco no lo conoce mucha gente, pero si usas la opción «Explorar con…» al pulsar con el botón derecho en una página ASPX de tu proyecto en Visual Studio 2005:



se abre un diálogo muy interesante. Para empezar puedes utilizar el navegador interno de Visual Studio en lugar de IE para navegar por las páginas, y así todo «queda en casa». Muy práctico. Incluso puedes hacer que sea el navegador por defecto.



Obviamente basta con pulsar Agregar y seleccionar Firefox.exe para poder navegar con este otro navegador (u Opera o con cualquiera).


Además, y muy interesante también, puedes elegir en la lista desplegable de la parte de abajo del diálogo en qué resolución quieres que se abra el navegador elegido, para así probar la aplicación en diversos tamaños de pantalla.


Este es uno de esos pequeños detalles que por tenerlo delante de las narices no tocamos nunca y se nos escapan. ¡Con lo útil que es! 🙂

Desfragmentación de discos en Windows Vista

Lo cierto es que, aunque Windows Vista me encanta, tiene algunas cosas que no dejan de irritarme. llámame conservador si quieres, pero es que hay algunos detalles que estaban más conseguidos en Windows XP que en Vista. Por ejemplo, el desfragmentador de disco.


Yo no suele desfragmentar el disco apenas nunca. En Windows XP con NTFS como sistema de archivos pueden pasar meses o años antes de que el desfragmentador te diga que es necesario realizar este proceso. Pero el otro día se me dio por realizar una desfragmentación en mi equipo con Windows Vista, cosa que no había hecho nunca hasta ahora en el nuevo sistema operativo. Cual fué mi sorpresa cuando vi la nueva interfaz de la herramienta, totalmente capada y opaca para el usuario.


Ahora existe una programación por defecto para desfragmentar (una vez a la semana) y se hace de forma transparente al usuario, por lo que según deben de haber pensado los chicos de Microsoft no hace falta que el usuario sepa nada más. Así que la interfaz no te dice el grado de fragmentación de tu disco, ni el tiempo que vas a tardar en desfragmentar cuando empieza el proceso (indica un vago «unas horas»).



Es de coña. La justificación es, por lo que he leído por ahí, que total la información que daba antes era muy inexacta y el desfragmentado es un proceso no lineal. Vale, de acuerdo, está claro que la barra de progreso aquella no servía de mucho pero al menos la vista del estado de fragmentación, el conocer de antemano el % de fragmentación de una unidad y este tipo de cosas ayudaban bastante ¿no?. Ahora no hay nada de eso….


….o casi.


La primera opción que tenemos para controlar un poquito el proceso de desfragmentado es hacerlo desde la línea de comandos con la aplicación defrag.exe. Para ello debemos tener privilegios administrativos, por lo que debemos lanzar la línea de comandos con el botón derecho y escoger «Ejecutar como administrador»*.


Por ejemplo, para ver el estado de fragmentación de una unidad escribe:



defrag c: -a -v


esto hace que se analice (-a) la unidad c: mostrando los detalle (-v de «verbose»).


Puedes ver un resultado en la siguiente figura:



Si queremos desfragmentar una unidad y que se muestre el progreso podemos escribir:



defrag c: -r -v


Con esto se hace una desfragmentación parcial que es la más habitual, en la que se hace caso omiso de los archivos que ocupen más de 64MB de tamaño (que no se desfragmentan). Esta es equivalente a usar la interfaz gráfica que mostré arriba.


Si queremos podemos forzar una desfragmantación completa del disco que incluya incluso los archivos más grandes usando la opción -w, así:



defrag c: -w -v


Con esto los obsesos del control y demás usuarios avanzados ya tenemos algo que nos deja más tranquilos, jeje.


*Nota: Esto me da pie a contar un truco estupendo de Windows Vista: para lanzar con privilegios administrativos cualquier programa que tengamos seleccionado en el menú inicio basta con pulsar al mismo tiempo CTRL+MAY y ENTER. Por ejemplo, abre el menú inicio y escribe en la barra de búsqueda ‘cmd’. En cuanto aparece la línea de comandos pulsa CTRL+MAYUSCULAS+ENTER. Verás como se abre en modo de altos privilegios.


Una buena opción gratuita de terceros


Si andar a vueltas con la línea de comandos no nos convence yo he probado y me ha parecido muy útil la utilidad DiskDefrag de Auslogics. Es gratuita y funciona en Windows XP, 2000, 2003 y en Windows Vista. Tiene una interfaz sencilla y agradable que muestra el proceso de desfragmentación de forma similar a como lo hacía la utilidad de Windows XP.



Lo único que le echo en falta es que te saque un pequeño diagnóstico antes de comenzar para que puedas decidir si merece la pena o no hacer el desfragmentado.

Permitir la validación de un control con los validadores estándar de ASP.NET

Tal y como prometí en un anterior post, voy a explicar cómo podemos conseguir que un control sea utilizable directamente por los controles de validación estándar que vienen con ASP.NET.


Ciertos controles Web (por ejemplo el control Calendar) no permiten su uso combinado con los controles de validación (estilo RequiredFieldValidator, RangeValidator, etc…), lo cual es una lástima porque para poder validar su contenido tenemos que construir nuestro propio control de validación (en fin…) o bien usar eventos de servidor para poder validarlos. Una de las ventajas de los controles de validación de ASP.NET es que ya realizan una validación en el cliente además de la que se hace en el servidor después, lo que ahorra tiempo y agiliza mucho la interfaz. Además están integrados en la validación de la página y permiten comprobar la propiedad IsValid de ésta antes de continuar con suprocesamiento, algo muy útil también.


Por otro lado es muy habitual combinar diversos controles Web con una propósito común dentro de un control de usuario (.ascx) de forma que podamos reutilizarlos en cualquier lugar de la interfaz. Al igual que (como hemos visto), por defecto, no tienen un método para establecer su foco, tampoco es posible usarlos con los validadores estándar, por lo que pierden parte de su utilidad al no poder usarlos del mismo modo que los controles más habituales.


Sería interesante poder añadir la capacidad de trabajar con los controles de validación a este tipo de controles. Vamos a ver cómo conseguirlo.


Un ejemplo real


Por ejemplo, imagina un control ASCX de selección específico de nuestra aplicación. Éste contiene un par de listas desplegables para seleccionar elementos desde la base de datos, una lista de elementos vacía inicialmente y un botón que permite añadir elementos a esta lista para su selección. Queremos colocar este control en cualquier formulario y que nos sirva, por ejemplo, para seleccionar localidades de un país. Su aspecto sería similar a este:



Este control de la imagen es uno real, usado en diversos lugares de la aplicación de uno de nuestros clientes para permitir la selección de zonas y áreas geográficas relacionadas. Tiene una funcionalidad relativamente compleja que implica el uso de bases de datos, validación de los datos seleccionados, etc… En algunos lugares de la aplicación se permite su uso de forma que no es obligatoria la selección de elementos (por ejemplo para las búsquedas, ya que si no se indica zona alguna no se restringe por dicha dimensión), y en otras zonas es necesario validar que se haya seleccionado como mínimo una zona, o incluso más de una.


Con el control creado de la manera habitual, al colocarlo en un formulario no podemos utilizar los controles de validación con él, por lo que no nos quedaría más remedio que responder a un evento de servidor (por ejemplo a la pulsación del botón de la acción principal del formulario), hacer la comprobación pertinente y mostrar un mensaje en el cliente con una etiqueta, con lo que no se integraría con la validación de los restantes controles.


Añadiendo la funcionalidad de validación


Para que un control pueda ser validado por un validador común debe implementar alguna propiedad de tipo texto que devuelva un valor interpretable por el validador. Normalmente deberíamos hacer que devolviera una cadena vacía en caso de no contener un valor correcto y así funcionará bien con el RequiredFieldValidator.


En nuestro caso hemos definido la propiedad NumItems del control ASCX que simplemente indica el número de zonas seleccionadas en el control en un momento dado:


public string NumItems
{
  get 
  {
    if (lstSeleccion.Items.Count > 0)
      return lstSeleccion.Items.Count.ToString();
    else
      return String.Empty;
    }
}


Una vez definida esta propiedad debemos indicar al runtime de ASP.NET que será ésta la utilizada para realizar las validaciones. ello se consigue usando el atributo ValidationProperty. Éste toma como parámetro el nombre de la propiedad a utilziar en las validaciones, por lo que en la definición de nuestra clase escribimos:


[ValidationProperty(«NumItems»), SupportsEventValidation]
public partial class Controles_SelectorZonas : System.Web.UI.
UserControl
{



Así indicamos que los validadores deben usar la propiedad NumItems para realizar la validación. El otro atributo, SupportsEventValidation, se utiliza para indicar al runtime que nuestro control soporta los eventos de validación ya qe de otra forma no se generarían eventos de validación.


Nota: Si quisiésemos hacer algo similar con un control estándar que no soporte validación, como el calendario, tendríamos que crear una nueva clase que heredara de éste y decorarla con este atributo para poder usarlo.


Vale. Listo. Si ahora soltamos el control en un formulario Web y añadimos un control de validación veremos que… ¡no aparece nuestro control en la lista de los controles que podenmos utilizar! 🙁


No pasa nada. Es un pequeño efecto secundario. Simplemente añadámoslo a mano en el atributo ControlToValidate del validador y veremos que funciona correctamente. Por ejemplo:



<asp:RequiredFieldValidator ID=»RequiredFieldValidator1″ runat=»server» ControlToValidate=»lstDestinos»
CssClass=»ErrorMsg» Display=»Dynamic» ErrorMessage=»Debe seleccionar al menos una zona de destino.»></asp:RequiredFieldValidator>


El valor del atributo ControlToValidate, que es el nombre del control ascx que queremos validar, lo hemos metido a mano, pero funciona  perfectamente que es lo que buscábamos. Ahora nuestro complejo control de usuario se integra bien en la estructura de validación de la pa´gina y podemos trabajar con él como con cualquier otro control validable.


Super-útil ¿no? 🙂

Búsquedas directas desde la barra de IE

Si sigues normalmente este blog recordarás que hace unos días expliqué como integrar tu buscador o índice con las búsquedas de Open Search y también con la barra de búsquedas de Internet Explorer 7. Para ello se usaba el estándar Open search. En aquella ocasión comenté que existía la posibilidad de hacer que IE realizara búsquedas en nuestro buscador directamente desde la barra de direcciones. Vamos a explicar ahora como conseguirlo…


La idea es que teclees por ejemplo (en el caso de nuestro buscador www.pandeo.com):



PANDEO empresa arquitectura


y que realice automáticamente la búsqueda de esos dos términos en el buscador Pandeo.com.


Para conseguirlo lo único que necesitamos es introducir una clave en el registro.


Ejecuta regedit.exe para editar el registro y vete a la rama: HKCUSoftwareMicrosoftInternet ExplorerSearchURL


En ella deberás crear un nuevo nodo (clave) con el nombre del comando que quieres usar, en este caso PANDEO.


En el valor por defecto de este nodo debes introducir la URL de búsqueda a utiliar marcando con un «%s» la posición donde deben introducirse las palabras a buscar. En el caso de Pandeo.com esta URL es:



http://www.pandeo.com/?Categ=0&Search=%s


De esta forma el nodo queda como en esta figura:



Con esto ya está todo listo. Ahora puedes abrir el navegador y escribir en la barra de direcciones algo como lo del ejemplo inicial para que se realicen automáticamente las búsquedas en Pandeo.com.


Por supuesto puedes escribir indistintamente en mayúsculas o minúsculas ese comando o utilizar otro cualquiera (por ejemplo algo más corto, como PND o similar).


¡Ah!, claro, puedes escribir un pequeño archivo de VBScript o JScript que se ejecute desde Windows Scripting Host y que realice la creación de la clave y el valor automáticamente por el usuario, para facilitarles la vida un poco. En Pandeo.com está hecho. Aquí o dejo como ejercicio para el lector porque es muy fácil, 🙂


Espero que teresulte interesante.

Fijar el foco en un control de usuario

Hace unos días me escribió un lector del blog preguntándome como hacer esto. La cosa es que decía que cuando colocaba un control «normal» de ASP.NET en el formulario, bastaba con llamar a su método Focus() para que, al mostrarse la página en el navegador, dicho control tuviera el foco (por ejemplo un TextBox). El caso es que no tenía la misma funcionalidad en los controles de usuario que se construía para reutilizar la funcionalidad de la interfaz y le resultaría muy útil.


La solución es muy sencilla: un control de usuario no es más que una clase normal y corriente y como tal se puede extender con nuevos métodos y propiedades. Por ello basta con que creemos un método Focus() propio que delegue en el método Focus() del control interno que queremos que pille el foco cuando el control tenga el foco. Me explico… Imaginemos que en nuestro control de usuario ASCX tenemos varios controles: unas etiquetas, un par de cuadros de texto, una lista desplegable, etc… y queremos que cuando el control tenga el foco éste se sitúe en el control de nombre Texto1. Lo único que tenemos que hacer es definir el método Focus así:


Public void Focus()
{
   Texto1.Focus();
}


Es bien fácil. Ahora podremos poner el foco programáticamente en nuestro control del mismo modo que lo haríamos con otro de ASP o personalizado.


En un próximo post voy a explicar algo mucho más interesante que esto: cómo hacer que nuestro control de usuario ASCX sea capaz de ser validado por los controles de validación nativos que vienen con ASP.NET. Esto es muy interesante porque podremos usarlos del mismo modo que un control normal para meterles la validación de forma externa y no, como es típico, incluyendo los controles de validación dentro del propio ASCX que no es nada óptimo. A ver si saco tiempo y lo pongo pronto.

Pensé que me libraría… pero no

A mi también me ha llegado el «tagging». En esta ocasión me ha taggeado El Guille, si bien me hace un par de semanas me había taggeado también Luis Ruiz Pavón, y yo no mehabía enterado (me lo dijo el otro día una persona de mi oficina).


En fin, que cuando te taggean hay que contar cinco cosas sobre uno mismo que no sean las típicas ¿no? pues vamos a ello a ver que invento:



1.- Me encantan los gatos. Cuando salen buenos son los bichos más adorables que ha hecho la naturaleza. Actualmente tengo una gata que se llama «patucas», totalmente negra y con las patitas y el pecho blancos. Y es de esos que han salido buenos felinos, así que da gusto tenerla en casa. Os dejo una foto en el lateral 🙂


2.- El deporte nunca me ha interesado demasiado. Si acaso ver el tenis o la NBA por la tele, pero sólo las finales y cosas así. Sin embargo desde hace un año me he aficionado bastante al Golf gracias a mi amigo Rafa. Podéis verme de vez en cuando en el estupendo campo de Mondariz. Lo cierto es que me parecía una chorrada y una pijería, pero ¡hey! cuando lo pruebas y te enseñan bien te aseguro que la cosa cambia por completo. Es muy muy difícil hacerlo bien y puedes practicarlo aunque no estés muy en forma. Os lo recomiendo.


3.- Durante el primer año y medio en el que me fui a vivir con mi mujer me ocupé de la cocina. Como nunca había hecho absolutamente nada me compré unos cuantos libros de cocina y los fuí siguiendo hasta que me harté (como digo a los 1,5 años). Lo malo es que ahora sé hacer cosas muy elaboradas (estilo truchas en salsa de almendras con boletus y no sé qué) pero no tengo ni idea de lo más básico, como por ejemplo freir un huevo o hacer una tortilla. De veras… Y es que en los libros de cocina no vienen esas cosas y por lo tanto no las he aprendido. ¡como somos los frikis! jajaja


4.- Durante 8 años me movía en moto… hasta que en el verano de 2005 tuve un accidente. Me paré en un semáforo y un coche que venía pinzado y sin mirar me llevó por delante y me hizo volar unos metros, acabando en el hospital. Desde entonces he pasado de la moto, más que nada porque no me gustó nada como dolía aquello 🙁 Ahora tengo dos coches: un Smart para la ciudad y un Saab 9-3 Sport Sedan Vector para cuando hay que ir un poco más lejos. El Smart es lo mejor del mundo para la ciudad si no quieres llevar una moto. se lo recomiendo a todo el mundo.


5.- Mi verdadera profesión es la de ingeniero industrial, especializado en ingeniería mecánica, intensificación máquinas. Lo flipas, y yo dedicándome a la programación. Es decir, que lo mio era realmente más la grasa, los pistones y estas cosas que los bytes y los bits. pero me picó el «vicio del silicio», como yo lo llamo, y al final me dediqué a la informática dejando de lado la ingeniería. Hay que joderse y para eso estudié una carrera de seis años más proyecto. Os juro que a veces me arrepiendo de no haberme quedado con los engranajes, sobre todo cuando veo algunas chuladas que hacen mis amigos. Pero oye… que me quiten lo bailado.


Bueno ahora me toca taggear a mi, pero ya casi todos frikis los que conozco que hacen un blog han sido taggeados, así que… en fin, igual repito a alguno que ya tenía que haber publicado y no lo ha hecho así que ahí va: Unai Zorrilla, Iván González, Pablo Peláez, Alejandro Mezcua y Ricardo Varela. ¡¡Soys unos «crases»!!.

5 de febrero, lunes: Encuentro on-line conmigo


El próximo lunes día 5 de Febrero, a las seis de la tarde, puedes participar en directo en el encuentro digital de La Voz de Galicia, en el que el menda estará en directo chateando con los lectores del diario sobre Windows Vista y todos los recientes lanzamientos de Microsoft. Aprovecha la ocasión para preguntarme las cosas que se te ocurran sobre tecnología. Puedes enviar ya tus preguntas desde la página del encuentro digital.