The Principles Of Successful Freelancing disponible gratuitamente

Ya hablé aquí hace un tiempo acerca del libro The Principles Of Successful Freelancing.

Pues resulta que hoy me ha llegado un correo de SitePoint, anunciando que durante 7 días la versión en PDF está disponible para descarga gratuita, yo ya me lo he descargado, a ver cuando voy terminando mis lecturas pendientes y le dedico un tiempo, a ver si resulta un libro interesante y útil.

Cambiando de prototype a YUI con Grails

Días antes del último despliegue de Jobsket, estuve dándole vueltas a un problemilla con Grails 1.0.5 y los taglibs estándar para usar Ajax, por defecto Grails utiliza la librería javascript prototype para abstraerse de los distintos navegadores. Para que funcionen los taglibs remoteFunction, remoteLink y formRemote debemos utilizar <g:javascript library="prototype" /> para que cargue el .js de la librería, la cuestión es que estamos utilizando algunos componentes de YahooUI(y de GrailsUI) y para aligerar el peso de las peticiones, queríamos quitar todas nuestras dependencias con prototype.

Después de refactorizar nuestro código javascript dependiente de prototype, donde hemos encontrado que hay efectos muy sencillos de implementar gracias a script.aculo.us que no lo son tanto con YahooUI(la librería Effects Widget nos ha ayudado en esta transición), nos encontramos que teniendo en el layout la declaración de qué librería deben usar para renderizar esos taglibs de Ajax, en las vistas seguía haciéndolo con el código para prototype, por lo que daba errores javascript. Para que en cada vista renderizara usando el código de YUI, debemos poner la declaración <g:javascript library="yui" /> en cada vista, yendo con cuidado en el orden de las dependencias, ya que si hay un <g:javascript library="yui"/> en el layout y en la vista sólo se renderizará el segundo, por lo que habría que hacer algo así:

En el layout:
<g:javascript library="yui" />
<g:layoutHead />
<yui:javascript dir="..." file="..." />
<yui:javascript dir="..." file="..." />
<g:javascript library="application" />

En la vista:
<g:javascript library="yui" />
<yui:javascript dir="..." file="..." />

En este orden se renderizarán primero las dependencias básicas de la librería YUI, luego las que necesitemos para usar componentes, y por último nuestro propio código que puede depender de algún componente.

En fin, no es una solución DRY, pero funciona para los pocos casos en los que lo necesitamos.

Otra de las soluciones de las que nos hemos ayudado, como muchos seguro que imaginaréis ;), es implementar una función $(), que aunque no nos dé las bondades de las extensiones DOM de prototype, nos ha ayudado a tener que cambiar mucho menos código:

function $(id){ return YAHOO.util.Dom.get(id)}

Script en groovy para descargar ficheros de GoEar

Una de las cosas de Groovy que pueden resultarnos útiles en algunos momentos, es la posibilidad de escribir pequeños scripts para automatizar alguna tarea o para escribir pequeñas utilidades. Es algo muy habitual para lenguajes como Perl o Ruby, y que tienen la ventaja de que comienza antes su ejecución por no tener que arrancar la JVM, cosa que sí necesita Groovy(que esto sea más o menos crítico, que lo decida cada uno :P).

A modo de ejemplo, y basándome en el post Descargando la música de GoEar.com en debugmodeon, se me ocurrió escribir un pequeño script que hiciera prácticamente lo mismo(Extractor.groovy):

Update: Parece que el código se verá mejor en gist

import groovy.util.XmlParser
args.each{ id ->
def songs = new XmlParser().parse("http://www.goear.com/files/xmlfiles/${id[0]}/secm${id}.xml")
def song = songs.song[0]
def mp3 = song.'@path'
def name = (song.'@artist'+"_"+song.'@title').replaceAll(" ","_")
def file = new File("/path-a-un-directorio/${id}-${name}.mp3").newOutputStream()
file << new URL(mp3).openStream()
file.close()
println "${name} has been downloaded"
}

Para utilizarlo, simplemente le pasamos los identificadores de las canciones que queramos descargar, por ejemplo:

groovy Extractor.groovy cd332f6 e96ff20 acee672

Un año de freelance

Después de un año, y ahora que me empiezo a tomar unos meses sabáticos de mi actividad freelancer para meterme a la de entrepreneur, creo que es un buen momento para recopilar un poco lo que ha sido este año de independencia en el que he aprendido bastante a muchos niveles, ya que en este tiempo, he trabajado yo sólo para clientes finales, junto a otros freelancers, como con empresas de desarrollo; casi siempre girando entorno al desarrollo web. Y quería compartir mi humilde experiencia, por si a alguien le puede ayudar a lanzarse(o no XD).

No es ninguna novedad que una de las mejores cosas de trabajar como profesional liberal es la flexibilidad horaria: Poder salir a hacer recados en horario "de maruja", no tener excesiva preocupación del reloj... incluso permitirme algún viernes resacoso :P.
Pero no es oro todo lo que reluce, esa flexibilidad en ocasiones me ha provocado no diferenciar entre horas de trabajo y de descanso, trabajar sábados y/o domingos; y en picos de trabajo(a.k.a. marrones colados por uno mismo) no tener prácticamente tiempo para descansar y despejar la mente, quitando horas de sueño, antes de acostarte estar trabajando y nada más despertar retomar el trabajo de nuevo. También he tenido un par de noches sin dormir incluídas...
Ah! Y vacaciones las justas, ya no recuerdo que es eso de tener una semana seguida de vacaciones para cargar las pilas.

Otra ventaja es la flexibilidad de localización. He trabajado en casa, en bares(sobre todo en el Penguin Row y en el Ángel Azul), bibliotecas, en mi pueblo, en parques... casi en cualquier lugar con una conexión a internet. Se suele recomendar tener también un espacio de trabajo habitual para ayudar a diferenciar horas de trabajo y descanso, cosa con la que estoy muy de acuerdo, pero desgraciadamente para mi el mío es mi propia habitación.

The Penguin Row

Para mi lo más duro es la falta de contacto con otras personas. Aunque las herramientas de comunicación online ayudan: gtalk, twitter, jaiku, campfire, skype... falta el contacto humano con gente con un perfil parecido, por eso me gusta quedar de vez en cuando con amiguetes con los que puedes contarte batallitas :).

También mi ha sido muy difícil reunirme y hacerme entender con posibles clientes sin muchos conocimientos acerca de lo que estaban pidiendo. La típica situación de pequeña empresa/organización, que quiere una web con muchas funcionalidades que realmente no necesitan, o por el contrario no saben lo que quieren y esperan que tú lo inventes, ninguno de los extremos han resultado fáciles de manejar.

Algo que no me esperaba, es que no me ha sido necesario salir a vender, que seguramente me hubiera tocado hacer si no hubiera estado metido en el lío de Jobsket o colaborando durante muchos meses con Linking Paths. Evidentemente sí he hecho presupuestos/propuestas, pero siempre bajo petición, y lo que es darme a conocer no ha sido más que algo de boca a boca a través de amigos y conocidos y poco más.

En resumen: Una gran experiencia, tanto por los momentos buenos como por los malos(donde se aprende todavía más).

Todavía me queda una duda, como empecé a trabajar como freelance ya con la crisis económica encima no he conocido otra cosa XD y he oído un poco de todo, ¿para los freelancers/microempresas que trabajamos en el sector IT esta crisis ha sido buena, mala o no se ha notado excesivamente?