Cambiar contraseña de correo electronico en dovecot

Si alguien gestiona el servidor de correo Dovecot, y necesita cambiar la contraseña de algún email, dejo aqui como hacerlo.

doveadm pw -u usuario@dominio

Clase para sumar tiempos con PHP – PHP Tips

En un proyecto en el que estoy trabajando me he encontrado con que tenia que sumar tiempos y devolver el tiempo final, como no encontré ninguna función que se adaptara al 100% programe la siguiente clase. He creado un Gist para quien la pueda necesitar o interesar.


<?php
/**
* SumaTiempos.php Clase para sumar tiempos
*
* Esta clase sirve para teniendo un tiempo inicial y un Array con tiempos
* los suma y nos devuelve el tiempo final
*
* PHP Version 5.3
*
* @author Ruben Lacasa Mas <ruben@rubenlacasa.es>
* @copyright 2013 Ruben Lacasa Mas http://rubenlacasa.es
* @license http://creativecommons.org/licenses/by-nc-nd/3.0
* CC-BY-NC-ND-3.0
* @link https://gist.github.com/sbarrat/5642808
*/
class SumaTiempos
{
/**
* Inicializamos el array que almacenara los valores del tiempo
* @var Array
*/
private $tiempo = array();
/**
* Constructor de clase
*
* @param String $tiempo Tiempo que definimos
*/
public function __construct($tiempo = '00:00:00.00')
{
list(
$this->tiempo['horas'],
$this->tiempo['minutos'],
$this->tiempo['segundos']
) = explode(":", $tiempo);
}
/**
* Sumamos el tiempo a otro
*
* @param SumaTiempos $tiempo Tiempo que queremos agregar
*/
public function sumaTiempo(SumaTiempos $tiempo)
{
// Segundos
$this->tiempo['segundos']
= floatval($this->tiempo['segundos'])
+ floatval($tiempo->tiempo['segundos']);
$minutos = intval($this->tiempo['segundos'] / 60);
$this->tiempo['segundos'] -= $minutos * 60;
// Minutos
$this->tiempo['minutos']
= intval($this->tiempo['minutos'])
+ intval($tiempo->tiempo['minutos'] + $minutos);
$horas = intval($this->tiempo['minutos'] / 60);
$this->tiempo['minutos'] -= $horas * 60;
// Horas
$this->tiempo['horas']
= intval($this->tiempo['horas'])
+ intval($tiempo->tiempo['horas'] + $horas);
}
/**
* Formatea y devuelve el tiempo final
*
* @return String Tiempo final formateado
*/
public function verTiempoFinal()
{
return sprintf(
'%02s:%02s:%05s',
$this->tiempo['horas'],
$this->tiempo['minutos'],
$this->tiempo['segundos']
);
}
}
/**
* Ejemplo de uso
*/
/**
* Array de tiempos que queremos sumar
* @var Array
*/
$tiempos = array('10:21:54.35', '01:12:44.56', '20:01:12.93', '00:28:18.56');
// Inicializamos el tiempo
$tiempoInicial = new SumaTiempos();
// Recorremos los tiempos y los vamos sumando
foreach ($tiempos as $parcial) {
$tiempoInicial->sumaTiempo(new SumaTiempos($parcial));
}
// Mostramos el tiempo final
echo $tiempoInicial->verTiempoFinal(); // En este ejemplo 32:04:10.40

view raw

SumaTiempos.php

hosted with ❤ by GitHub

Crear un tunel para la depuración – Zend Tips

En mi dia a dia suelo trabajar con Zend Studio como IDE de desarrollo y el servidor es Zend Server en el cual funciona el Zend Debugger. Normalmente mientras estoy desarrollando estoy en la misma red que el servidor, por lo tanto no necesito crear un túnel para depurar las aplicaciones ya que tengo configurado el Zend Debugger para que envie los datos a mi estación de trabajo. Pero si alguna vez tengo que desarrollar fuera de la red de trabajo y necesito depurar necesito crear un túnel con el servidor para que pueda existir una comunicación entre el Zend Studio y el Zend Server. Para realizar esto creo un túnel SSH. Este se crea de la siguiente manera:


