sharp bites

standing on the shoulders of giants

A week at BeCode. Day 6: Should I stay or should I go

Today Xavi invited me to attend a lecture he was imparting at UPV as part of the course in Agile Methodologies. He talked about Implementation Patters, which turns out to be one of his favorite books (the other one being Refactoring). It now next on my reading list (and it should be in yours too!).

From there we went to the old town and did a small touring visit on our way to the Central Market, where we met Luis. We bought some food there, and went to cook it at Xavi’s, where Luis kindly prepared it for all of us. He also told us about some of his marketing strategy for Harveys and his plans to go to the Alps this Summer for a month of bike trainning.

It was also amusing to get to know Xavi a bit better through his flat and belongings. All the books, the dust, the paintings he and his girlfried draw, the stuff he collects, the music, his punchbag, the furniture…

While Luis had an nap, we spent the rest of the afternoon knowing each other, talking about our past, present and foreseeable future. The time flied and I had to part ways to get my stuff ready for the leave.

I feel sad to go. These guys made me feel so at home and I enjoyed this week so much, I’d love to stay longer.

Thank you!

A week at BeCode. Day 5: I wanna be sedated

Yesterday I started pairing on the 8-Queens Kata with Xavi. We solved the logic of the queen, and we talked about the innability of BDD to help designing an algorithm. We talked about how it could be solved.

Today I got back on the problem and miserably failed at it. I tried to model it throught tests, I tried to spike it, I tried to to divide it in chunks, but I didn’t get anywhere close to solving it. Boy, was it frustrating!

In the afternoon I paired with Xavi and he just dictated me a declarative solution of the algorithm in 20 lines of code. From there it was pretty straightforward. I still managed to mess it up. I wanted so badly to give up. Almost as much as I wanted to solve it. It finally worked, but unsurprisingly it didn’t make me feel much better.

After that, we went to have some beer-driven conversation about BeCode culture, its past, present and future, mentoring, meritocracy, software as crafstmanship/engineering/art.

And finally, I got my BeCode T-shirt!

A week at BeCode. Day 3: Psycho Killer

Today I met Aitor, the last member of the BeCode family. I spent the morning improving Cuore.js with Xavi. It was great fun, pairing and laughing in a relaxed atmosphere. At some point, Xavi explained us the etymology of his surname, and how it shared roots with the word “hostile”.

In the afternoon, we received the visit of Connor, a prospective client. They had an open conversation of what they expected from each other to see if they would fit well, and setting the stage on the ways in which they want (and especially the ones they don’t want) to work.

In the evening I went to grab some beers with Xavi and Miguel Ángel and then to have dinner with Emma. We chatted about desksurfing, salaries and contracts. With the help of a few more beers I managed to get her from giving me the look to mmokay. Tough one!

A week at BeCode. Day 2: God Save the Queen

Today I met Emma and Nico. Emma is part of BeCode, but is playing her own adventure as a photographer for technical conferences. Nico is from Granada. In a past life he was a programmer and he decided he wanted to get get back into the game. He is attending a course they are teaching during the weekends and decided to take the chance to stay here for a full immersion. He also nicely recommended me a couple of places to visit in Navarre (shame on me!).

I spent the morning pairing with Xavi on Cuore again and managed to get a few pomodoros done, cleaning up the codebase by reintroducing the classes while questioning the existence and expresiveness of every line of code.

In the afternoon, after talking to Nico about his learning path I decided to pair with him, using the N-Queens problem as the playground. We where doing quite well until Xavi told us our approach was retarded, and how we should try to solve it bottom-up, from the core of the problem domain. The conversation deviated into the difference between emergent and exploratory design, design patterns, programming languages (with a small rant on ruby), and the kinds of tests he does. He also mentioned his disdain for Clean Code and Working Effectively with Legacy Code (put that in your pipe and smoke it). We decided to ignore the old-rambling-man and finish the implementation. After that, we talked about how the code could be modified to take different chess pieces into account, but left it there and called it a day.

A week at BeCode. Day 1: Anarchy in the UK

Today was my first day at BeCode. If you measure productivity by lines of count written, then my productivity today would be exactly 0. (Also, you are an idiot. Stop doing that.)

The door was open when I arrived to The Cave (more on that later). I came in and met Xavi and Mike. Jorge and Jesús were remote, so I didn’t get to talk to them. There was also a guy whose name I don’t remember (sorry mate!) who is not really part of BeCode, but is working there with them. He designs his own line of T-shirts. I spent some time talking with Xavi and Mike about BeCode and what they do now. It surprised me a lot when they told me they have decided not to work for clients anymore. They told me they now prefer to do workshops, consulting and hacking, and they would like to develop a product.

The big WTF of the day came when Xavi kicked me in the head with the fact that Mac OS X is not case-sensititive (srsly, Apple?). He later added something about the worst thing in the world being a PHP programmer. He mentioned something after that, but I was still shocked, so you better ask him. :)

When I woke up, I talked with Mike about a project he wants to do for his town-hall, to give people the ability to give feedback. We discussed about his motivations, what would constitute the MVP and how some of the features made sense or not. Then Luis and Sergio came and we went to buy some food for lunch.

In the afternoon, Sergio, showed me the very starting bits of a 2D videogame he wants to do. Mike told me he is going to teach a javascript course and we decided I would do it beforehand along the week and give him feedback.

