nov 16 2012

Timestamp to datetime in bash

tatai

Nerver forget again. For timestamp 1353101513:

$ date -d "1970-01-01 + 1353101513 seconds" +"%F %T"
2012-11-16 21:31:53

Et voilà!


nov 13 2012

¿Qué cliente de FTP usas?

tatai

Esta pregunta me ha hecho hoy Mr. Client*. Reconozco que no ha sido el primero pero supongo que tampoco será el último.

Mi primera respuesta es que mi religión me lo impide. Ya no recuerdo la última vez que usé FTP por cuenta propia. En caso de necesitar FTP siempre usaré SFTP y, si tengo acceso shell, SCP. No hay nada mejor que una consola y, si es posible, una sesión SSH.

Pero realmente no quería hablar de FTP, sino de clientes para estos servicios. No tengo nada en contra de ellos y si los usas me parece muy bien, pero voy a explicar porque tiendo a no usarlos si es que puedo cambiarlos por comandos en la consola o por acciones que pueda controlar directamente con el teclado. ¿Raro? ¿Arcaico? ¿Friki? Ni mucho menos, eficiente.

Y si el simple hecho de mover las manos entre el teclado y el ratón hace que seas más lento, podemos incluir el hecho de que para la mayoría de las acciones que tengas que hacer bastaría con repetir la misma acción (subir un fichero, copiar una carpeta, borrar un fichero, etc).

Ahí van un par de las preguntas más frecuentes:

“¿Y tienes que estar todo el rato conectándote? ¿Y la contraseña?”

Para esta pregunta, la solución está en este post en el que explica como crear un par de claves que te permita acceder al servidor de forma sencilla y segura.

La respuesta es sí, pero es que conectarme al servidor es una cosa muy sencilla. Además, para configuraciones habituales o que requieran de muchos parámetros, siempre podemos “Tunear” un poco nuestro ssh ;)

 “¿Y cuando tienes que subir varios ficheros?”

El tema se pone interesante. Depende del caso, desde el más sencillo usando wildcards:

scp *.log host:/var/log

O algo más complicado:

scp {script,config}.php host:/var/www

O siempre está la opción de hacernos un mini-script que suba varios ficheros, aunque recordemos que siempre que podamos hacerlo en la misma conexión, ganaremos tiempo.

“Vale, ¿y cuando tienes que subir muchos ficheros? ¿Y carpetas?”

Para las carpetas, nada como la opción -r que permite subir ficheros de forma recursiva, incluyendo directorios.

Cuando tienes que subir muchos ficheros, automatización con un script o incluso usar un tar.gz, subir y descomprimir. Si realmente tienes que trabajar con cambios en muchos ficheros en distintos sitios, la mejor opción sería rsync lanzado manualmente (hasta el momento, no me he encontrado con este caso, pero bueno, será por opciones).

O puedo asegurar que si os gusta la velocidad, lo primero es aprender a no usar el ratón (que no quiere decir que no lo uséis) y luego, a automatizar los trabajos repetitivos. Conseguiréis ser más rápidos, eficientes y, como no, aprenderéis más cosas.

Que no se me enfade nadie, cada uno es libre de usar las herramientas como quiera. Sólo he dado mi propuesta que, además, vale tanto para Linux, Windows o Mac.


*: cariñosamente para el post de hoy ;)


feb 24 2010

Generar passwords aleatorios desde la consola

tatai

Seguro que alguna vez has necesitado una contraseña de estas complicadas y no sabías que poner. Pues bien, de las millones de posibilidades que tienes para generar una, yo tengo esta que la verdad, me parece sencilla y rápida:

cat /dev/urandom | tr -dc "a-zA-Z0-9-_\.\!\$\?" | fold -w 10 | head -n 1

Ok, explicación:

  • /dev/urandom: fuente aleatorio de información
  • tr -dc “a-zA-Z0-9-_\.\!\$\?”: elimina cualquier caracter que no sea una letra, un dígito o alguno de los símbolos – _ . ! $ ?
  • fold -w 10: obliga a que el tamaño sea de 10 caracteres
  • head -n 1: mostrar una contraseña

Así pues, si quieres que tu contraseña tenga x caracteres, cambia el 10 del comando fold por ese valor y si quieres obtener más de una contraseña, indicalo cambiando el 1 de head por tantas como quieras. Por supuesto, si quieres cambiar los caracteres válidos, modifica la expresión de tr.


