0 28
06
2013

Personalizar el login de WordPress

Fecha de publicación: 28 junio 2013 a las 3:45 por admin

Hoy vamos a ver una sencilla forma de customizar o personalizar nuestra página de login de WordPress.

Simplemente, vamos a cambiar la imagen de wordpress que aparecen en el momento de realizar login, por una imagen personalizada de nuestro proyecto.

Por supuesto, podrás encontrar multitud de plugins wordpress que te permitirán realizar esta tarea, pero vamos a evitar terminar instalando

Este pequeño cambio, le dará a la entrada de nuestra web, un aspecto más profesional, sobre todo pensando en proyectos que realicemos para clientes.

Para cambiar o customizar la imagen de bienvenida en la página de login de wordpress, simplemente debemos añadir el siguiente código en el archivo functions.php de nuestro tema.

<pre><em id="__mceDel">
//============================================================================//
 //---------------------------- START CUSTOM LOGIN ----------------------------//
 //============================================================================//

function custom_login() {
 echo '<style type="text/css">
 h1 a {
 background-image:url(URL_TU_LOGO) !important; }
 </style>';
 }

add_action('login_head', 'custom_login');

//============================================================================//
 //----------------------------- END CUSTOM LOGIN -----------------------------//
 //============================================================================//

De esta sencilla forma, podemos sobreescribir los estilos para añadir una imagen personalizada a la página de login de wordpress, teniendo un resultado final como este:

Custom Login WordPress

Custom Login WordPress

2 29
03
2013

Y de repente 30

Fecha de publicación: 29 marzo 2013 a las 23:55 por admin

De repente suena el móvil, es un whatsapp. Es Viernes Santo así que hoy es fiesta. Abro los ojos y el sonido del móvil parece representar una alarma que dice que hoy es el último día de la década de los 20.

Hace un año por estas fechas, por regalo de cumpleaños, disfrutaba del musical Tick Tick… Boom! (qué bien lo pasamos) que muestra la historia de un joven que está a punto de cumplir los 30 años y aún no ha conseguido hacer realidad uno de sus sueños. Entonces eran 29 los que caían, quedaba todo un año por delante, de ilusiones, de lucha y de cambios.

Y de repente ¡rinnnggg! Última llamada para el avión VG030. Esto corre demasiado amigos.

Treinta años, tres décadas, con sus meses, con sus semanas, con su día a día, con sus despertadores, con sus noches en vela, con sus tardes de domingo tan sumamente aburridas; parece mentira lo rápido que pasa el tiempo sin darte cuenta.

En esta última década, tantos y tantos cambios. Diez años que comienzan en la Universidad y continúan en PorFinYa, mi casa, mi hogar. Supongo que suele pasar cuando sales al mundo laboral por primera vez, y si además te encuentras con tanta buena gente, todo es más fácil.

Salimos camino de muchoviaje, una nueva casa durante casi cinco años de la que me despido, no sin dolor, hace un par de meses. Cinco años de lucha en los que mi único objetivo era hacer líder a muchoviaje. El tiempo nos dirá cuán acertado fue.

Y ahora toca vivir entre 2 ciudades, Madrid y Zaragoza, para iniciar una nueva aventura.

Curiosa vida es esta que viviendo en una ciudad como Madrid, que los que me conocéis sabéis que, digamos no es mi ciudad ideal, me termina llevando a trabajar de manera intermitente en Zaragoza.  ¿Curiosa vida o protagonistas un tanto ilógicos?

10 años pretendidos resumir en unas líneas cual resumen de temario de colegio antes de un examen que dejas para el último momento.

Cuántos momentos pasados, buenos y malos. Valencia 2012, MM Soria 2012, Donosti 2010… felicidad.

Cuántos amigos y enemigos durante este tiempo, y enemigos que con el paso de los años nos gustaría volver a encontrar, y decirnos, con la sabiduría del tiempo pasado como consejera, que no fue para tanto.

