format internet:

…please wait (49% completed)…

Archive for the ‘aspgems’ Category

Yo soy el programador perdido

Posted by javier ramirez on July 3, 2012

disclaimer for my international readers: this post is part of an ongoing conversation between different Spanish actors, so excuse my French ;)

Hay que ver la de trabajo que me dáis. Os da por escribir un par de posts, llega el otro y os reta a que lo debatáis, y a lo que me quiero dar cuenta me encuentro con que tengo que escribir un post para explicar dos cosas:

a) que en España hay gente capaz de liderar un proyecto con base informática tan buena como el que más
b) que es posible encontrarlos

Como me ha salido un post enorme, os pongo titulitos para que nos os perdáis. Que no se diga que no os cuido

¿ Es fácil encontrarme ?
=========================

Lo primero que he hecho al enterarme de que era tan difícil encontrar gente como yo, ha sido lógicamente preocuparme por mi SEO y me he ido a ver qué opina google.

Se ve que google me engaña. Las estadísticas de mi página personal en google webmaster tools dicen que en el último mes ha aparecido 2500 veces en resultados de búsqueda. La gente me
encuentra buscando cosas como “web development london”, “ruby uk”, “web developer london”, “ruby on rails developer” o “web developer uk”. Incluso alguien me ha encontrado buscando “bachata logo”. Los caminos de google a veces son inescrutables, pero parece que si alguien quiere encontrar un desarrollador web/ruby en Londres, lo tiene fácil para encontrarme. Antes de mudarme aquí, vivía en Madrid y los resultados de google eran equivalentes, pero para el mercado español.

Mi página personal está, como buena cuchara de palo en casa del herrero, muy descuidada, siendo mi presencia online mucho mayor en mi twitter, mi blog, las presentaciones que tengo colgadas en slideshare, mi canal de vimeo, o mi repositorio de (escaso) código en github. Se diría que no soy tan difícil de encontrar.

Y si lo tuyo no es internet, sino que es el mundo más físico, en el último año he dado charlas en tres o cuatro eventos, y he participado como público en varios otros. En Madrid, en Londres y en otras ciudades. Algunas de estas charlas eran internacionales, en inglés. Se ve que a pesar de ser español hay gente de otros países que piensa que puedo aportarles cosas a ellos que son de países tan avanzados con sus hordas de programadores talentosos.

Al parecer hay más gente como yo porque en ASPgems, de la que soy CTO, cada vez que hemos necesitado incorporar gente al equipo, hemos tenido la suerte de encontrarla en muy poquitos días. De hecho por lo general apenas necesitamos descartar gente en entrevistas porque al parecer atraemos al tipo de gente que nos interesa y tenemos suficientes referencias de los candidatos como para no tener que andar perdiendo el tiempo en test psicotécnicos o en preguntar cuál es su mayor virtud.

Pero, ¿soy tan bueno como los programadores de USA o UK?
=========================================================

Habiendo quedado medio claro que los programadores no nos escondemos mucho y que alguien con un cierto interés lo tiene fácil para encontrarnos, parecería que afortunadamente el problema no es que yo no exista, sino que quien me busca quizás ande más perdido que el programador del título del post que lo empezó todo.

Ahora contaré posibles sitios donde buscar gente más allá de los tópicos, pero antes dejadme que cuente así rápido por qué creo que soy el programador perdido del que hablaba Enrique Dans y por qué sí creo que esa rara avis existe en España.

Tengo algunas pruebas que confirman que soy al menos tan bueno como los programadores que hay en Estados Unidos o Reino Unido (los dos países mencionados en el mensaje original)

a) frecuentemente recibo ofertas de esos dos países para incorporarme a sus equipos.Algunas de las ofertas vienen de recruiters que, angelicos, no saben ni por dónde les da el aire y que contratarían a Wally  solo por llevarse la comisión. Pero muchas otras ofertas son de gente que me conoce directamente o por referencia y que están interesados en contratarme a mí, un programador español que no existe en un mundo lleno de peligros, para su empresa.
b) gente con la que he trabajado o a la que he tenido cerca está felizmente trabajando para empresas de esas que molan como github, google, microsoft, paypal, heroku, o engine yard
c) he vivido en Nueva York y en Londres y veo lo que se mueve. Complejos cero