feb 23 2010

Crear un DOMDocument de un DOMNode en PHP5

tatai

Tengo que reconocer que DOMDocument (del Document Object Model de PHP) me gusta muy muy poco. Lo he usado por necesidad un par de veces en versiones tempranas de PHP5 donde SimpleXML todavía no tenía tanta potencia y con el problema de no poder usar por ejemplo YAML u otro tipo de formatos que no me daban la potencia y flexibilidad de XML para ciertos casos.

Bueno, una de los últimos problemas que me he encontrado ha sido cómo obtener un DOMDocument de un DOMNode ya que quería usar XPath a partir de dicho DOMNode, algo que no es posible si no es DOMDocument.

La verdad es que no he encontrado mucha información ni algo bonito para presentar. Sólo tengo esto, que por lo menos me ha servido (he preferido no pararme a medir el consumo de memoria o de proceso por miedo a querer descartar la idea y perder todavía más tiempo, jeje):

$doc = new DOMDocument();
$doc->loadXML($node->ownerDocument->saveXML($node))

El “truco” es tan sencillo como como crear un nuevo DOMDocument en el que importamos (vía método loadXML) el nodo a través del código XML que genera. Este código se obtiene con la propiedad ownerDocument del DOMNode (que nos retorna el DOMDocument) y sobre el que podemos llamar a saveXML, método que expulsa el XML del elemento que le indiquemos, en este caso, nuestro DOMNode.


feb 23 2010

Buscando ejecutables en el path

tatai

No es la primera vez que me encuentro con una cara de alegría cuando enseño uno de estos comandos con lo que lo voy a dejar por aquí escrito, por si puedo alegrar unas cuantas caras más.

Básicamente consiste en sacar el path completo donde se encuentra un ejecutable en nuestro sistema. Si queremos, por ejemplo, buscar donde está el comando ls, escribimos:

$ which ls

o bien

$ whereis ls

El resultado de ambos es muy parecido: /bin/ls

¿Dónde está la diferencia? Pues which acepta por ejemplo el parámetro -a con el que se muestran todas las coincidencias (no únicamente la primera) o el parámetro -p que retorna 1 si ha encontrado el ejecutable o 0 si no (útil para scripts).

Mucho ojo, estos dos comandos únicamente buscan en aquellos paths definidos en $PATH. Si necesitas buscar fuera de los paths las dos opciones más comunes son:

$ locate ls

O más “a lo bruto”:

$ find / -name 'ls' -type f

Hay que tener en cuenta que locate requiere que se haya indexado el contenido en el disco duro. Por esto, es posible que alguna vez os haya ocurrido que el ejecutable no aparecía, quizás ejecutásteis el comando demasiado pronto.


ene 11 2009

Copiar Google Docs a tu cuenta

tatai

Leo en Google Operating System un interesante truco que te permite copiar un documento que te han compartido y del que sólo tienes permiso para ver.

Cuando te comparten un documento pero sin permisos para editar, actualmente google docs no ofrece la posibilidad de que puedas crearte una copia en tu cuenta. La forma de poder hacerlo es la siguiente.

El documento que te comparten tiene una url como esta:

http://docs.google.com/View?docid=XXXXXXXXXXX

donde XXXXXXXXX es el identificador del documento que es único para cada documento.

Si creas la siguiente dirección:

http://docs.google.com/DocAction?action=copy&docid=XXXXXXXXXXX

La gente de GoogleOS se han currado un script que te permite automatizar el proceso en varios navegadores.


mar 30 2008

Trucos para Gmail

tatai

Extensa colección de trucos para gmail (en inglés) para casi todas las cosas que se te imaginen.


mar 30 2008

101 Técnicas CSS

tatai

Voy a empezar a poner un montón de posts que se me están acumulando con el paso del tiempo y nunca termino de ponerme, jeje.

Y para empezar, una recopilación de técnicas CSS de la web de noupe.com. En particular, lo que han denominado 101 CSS Techniques of all time que incluye temas como las animaciones (sprites) CSS, esquinas redondeadas, crear menús con listas, sombreados, paginaciones, puntuaciones(star rating), pop-ups, sitemap… y un montón más.

Está dividido en dos partes y también es bueno revisar los comentarios ya que hay aportaciones interesantes con respecto al tema.

Estos son los enlaces: