• ## Javascript this as a parameter

Javascript is really unexpected in term of object orientation, particularly for me that I come from a Java background. The least expected surprised I got from the object reference this. continue reading...
• ## Full-life employment

After re-reading some recent questions in On Startups: Startups and full time jobs and Starting with no real industry experience I came to the conclusion that full-life employment are incompatible with part-time startups. If you feel drained at the end of each an everyday after work, there is no energy left for entrepreneur activities, actually for any activity. This is usually the result of the "Software as a Sausage" approach of management.

My two cent on the matter, from my answer to starting with no experience:

If your regular, full-time job is so demanding that you cannot be quiet in the weekend without having to answer email from the company, endless times you have to stay more than 10 hours at the office, not only it is an unhealthy job but also is a job that won't allow you to create your own company some day.

Were you to start a company little by little, you would need to have a more compartmentalized work, regular hours, no bouncing schedule. Otherwise, you will end with no time for a startup, not even a decent life.

• ## Rails rake db empty

Today I wrote a simple solution for emptying a Mysql database in Rails continue reading...
• ## Combinations in Ruby

Today a colleague and I were working with some games that required Combination formulas to calculate the returns (or yields) for the gambler and the house. Like if I play the roulette, which are my odds of winning? Most of the probabilities are calculated based on counting favorable samples such as if I bet 1 number out of 35.

In other cases, like Keno, you need to calculate the winning odds using a formula which requires combinations. Unfortunately in ruby we don't have out-of-the-box probability helpers, so Foca showed us a nice trick to add such a method with lambdas in ruby:

``````factorial = ->(n) { n <= 1 ? 1 : n * factorial[n-1] }
combination = ->(n,k) { factorial[n]/factorial[k]/factorial[n-k] }
combination[52,5]
=> 2598960``````

Of couse we could do an iterative solution for it, but it is quite handy for simple calculations.

• ## Una visita a la Ucrania de hoy

Asi pues, gracias al sponsor de Cubox viajé a Ucrania a dar una charla en rubyshift.org la conferencia Ruby realizada en Dinipropetrovsk, en el este del país.

 From ucrania

La industria IT está muy avanzada, sobre todo en el área de outsourcing de soluciones ofrecidas a Europa Occidental y Estados Unidos. El costo de la gente altamente calificada es inferior a posiciones análogas en dichos países. No obstante, la diferencia horaria, que juega en contra, al interactuar con clientes estadounidenses no es impedimento para trabajar a distancia. Tal es el interés en la industria IT, que son varios los egresados universitarios que cambian de orientación vocacional atraídos por un movimiento pujante, desafíos tangibles y salarios por encima de la media. Además de la fructífera conferencia, fue una preciosa ocasión para conocer un país distante, pero con una cultura que más allá de la barrera idiomática resulta familiar. La cordialidad fue la actitud preponderante, y realmente me sentí a gusto tratando con la mayoría de las personas. Asimismo, tanto Kyiv como L’Viv denotan ser un crisol de arquitecturas, muestra el pasar del tiempo, las ideologías y las naciones por este país.

 From ucrania

 From ucrania
• ## Esa impresionante cantidad de SPAM

Que bien que funciona el filtro de SPAM de Gmail, no? Casi no recibo spam en el inbox. Sin embargo, revisando varios de los comentarios de este blog, resulta curioso la gran cantidad y la escasa calidad que tiene el SPAM, por ejemplo:

Comment by the best sports betting system
Comment by london escorts girl

Pero, ¿qué miércoles? ¿Quién puede aprobar un comentario así? Claramente que nadie que esté en su sano juicio, basta prestar un mínimo de atención.

¿Es tán difícil crear campañas SEO efectivas?  Pregunta equivocada, ¿es tan fácil engañar a la gente para que lea basura? Parece que es más fácil de lo que parece, sino no habría tanto SPAM y los spammers se dedicarían a otra cosa.

Por suerte también el algoritmo de Gmail funciona bien como para enterarse poco.

• ## Errores, la base de la evolución emprendedora

Hace 5 años, apenas después de graduarme de la universidad, empezamos con Andrés nuestro primer emprendimiento. Habíamos terminado el año anterior con nuestro proyecto de grado, el que consistía en un sistema de gestión para una empresa constructora. Intentamos buscarle la vuelta para realizarlo para la empresa pero la idea no prosperó. Sin embargo, meses después, surgió la oportunidad de hacer uno para una empresa de otro rubro. El sistema sustituiría el modo de trabajar mayormente manual y/o con Excel que tenían y significaría un cambio cualitativo y cuantitativo en el proceso.

Repaso algunas de las características de este emprendimiento y aprovecho la lista de errores que liquidan startup's de Graham para darnos contexto:

Uno de los grandes resultados que se espera de Rails Rumble es que surgan aplicaciones útiles y/o lindas desarrolladas  con Ruby On Rails. En esta ocasión la más votada como útil fue: Awesome Fontstacks. La ganadora fue Beer Checkin, la cuál es linda para integrar a Facebook pero no sé que potencial tendrá.

Volviendo a Awesome Fontstacks, se trata de un asistente web que te permite elegir tipografías para escribir títulos y textos en modo acorde. Ideal para programadores como uno que tienen un modo de diseño gráfico binario: o me gusta o no.