¿Qué hay que hacer para conseguir contratarme?
==========================================

Antes de que te cuente cómo puedes contratarme a mí o a otra gente como yo, asegúrate de estar seguro de lo que deseas. Como en todas las profesiones creativas (y aquí incluyo al equipo de ventas) trabajar con un profesional puede ser muy divertido, inspirador a veces; pero estresante y frustrante si es tu primera vez.

El artículo de @edans dice “En España, las personas de verdad capaces de convertirse en el alma de un proyecto y transformar su esencia e ideas en código, esos participantes esenciales a los que se entregan acciones para asegurar que permanecen en él, prácticamente no existen

Si voy a ser el alma de tu proyecto, convierto su esencia en código y me consideras un participiante esencial, olvídate de cosas como “el que paga manda”, “el cliente siempre tiene la razón” o “esto me lo hacen en patolandia por la mitad de precio”.

Si trabajas conmigo, prepárate para que te diga mil veces que estás equivocado, para que te rebata todas las cosas con las que no esté de acuerdo, para aceptar que algunas cosas simplemente “son así”, para que cometa errores y no pase nada porque al fin y al cabo lanzar un proyecto es lo que tiene, para que los resultados no sean exactamente como esperabas pero se le parezcan, y para muchas otras cosas a las que probablemente no estés acostumbrado.

A cambio, la flexibilidad funcionará en los dos sentidos: renunciaré a veces a la mejor solución técnica porque es importante salir en una fecha determinada o porque resulta que es super importante cambiar algo porque hay un inversor/partner que se ha encaprichado con eso, me preocuparé de cómo va tu analítica y de si los usuarios tienen algún problema usando el site, y te daré herramientas para que puedas desarrollar el área de negocio tanto como sea posible. No pasa nada, ya hemos jugado antes a esto y sabemos de qué va. No hace falta que me cuentes lo difícil que es tener una empresa; yo ya voy por mi segunda.

Si acepto estar en tu proyecto, el proyecto pasa a ser nuestro. Y me da igual que yo sea contratado, subcontratado, socio, freelance, contribuidor desinteresado en un proyecto open source o cualquier modalidad que se te ocurra. Si decido dedicar mi tiempo y mi esfuerzo a un proyecto, ese proyecto pasa a ser también mío. No estoy hablando en términos económicos, sino en términos de “compromiso emocional”. Si no me dejas que me sienta parte del proyecto, no creo que me quede mucho tiempo alrededor.

Ah, y búscame amiguitos que sean tan buenos como yo.. a ver si vas a pretender que sea el único que sabe y me apañe con cinco becarios encontrados por infojobs. A la gente buena le gusta rodearse de gente buena. Y le gusta tener su tiempo para sus cosas y compartir lo que sabe y aprender de otros y muchas otras cosas que ya te irás dando cuenta.. mantén una mentalidad abierta.

¿sigues queriendo encontrarme? perfecto.. te cuento cómo

Sí, quiero. ¿Dónde te encuentro? 
==========================

Estoy trabajando, gracias. ¿No te pensarás que un programador así tiene problemas para encontrar un buen trabajo, no? Entonces.. ¿qué haces buscando en infojobs? Es posible que ocasionalmente haya alguien bueno trabajando listado ahí (con un cv de los años 80), pero yo a día de hoy no conozco a nadie que encaje en la definición de buen programador que esté desempleado en contra de su voluntad. Ha pasado mucho desde el crash de las punto com; esto no es 2001 y nadie se acuerda de Terra o Teknoland. Infojobs no te va a ayudar a buscar el profesional que necesitas.

Hay gente buena trabajando en infinidad de sitios. Leyendo los comentarios de la gente que responde a estos posts parecería que solo hay vida inteligente en las empresas pequeñas, los freelances o las startups con nombres de dominio super guapos. Es verdad, en algunos de esos sitios hay gente buena (y gente apestosa, como en todas partes). Sin ir más lejos conozco gente excepcional en empresas tan denostadas como Indra. Yo mismo antes de montar mi antigua empresa, abandonarla e irme a mi empresa actual, pasé algún tiempo trabajando en empresas de servicios en las que hay gente tan buena como en cualquier otra.

