Tareas de preparación de un PC

A modo de referencia, pongo este decálogo o pequeña lista de las tareas de preparación que suelo realizar cuando preparo un PC, ya sea para Windows o para Linux (Ubuntu).

Windows

Preparación del entorno

  • doble partición en disco duro (c: y d:)
  • añadir el usuario necesario (Oscar, Htpc, etc.) como administrador
  • reiniciar con dicho usuario
  • instalar drivers y actualizaciones
  • personalizar el entorno del usuario:
    • login automático "control userpasswords2" (si procede)
    • ajustar / personalizar opciones avanzadas para incrementar rendimiento
    • ampliar resolución de pantalla
    • deshabilitar sonidos
    • deshabilitar contraseña al volver de bloqueo
    • ajustar / personalizar apariencia
    • ajustar / personalizar opciones de carpeta
    • ajustar / personalizar opciones de energía
    • ajustar / personalizar menú inicio: opciones
    • ajustar / personalizar menú inicio: preparar estructura para accesos directos:
      • carpetas: datos, diseño, internet, multimedia, ofimatica, sistema, utilidades
  • configurar red & internet
  • configurar nombre del equipo y grupo de trabajo

Instalación de programas básicos

  • navegadores mozilla / chrome
  • plugins flash navegadores
  • lector pdf
  • control remoto UltraVNC (servidor y visor)
  • programas de mantenimiento (winrar, ccleaner, tuneup, mydefrag, partition, beyondC)

Finalizar la configuración básica

  • optimizar SO con TuneUp
  • reiniciar, pasar CCleaner y desfragmentar con MyDfrag
  • reiniciar dos veces y crear un punto de restauración

Otros ajustes

Otras instalaciones

  • instalar eMule e instalarlo como servicio
  • instalar programas multimedia (Video, fotos, música, XBMC)
  • probar tarjeta y mando TV

Linux

  • configurar/personalizar arranque dual (grub)
  • instalar drivers y actualizaciones del SO
  • instalar servidor y visor de control remoto
  • montar automáticamente particiones
  • configurar particiones
  • instalar programas mantenimiento (ccleaner, tuneup, defrag, partition, beyondC)
  • instalar servidor y visor de control remoto
  • instalar aMule
  • instalar programas multimedia (Video, fotos, música, MythTV)
  • optimizar rendimiento (tunear servicios)
  • probar tarjeta y mando TV

Puntos de unión en Windows

Un punto de unión o junction equivale a un Enlace simbólico de los sistemas UNIX. (NTFS junction point -JP) es una característica del sistema de archivos NTFS en su versión 3.0 o posterior. Los "Junction Points" se pueden usar de una manera similar a los enlaces simbólicos de Linux, permitiendo la creación de un enlace a un directorio que es casi lo mismo que el directorio mismo. El uso de "junctions" es más transparente que el uso de un "acceso directo" o fichero (.lnk). El acceso directo nos envía al directorio de destino mientras que el enlace simbólico nos muestra el contenido del directorio de destino como si se estuviera en este...

Los puntos junction pueden enlazar solamente a directorios y en concreto, a directorios locales; no se pueden crear junction points a directorios remotos compartidos.

Los paquetes de recursos de Windows 2000 y XP incluyen un programa llamado linkd para crear junction points. Un programa más potente llamado junction fue creado por Mark Russinovich para su compañía Sysinternals (que fue adquirida por Microsoft).

Ejemplos de uso del programa juction:

Para saber si el archivo test es un punto de unión:

junction c:\test

Para listar los puntos de unión en c:\

junction -s c:\

Para crear un punto de unión c:\Programas que apunte a c:\Archivos de programa:

C:\>md Programas

C:\>junction c:\Programas "c:\Archivos de programa"

Para borrarlo:

junction -d c:\Program-Files

Ajustes del arranque Grub2 para Ubuntu