Then I decided to have a look to Cuore.js source code while I waited for Xavi to come back from the gym (I know, I know, me too. Maybe he wants to get into Gandia Shore or something). When he arrived he told me what he wants to work on for the next version (was that secret? I hope not) and explained me the high level architecture of Cuore and how ReST was full of crap and how SOA was vastly superior. He probably still was high on testosterone and I didn’t want to get kicked again, so I just nodded and no one got hurt. We moved on to the code and paired, having him as the driver. I was surprised becaused I expected him to go much faster than what he did. Instead he took plenty of time with the code. We talked a lot about what we were trying to achieve, there was no rush at all. I decided I will be working with Xavi on Cuore for the rest of the week, too.

A random girl came in (remember the door was open? It remained open for the rest of the day. It turns out it’s a rule to be approachable to passing byers) asking if we(they) fixed bikes. They don’t, but they told her she needed a new wheel and where to buy it, and they offered to teach her how to replace it. She came back after a while and Luis did it. She paid back with some pastries.

I spent some more time talking with Xavi about his view on our so-called industry, the need to teach programming to children and other phylosophical aspects of our not-science-nor-craft field.

Finally, Luis and “Mate” showed us a couple of videos they had been editing of Luis doing vandal cycling in Valencia and New York.

A week at BeCode. Day 0: Hey Ho! Let’s go!

This is a post series about my desksurfing at BeCode.

We coined the term desksurfing at the Agile Spain Open Space Conference we held back in 2011 in Pamplona (my hometown!). It’s akin to what some fellows like Corey Haines and other journeymen were already doing. You go visiting another company to spend some time sharing experiences, programming and learning from each other. Cross-pollination for your brain.

Today, I traveled to Valencia for a week of desksurfing at BeCode. They describe themselves as a “punk incubator”, and you can certainly tell they are not very “enterprisey”!

  • They are so underground they don’t put their office address (or the cave as they call it) on their web. I had to look for it to know where it is. Fuck! I just realized they don’t even tell what they are or do, except for a few sample projects!

  • When I mailed them telling I wanted to go there, Xavi’s answer was (quite literally): “awesome, call me when you get here”. That. Was. It. Then, when I arrived he didn’t answer the phone (he later told me he was having a paella, wtf! :D).

  • They hold free workshops in their office as part of their “neighbourhood development plan”, with topics as disparate as how to fix your bike or teaching kids html or programming with scratch. I think anyone can give a workshop there, they just have to ask for the space.

What am I going to do this week? I’m not sure yet, and I just don’t really care (well, I was curious, so after I insisted Xavi I got some more info and he proposed a couple of interesting options to work with them, we’ll see).

Then, why did I decide to come? AFAIK they are raw, honest, transparent and strong in their beliefs. And that resonates with me. I came here to live that, to see how they do things, to breathe their culture (and to share mine if they are interested). To have fun.

Enabling Mysql’s Federated engine/plugin on Mac OS X

I spent a few hours trying to get the federated engine to work on Mysql, and since I didn’t find any good sources for it, I thought a blog might help someone else.

First, install mysql if you haven’t already. I used homebrew.

1
$ brew install mysql

The Federated plugin is not installed by default, so you’ll have to do it manually. Get into mysql as root (or a user that can alter the mysql.plugin table) and type:

1
mysql> install plugin federated soname 'ha_federated.so';

To check if it was installed correctly run:

1
mysql> show plugins;

Exit the shell and edit /etc/my.cnf file. If you don’t have any, you’ll find an example in your mysql installation directory.

1
$ sudo cp $(brew --prefix mysql)/support-files/my-small.cnf /etc/my.cnf

Edit the file, and under [mysqld] add a line that contains:

1
federated

Restart the mysqld service:

1
mysql.server restart

Congrats. You’re done!

rails.start 1.month.ago

It has been one month since I started doing ruby and Rails at work, so I thought I’d share my experiences so far.

Here’s a list of the things I’ve had to deal with this month:

  • git
  • ruby
  • rails
  • rvm
  • rubygems
  • bundler
  • homebrew
  • rspec
  • cucumber
  • capybara
  • guard
  • spork
  • jenkins
  • log4r
  • rest-client
  • delayed_job
  • rake
  • capistrano
  • foreman
  • daemons

You can tell I’ve been busy :D.

References

Here are some resources I’ve found useful in my journey so far.

Rails

  • Ruby on Rails Tutorial, an awesome introductory book for Rails. It teaches you about many of the things in the list above.

Ruby

  • Programming Ruby 1.9. The ruby book. For those who want to gain in-depth knowledge of the language.

  • For hands-on ruby learning, try rubykoans and rubymonk. They are interactive online tutorials guiding you in the inners of ruby.

TDD

  • The RSpec Book. A must read. It teaches you how to do BDD/TDD right. Totally recommended even if you don’t program in ruby.

Git

  • If you are new to git, I recommend you to read Pro Git.
  • For a more reference to-the-point style, check Git Reference
  • Finally, for a learn-by-example guide, visit Git immersion

Movin’ in

You probably have noticed this blog got a facelift. I’ve moved from blogger to github, using a cool feature called github-pages, which allows you to publish content to the web by simply pushing content to one of your GitHub hosted repositories and point your custom domain to it.

In order to generate the html pages, I’m using octopress. It allows you to define layouts and create posts by writing your posts in markdown. It also makes super easy to deploy to github, heroku or to your own hosting via rsync.

Here an example showing how this post looks like in markdown:

You can import your pages from blogger, wordpress, tumblr and a few other using jekyll’s blog migrations (octopress is built on top of jekyll).