Y llega un día en el que te paras a pensar ¿soy la persona que quería ser cuando era pequeño y me imaginaba de mayor?

Comienza en unos minutos una nueva era. Simplemente pretendo mostrar en unas pocas líneas los sentimientos de un joven o ya no tan joven de 29 años antes de pasar la barrera de los 30, la psicológica barrera de los 30. Mañana nos levantaremos y todo seguirá igual. Seguiremos siendo la misma persona, seguro; pero nos daremos cuenta de que ese joven de 29 años ya no volverá, ni volverá todo lo demás.

0 21
02
2013

Problemas de resolución con Nvidia en Ubuntu

Fecha de publicación: 21 febrero 2013 a las 22:26 por admin

Por suerte, hoy en día tenemos internet y una comunidad increíble de gente dispuesta a compartir sus conocimientos, vivencias, etc. simplemente para ayudar y aportar a los demás.

Y eso me solucionó el otro día la vida… bueno, quizás la vida sea mucho decir, pero sí me salvó de subsistir con una resolución equivocada en mi instalación de Ubuntu 12.04.

El problema fue el siguiente, después de estar trasteando con los drivers de nvidia en Ubuntu y sus configuraciones, tras reiniciar el ordenador, nos encontramos con una resolución de pantalla incorrecta y muy lejana a la deseada.

¿El primer pensamiento? Vamos a la configuración de Resolución de Monitores, lo cambiamos y a correr… Craso error. Sólo aparece la resolución errónea de 800×600 y no permite realizar ningún cambio.

¿Solución entonces para poder cambiar la resolución de pantalla en Ubuntu?

Primero debemos editar el archivo /etc/X11/xorg.conf, bien accediendo desde el explorador de archivos (siempre con permisos de administrador), o bien desde un terminal bajo línea de comandos


sudo gedit /etc/X11/xorg.conf

* En este caso hemos escogido gedit para editar el fichero, pero podrías elegir otro.

Una vez abierto xorg.conf, buscamos la sección Monitor, que será parecido a esto:


Section "Monitor"
 Identifier "Monitor0"
 VendorName "Unknown"
 ModelName "Unknown"
 HorizSync 28.0 - 33.0
 VertRefresh 43.0 - 72.0
 Option "DPMS"
EndSection

En nuestro caso, aparecían las propiedades HorizSync y VertRefresh con los valores que se indican sobre estas líneas. Los cambiamos por estos nuevos valores:


Section "Monitor"
 Identifier "Monitor0"
 VendorName "Unknown"
 ModelName "Unknown"
 HorizSync 30.0 - 70.0
 VertRefresh 50.0 - 160.0
 Option "DPMS"
EndSection

Estos valores se expresan en Hz y dependen del modelo de tu monitor.

Ahora nos vamos a la sección Screen del mismo fichero /etc/X11/xorg.conf, prestando especial atención a las siguientes propiedades (añádelas si no aparecen en tu fichero):

  • UseEdid: para indicarle que no lea los datos desde EDID
  • MetaModes: para indicarle la resolución de pantalla deseada
  • Modes: para indicarle un conjunto de resoluciones posibles para nuestro monitor / pantalla

Section "Screen"
 Identifier "Screen0"
 Device "Device0"
 Monitor "Monitor0"
 DefaultDepth 24
 Option "UseEdid" "False"
 Option "MetaModes" "1400x1050 +0+0"
 DefaultDepth 24
 SubSection "Display"
 Depth 24
 Modes "1400x1050" "1280x1024" "1024x768" "800x600"
 EndSubSection
EndSection

Ahora reiniciamos el ordenador y esperamos a volver a ver nuestra pantalla con la resolución deseada en bajo nuestro sistema Ubuntu.

Fuente: http://ubuntuforums.org/showthread.php?t=1183319

16 03
02
2013

Encriptar y desencriptar en PHP

Fecha de publicación: 3 febrero 2013 a las 1:12 por admin

Hoy vamos a implementar una manera sencilla de encriptar y desencriptar cadenas de texto en PHP.