Modificar líneas de menú

  • To prevent a file in /etc/grub.d from adding items to the menu, remove the executable bit or remove the applicable file.
  • memtest86+: If you don't want to have memtest86+ displayed in your menu, run sudo chmod -x /etc/grub.d/20_memtest86+. The file will remain but will not be acted upon by update-grub.
  • Recovery mode: If you don't want Recovery mode entries for your linux kernels, edit /etc/default/grub and add this line:
    • GRUB_DISABLE_LINUX_RECOVERY=true
  • If a custom script in the /etc/grub.d/ folder contains multiple menu entries, individual items may be removed and others retained.
  • Tip: If the user wants his custom entries to appear at the top of the menu, the file can be named a value less than "10_linux", such as "07_custom". Check that the "DEFAULT" value in /etc/default/grub points to the correct menuentry after making this change.
  • Changes will not take effect on the Grub 2 menu until "update-grub" is run to update grub.cfg

Cambiar la resolución

Grub2 uses a collection of files to set the various settings it uses. You can specify your desired resolution in the /etc/default/grub file. Edit it with this command:

gksudo gedit /etc/default/grub

Look for the line #GRUB_GFXMODE=640X480. Remove the # and set your desired resolution. Here's what I did:

GRUB_GFXMODE=1280x1024

For whatever reason, one that I don't totally understand, this is not all you have to do to change the resolution grub uses. As I discovered in this blog, there is one more change you need to make.
Edit this file: /etc/grub.d/00_header with the command:

gksudo gedit /etc/grub.d/00_header

You are looking for the line that consists of:

set gfxmode=${GRUB_GFXMODE}

After that line, add:

set gfxpayload=keep

your block of code will look like:

Cambiar los colores

Grub defaults to black text with magenta highlighting. To change this scroll down to the bottom of the file and look for the code:

if background_image `make_system_path_relative_to_its_root ${bg}` ; then

set color_normal=black/black
set color_highlight=magenta/black
else

You'll want to keep the color after the slash, for both instances, set to black. It seems this makes the foreground transparent allowing your to see your handsome new background. You can see a list of available colors in the grub manual. This is what I used for my brown-heavy image.

if background_image `make_system_path_relative_to_its_root ${bg}` ; then

set color_normal=white/black
set color_highlight=brown/black
else

Initializing USB controllers

Existe un error, al parecer, bastante común en placas ASUS (como mi nueva ION AT3N7A-I, quién coño le pondría un nombre tan difícil de recordar) que consiste en que durante el arranque, al terminar el POST, el PC se queda mucho rato (o colgado) con el mensaje Initializing USB controllers (o sea, no termina de inicializar los dispositivos USB que tuviera conectados). En mi caso no fue necesario tener conectado ninguno, se quedaba siempre como unos 30 seg. o más.

La solución que me sirvió fue apagar todo, desconectar cables de alimentación, y quitar la pila de la placa base durante más de 1 min. La primera vez, también mantuve apagado el PC habiendo cambiado el jumper que permite explícitamente borrar la CMOS (en el manual pone algo de RTC).

Unmappable character for encoding UTF8

When building / compiling a Java application with Ant, the warning:

warning: unmappable character for encoding UTF8

indicates, that the compiler cannot recognize characters on the source files, this is normaly due of using a diferent encoding in the compiler (javac ant task).

This can be solved by specifying the same encoding used on the source files (ISO-8859-1).

On the ant task, in the command line starting with <javac it has to be added the property encoding="8859_1"

Cmd o línea de comandos en menú contextual de carpeta

Seguro que estás harto de darle a Ejecutar, Cmd para abrir la línea de comandos, y navegar hasta el directorio dónde tienes la aplicación que quieres ejecutar... (YO SI !!).

Pues bien, para tener en el menú contextual de cualquier carpeta la opción de abrir la ventana de línea de comandos en "ese" directorio hay que hacer lo siguiente:

  1. Abrir el Panel de control, Opciones de Carpeta, Tipos de archivo
  2. Seleccionar Carpeta, Opciones avanzadas
  3. Añadirle una acción pulsando Nuevo (llamarla pe. "Abrir Cmd.exe aquí")
  4. En Aplicación poner cmd.exe /k cd /d "%1"
  5. Ok, Ok, Cerrar

Usar las librerías de Hibernate en Eclipse

Para utilizar las librerías de Hibernate (en sentencias "import") es necesario añadir las librerías de Hibernate a nuestro proyecto "Hibernate".

