Todas las entradas por Rubén Lacasa Mas

Momento remember ON

Hace unos días revolviendo unos cajones en casa de mis padres, encontré el que puedo considerar como mi primer libro de programación, realmente no era mío, era de mi hermano mayor, pero con el empece a realizar mis primeros programas con el Commodore Mi primer libro de programación64, y viendo el año de la edición, 1985 y haciendo un calculo rápido me salieron 30 años.

El lenguaje de programación en el cual se realizaban los ejemplos del libro era Basic, del cual no tengo ninguna recuerdo ni medio de como era, pero creo, que tenias que numerar las lineas y el entorno para hacerlo no era muy amigable. No os creáis que a mi me interesaban los programas de gestión y los cálculos de funciones, a mi lo que me interesaban eran los juegos, y quizá también imprimir pancartas con la impresora matricial, con lo que podríamos considerar el arte perdido de dibujar con caracteres, pero vamos principalmente los juegos.

Recuerdo uno en especial, el de la serpiente en el laberinto, en el cual ibas cambiando las variables de velocidad para hacer que la serpiente fuera mas rápida o mas lenta, recuerdo una vez que la puse tan lenta que me dio tiempo de ir a tomarme un refresco con los amigos, volver y la serpiente no había llegado a la pared.

En fin, que rapido pasa el tiempo y que rápida va la informática, o no….

Reordenando nombres y eliminado comas con LibreOffice usando funciones concatenadas – SPREADSHEETS TIPS

SpreadsheetEl otro dia me encontré con un caso, que seguramente muchos os habéis encontrado alguna vez. Tenia dos hojas de calculo (por no decir excel) que en uno tenia los dos apellidos y el nombre (por lo menos estaban separados por una coma) y en el otro el nombre estaba en el orden de nombre y dos apellidos. Me gusta muy poco, por no decir nada, que me pongan el nombre y los apellidos en el mismo campo, pero que le vamos ha hacer, me vino así. Total que estos listados estaban destinados para crear un email personalizado, y la verdad, queda muy mal mandar el email con «Estimado Fernandez Martinez, Francisco».  Ante tal escenario, solo hay 3 opciones, la primera que es pedir que la persona que te lo ha mandado te lo ponga bien, algo que todos sabemos no va a ser, o hacerlo uno mismo, algo que sabemos va a ser lo que va a suceder.

En mi terminal de trabajo uso Linux, mas concretamente Linux Mint, y a la hora de abrir hojas de calculo uso Libre Office Calc, pero uno a la hora de trabajar con funciones de hojas de calculo esta acostumbrado a Excel, tengo que decir que la diferencia es minima, y si uno conoce las funciones que tiene que usar, da igual usar uno u otro programa.

Para realizar esta tarea use las funciones CONCATENAR, DERECHA, IZQUIERDA, LARGO , ENCONTRAR y REDUCIR

Vamos a ver un poco por encima estas funciones a ver que hacen.

La función CONCATENAR(texto;texto1;texto2;…): Esta función sirve, como su propio nombre indica, para concatenar cadenas de texto.

La función DERECHA(texto;número): Devuelve el ultimo carácter o los últimos caracteres de un texto.

La función IZQUIERDA(texto;número): Devuelve el primer carácter o los primeros caracteres de un texto.

La función LARGO(texto): Devuelve la longitud de una cadena de texto.

La función ENCONTRAR(texto_buscado;texto;num_inicial): Busca un valor de texto dentro de otro tomando en cuenta las mayusculas y minúsculas.

La función REDUCIR(texto): Elimina los espacios del texto, excepto el espacio normal que se deja entre palabras.

Bien con estas funciones vamos a encontrar la solución a nuestro problema. Supongamos los siguientes datos de ejemplo en nuestra hoja de calculo

Tabla de datos origen
Tabla de datos origen

Primero vamos a buscar la posición de la , y esto lo haremos con la función ENCONTRAR.

Nos situamos en la celda B1 y escribimos en la linea de funciones:

=ENCONTRAR(«,»;A1)

Esta función nos devolvera 19, que es la posición que ocupa la , en el texto de la celda A1

Función encontrar

Una vez encontrada la posición, vamos a extraer los apellidos, para eso usaremos la función IZQUIERDA la cual la usaremos concatenada con la función ENCONTRAR.

=IZQUIERDA(A1;ENCONTRAR(«,»;A1)-1)

Esta función nos devolvera FERNANDEZ MARTINEZ. El -1 del final es por que si le pasamos directamente el encontrar nos incluye la , y eso no nos interesa, nos interesa solo los apellidos.

Ahora vamos a extraer el nombre, y para hacer eso usaremos la función DERECHA, la función LARGO, y otra vez la función encontrar.

Empezaremos usando la función LARGO la cual nos devuelve el total de numero de caracteres que tiene la cadena de texto.

=LARGO(A1)

Esta función nos devuelve 29, ahora vamos a usar de nuevo la función ENCONTRAR(«,»;A1)

=LARGO(A1)-ENCONTRAR(«,»;A1)

Esto nos devolvera 10, que es el numero de caracteres que hay desde la , hasta el final de la cadena. Hay que tener en cuenta que según tengamos escrita la cadena puede haber un espacio en blanco o no incluido en ese numero, eso es algo que solucionaremos mas tarde con otra función.

Ahora que sabemos cuantos caracteres tiene el nombre, podemos extraerlo con la función DERECHA.

=DERECHA(A1;LARGO(A1) – ENCONTRAR(«,»;A1))

Esto nos devolvera FRANCISCO. Ahora fijaros si el texto resultante tiene un espacio en blanco delante o no, esto dependerá de como lo han escrito en origen, para eliminar los espacios que puede haber al principio o al final usaremos la función REDUCIR.

=REDUCIR(DERECHA(A1;LARGO(A1) – ENCONTRAR(«,»;A1)))

Esta función nos devolvera FRANCISCO sin espacios delante.

Ahora nos queda CONCATENAR las partes que tenemos, y esto nos deja la siguiente función. En esta función final uso la función REDUCIR para que envuelva a toda la cadena y elimine los posibles espacios en blanco no deseados.

=REDUCIR(CONCATENAR(DERECHA(A1;LARGO(A1) – ENCONTRAR(«,»;A1));» «;IZQUIERDA(A1;ENCONTRAR(«,»;A1) -1)))

Función finalResultado final

Una vez aplicada la función, en la celda B2 nos aparece FRANCISCO FERNANDEZ MARTINEZ, es decir ordenado, sin comas y sin espacios extra.

Ahora solo nos quedaria aplicar la formula en toda la columna (doble clic en el punto negro de la esquina inferior derecha) teniendo la celda B1 seleccionada.

Aplicando la formula

Finalmente, si queremos eliminar los datos originales y quedarnos solo con los nuevos datos, ya ordenados, seleccionaremos la columna B, la copiaremos, y haremos un pegado especial de solo texto encima de la columna A, aceptaremos la advertencia que nos da, y eliminaremos la columna B, y con esto ya tenemos todos nuestros datos en el formato deseado.

Pegado especial Resultado final

Espero que os sirva.

¿Como saber cuando cae el domingo de pascua de un año en particular con PHP? – Funciones curiosas de PHP

Hace poco que ha pasado la Semana Santa y las fechas en las que cae es algo que nos preguntamos cada año, es muy típica la conversación – ¿Oye el año que viene cuando cae Semana Santa?, puff ni idea.

Hagamos un poco de historia:

La fecha del Domingo de Pascua fue definida por el Concilio de Nicea en el año 325 D.C. como el domingo después de la primera luna llena que cae en o después del Equinocio de Primavera. El equinoccio se asume que cae en el 21 de marzo, por lo que el cálculo se reduce a determinar la fecha de la luna llena y la fecha del siguiente domingo.

Para poder calcular cuando cae ese Domingo en un año en particular, podemos usar 2 funciones con PHP, easter_days() y easter_date().

easter_date

Obtener la fecha Unix para la medianoche de Pascua de un año dado


<span class="type">int</span> <span class="methodname">easter_date</span> ([ <span class="methodparam"><span class="type">int</span> <code class="parameter">$year</code><span class="initializer"> = date("Y")</span></span> ] )

Si no le pasamos ningún parámetro nos devuelve la fecha Unix del domingo de pascua del año actual. Esta función tiene un problema, y es nos devolverá un error si en año no esta en el rango de 1970 y 2037, lo cual es lógico si nos devuelve la fecha Unix. Para calcular cuando cae el domingo de Pascua en años anteriores o posteriores a ese rango utilizaremos easter_days.

easter_days

Obtener el número de días despúes del 21 de marzo en el cuál cae Pascua para un año dado


<span class="type">int</span> <span class="methodname">easter_days</span> ([ <span class="methodparam"><span class="type">int</span> <code class="parameter">$year</code><span class="initializer"> = date("Y")</span></span> [, <span class="methodparam"><span class="type">int</span> <code class="parameter">$method</code><span class="initializer"> = CAL_EASTER_DEFAULT</span></span> ]] )

+ información: http://php.net/manual/es/function.easter-date.php http://php.net/manual/es/function.easter-days.php

Agregar mas de un destinatario al enviar Mails con Zend_Mail – Zend Framework

Supongamos el siguiente ejemplo de Zend_Mail


$mail = new Zend_Mail()

$mail->setBodyText('This is the text of the mail.');

$mail->setFrom('somebody@example.com', 'Some Sender');

$mail->addTo('somebody_else@example.com', 'Some Recipient');

$mail->addCc('somebody_else@example.com', 'Some Recipient');

$mail->addBcc('somebody_else@example.com', 'Some Recipient');

$mail->setSubject('TestSubject');

$mail->send();

Si queremos agregar mas de un destinatario al addTo(), addCc() y al addBcc() lo podemos hacer por medio de un array de direcciones de correo. En el caso del addTo() y el addCc(), estas arrays pueden ser asociativas, y en estas la key es el nombre del destinatario. Es decir:


$toRecipients = array('Some Recipient' => 'somebody_else@example.com', 'Other' => 'other@example.com');

$hideRecipients = array('one@example.com', 'two@example.com');

$mail->addTo($toRecipients);

$mail->addCc($toRecipients);

$mail->addBcc($hideRecipients);

+ Información: http://framework.zend.com/manual/1.12/en/zend.mail.adding-recipients.html

Los números de 2014

Los duendes de las estadísticas de WordPress.com prepararon un informe sobre el año 2014 de este blog.

Aquí hay un extracto:

El Museo del Louvre tiene 8.5 millones de visitantes por año. Este blog fue visto cerca de 99.000 veces en 2014. Si fuese una exposición en el Museo del Louvre, se precisarían alrededor de 4 días para que toda esa gente la visitase.

Haz click para ver el reporte completo.

Atajos de teclado de Google Chrome

El uso de atajos de teclado en las aplicaciones que usamos día a día nos puede ayudar a la hora de manejarnos con mas fluidez y rapidez a la hora de realizar tareas, por ejemplo si queremos avanzar pagina con Chrome pulsaremos la barra espaciadora, o si queremos ir al final de la pagina, si usamos Mac, pulsaremos CMD + Flecha hacia abajo, y para ir al principio CMD + Flecha hacia arriba. Os dejo aquí el enlace donde podéis consultar todos los atajos de teclado de Google Chrome

Atajos de teclado Google Chrome

Required en radio o checkbox multiple

A veces cuando diseñamos un formulario tenemos que incluir en este elementos radio o checkbox, y queremos que estos sean obligatorios, en el resto de elementos lo podemos tener claro le ponemos el atributo «required» y ya, pero estos elementos sueles dar multiples opciones, entonces que hacemos, lo ponemos en todos el atributo «required», pues si, esa es una de las soluciones, pero hay otra mas sencilla, que es ponerlo solo en el ultimo.


<input type='checkbox' name='opcion' value='si' required>

<input type='checkbox' name='opcion' value='no' required>


<input type='checkbox' name='opcion' value='si'>

<input type='checkbox' name='opcion' value='no' required>

Ejemplo: http://www.sacredheartprimary.co.uk/macss-js/webforms2/testsuite/021.html

Error en Adobe PDF: no había paginas seleccionadas para imprimir

Igual os ha aparecido este error a la hora de imprimir PDF, una vez abierto lo mandas a imprimir y pam ventanita «No pudo imprimirse el documento» y a continuación «No había páginas seleccionadas para imprimir», pues bien esto sucede por que en la versión de Adobe que teneis instalada esta marcada la opción de «Activar modo protegido al iniciar», y si queremos imprimir tenemos que desactivar esta opción. Para desactivarla vamos a EDICION > PREFERENCIAS y en el menu del margen izquierdo vamos a SEGURIDAD (mejorada) y desactivamos la casilla de «Activar modo protegido al iniciar», sale un cartel avisándonos de lo que hemos hecho lo aceptamos y reincidamos Adobe, ahora probamos a imprimir y listo.

+ Info: https://forums.adobe.com/thread/1369542?tstart=0

Instalar Zend Server 7 en Linux Mint

Seguramente a muchos no les gusta el Zend Server, unos dirán que es muy pesado, que consume muchos recursos, que es muy lento, que mejor montar un Apache puro con php, etc …, pero a la hora de desarrollar, es muy completo y nos ofrece un montón de ayudas, una de ellas es el Z-Ray que aparece en esta versión, con el que desde el propio navegador web podemos acceder a los procesos y a las consultas que realiza a la base de datos sin tener que habilitar el depurador, simplemente genial.

En fin, si os descargais la versión de Linux y usais Centos, Red Hat, Debian o Ubuntu, no tendréis problema a la hora de instalarlo, pero si usais otra distro como Linux Mint, os dara un error diciendo que no lo podeis instalar, la solución a este problema es sencilla, editamos el fichero que lanzamos para la instalación install_zs.sh y en la linea 17 donde pone:


SUPPORTED_OS='CentOS|Red Hat Enterprise Linux Server|Enterprise Linux Enterprise Linux Server|SUSE|Debian GNU/Linux|Ubuntu|Oracle Linux Server'

Agregamos al final Linux Mint o el nombre del sistema que estamos usando


SUPPORTED_OS='CentOS|Red Hat Enterprise Linux Server|Enterprise Linux Enterprise Linux Server|SUSE|Debian GNU/Linux|Ubuntu|Oracle Linux Server|Linux Mint'

Una vez modificado volvemos a lanzar la instalación y se instala correctamente