lunes, 3 de marzo de 2014

Lunes 2 de Enero de 2006 a las 3 de la tarde con 4 minutos y Go

En una de mis tantas travesías por aprender nuevas cosas me encontré con la necesidad de manipular fechas en el lenguaje go y bueno me encontré con la ¿grata? sorpresa de no podía utilizar mis conocimientos "ancestrales" de transformación de fechas, por ejemplo %Y para años o %H para horas sino que go tratando de "facilitarle" la vida a los programadores decidió utilizar la mnemotecnia para el formato de fechas (y obviamente de horas) empleando el siguiente estándar:

  1. Día
  2. Mes
  3. Hora (en realidad se usa el 15 que significa 3pm)
  4. Minutos
  5. Segundos
  6. Año
  7. Timezone

Entonces resumiendo, en lugar de utilizar representaciones para hacer el formato, utiliza una fecha:

01/02 03:04:05PM '06 -0700

Ejemplo:

viernes, 28 de febrero de 2014

Configurar multiples claves ssh

En algunas ocasiones necesitamos usar diferentes cuentas de git para manipular los repositorios, por ejemplo tenemos una cuenta de la empresa y por ende usamos la cuenta de la empresa pero tenemos algún proyecto personal y queremos manejarlo con nuestra cuenta personal.

Cuando esto sucede podemos llegar a tener problemas porque git dice que no se tiene permisos para ver tal o cual repositorio.

¿Cómo podemos solucionarlo?

Una de las opciones es configurar diferentes cuentas ssh y darle alias a los urls para que pueda distinguir que cuenta usar, para lo cual debemos seguir los siguientes pasos:

  1. Crear la clave
    ssh-keygen -t rsa -C "aquí@el_email.com"
  2. Agregar las claves al agente ssh
    ssh-add ~/.ssh/id_rsa_oficina
    ~/.ssh/id_rsa_personal
  3. Crear el archivo de configuración de shh
    cd ~/.ssh
    touch config
    chmod 0600
  4. Agregar las definiciones de alias y autenticación
    #Oficina
    Host github.com-oficina #Este es el alias
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_oficina #Recuerda usar el path absoluto
    
    #Personal
    Host github.com-personal
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_rsa_personal
  5. Al clonar el proyecto en lugar de usar github.com user el alias
    git clone git@github.com-oficina:oficina/repo.git
  6. Si ya tenías clonado el proyecto simplemente cambia el url del mismo
    git remote set-url origin git://git@githb.com-oficina:oficina/repo.git

miércoles, 26 de febrero de 2014

Numeros a letras

Hoy estaba todo juicioso como siempre, trabajando, cuando me quisieron meter la pica de cómo hacer el típico algoritmo para transformar de números a letras, pues bueno como estaba todo juicioso no cambié de tema y seguí trabajando (porque siempre trabajo juicioso) pero llegué a la casa y me puse manos a la obra.

Los requisitos eran hacerlo en ingles (you know numbers to words) y hacerlo en ruby.

¿Qué lógica utilicé?
Bueno, tanto las unidades como las centenas utilizan los mismos nombres salvo que las centenas llevan incorporada la palabra hundred así que utilicé un arreglo para manejar estas dos posiciones, luego caí en cuenta que en inglés (¿también en español?) el proceso se repite cada tres dígitos, es decir procesar por ejemplo 123 y 123xxx (nada en particular las 3 x's solo me refiero a cuales quiera dígitos que usemos) da exactamente igual salvo que cada 3 dígitos toca ponerle un nombre (miles, millones, billones, etc) por lo que para esta parte también generé un arreglo con los nombres, y el último caso es que los nombres para las decenas dependen del valor de las unidades cuando la decena es 1, es decir para los dieces (¿cómo se dice esto en español?) once, doce, etc, así que creé 2 arreglos, uno para las decenas con dígito 1 y otro para las decenas con cualquier otro dígito.

Y bueno, esto es lo que salió:

En Gist para que lo copien, mejoren, etc:

jueves, 13 de febrero de 2014

Inotify Watches Limit

Uno de los programas que utilizo en linux utiliza Inotify el cual permite monitoreas eventos relacionados con el sistema de archivo.

En los últimos días he estado recibiendo una alerta indicando que se ha llegado al límite de observadores. Esto se da porque tiene que monitorear gran cantidad de archivos (el límite por defecto es 8192).

¿Cómo se puede corregir este problema?
En Ubuntu se puede hacer de 2 maneras, si lo quieres arreglar para la sesión actual puedes usar:

echo 32768 > sudo tee /proc/sys/fs/inotify/max_user_watches

Si deseas arreglarlo de forma permanente entonces cambia el archivo /etc/sysctl.conf y agrega esta línea

fs.inotify.max_user_watches=32768