Esto se hace de la siguiente manera:

  1. Vamos al proyecto y pulsando el botón derecho vamos a Propiedades, Java Build Path, Libraries
  2. Añadimos una nueva librería de usuario con Add library (del tipo User library), User libraries, New ("Hibernate")
  3. Añadimos los Jars necesarios con Add Jars. Buscamos en el explorador el directorio de Hibernate en los plugins del Eclipse -en mi caso C:\Archivos de programa\Eclipse\plugins\org.hibernate.eclipse_3.2.4.v200910211631N-H194-GA\lib\hibernate- y seleccionamos todos los jar que hay
  4. Salimos con Ok, Aceptar, Ok y lo que haga falta

Aquí encontré un vídeo que es muy clarificador.

Y ya estarían añadidas las librerías de Hibernate, dispuestas a ser utilizadas.

Unable to find a javac compiler

El otro día programando con Eclipse y Ant tuve un error que me supuso un gran quebradero de cabeza.

Concretamente el error decía:

[javac] BUILD FAILED: [build file location here]
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK

La solución es la siguiente:

  1. Dentro del propio elcipse debeis ir a “window->preferences->ant-> runtime“.
  2. Una vez ahí seleccionamos la pestaña “claspath”, y elegimos “Global Entries”
  3. Después clickamos en “Add external jar”
  4. Y en el explorador vamos al directorio donde tenemos instalado el JDK de Java, carpeta lib, archivo “tools.jar”

Como usar eMule como un Servicio

Lo primero es bajar dos apliacaciones gratuitas de MS, por ejemplo, a Mis Documentos

Ahora abrimos una ventana de MS-DOS, nos colocamos en Mis Documentos y ejecutamos:

InstSrv eMuleService "c:\archivos de programa\emule\emule.exe"

Nos vamos a la clave HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\eMuleService del registro (ejecutar regedit) y:

  • colocamos en ImagePath la ruta a srvany.exe (pe. ponerlo en C:\WINDOWS)
  • creamos una subclave Parameters y le creamos el valor Application con la ruta al emule.exe

Finalmente, en las propiedades del servicio (eMuleService) vamos a Iniciar sesión y marcamos la casilla que nos permita interactuar con el escritorio.

Instalación del motor de reescritura de URL para .NET, Helicon ISAPI_Rewrite3

Hay un filtro ISAPI que instalar que reescribe la URL y permite olvidarse de la extensión .aspx al poner direcciones URL en la aplicaión. Se llama Helicon ISAPIRewrite3 (versión Lite).

Estos son los pasos para instalarlo en un servidor con IIS 6:

  1. Te vas a la web de la empresa Helicon Tech y descargas la versión gratuita (Lite).
  2. Ejecutas el archivo *.msi
  3. Vas al directorio de instalaciòn (por emplo, C:\Archivos de programa\Helicon\ISAPI_Rewrite3) y creas un archivo de texto plano llamado httpd.conf con lo siguienteRewriteEngine on
    RewriteBase /CARIN1.0/ (NOTA)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^.?]+)$ %{REQUEST_URI}.aspx [L]
  4. Instalar el filtro ISAPI en el IIS:
    • Agregar el filtro ISAPI en: Sitio Web predeterminado, Filtros ISAPI, Agregar, Nombre (el que sea, pe. Helicon ISAPI_Rewrite3)
    • Ejecutable: apuntar a la DLL: C:\Archivos de programa\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll
    • Agregar la extensión de servicio Web en Extensiones de servicio Web:
      • Agregar nueva extensión con el nombre que sea, por ejemplo, Helicon ISAPI_Rewrite3
      • Archivos necesarios: agregar la DLL: C:\Archivos de programa\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll

Ejecutar archivos .NET desde rutas UNC de red

Para poder ejecutar archivos de .NET Framework 1.1 y 2.0 desde rutas UNC de red (tipo \\servidor\directorio\directorio\app.exe) hay que hacer:

  1. Ir al Panel de Control, Herramientas administrativas, Configuración de Microsoft .NET Framework 1.1 y Configuración de Microsoft .NET Framework 2.0
  2. Abrir Mi PC -> Directiva de seguridad en tiempo de ejecución -> Equipo -> Grupos de código -> All_Code.
  3. En la parte derecha pinchar Agregar un grupo de código secundario y:
    • darle nombre
    • en la pestaña Condición de pertenencia elegir el tipo de condición "Dirección URL", y como Dirección URL poner "file://SERVIDOR-DE-RED/*"

Crear la base de datos de servicios de la aplicación para SQL Server

Crear la base de datos de servicios de la aplicación para SQL Server

ASP.NET incluye una herramienta, Aspnet_regsql.exe, que instala la base de datos de SQL Server que utilizan los proveedores de SQL Server. La herramienta Aspnet_regsql.exe se encuentra en la carpeta unidad:\WINDOWS\Microsoft.NET\Framework\númeroDeVersión del servidor Web. Aspnet_regsql.exe se utiliza para crear la base de datos de SQL Server y para agregar o quitar opciones en una base de datos existente.

Si se ejecuta sin argumentos de línea de comandos, Aspnet_regsql.exe ejecuta un asistente que le guiará en el proceso de especificar la información de conexión del equipo que ejecuta SQL Server e instalar o quitar los elementos de base de datos de todas las características compatibles. Aspnet_regsql.exe se puede ejecutar como herramienta de línea de comandos para especificar los elementos de base de datos de determinadas funciones que se van a agregar o quitar.

Para realizar el registro, prueba una de estas opciones:

  • Ejecuta aspnet_regsql.exe a secas y configuralo mediante el asistente
  • Ejecuta en línea de comandos toda la instrucción. Por ejemplo:
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -E -S localhost -A mp (puedes mirar la tabla para afinar más)

Mensaje de error que puede salir:

'System.Web.Security.SqlMembershipProvider' requiere un esquema de base de datos compatible con el esquema versión '1'. Sin embargo, el esquema de base de datos actual no es compatible con esta versión. Quizá necesite instalar un esquema compatible con aspnet_regsql.exe (disponible en el directorio de instalación de Framework), o actualizar el proveedor con una versión más nueva.

Fuente: http://msdn.microsoft.com/es-es/library/x28wfk74(VS.80).aspx

Implementar procedimientos CLR

Descripción de dos errores comunes que se pueden dar al intentar implementar procedimientos CLR (procedimientos desarrollados en código con Visual Studio .Net).

Error de SID de propietario

Error: The database owner SID recorded in the master database differs from the database owner SID recorded in database 'miBaseDeDatos'. You should correct this situation by resetting the owner of database 'miBaseDeDatos' using the ALTER AUTHORIZATION statement

Error: El SID del propietario de la base de datos registrado en la base de datos master no coincide con el SID del propietario de la base de datos registrado en la base de datos 'miBaseDeDatos'. Debería corregir la situación restableciendo el propietario de la base de datos 'miBaseDeDatos' con la instrucción ALTER AUTHORIZATION

Esto ocurre normalmente cuando la base de datos a sido separada y adjuntada alguna vez, y el usuario actual (el login con el que nos hemos autentificado) no es "propietaria" de la base de datos.

Esto se corrige restableciendo el propietario de la base de datos al usuario que utilizaremos, con la instrucción

ALTER AUTHORIZATION ON DATABASE::[miBaseDeDatos] TO {miLoginUsuario}

Nota: la cadena {miLoginUsuario} es el nombre del usuario con el que nos hemos autentificado (un caso común es que sea el usuario 'sa')

Error de autorización de ensamblado (assembly not authorized)

Error: CREATE ASSEMBLY for assembly '{miEnsamblado}' failed because assembly '{miEnsamblado}' is not authorized for PERMISSION_SET = UNSAFE. The assembly is authorized when either of the following is true: the database owner (propietarioBaseDeDatos) has UNSAFE ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with UNSAFE ASSEMBLY permission

Error de CREATE ASSEMBLY para el ensamblado 'miEnsamblado' porque el ensamblado 'miEnsamblado' no tiene autorización para PERMISSION_SET = UNSAFE. El ensamblado está autorizado cuando se produce una de las siguientes situaciones: el propietario de la base de datos (propietarioBaseDeDatos) tiene permiso de UNSAFE ASSEMBLY y la base de datos tiene definida la propiedad de base de datos TRUSTWORTHY, o el ensamblado está firmado con un certificado o una clave asimétrica que tiene un inicio de sesión correspondiente con permiso de UNSAFE ASSEMBLY. Si ha restaurado o adjuntado esta base de datos, asegúrese de que el propietario de la base de datos se asigne al inicio de sesión correcto en este servidor. Si no, use sp_changedbowner para solucionar el problema