Seguramente ya conocerás que existen diferentes tipos de encriptación, que podríamos englobar en 2 grandes grupos.

  • Encriptación en 2 sentidos o reversible o simétrica: es decir, permite encriptar y desencriptar un texto. Ejemplos de este tipo de encriptación para PHP son base64 (base64_encode y base64_decode) o mcrypt.
  • Encriptación en 1 único sentido o irreversibles o asimétrica: esto es, no se permite la desencriptación del texto encriptado previamente. Dado que recuperar la cadena original se hace imposible, esto hace que la encriptación asimétrica sea más segura que la encriptación simétrica o en 1 único sentido. Ejemplos de funciones PHP de este tipo de encriptación son md5, sha1, crypt, crc32.

A partir de estas herramientras que PHP nos proporciona para realizar labores de encriptación y desencriptación, vamos a construir nuestra clase Encrypter con 2 sencillos métodos:

  • encrypt: nos permitirá encriptar un texto
  • decrypt: permitirá desencriptar un texto previamente encriptado mediante la misma clase Encrypter.

Esta clase Encrypter, con el objetivo de fortalecer la seguridad de la encriptación, se apoyará además en una clave secreta definida de forma interna en el atributo $key.

Por lo tanto, sobra decir que, toda desencriptación que queramos realizar de un texto, deberá realizarse bajo la misma clave secreta que haya sido utilizada en el proceso de encriptación.


/**
* Description of Encrypter
*
* @author jose
*/
class Encrypter {

	private static $Key = "dublin";

	public static function encrypt ($input) {
		$output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(Encrypter::$Key), $input, MCRYPT_MODE_CBC, md5(md5(Encrypter::$Key))));
		return $output;
	}

	public static function decrypt ($input) {
		$output = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5(Encrypter::$Key), base64_decode($input), MCRYPT_MODE_CBC, md5(md5(Encrypter::$Key))), "\0");
		return $output;
	}

}

El uso de la clase Encrypter es más que sencillo, en la primera línea del siguiente código encriptaremos la variable $texto que contiene el string “son unos corruptos”. En la siguiente línea, desencriptamos la variable $texto_encriptado previamente encriptado.

El resultado de la desencriptación guardado en la variable $texto_original, deberá ser igual que el de la variable inicial $texto.


$texto = "Son unos corruptos";

// Encriptamos el texto
$texto_encriptado = Encrypter::encrypt($texto);

// Desencriptamos el texto
$texto_original = Encrypter::decrypt($texto_encriptado);

if ($texto == $texto_original) echo 'Encriptación / Desencriptación realizada correctamente.';

2 24
08
2012

Conectando MySQL remoto a través de tunel SSH

Fecha de publicación: 24 agosto 2012 a las 23:27 por admin

Seguramente te habrás encontrado en multitud de ocasiones ante la siguiente situación:

– tienes alojado en un servidor remoto la base de datos MySQL
– el puerto 3306 de MySQL está cerrado para acceder de forma remota
– quieres usar algún cliente, tipo MySQL Query Browser / MySQL Workbench

Lógicamente, al estar el puerto de escucha de MySQL 3306 de forma remota, no podremos acceder bajo un cliente local desde fuera.

Una posible solución para manejar nuestra base de datos, podría ser instalar un aplicativo web como phpmyadmin; o conectarnos por ssh y trabajar bajo línea de comandos sobre MySQL.

Sin embargo, si por comodidad, o por cabezonería, queremos trabajar de forma local conectados a la base de datos externa, utilizando algún tipo de cliente MySQL como los mencionados como MySQL Workbench / MySQL Query Browser, tenemos otra posibilidad, más elegante incluso, que pasa por crear un tunel SSH para acceder a tu servidor de MySQL de manera remota.

Si te encuentras bajo un entorno linux, puedes usar su propio terminal al que ya te encontrarás habituado.

Si por el contrario trabajas bajo sistemas Windows, siempre puedes utilizar algún cliente ssh como PuTTY.