Para empezar te propone algunos tipos de letras básicos pero originales como para arrancar. En los sucesivos pasos del asistente te permite probar combinaciones y te sugiere cuáles podrían andar bien según como vayas seleccionando: primero el título, párrafos y cuadros a resaltar. Al final del asistente te muestra en un cuadro de texto el código CSS generado para copiar y pegar en el CSS de tu sitio. El único inconveniente práctico que tiene es que las tipografías las tenés que bajar desde FontSquirrel.

• ## Subpages en WordPress

Hasta hace poco la página de Acerca de había quedado con un cartelito: "Acerca de Subpages a la derecha.

La idea de mostrar anidadas las páginas que descienden de un página principal podría estar buena pero en sí prefiero dejar las páginas aisladas y los posts categorizados.
En WP Support está claro cómo sacar la Subpages, lo cuál aplicado a mi theme se resume en modificar el Sidebar.php, quitando:

``````< ?php /* Menu for subpages of current page */
// ...varias consultas a la base y l&iacute;neas de formateo ...
<?php } } ?>``````

Y listo, se fue el menú de subpáginas.

• ## Rails corriendo en Ubuntu 9.04 con Heroku

Al principio parece fácil correr Rails en Ubuntu con Heroku, pero da ciertos errores menores fáciles de solucionar. Al empezar es bastante directo:
``` sudo apt-get install ruby sudo apt-get install rubygems1.8 sudo gem i rails ```
Ups.. no anda, muestra un error gems... probamos con la aplicación preinstalada en ubuntu:
``` sudo apt-get install rails ```
Lo cuál nos instala Rails v2.3.2, que para seguir el tutorial sirve pero nos faltan dependencias y no llego a hacer:
`gem i heroku`
como para que me dé error de que no encuentra la gem:

ERROR: Could not find gem heroku locally or in a repository

¿Qué ocurre? ¿Error con gems? Sí, y no basta con hacer update, leyendo por ahí, se ve que hay que forzar la actualización de Gems pero la única forma posible es haciendo:``` \$ sudo gem install rubygems-update \$ sudo /var/lib/gems/1.8/bin/update_rubygems \$ gem -v 1.3.7 ```

Esto nos installa el update como un archivo más de ruby gems, el cuál tenemos que ejecutar. Seguidamente verificamos la versión de gem. Ahora estamos en condiciones de instalar Heroku:
``` sudo gem i heroku heroku help ```
Voilà, Heroku instalado. Si ya tenemos configurada la PKI podemos empezar con:
` heroku list `

o bien seguir la guía de Inicio Rápido

• ## Versionarás el código

El código no versionado se vuelve exponencialmente difícil de mantener y fácil de estropear. Hay varias Herramientas en la vuelta, Subversion, Visual Source Safe, GIT y GeneXus Server continue reading...
• ## Rails 3 cambia el routing

### y el tutorial demo no anda...

Así es, entre otras cosas lindas que agrega Rails 3 es un mejor sistema de ruteo. Claro que si estás empezado con el tutorial del 2, por ejemplo del libro “Agile Web Develompent with Rails” una de las primeras cosas que no va a  andar es:

``rails demo``
• ## Exportando desde MySQL

A veces la manera más sencilla que tengo para exportar datos de wordpress es mysqldump, la herramienta de línea de comandos de MySQL en lugar del administrador gráfico. Simplemente hago:
`pablo@home ./\$ mysqldump -u wordpress_usr -p wordpress_db --extended-insert >datos.wordpress.sql`
El argumento -p le indica a mysqldump que me pida la contraseña. El nombre de la base de datos, wordpress_db, es el argumento por omisión. Si pido --extended-insert MySQL genera claúsulas INSERT con múltiples VALUES, que hacen que el import se haga más rápido pero lo hacen incompatible con otras bases de datos.
Por último le agrego cuál va a ser el archivo de salida: >datos.wordpress.sql

Además, como me gusta ruby, haría un script de Rake para automatizar la tarea aún más con un Rakefile:
``` task :default => [:volcar] task :volcar do base = 'wordpress_db' hoy = Time.now #agrego fecha y hora. archivo = 'dump.' + base + '.' + hoy.strftime("%Y-%m-%d") + ".sql" script = 'mysqldump -u USUARIO --password=PASSWORD ' + base + ' --extended-insert >' + archivo system script if \$? == 0 puts "export OK" end end ```

De modo que ahora para ejecutar basta hacer: `pablo@home ./\$ rake`

• ## Puertos de Apache en XAMPP

Esta semana me tocó instalarle a un amigo XAMPP en su notebook para que probara WordPress. Para simplificarle la configuración. La instalación anduvo bien hasta que quisimos entrar al localhost y nos encontramos con que no respondía. Arranqué el apache desde la línea de comandos para ver que error daba e ¡indicaba que los puertos estaban ocupados!

Problema:
SKYPE tenía ocupados los puertos donde trabaja Apache por omisión.

Solución:
Levantar el apache en puertos alternativos:

C:\xampp\apache\conf\httpd.conf
Cambiando el comando Listen de 80 a 8080.

Como XAMPP también incluye por omisión SSL, hay que cambiar:
C:\xampp\apache\conf\extra\httpd-ssl.conf
Cambiando el comando Listen de 443 a 8043.