Una solución rápida y poco segura es ejecutar:

ALTER DATABASE DATABASE::[miBaseDeDatos] SET TRUSTWORTHY ON

La opción menos rápida pero más segura es firmar el ensamblado CLR con un certificado:
1. Firmar la dll con un nombre fuerte yendo a la pestaña Firmar, en la ventana de propiedades del proyecto de Visual Studio. Se puede crear un nuevo archivo .pfx desde ahí.
2. Construir el ensamblado CLR con Permission Level: External o Unsafe. No implementar todavía.
3. Ir al  SLQ Management Studio y ejecutar la siguiente consulta:

USE master
GO
CREATE ASYMMETRIC KEY AsymmetricKeyName FROM EXECUTABLE FILE = '{ruta al archivo .dll}'
CREATE LOGIN
miLoginUsuario FROM ASYMMETRIC KEY AsymmetricKeyName
GRANT EXTERNAL ACCESS ASSEMBLY TO
miLoginUsuario
GO

Registro de cuenta en AdSense

Para registrarse en AdSense, el programa de publicidad de Google, hace falta ir a la dirección https://www.google.com/adsense/ y pinchar en el botón Registrese ahora.

A continuación te muestro el formulario de registro, y los valores más importantes que hay que rellenar.

Formulario de registro de AdSense

Formulario de registro de AdSense

ThemBasic: un child theme básico para Thematic

Thematic es un buen tema de partida, lo que ellos llaman un framework en cuestión de temas para Worpress. Es neutral, y muy completo. Y como todo buen programa que no depende de nosotros y que periódicamente hay que actualizar, no deberíamois de tener que tocar los archivos. Para eso se construyeron los child themes: para que uno se construya su tema preferido heredando todas las características de Thematic. Pero puede ser normal que uno mismo también quiera un tema básico pero que realmente no sea igual a Thematic (personalizaciones básicas que uno va a utilizar en sus desarrollos y que no vienen incluidas en Thematic), por lo que esto me produce la necesidad de tener un Basic child theme for Thematic del que mis futuros child themes heredarán. Sí, es un poco enrevesado, lo se, pero creo que puede funcionar ;-)

Por eso iré apuntando aquí las características de mi Basic child theme for Thematic.

Estilos de reset

Necesito anular de forma general muchos aspectos visuales que implementa Thematic y que quizás no son tan neutros como deberían. En este apartado iré poniendo dicho código CSS. Será una especie de archivo reset.css particular.

Los títulos

Para empezar, una importante necesidad son los títulos. Necesito encontrar cierta variedad de fuentes (seguras para web) que me permita dar vistosidad a los títulos. De momento me han parecido interesantes estos enlaces: aquí, aquí, aquí y aquí.

bbPress traducido al español

Me he tomado la libertad de modificar una traducción al español de la versión 0.8 que cogí de el repositorio Subversion y terminarla para la que tengo instalada (la 0.9.0.4).

Aquí teneis los archivos es_ES.mo y es_ES.po.

Seguro que falta algún detalle... pero está al 99% completa!

Aún así se agradece si alguien ve que falte algo. También.... si alguien sabe cómo subirlos al Subversion que me lo diga.

Error de E/S al subir archivos a Wordpress

Llevo tiempo ya con el blog, pero recientemente intenté subir archivos de música (aunque no es relevante, extensión m4a) y no se por qué razón me daba el error:

Error de E/S. Ha habido un error en la subida. Inténtalo más tarde.

IO error. An error occurred in the upload. Please try again later.

Nota: lo pongo en inglés porque en este idioma está bastante extendida la discusión sobre el tema.
En muchos sitios se comentan cosas sobre que si hay que que si es cuestión de permisos en la carpeta /uploads (al margen de esta cuestión esta carpeta tiene que estar con permisos de escritura) o de establecer correctamente la ruta a la carpeta,  etc.