Para ello conectaremos desde el terminal de la siguiente manera:


ssh -N -L 3307:127.0.0.1:3306 userName@remoteHost

para a continuación introducir lógicamente el password para el usuario correspondiente.

Una vez conectado el tunel ssh, es momento de abrir nuestro cliente de MySQL y conectarnos a la base de datos como si en nuestro equipo se encontrara, indicando la ip localhost 127.0.0.1, pero intercambiando el puerto por defecto de MySQL 3306 por el puerto que hayamos indicado en la conexión, en este caso el puerto número 3307.

Conexión MySQL a través de tunel SSH

Conexión MySQL a través de tunel SSH

13 17
06
2012

The backup set holds a backup of a database other than the existing

Fecha de publicación: 17 junio 2012 a las 22:51 por admin

No te acostarás sin un problema más… digo… sin saber una cosa más…

Durante el día de hoy, hemos tenido el siguiente problema al restaurar una base de datos en SQL Server 2008 R2 creada desde otro equipo diferente:

Restore failed for Server ‘[SERVERNAME]’.  (Microsoft.SqlServer.SmoExtended)

Additional Information:

System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than the existing ‘[DATABASENAME]’ database. (Microsoft.SqlServer.Smo)

Restore failed for server microsoft.sqlserver.smo

Restore failed for server microsoft.sqlserver.smo

La solución a este problema Restore failed for ServerMicrosoft.SqlServer.SmoExtended… al intentar restaurar una base de datos SQL Server .bak, es mucho más sencilla de lo que puede parecer en un primer momento.

En el momento en el que vayamos a restaurar la base de datos SQL Server, una vez seleccionadas todas las opciones de importación de la misma desde la pestaña General, antes de ejecutar el proceso pulsando el botón OK / Aceptar, accedemos a la pestaña Options u Opciones, y activamos la opción Overwrite the existing database (WITH REPLACE) – o Sobreescribir la base de datos existente -, tal y como se muestra en la siguiente imagen.

SQL Server - The backup set holds a backup of a database other than existing

SQL Server – The backup set holds a backup of a database other than existing

 

 

Una vez seleccionada la opción de sobreescribir la base de datos existente, ya podremos ejecutar el proceso de restauración SQL Server sin problema.

 

0 26
05
2012

String Replace Ignore Case en C# y VB.NET

Fecha de publicación: 26 mayo 2012 a las 15:15 por admin

En el día a día del programador, suelen surgir multitud de dudas, que aunque parecen más que obvias, siempre te hacen acudir a internet a buscar la mejor solución.

Hace un par de días, me encontré ante la necesidad de algo tan sumamente sencillo como reemplazar un texto por otro en una cadena, pero ignorando mayúsculas y minúsculas, trabajando en C# .NET.

Lo primero en lo que pensé es que el método String.Replace de .NET permitiría añadir un parámetro opcional para indicar este modificador, pero no es así, por lo que tenemos que buscarnos las habichuelas por otra parte.

Cierto es que tampoco nos tenemos que ir muy lejos, y es nuevamente el poder de las expresiones regulares el que nos permite construir nuestro propio String Replace siendo insensible a mayúsculas y minúsculas.