user@workstation:~> ssh -R 10137:127.0.0.1:10137 user@debugserver
user@debugserver's password: <enter user's password on the debug server>
Welcome to the Debug Server!
user@debugserver:~$
Esto sirve desde tanto para un terminal Linux com MacOS X, o cualquier *nix.
En el caso de tener que hacerlo desde un terminal Windows utilizaríamos el Putty.

Jquery datepicker versus html5 date

Una de las novedades que incorpora el Html5 son los input de tipo date. Como esta ocurriendo con muchas de las novedades de Html5 algunos navegadores lo soportan y otros no. Dentro del grupo que lo soportan están Chrome y Opera, los que no lo soportan de momento son Firefox, Safari e Internet Explorer, esto en lo que son navegadores de escritorio, en el campo de los dispositivos móviles el único que lo soporta es Safari. http://caniuse.com/#feat=input-datetime

Esto nos puede suponer un problema a la hora de desarrollar nuestras web implementando este tipo de novedades, y al final podemos optar por hacer lo que estamos acostumbrados ha hacer y que nos funciona, que suele ser la inclusión de un datepicker en javascript, como por el ejemplo el Datepicker de Jquery, y olvidarnos de estas novedades hasta que los desarrolladores, o quiza los fabricantes, de navegadores se pongan de acuerdo.

Una solución en este tiempo intermedio entre quien lo tiene y quien no, es usar la libreria Modernizr. Con esta libreria vamos a poder comprobar de una manera sencilla si el navegador del cliente soporta o no soporta esta caracteristica, y muchas otras cosas mas.

La instalación es sencilla, nos descargamos la version de desarrollo (development) o produccion (production) y integramos el script descargado dentro de las etiquetas de nuestra pagina web. Por ejemplo imaginemos que el fichero descargado lo renombro como modernizr.js y lo situo dentro de la carpeta scripts que esta en la raiz de nuestra pagina web. Tambien incluiremos la libreria css del jQuery UI para la cual al igual que hare despues con las librerias javascript de jquery los incluire desde la pagina http://code.jquery.com/
Tambien incluire en esta pagina el formulario con el campo input y al final los scripts de jQuery y la función que
detectara si esta soportada o no esta caracteristica en nuestro navegador.

<html>
<head>
<title>Ejemplo de input date</title>
<link href="http://code.jquery.com/ui/1.10.2/themes/flick/jquery-ui.min.css" rel="stylesheet" />
<!-- Nuestras etiquetas meta o archivos css -->
<script src='scripts/modernizr.js'></script><!--Archivo Moderniz descargado -->
</head>
<body>
<!-- El cuerpo de la web -->
<form name='frmFecha' id='frmFecha' method='post' action='#'>
<label for='fecha'>Seleccione Fecha</label>
<input type='date' name='fecha' id='fecha' placeholder='dd/mm/aaaa' />
</form>
<script src='http://code.jquery.com/jquery-1.9.1.min.js'></script>
<script src='http://code.jquery.com/ui/1.10.2/jquery-ui.min.js'></script>
<script>
$('document').ready(function(){
    if (!Modernizr.inputtypes.date) {
       $('#fecha').datepicker();
    }
});
</script>
</body>
</html>

Enlaces de interes http://jqueryui.com/datepicker/ http://diveintohtml5.info/detect.html#input-types

Atajo de teclado para mostrar escritorio en Ubuntu – Ubuntu Tips

No se vosotros, pero yo suelo a tener un montón de ventanas abiertas cuando trabajo, y generalmente los archivos importantes que puedo necesitar en el trabajo que este haciendo en ese momento los tengo en el escritorio. Cuando trabajo con Mac puedo mostrar rápidamente el escritorio con un movimiento de ratón hacia una esquina, yo lo tengo en la de arriba. Cuando trabajo con Windows, que nos son muchas veces, pues o bien tienes el botón de mostrar escritorio, o bien mueves el ratón abajo a la derecha (window 7 y Vista)