Tengo que decir que la cuestión se las trae. No se como narices lo solucioné pero el caso es que a raíz de aplicar la solución aquí comentada ya he podido subir los archivos. Lo curioso del asunto es que después borré el archivo php.ini creado en /wp-admin para verificar que esa era la solución y el caso es que ¡¡ sigue funcionando !!

Ya actualizaré si concreto cual fue (realmente me pica la curiosidad).

Modificar las extensiones aceptadas por Wordpress

Fuente: Modifying Allowed Upload Types in Wordpress - Chris Meller

No lo he probado todavía pero según el amigo Cris Meller, para cambiar las extensiones aceptadas por Wordpress (y hacerlo sin tocar los archivos del núcleo) hay que añadir al functions.php de nuestro tema lo siguiente:

function custom_upload_mimes ( $existing_mimes=array() ) {
// add your ext => mime to the array
$existing_mimes['extension'] = 'mime/type';
// for removing
unset ( $existing_mimes['extension'] );
return $existing_mimes;
}
add_filter('upload_mimes', 'custom_upload_mimes')

extension y mime/type serían la extensión y el tipo mime correspondiente a añadir.

Crear un bloque de anuncios de AdSense

Ahí va este pequeño minitutorial para crear un bloque de anuncios con AdSense. Por ejemplo, haremos un bloque de contenido, formato predeterminado, tipo Banner, y de tamaño 468 x 60 píxels.

Crear nuevo

Primero tenemos que ir a la pestaña Configuración de AdSense, submenú Obtener anuncios. Allí elegiremos la opción AdSense para contenido.

adsense-para-contenido

Formato

Posteriormente debemos seleccionar el tamaño y formato visual del bloque. En cuanto al tamaño, elegiremos un anuncio tipo Banner de tamaño 468 x 60. En cuanto al formato visual (fuentes de letras, colores, etc. dejaremos todos los valores que viene por defecto.

adsense-formato-y-colores

Más opciones

En el apartado Mas opciones lo mejor es seleccionar Mostrar anuncios que no sean de Google a partir de otra URL. Y en la URL poner:

http://www.fragilistico.com/wp-content/google_adsense_script.html

mas-opciones

Criterios de seguimiento

Después, pasaríamos a la página de los criterios de seguimiento (esta es una función avanzada que sirve para medir el rendimiento de los anuncios). Nosotros no haremos nada, pero si quieres más información puedes consultar la ayuda de Adsense.

adsense-criterios-seguimiento

Guardar

Como penúltimo paso, llega el momento de guardar el bloque dándole un nombre que nos permita luego recordarlo y gestionarlo. En nuestro caso le pondremos el que nos indica AdSense.

adsense-guardar

Código fuente

Finalmente, al pulsar Enviar y obtener código llegamos a la pantalla que mostramos a continuación, dónde podemos copiar el código fuente del anuncio para poder insertarlo en el código fuente de nuestro sitio web.

adsense-fin-y-codigo

Notas

En realidad este código fuente es similar para todos los bloques de anuncios. Si nos fijamos un poco observaremos que lo que diferencia a un bloque de otro es el identificador del cliente (ad_client), el del bloque de anuncios (ad_slot) y el tamaño (anchura: ad_width y altura: ad_height).

Como apunte comentar que los bloques de anuncios no se pueden eliminar (esto impide que se eliminen equivocadamente los bloques de anuncios activos del sitio). Si no lo vamos a usar lo que sí podemos es desactivarlo y si no lo queremos ver en las vistas de gestión de los bloques de anuncios podemos ocultarlo.

Validación personalizada en wForms

En la fantástica librería de validación wForms, podemos añadir validaciones personalizadas. Supongamos que queremos hacer una validación por rango numérico (que el número introducido esté entre unos valores máximo y mínimo). Haríamos algo así (ay.... estas expresiones regulares van a matarnos a todos):

wFORMS.behaviors.validation.rules.isDayRange = { selector: ".validate-dayrange", check: 'validateDayRange' };
wFORMS.behaviors.validation.messages.isDayRange = "Entre 1 y 24 h.";
wFORMS.behaviors.validation.instance.prototype.validateDayRange = function(element, value) {
var regexp = /^([1-9]|[1-9]|[1-9][0-9])$/;
return this.isEmpty(value) || regexp.test(value);
}