Besides being the father of the most wonderful girl in the world, I am a computer programmer from Barcelona, with a math background.
Professionally, I have been consulting for the last almost ten years already. Also doing open source in one way or another since the early 2000s. Open source is all about knowledge sharing and collaboration, principles I strongly believe construct a better society.
Was into Perl for some years, I am a CPAN author, former leader of Barcelona.pm, and taught Perl at the University of Barcelona for seven years in my spare time.
When Ruby on Rails came out I switched my focus to Ruby. I loved Perl, still love it, and my brain still generates Perl in the shell when I need a powerful one-liner, but I co-founded a Rails shop and it was my duty as CTO to know Rails inside out. With time, I got so much into the project that eventually I was honored to be invited to be a member of the core team, and I have been in Rails core for the last seven years and counting.
I have other interests, like my recent Ruby library Zeitwerk, a project that solves a problem I have pursued for a long time.
In other fronts, I like learning and modestly contributing occasionally to Elixir, which is an awesome language on top of an awesome platform. And an awesome open source project as such, I have to say. Enthusiastic, vibrant, participative, open, great leadership, with good taste and a sound evolution.
Last, but not least, I’m also very interested in Crystal, which is amazing. I absolutely grok Crystal. The ecosystem and community are taking shape, and the language is still a bit in flux, but that doesn’t matter from a personal perspective. It could perfectly be possible that I get involved in the future in my spare time in some way or another, because Crystal really clicks to me.
Nowadays I do all my programming in a MacBook Pro (15-inch, Late 2016). I spend the majority of time in my desktop at home, where I have the laptop closed in the base of my Dell UltraSharp 32 U3219Q. My keyboard is an ErgoDox EZ with blank keycaps, and the mouse is a Logitech MX Master.
I can adjust the height of my desk. Years ago I had two desktops, the regular one, and another one next to it to work while standing up. Both of them had monitors, but changing from one to the other one wasn’t as frictionless as I wanted, because you had to unplug and plug a bunch of cables. No big deal for an occasional switch, but not optimal for daily usage.
That experiment, though, validated that changing my stance throughout the day actually worked for me, and when IKEA launched their line years ago, I got one with the biggest surface available right away. I love being able to sit or stand up as I feel like it, and research seems to suggest that it is healthy.
I also have an ErgoDox EZ Satellite, a good companion while thinking or watching a test suite run.
The funny timer I have on my left is a Time Timer. I love its interface, how you set it, how you read it, how the remaining time is intuitively present in my peripheral vision. I use this timer to block slots of deliberate focused work without interruptions.
The speakers you see in the corners are the Edifier R2000DB. They sound excellent for my taste, and have a reasonable price.
Finally, on my right, there is a notebook, writing material, and a dedicated light for it. I am very much into bullet journaling. I use my bullet journal to manage a bunch of things, projects, TODOs, appointments, notes, track habits… basically, my life stream. My bullet journal is a nice analog counterpoint to everything else being digital.
The notebook is a Leuchtturm1917, and I have a bunch of Stabilo fineliners of different colors, a fantastic Tombow dual brush pen to draw headers with an artistic touch, and also soft pencil and eraser from Muji, which I use to keep track of tasks in Waiting For status.
My host computer runs macOS Mojave right now, but in practice I spend a lot of time on Linux. Client work and open source means my computer hosts a good number of projects. Each with its own database, cache, services, etc. The only sustainable and sane way to manage that is to have them isolated from each other, and my solution to that has always been virtual machines. Parallels Desktop many years ago, then switched to VMWare Fusion as it came out. Some clients use Vagrant, and the
rails-dev-box for Rails core development is Vagrant too, though for Rails core I have a dedicated virtual machine in VMware Fusion.
Of course, Docker is sneaking into this setup in some projects, but I am not yet fully convinced to completely switch. I have backups of VMs from inactive projects that I know they are going to just run whenever I need, they are self-contained. Also, their browsers have bookmarks important for that project or client… virtual machines are heavier, but for my use case hard to beat.
My main editor nowadays is Visual Studio Code.
Another important need for me is time tracking, since I bill for time. For that, I like the simplicity of the command-line utility timetrap. It is basically an interface to a SQLite database, no service is running. Simple, clever, fast, hackable, and useful.
I have a black ErgoDox EZ with blank keycaps, purchased in late 2016. Gateron Blue switches. I work at home and my wife loves the sound of blue switches. If that isn’t an indicator of a perfect marriage I don’t know what is.
When I got the keyboard, I entered an intense experimentation phase to discover its possibilities and observe what worked for me. That lasted for a few weeks and I created many configurations. My basic layout is QWERTY as far as letters is concerned, but the rest is highly customized.
One key aspect of my layout is that I have modifiers in both home rows using dual-function keys. So, in the home row of my left half, if pressed just a little bit longer, F becomes
Control, and A
Shift. Symmetrically, in the right half J becomes
Control, and ;
Shift. The default delay works great for me, occasionally I may type a little too fast when needing an upper case letter, but for the most part I don’t even need to think about it. You use modifiers a lot, and the ability to play them as symmetrical chords, without leaving the home row, is killer for me.
The rest of the keys are distributed according to the frequencies I counted in my projects folder, with some logical grouping here and there. For example, I have single, double, and back quotes together in my left pinky. I recorded a video detailing this layout back then, and it is still pretty much the same.
Another interesting bit in my keyboard is that I have the arrows in the two inner keys of the bottom row of each half, and their keycaps are reversed. That way, they present a slope upwards that matches your thumbs position naturally.
I believe my setup is close to my dream setup, it is the result of years iterating and observing myself.
The only thing that I would perhaps improve are cables. Less cables. Wink, wink Erez :).