Todas las entradas por Rubén Lacasa Mas

Inauguramos la sección de hojas de calculo – Spreadsheets Tips

Con esta entrada inauguramos una nueva sección en la cual voy a contar trucos y funciones para usar en los programas de hojas de calculo, y digo hojas de calculo y no Excel, ya que hoy en dia no solo se usa el Excel, sino que se pueden usar otras alternativas comerciales como Numbers para Mac, o alternativas gratuitas como LibreOffice o Google Spreadsheet, y no todas tienen las mismas funcionalidades, aunque el trabajo basico es bastante parecido, por no decir igual.

Soy consciente que la categoria principal en la cual voy a ubicar estas entradas (Programación) apriori no seria la categoria mas adecuada para estas, pero si nos paramos a pensar un momento, estos programas tienen funciones propias y tienes que cumplir una estructura para poder realizar los cálculos, por no hablar de la programación con la cual funcionan las macros.

Aunque la mayoría de las entradas estarán relacionadas con Excel, intentare realizar las mismas funciones tanto para LibreOffice, Google Spreadsheet y Numbers.

Espero que sean de utilidad para todos.

Selección de datos entre fechas – MySQL Tips

MySQLUna de las consultas mas frecuentes que solemos realizar es la de devolver datos entre fechas. La manera mas sencilla de realizar es utilizar el operador de comparación ‘BETWEEN’. Por ejemplo si queremos ver los datos entre dos fechas lo haremos de la siguiente manera. En este ejemplo la fecha mas baja es ‘fechaMin’ y la alta ‘fechaMax’, y hay que tener en cuenta que todos los argumentos tienen que ser del mismo tipo.


SELECT * FROM `miTabla` WHERE `miCampoFecha` BETWEEN 'fechaMin'  AND 'fechaMax';

Si el valor de `micampoFecha` es mayor o igual que ‘fechaMin’ y menor o igual que ‘fechaMax’  ‘BETWEEN’ devolvera 1 si no devolvera 0. Esto es lo mismo que hacer lo siguiente.


SELECT * FROM `miTabla` WHERE ('fechaMin' <= `miCampoFecha` AND `miCampoFecha` <= 'fechaMax')

Si lo que queremos es mostrar las fechas que no esten comprendidas dentro de este rango añadiremos ‘NOT’  delante de ‘BETWEEN’


SELECT * FROM `miTabla` WHERE `miCampoFecha` NOT BETWEEN 'fechaMin'  AND 'fechaMax';

Para mas información acerca de los operadores de comparación en MySQL hacer clic aquí

Indicador del tiempo en Ubuntu 13.04

Después de un tiempo usando la Ubuntu 12.04 lts, he decidido actualizarla a la versión actual (la 13.04) y no esperar a la siguiente lts.  Decir que me encontrado algún que otro problema al realizar la actualización, sobre todo con la tarjeta gráfica, lo cual tratare algún día aquí, ya que en esta entrada voy a hablar de algo que he echado en falta, que aunque puede parecer una tontería pero a mi me gusta tenerlo, que es el indicador del tiempo. En la versión 12.14 se podía instalar normalmente y este se ponía al lado del reloj y cambiaba según el tiempo. Mi sorpresa ha sido que en esta nueva versión ha desaparecido, además lo mas extraño es que si accedes al centro de software Ubuntu y buscas weather te aparece pero no te da opción de instalarlo, y además las opciones que me sugerían no me acababan de convencer, asi que Googleando un poco descubrí My-Weather-Indicator el cual esta muy bien, y su instalación no es nada complicada.

Abrimos una terminal (Ctrl + Alt + t) y tecleamos lo siguiente

sudo add-apt-repository ppa:atareao/atareao

Una vez agregado el repositorio actualizamos la base de datos de paquetes

sudo apt-get update

Y finalmente instalamos el my-weather-indicator

sudo apt-get install my-weather-indicator

Una vez instalado buscamos la aplicación en ‘buscar en su equipo o en linea’ y teclemaos my-weather-indicator, el cual nos aparecerá y hacemos clic para abrirlo, lo configuramos como queramos y listo, ya tenemos nuestro indicador del tiempo.

Como ver los tamaños de ficheros en KB, MB, GB – Linux Tips

Linux

Comando ls

El comando ls lista los contenidos de un directorio y creo que debe ser uno de los comandos mas usados, por lo menos yo lo uso muchísimo.

Una de las características de Linux es que usa mucho los ficheros y directorios ocultos, que en la mayoría de casos comienzan por punto (.), si queremos que en el listado nos aparezcan esos ficheros tenemos que combinar el ls con la opción -a (ls -a) y asi podremos ver en el listado los archivos ocultos.

Si queremos conocer el tamaño, permisos, propietario y fecha de creacíon de los ficheros en el listado utilizaremos la opción -l.  Y si queremos ver el listado completo con los ocultos podemos combinar el comando con -la, el cual en muchas distribuciones ya esta configurado con un alias para ejecutarlo mas rápidamente (ll).

El tamaño que nos muestra este listado esta expresado en bytes, y la verdad hoy en día ya no estamos muy acostumbrados a interpretar esa información rápidamente. Para poder visualizar los tamaños de una manera mas ‘humana’ podemos utilizar la opción -h, la cual hay que combinarla con la opción -l y así los tamaños se nos mostraran en KB, MB o GB dependiendo del tamaño del fichero.

Si quereis crear un ‘alias’ para ejecutar rápidamente este modificador podemos agregarlo a nuestro .bashrc
para hacer esto,  abrimos una terminal, (un atajo de teclado para abrir la terminal es pulsando Ctrl + Alt + T). En la mayoría de casos ya estaremos en nuestro directorio personal, de  todas maneras una manera rápida de llegar hasta nuestro directorio es haciendo lo siguiente cd $HOME o cd ~ , para escribir el simbolo ~ en teclados en castellano pulsar ALT-Gr + ñ, una vez hecho esto si quereis aseguraros en que directorio nos encontramos podeis teclear pwd el cual nos devolvera la ruta absoluta del directorio en el cual estamos.

Una vez en nuestro directorio editamos el .bashrc con el vi, vim, nano, emacs o con el editor con el cual estéis familiarizados, y o bien buscamos la linea donde están definidos los alias o al final de fichero y escribimos lo siguiente alias lh=’ls -lh’ y guardamos el fichero. Ahora cerramos la terminal y la volvemos a abrir y probamos a escribir el comando lh el cual nos devolverá el mismo listado que si escribimos ls -lh.

Si necesitáis mas información con el comando ls y sus opciones no tenéis mas que teclear en la terminal:

man ls

Comando du

El comando du estima el espacio ocupado por el fichero. Una de las mejores características de este comando es que es recurrente, es decir, desde donde lo ejecutemos se mente dentro de todas las carpetas que tengamos y nos muestra el tamaño de cada uno de los ficheros que tengamos,  pero esta ventaja tiene un pero, nos puede devolver tantos resultados por pantalla que nos puede ser un poco dificil poder analizarlos detenidamente, para evitar esto, yo suelo hacer dos cosas o bien lo combino con more ( du | more ) o vuelco los resultados a un fichero (du > ficheros.log). Al igual que sucedía con el ls -l los tamaños se devuelven en bytes, y al igual que en el ls si combinamos el du -h se nos devolveran los resultados expresados en KB, MB o GB. Para poder limitar la recurrencia de este comando podemos combinarlo con «–max-depth=1» para limitar el numero de directorios por el que meterse y nos mostrara el tamaño total del directorio.

Comando df

El comando df nos muestra los tamaños, tanto libre como ocupado de los distintos puntos de montaje en nuestro sistema, este tamaño viene expresado en Bytes, al igual que el porcentaje de uso.


user@localhost:/# df
S.ficheros 1K-bloques Usados   Disponibles Uso%  Montado en
/dev/sda1  68557352   58002176 7072604     90%   /
udev       241040     4        241036      1%    /dev
tmpfs      100548     1200     99348       2%    /run
none       5120       0        5120        0%    /run/lock
none       251364     0        251364      0%    /run/shm

Si junto a este comando utilizamos la opción ‘-h’ nos devolverá los tamaños de una manera mas legible.


user@localhost:/# df -h
S.ficheros Tamaño Usados Disp Uso% Montado en
/dev/sda1  66G    56G    6,8G 90%  /
udev       236M   4,0K   236M 1%   /dev
tmpfs      99M    1,2M   98M  2%   /run
none       5,0M   0      5,0M 0%   /run/lock
none       246M   0      246M 0%   /run/shm

No solo en linux

Decir que todos estos comandos son totalmente validos en otros sistemas *nix,como en MacOSX.

Detectión de dispositivos moviles – Javascript Tips

En un proyecto en el que he estado trabajando últimamente, necesitaba detectar cuando el dispositivo era móvil o no, y ademas tenia que detectar si el dispositivo usaba iOS o Android. En un principio quería usar Modernizr, ya que ya estaba utilizándolo para detectar el tipo de navegador usado por el cliente, pero googleando un poco encontré este script el cual me pareció mas adecuado para conseguir mi objetivo. Esta librería se puede descargar de http://blog.mobileesp.com/. En esta pagina también podemos encontrar demos  la documentación necesaria para integrarlo.

// Incluimos el archivo mdetect.js
<script src='js/mdetect.js'></script>
<script>
if (DetectIos()) { // Si es iOS
 // Realiza las acciones para iOS
} else if (DetectAndroid()) { // Si es Android
 // Realiza las acciones para android
} else { // Para el resto de casos
 // Realiza las acciones para el resto de los casos
}
</script>
Enhanced by Zemanta

Calcular la edad con MySQL – MySQL Tips

Muchas veces este tipo de calculos recurrimos ha hacerlos por medio de alguna función, y no nos paramos a pensar que podemos realizarlo en la misma consulta y ahorrar asi tiempo, creación de funciones y llamadas a estas. Con la siguiente consulta, tenemos un campo llamado birthDay el cual almacena la fecha de nacimiento dentro de nuestra tabla myTable y la consulta nos devuelve las edades a dia de hoy.

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthDay)), '%Y')+0 AS age FROM myTable
Enhanced by Zemanta

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