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!
]]>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!
]]>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!
]]>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.
]]>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.
]]>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.
]]>First, install mysql if you haven’t already. I used homebrew.
1
|
|
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
|
|
To check if it was installed correctly run:
1
|
|
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
|
|
Edit the file, and under [mysqld] add a line that contains:
1
|
|
Restart the mysqld service:
1
|
|
Congrats. You’re done!
]]>Here’s a list of the things I’ve had to deal with this month:
You can tell I’ve been busy :D.
Here are some resources I’ve found useful in my journey so far.
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.
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).
]]>git svn init -s http://path/to/your/svn/project
git add somefile
git commit
...
git svn rebase
git svn dcommit
“You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete.” R. Buckminster Fuller
rvm gemset listGems that are installed to the @global gemset are shared to all other gemset for that ruby. We won’t install anything here. Instead we will create our own gemset and put everything there.
rvm gemset create tddSwitch to that gemset:
rvm use gemset 1.9.2@tddIf you want to make this your default gemset (the one that will be loaded by default) you can do that by doing:
rvm use gemset 1.9.2@tdd –defaultVerify you are on the new gemset:
rvm gemset nameYou should get:
tddGems for testing that rock
gem install
gem install rspec
describe "something" do
it "does something that passes" do
5.should eq(5)
end
rspec spec/
rspec spec/ –colour
echo “–colour” >> .rspec
gem install autotest
autotest –style rspec2 –quiet
If you are really lazy like me, you can instruct autotest to be quiet by default by creating a .autotest file in your home:autotest –quiet
echo “Autotest.options[:quiet] = true” >> ~/.autotestSo whatever option you want to use, let’s try it. Modify your rspec file and save it. Awesome, isn’t it? But wait, there is more!
sudo apt-get install libnotify-bin
gem install test_notifierConfigure autotest to use test_notifier:
echo ‘require “test_notifier/runner/autotest”’ >> .autotestOr add the following to your rspec/spec_helper file if you want to use it directly with rspec:
require “test_notifier/runner/spec”Now you should get a nice notification when you save your file.
sudo wget –no-check-certificate https://github.com/joshfng/railsready/raw/master/railsready.sh && bash railsready.shThe script will ask if you want to build Ruby from source or install RVM. Choose RVM.
sudo apt-get install git-core curl build-essential
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
”[ -z “$PS1” ] && return”
source ~/.bashrc
rvm notes
sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf
rvm install 1.9.2
ruby -v
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-linux]On the next post I will explain how to setup your environment for testing using rvm.