¿Y en Ubuntu? Pues bien, antes cuando usaba Gnome estaba el botón de mostrar escritorio, ahora con Unity pues no esta. La manera mas rápida de hacerlo es con la siguiente combinación de teclas

Ctrl + Super(tecla Win) + d

De esta manera se ocultaran todas las ventanas que tengamos abiertas y se nos mostrara el escritorio

Si quereis mas información acerca de los atajos de teclado de ubuntu se pueden consultar aqui https://help.ubuntu.com/12.10/ubuntu-help/shell-keyboard-shortcuts.html

Enhanced by Zemanta

Tutorial en video del uso de Sublime Text 2

Tuts+ Premium Course: Perfect Workflow in Sublime Text 2.

Browser Refresh – Plugins para Sublime Text 2

Hace un tiempo hablaba de los IDEs para programar con PHP y entre ellos se encontraba el Sublime Text 2 el cual tengo que decir que cada día me gusta y lo uso mas.

Hoy con esta entrada voy a comenzar con una serie de entradas con plugins que me parecen muy interesantes y útiles a la hora de usar este programa. Uno de estos plugins es el Browser Refresh el cual nos permite, utilizando nuestro navegador web preferido, ver como van quedando nuestros cambios, y así evitarnos el tener que estar pasando del entrono de programación al navegador.

http://gcollazo.github.com/BrowserRefresh-Sublime/

Enhanced by Zemanta

HTML5 en versiones anteriores de Internet Explorer 9 – HTML5 Tips

Uno de los problemas que nos encontramos a la hora de diseñar paginas con HTML5 es la compatibilidad con navegadores antiguos. Hay muchos usuarios que usan versiones anteriores a Internet Explorer 9, y en esas versiones, no reconocen los nuevos elementos de HTML5. Una de las maneras de solucionar esto es incluyendo el script HTML5 shiv en la cabecera dentro de un condicional, para que cuando el navegador sea menor que esa versión lo cargue y así pueda leer los elementos HTML5.


<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

El atributo Charset – HTML5 Tips

Uno de los atributos que debemos especificar en toda pagina web es el atributo Charset, este va a definir que tipo de caracteres vamos a utilizar en la web, para que el navegador lo detecte y lo visualice correctamente.

Este atributo, en HTML4 lo definimos de la siguiente manera


<meta http-equiv="content-type" content="text/html; charset=UTF-8">

Con HTML5 definir se ha introducido el atributo charset el y es mas sencillo


<meta class="charset="UTF-8">

Para asegurarnos que todos los navegadores leen la propiedad de codificación de caracteres, la declaración de este debe ser incluida en los primeros 512 caracteres de nuestro documento, es decir, para evitar problemas, debería definirse inmediatamente después de la etiqueta head.

W3schools HTML meta tag

Enhanced by Zemanta

Bucle For vs Bucle For/in en JavaScript – JavaScript Tips

A la hora de recorrer un conjunto de datos o un Array en JavaScript, lo normal es usar el bucle for de toda la vida

var valores = new Array('uno', 'dos', 'tres');
for (var i=0; i < valores.length; i++ ) {
document.write(valores[i]);
}

Este es el bucle al cual estamos acostumbrados, y siempre tenemos que usar length para calcular la dimensión del Array
En cambio si usamos el bucle for/in no hace falta tener que calcularlo

var valores = new Array('uno', 'dos', 'tres');
for (var i in valores) {
document.write(valores[i]);
}

Como se puede ver es bastante mas sencillo usar el bucle for/in que el for. Este bucle seria al equivalente en PHP del foreach
Otra ventaja mas que tiene es que nos permite recorrer un objeto de JavaScript, algo que con el bucle for usando length no nos permite hacer, por lo menos de una manera sencilla.

var person={fname:"John", lname:"Doe", age:25};
for ( x in person) {
document.write(person[x]);
}

Bucles for W3Schools (en inglés)

Enhanced by Zemanta