Lo que pasa es que esa gente ya no está trabajando de programador porque no les dejan. Están en puestos de preventa, I+D, jefes de proyecto, arquitecto software, evangelizador, developer advocate.. lo que pone en la tarjeta es distinto, pero la pasión por un buen reto es la misma. No dejes que los prejuicios te hagan creer que no hay gente buena en las empresas grandes. Solo es que están más escondidos detrás de sus corbatas ;)

Entiendo que, a no ser que tengas contactos, es difícil ir empresa por empresa y buscar a la gente buena. Tengo buenas noticias para ti. A la gente buena le gusta estar al día. A algunos de ellos incluso les gusta relacionarse con otra gente de vez en cuando (a otros les gustaría, pero tienen menos tiempo). Los sitios más obvios para encontrar gente a la que le gusta su trabajo son las listas, grupos y foros de internet. Lo bonito de esto, es que TODOS los grupos y listas de correo aparecen en google. Solamente necesitas saber lo que buscas.

Si necesitas hacer un proyecto web, las tecnologías más habituales a día de hoy son Ruby on Rails, Javascript, PHP/Drupal y Python/Django. Hay otras tecnologías, pero en una startup moderna lo más probable es que tu proyecto sea en Ruby on Rails o PHP y siempre con parte de JavaScript. Ahora vete a google y busca la lista de correo de esa tecnología en tu país. O mejor todavía, busca el grupo de gente que se junta en tu ciudad. Vete a google y busca “Grupo de Ruby on Rails en Madrid”. Envía un correo a la lista o acude a la siguiente reunión y cuéntales tu problema. Si la tecnología no es la más adecuada seguramente puedan orientarte hacia otra mejor.

Solo ten en cuenta que estás hablando con gente inteligente y que no les va a gustar si mandas mails del tipo “empresa multinacional líder busca…” o “proyecto super secreto que solo te contaré tras firmar un NDA”. Esos mails van al mismo sitio al que van los de “compre v1agra” o “cambia tu contraseña de paypa1”. Y sigue la famosa norma de no vestirte ni mejor ni peor que tu público. Si vas a una reunión de gente que va en camiseta, no vayas con gemelos o será más difícil que se te acerquen. ¿O acaso te pensabas que los prejuicios son siempre de la gente con traje a la que va vestida de perroflauta? :p

Si aún así no encuentras al programador que buscas, ponte en contacto conmigo que te digo yo dónde lo puedes buscar.

Y si en vez de un programador, lo que quieres es una empresa que sea tu socio tecnológico y te lleve el desarrollo, mándale un mail a nuestro CEO (el señor grande que salía hablando en el debate10), que estará encantado de echarte una mano.. y yo también.

Posted in aspgems, debate10, development, internet, javier ramirez, off topic | 61 Comments »

How we improved FACTURAgem security, or how to set HTTPS for your rails application

Posted by javier ramirez on March 31, 2011

As you probably know, one of the products in my company is FACTURAgem, a web application for making simple invoices targetted to those users who are currently invoicing using word, excel or a notepad and a ballpoint.

Since your invoices are something you don’t want to share with the rest of the word, all the pages protected by login were securily encrypted and served via https since the first day, and the session cookie was automatically expired when the browser is closed, so the system was pretty safe.

Still, there was a very small chance of someone hijacking your session, if you were using FACTURAgem and you happened to be sharing a public network with a hacker nearby who was interested in accessing your FACTURAgem account. Due to the profile of both our users and our application this scenario was not likely to happen, and we never had any security breach since we launched the product.

However, with the proliferation of public networks and the quick adoption of smartphones, ipads, netbooks and a myriad of always-connected portable devices, we wanted to add an extra layer of security for our users, so now they can safely use FACTURAgem at any place without any worries.

Since yesterday, all the pages in FACTURAgem, both private and public, are securily served via https. Even if you forget to include the “s” when accesing the apllication, our servers will redirect appropriately to the safest version.

For the technically savvy, I will explain the highlights of the process:

note: FACTURAgem is running on an Apache/Passenger/Rails stack. If you are using a different setup, details might be differ, but the spirit is the same.

We had to cover different fronts of the https problem:

Configuring a certificate and SSL virtual host for Apache.

This was already done in our case since the beginning of the project. There’s a lot of information out there about how to do this.

Telling Apache to redirect all the traffic to https

We had to instruct our non-ssl virtual host to redirect all the traffic to the SSL one, so if you type http://www.facturagem.com/help you should be redirected to https://www.facturagem.com/help instead.

This is easily done with:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Unfortunately, in our case, we had an extra constraint. There are a couple of subdirectories we don’t want to put under SSL, because they are served by an external service that cannot run under https. For those pages, we will not store any session information, so they will not be a security problem. All we had to do is telling Apache not to redirect if the url is in one of those directories

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !.(fictional_directory_name|another_fictional_directory_name).*
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

By doing this, if you try to visit http://www.facturagem.com/fictional_directory_name/whatever you will not be redirected to https.

Making sure we marked the cookie as secure, so we are 100% sure it will never be passed to non-encrypted pages

By setting a cookie as “secure” your browser is smart enough to send the cookie back only when asking for a SSL resource. That way, even if you are browsing unsafe pages from the same domain, the cookie will not be transmitted, so your session is not subject to attacks.

If you are setting your cookies “manually”, secure is one of the attributes you can set. But if you are using session cookies in Rails, it’s as easy as setting an extra parameter when configuring your session cookie.

ActionController::Base.session = {
:key => '_your_application_secure_session_id',
:secret => '11111222312321321321321313213213213213213213213237761223213213213213131231231321321312',
:secure => Facturagem.config.secure_cookie
}

Some things to consider here. If you are changing a live application, as it was our case, it’s a good idea to change the name of the cookie. That way, you are sure everybody is going to be using the secure version. Otherwise, users with a valid cookie would still use the non-secure version in some browsers. By changing the name, you are sure everyone is setting a new cookie and everyone is secure using your site. The collateral effect is you will be signing out all of the users browsing your site, so take it into account.

Also, note how we are using a config variable to set a secure cookie (or not). This way, our developers can work without locally enabling SSL.

Removing any references to http external resources, so we avoid the “mixed content” message in some browsers

By this point everything should be working fine, but if you are using any resources directly by absolute URL (as is the case of external js or, in many ocassions, images referenced from your stylesheets), then you will be having the “mixed content” message and your users will feel something is not right.

Your first impulse can be changing all the “http://” ocurrences in your files for “https://”. That would fix the problem on production, but should any developer work without SSL, she would experience the mixed content alerts.

There is a not-so-known-but-perfectly-fine solution for this. You can use relative network-path references , also known as protocol relative urls. To make a long story short, if you write ‘//www.google.com/jsapi’ it will use http or https depending on which protocol you are using on the current page. That way, you can forget about which schema you are on. There’s a caveat with explorer downloading twice the javascript files (at least until IE8 there was), and if you want more info Paul Irish has it ready for you.

That was it! by following those steps we were able to make our site more secure and it took just some hours to set up. Now you can use FACTURAgem when you need to, without worrying who your neighbours are.

If you are out of Spain, pay attention to @facturagem, because we are going to be launching an international version pretty soon.

Posted in aspgems, development, javier ramirez, madrid, ruby on rails | 2 Comments »

Happy 4th birthday ASPgems

Posted by javier ramirez on June 6, 2010

Four years ago I thought I was at the top of my career. The company I had co-founded was starting to look much like a nine to five job and I decided to resign and accept a great position as a post-sales engineer in FatWire, where I would have the chance to improve their content server solution, which in my opinion was the best of the market by then. Things were looking sweet: new challenges, smart jobmates, important clients, interesting salary… and then I got an IM from Ana Isabel that changed it all (you gotta love it was not a phone call, mind you)

She told me about this brand new tiny company she was starting up together with Agustin Cuenca and some other folks I didn’t know by then, and who resulted to be brilliant. The idea was to be an Application Server Provider and offer products in the later so-called cloud to help small and medium size companies manage their businesses. They would also develop web applications for third parties. And they would do it all using this new toy called Rails, after a successful proof of concept for a real client by Xavier Noria. Regarding project management, they didn’t want to use a traditional approach, but going down the Agile road and use Scrum. The name of the company was ASPgems, where ASP stands for Application Server Provider and “gems” was something related to this Rails thing.

I was very reluctant to join them. Apart from having just landed into a great job position, I had a lot of doubts about the new company. They didn’t have any money, so I would have to cut down my salary and trust the company would eventually make it; they were working remotely, so I thought nothing would get really done; they didn’t have any big clients, and I came from the banking/public sector/corporate world; and to top it all they were using this Ruby on Rails framework and these requirementless agile methodologies.

My first experience with Ruby, some years before, was painful. I had to make some kind of automatic web crawler and I found libraries for doing it both with Ruby and Jython. I didn’t knew any of them so I tried them both. Right now I don’t remember why I didn’t choose the Jython library, but I know why I didn’t choose Ruby. After half a day trying, it was impossible to make the thing work on my windows machine, and all the documentation was in Japanese, so good luck with it. I finally coded my own crawling solution in good old Java and XML.

So you can imagine I was skeptical about Ruby. Then I started to read about Ruby and Rails and I panicked: no static type check, lack of hosting options, poor windows support, opinionated instead of configurable, with a certain disdain for the database layer… my Java instincts were alerting me with a lot of red signals. And then I made “the mistake” of having lunch with Ana and Agustin. They were really excited about the company, they saw a world full of possibilities, and the sense of adventure was just too strong for me to resist. Besides Agustin had been the guy who started Qarana, the best company I had worked for until then. It was just natural for me to join ASPgems.

By adopting Rails as her development framework, ASPgems was making a statement: We don’t care what other people are doing, we want to use the best tools available with or without the support of the rest of the industry. Living up to that statement takes a lot of work. First you have to be sure you are using the best tools available, so you have to be scanning the surroundings all the time to see when it’s time to move to the new best thing. Besides, you have to keep up to date on all the changes and on the new libraries available. And of course in many occasions you will have to be the one building those libraries, because getting there first means no one did the work for you yet. This living on the edge thing can be really time consuming, but things get much easier when you find a friendly community sharing your passion. And in Ruby/Rails we are really lucky on that issue.

Today is ASPgems’ fourth birthday and I’ve been a part of the company almost from the first month. If I have to judge in terms of personal development, I can say without any doubts this is the best company I’ve worked for, and I guess that’s why I’ve stayed here longer than in any other place before.

Below are some of the things I have done in the last four years. Had I stayed in my safe Java corporate world, I’m not sure I wouldn’t have done some of these things, but I’m sure ASPgems inspired me to do most of them.

I have..

..attended more conferences (and camps, and other events) in the last four years than in the previous 10+ since I started working on IT.
..organized and presented talks in both national and international conferences
..co-started a local ruby group
..curated an extensive online presence: blog, personal page, vimeo, slideshare, mailing lists, communities…
..greatly improved my google ranking, making my conventional CV irrelevant
..written a book

..learnt how to better manage web projects
..seen clients really happy to see their projects going live on time
..shared my knowledge with both clients and competition
..launched more web applications than I can remember

..taught ruby on rails
..introduced some friends to the Ruby on Rails/Agile world
..developed a taste for being an early adopter on new technologies
..adopted ruby on rails for my personal and freelance projects
..switched to linux
..bought several domains and rented my own VPS

..learnt about SEO and Analytics
..made websites scale, and learnt a lot during the process
..learnt a lot about IT (web servers, process monitoring, system set up and configuration…)
..improved vastly my skills on client-side web developent
..been wrong many times, and happy to learn from those mistakes

..helped to build one of the most solid development teams I have seen
..worked together with the commercial department, and not against it

..kept in contact with brilliant developers from all over the world
..started repositories in github and rubyforge
..collaborated in several open source projects

..realized money is just a secondary motivation

Happy birthday ASPgems, and thank you.

p.s. By the way, remember how skeptical I was about Ruby? I was wrong, and happy to be. Go try it by yourself!

Posted in aspgems, javier ramirez, madrid | Tagged: , , , | 7 Comments »