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:
miércoles, 26 de febrero de 2014
Numeros a letras
Etiquetas:
Algoritmos,
Open Source,
Ruby
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:
Si deseas arreglarlo de forma permanente entonces cambia el archivo /etc/sysctl.conf y agrega esta línea
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
lunes, 28 de octubre de 2013
Nginx: 413 Request Entity Too Large
Estaba yo todo "juicioso" trabajando como siempre cuando de repente me dicen: "La aplicación está dando un problema!!!" y bueno, quienes me conocen, saben que nunca me equivoco por lo que debía existir un error en el servidor.
Haciendo el respectivo "debug" me encontré conque Nginx estaba botando el siguiente error: 413 Request Entity Too Large.
La aplicación permite subir fotos y estaban intentando subir una foto de más de 2MB de tamaño.
Resulta que Nginx está configurado por defecto para permitir un tamaño de mensaje de máximo 2MB por lo que procedí a hacer el siguiente cambio:
En el archivo /etc/nginx/nginx.conf (el path puede cambiar de acuerdo al S.O y forma de instalación) agregué la siguiente linea:
luego recargué Nginx y listo.
Haciendo el respectivo "debug" me encontré conque Nginx estaba botando el siguiente error: 413 Request Entity Too Large.
La aplicación permite subir fotos y estaban intentando subir una foto de más de 2MB de tamaño.
Resulta que Nginx está configurado por defecto para permitir un tamaño de mensaje de máximo 2MB por lo que procedí a hacer el siguiente cambio:
En el archivo /etc/nginx/nginx.conf (el path puede cambiar de acuerdo al S.O y forma de instalación) agregué la siguiente linea:
client_max_body_size 5M;
luego recargué Nginx y listo.
/etc/init.d/nginx reload
lunes, 14 de octubre de 2013
¿Cómo eliminar múltiples archivos de un repositorio git?
Estaba en la tarea de actualizar la version de Sencha Touch en un proyecto en el que estoy trabajando corriendo el muy conocido comando
y pues al hacer las respectivas pruebas y arreglos, me puse en la tarea de actualizar el repositorio, por lo que, corrí el otro muy conocido commando
Y oh sorpresa, existían muchos pero muchos archivos en diferentes carpetas que debían ser eliminados del repositorio, junto con muchos que debían ser agregados (al haber sido modificados y/o creados).
Para agregar los nuevos el siguiente commando hace el milagro
Pero para borrar no puedo usar simplemente
dado que borraría TODOS los archivos.
¿Y el recontra conocido git -a o git -u?
Pues serviría siempre y cuando quieras subir TODOS tus cambios (y a veces no quieres hacer eso)
Entonces, ¿cuál es la solución?
Facilísimo:
Y bueno expliquemos un poco:
git ls-files: lista archivos del indice de git
--deleted: solo muestra los archivos eliminados
-z: pone \0 (el conocido NUL) como terminador del string (util si el path tiene espacios)
|: concatena la salida del primer commando con el siguiente
xargs: permite concatenar argumentos y pasarlos a un comando (en este caso git rm)
-0: utiliza \0 como character de separación (por esto usamos -z en git ls-files)
sencha app upgrade /path/a/la/nueva/version
y pues al hacer las respectivas pruebas y arreglos, me puse en la tarea de actualizar el repositorio, por lo que, corrí el otro muy conocido commando
git status
Y oh sorpresa, existían muchos pero muchos archivos en diferentes carpetas que debían ser eliminados del repositorio, junto con muchos que debían ser agregados (al haber sido modificados y/o creados).
Para agregar los nuevos el siguiente commando hace el milagro
git add /path/
Pero para borrar no puedo usar simplemente
git rm .
dado que borraría TODOS los archivos.
¿Y el recontra conocido git -a o git -u?
Pues serviría siempre y cuando quieras subir TODOS tus cambios (y a veces no quieres hacer eso)
Entonces, ¿cuál es la solución?
Facilísimo:
git ls-files --deleted -z | xargs -0 git rm
Y bueno expliquemos un poco:
git ls-files: lista archivos del indice de git
--deleted: solo muestra los archivos eliminados
-z: pone \0 (el conocido NUL) como terminador del string (util si el path tiene espacios)
|: concatena la salida del primer commando con el siguiente
xargs: permite concatenar argumentos y pasarlos a un comando (en este caso git rm)
-0: utiliza \0 como character de separación (por esto usamos -z en git ls-files)
Etiquetas:
actualización,
git,
Sencha Touch
martes, 8 de octubre de 2013
¿Cómo configurar Nginx para que utilice autenticación HTTP?
Estaba haciendo una migración de servidores y decidí cambiar Apache por Nginx, todo resultó bastante "sencillo", pero ¡oh sorpresa! uno de los sitios web necesita autenticación HTTP para funcionar como se espera.
Y bueno, caí en cuenta de que no tenía idea de como hacerlo por lo que luego de una pequeñabúsqueda en google investigación pues encontré estos pasos:
1. Para poder generar el password cifrado utilicé Apache Utils por lo que ejecuté:
2. Crear el usuario y el password
Pedirá el password:
3. Actualizar el archivo de configuración de Nginx
En este archivo, en la sección location se debe agregar lo siguiente:
Ejemplo:
4. Luego simplemente recargamos Nginx y listo:
Y bueno, caí en cuenta de que no tenía idea de como hacerlo por lo que luego de una pequeña
1. Para poder generar el password cifrado utilicé Apache Utils por lo que ejecuté:
sudo apt-get install apache2-utils
2. Crear el usuario y el password
sudo htpasswd -c /path/donde/mantener/el/archivo/.htpasswd el_nombre_de_usuario
Pedirá el password:
New password: Re-type new password: Adding password for user el_nombre_de_usuario
3. Actualizar el archivo de configuración de Nginx
sudo vi /etc/nginx/sites/available/el_archivo_de_configuracion_del_sitio_web
En este archivo, en la sección location se debe agregar lo siguiente:
auth_basic "Restricted"; auth_basic_user_file /path/donde/mantener/el/archivo/.htpasswd;
Ejemplo:
server {
listen numero_de_puerto;
server_name el_dominio.com;
location / {
root /el/path/a/la/raiz/del/sitio;
auth_basic "Restricted";
auth_basic_user_file /el/path/al/archivo/.htpasswd;
}
4. Luego simplemente recargamos Nginx y listo:
sudo /etc/init.d/nginx
Etiquetas:
configuracion,
HTTP Authentication,
Instalacion,
Linux,
nginx,
ubuntu
martes, 30 de octubre de 2012
Sencha Touch con PhoneGap
Pues bueno, estaba yo todo juicioso haciendo mi trabajo como todos los días cuando me hicieron el siguiente requerimiento:
Necesitamos una aplicación para iPhone que haga tal y cual cosa, necesitamos que uses Sencha Touch y PhoneGap.
Ya PhoneGap lo he utilizado en un par de proyectos y ya me conozco las mañas para usarlo, pero Sensa Touch no lo había usado por lo que me puse a investigar un poco del asunto, en el mismo sitio web de Sensa existe un tutorial de cómo unir ambos productos pero... El tutorial fue realizado el 28 de enero de 2011 y actualizado el 7 de Octubre del mismo año y las versiones tanto de Sensa Touch como de PhoneGap han cambiado y mucho!!! así que me puse a leer un poco más de cómo carajos hacer la integración y en este post espero ayudar a los que esten en el mismo dilema que yo.
Paso 1
Descarga las últimas versiones de lo que se necesita e instalalo:
Paso 2
Abre un terminal y ve a donde hayas copiado el Sansa Touch y ejecuta
Paso 3
Copia el archivo js de PhoneGap en la carpeta de la applicación que acabas de crear
Paso 4
Indicale a Sencha Touch que debe usar el archivo js de PhoneGap, para lo cual abre el archivo app.json y agrega en el apartado de js el path al archivo.
Paso 5
Abre un terminal y ve a donde hayas copiado PhoneGap y crea una aplicación, y ubicala dentro de la carpeta build de la aplicación Sencha Touch
Paso 6
Elimina el contenido de la carpeta www de la aplicación de PhoneGap que acabas de crear
Paso 7
Modifica la aplicación de Sencha Touch para que compile en la carpeta www de la aplicación de PhoneGap, para lo cual edita el archivo app.json en la sección "buildPaths", debe quedar algo parecido a lo siguiente:
Paso 8
Empaqueta la aplicación sencha
Paso 9
Abre el proyecto Xcode de la aplicación PhoneGap y ejecutalo.
Y voilà!!!
Espero que esta guia te haya ayudado.
Necesitamos una aplicación para iPhone que haga tal y cual cosa, necesitamos que uses Sencha Touch y PhoneGap.
Ya PhoneGap lo he utilizado en un par de proyectos y ya me conozco las mañas para usarlo, pero Sensa Touch no lo había usado por lo que me puse a investigar un poco del asunto, en el mismo sitio web de Sensa existe un tutorial de cómo unir ambos productos pero... El tutorial fue realizado el 28 de enero de 2011 y actualizado el 7 de Octubre del mismo año y las versiones tanto de Sensa Touch como de PhoneGap han cambiado y mucho!!! así que me puse a leer un poco más de cómo carajos hacer la integración y en este post espero ayudar a los que esten en el mismo dilema que yo.
Paso 1
Descarga las últimas versiones de lo que se necesita e instalalo:
- Sencha Touch 2.0.1.1 - Descomprime y copia en una carpeta en tu computador
- Sencha SDK Tools 2.0.0 Beta 3 - Descomprime y ejecuta la aplicación, sigue los pasos
- PhoneGap 2.1.0 - Descomprime y copia la carpeta lib/ios a una carpeta en tu computador
Paso 2
Abre un terminal y ve a donde hayas copiado el Sansa Touch y ejecuta
sencha app create nombre_de_app /path/de/la/app all
Paso 3
Copia el archivo js de PhoneGap en la carpeta de la applicación que acabas de crear
cp CordovaLib-2.1.0/bin/templates/project/www/cordova-2.1.0.js /path/de/la/app/
Paso 4
Indicale a Sencha Touch que debe usar el archivo js de PhoneGap, para lo cual abre el archivo app.json y agrega en el apartado de js el path al archivo.
"js": [
{
"path": "cordova-2.1.0.js"
}
...
]
Paso 5
Abre un terminal y ve a donde hayas copiado PhoneGap y crea una aplicación, y ubicala dentro de la carpeta build de la aplicación Sencha Touch
./create /path/de/la/app/build/phonegap el.nombre.de.la.app NombreApp
Paso 6
Elimina el contenido de la carpeta www de la aplicación de PhoneGap que acabas de crear
Paso 7
Modifica la aplicación de Sencha Touch para que compile en la carpeta www de la aplicación de PhoneGap, para lo cual edita el archivo app.json en la sección "buildPaths", debe quedar algo parecido a lo siguiente:
"buildPaths": {
"testing": "build/testing",
"production": "build/production",
"package": "build/phonegap/www",
"native": "build/native"
}
Paso 8
Empaqueta la aplicación sencha
sencha app build package
Paso 9
Abre el proyecto Xcode de la aplicación PhoneGap y ejecutalo.
Y voilà!!!
Espero que esta guia te haya ayudado.
Etiquetas:
Cordova,
Cordova/PhoneGap,
iPhone,
PhoneGap,
Sencha Touch
viernes, 5 de octubre de 2012
Rails y Postgresql
Estaba todo juicioso creando una nueva aplicación rails con postgres
Cuando de repente fui a crear la BDD
Y me apareció el siguiente mensaje:
Una rápida búsqueda me indicó que tenía que hacer un pequeño cambio en cómo se hace la autenticación de postgres para lo cual hice lo siguiente:
Y cambié la linea:
Por
luego reinicié el server
Y listo, todo funcionó.
rails new AppName -d postgresql
Cuando de repente fui a crear la BDD
rails db:create
Y me apareció el siguiente mensaje:
FATAL: Peer authentication failed for user "el usuario"
Una rápida búsqueda me indicó que tenía que hacer un pequeño cambio en cómo se hace la autenticación de postgres para lo cual hice lo siguiente:
sudo vi /etc/postgresql/9.1/main/pg_hba.conf
Y cambié la linea:
local all postgres peer
Por
local all postgres md5
luego reinicié el server
sudo /etc/init.d/postgresql restart
Y listo, todo funcionó.
Suscribirse a:
Entradas (Atom)