Ejemplo de Replace Ignore Case en C#

    public string ReplaceIgnoreCase(string original, string search, string replace)
    {
	// Reemplazo habitual
        string value = original.Replace(search, replace);
	// Reemplazo utilizando expresiones regules ignorando mayúsculas y minúsculas
        string value2 = System.Text.RegularExpressions.Regex.Replace(original, search, replace, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        return value2;
    }

...
        string original = "La parte contratante de la primera parte";
        string search = "PaRtE";
        string replace = "cosa";
        string replaced = ReplaceIgnoreCase(original, search, replace);

...

Ejemplo de Replace Ignore Case en VB.NET

Public Function ReplaceIgnoreCase(original As String, search As String, replace As String) As String
	' Reemplazo habitual
	Dim value As String = original.Replace(search, replace)
	' Reemplazo utilizando expresiones regules ignorando mayúsculas y minúsculas
	Dim value2 As String = System.Text.RegularExpressions.Regex.Replace(original, search, replace, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
	Return value2
End Function
1 05
05
2012

Cannot locate java installation in specified jdkhome

Fecha de publicación: 5 mayo 2012 a las 0:16 por admin

Hace algunos días, actualicé mi sistema operativo Ubuntu a su última versión 12.04 LTS Precise Pangolin, y si bien debo reconocer mejoras apreciables en el rendimiento diario del sistema, también me voy encontrando alguna sorpresa inesperada sobre programas usados hasta entonces que se han visto afectados por la actualización.

NetBeans logo

NetBeans logo

Una de esas sorpresas me la encontré hace unos minutos, al intentar abrir el IDE NetBeans, retornando el mensaje de error:

Cannot locate java installation in specified jdkhome

/usr/lib/jvm/…

Do you want to try to use default version?

Parece que la actualización a Ubuntu 12.04 LTS se llevó consigo la actualización de la instalación de Java, y ahora NetBeans es incapaz de localizarla.

Por lo tanto, simplemente vamos a avisar a nuestro IDE NetBeans la ruta donde se encuentra instalado Java para que todo vuelva a la normalidad. Para ello editamos el archivo netbeans.conf que encontrarás bajo

/usr/local/netbeans-7.x/etc/netbeans.conf

y modificamos la variable netbeans_jdkhome indicando tu directorio de instalación Java.

0 24
03
2012

Failed to access IIS metabase ASP.NET

Fecha de publicación: 24 marzo 2012 a las 23:13 por admin

Si estás intentando ejecutar tu aplicativo web sobre Internet Information Server (IIS) y recibes el siguiente mensaje de error

Failed to access IIS metabase

probablemente has instalado IIS después de instalar .NET Framework.

La solución pasa por reparar la instalación de ASP.NET Framework 2.0, para ello ejecutamos desde la consola de comandos de Visual Studio:

aspnet_regiis.exe -i

o desde la línea de comandos de Windows:

%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

NOTA: Comprueba tu versión concreta de .NET Framework para indicarlo en la línea anterior.

Saludos a todos

3 07
03
2012

Instalador Web: Instalación sin completar

Fecha de publicación: 7 marzo 2012 a las 21:07 por admin

Tenemos el siguiente escenario: Windows 7 + IIS7.

Disponemos a su vez de una solución generada en Visual Studio 2008, con diversos proyectos, entre los que se encuentra un sitio web.

Y nos proponemos ahora, la creación de un proyecto de instalación para la aplicación web.

Hasta aquí sin problemas, hasta que una vez generados los archivos de instalación Setup.exe y WebSetup.msi, recibimos el siguiente mensaje de error al ejecutarlos:

Instalación sin completar

Se interrumpió el instalador antes de poder instalar (NOMBREDELPROYECTO). Debe reiniciar el instalador para intentarlo de nuevo.

Web Setup: Instalación sin completar

Web Setup: Instalación sin completar

Tras buscar por internet posibles soluciones, decidimos activar la compatibilidad de Internet Information Server con IIS6, y probar suerte.

Para ello, accedemos al Panel de Control de Windows 7, y pinchamos en la opción Activar o desactivar las características de Windows.

Panel de Control Windows 7

Panel de Control Windows 7

Buscamos la opción Internet Information Server, y expandimos su rama, hasta encontrar Compatibilidad con la Administración de IIS6.

Una vez ahí, activamos todas las opciones de Compatibilidad con la Administración de IIS6 como muestra la siguiente imagen:

Activar características de Windows - Compatibilidad IIS6

Activar características de Windows - Compatibilidad IIS6

Et voilà! Volvemos a intentar ejecutar los archivos de instalación del proyecto web generados anteriormente y conseguimos continuar la instalación sin los problemas generados con anterioridad.

Web Setup: Asistente de instalación

Web Setup: Asistente de instalación