Jose M Gilgado's personal site| Jose M. Gilgado
Photo by Remy Loz Some years ago, building a side project meant finding time wherever you could. Late nights, weekends, or early mornings to squeeze in some work before your real job starts. Any SaaS or app you wanted to build used to take months of this busy schedule until you could launch it. As a result, balancing building a side project with a day job (plus family!) was a challenge that few people were willing to accept. Now, with tools like Claude Code, the paradigm has shifted. The cost...| Articles on Jose M.
There's a ritual that happens every September. Apple unveils its latest iPhone, and millions of us suddenly discover that the device in our pocket—the one we loved just yesterday—has become obsolete.| Jose M. Gilgado
Now that summer is in full swing in many parts of the world, I thought it would be a good time to write about something I’ve felt for years whenever I go away for a few days. Trips might be the only chance we get to view our lives from a distance. Let me explain. In the midst of our daily responsibilities, it’s almost impossible to gain distance and evaluate what’s working and what could be improved in our lives and whether our current work is leading us in the right direction. We’re ...| Articles on Jose M.
I vividly remember a school trip to a Catholic monastery as a kid. The Dominican monk we met could speak 12 languages, had several degrees, did daily chores like working in the garden, and still had time to follow a strict routine of prayers and study. When I asked him how he managed it all, he replied: “We take care of the schedule, and the schedule takes care of us.”| Jose M. Gilgado
Once it’s well integrated into our lives, any new technology can be seen as an exchange. We lose something and get something else in return. When we started using our calculator app, we lost the ability to do basic operations by hand, but we got accurate results quickly. After some time, even making a basic addition without it seems like a struggle. I don’t remember the last time I used a map, other than in school when I was a kid and was learning about them. By the time I got my driver...| Jose M. Gilgado
We’ve all been living under the promise that things will get faster, and oh boy, that promise has certainly been fulfilled. We now have faster transportation, fast food, two-hour delivery shopping, and faster technology each year. Yet, we rarely pause to reflect on what this speed means for us—how it affects us individually and collectively. It impacts our habits, sleep (or lack of it!), relationships, and the planet. What if there are consequences that we haven’t fully noticed yet, but...| Jose M. Gilgado
Art history shows us that we tend to move between adding “unnecessary” elaborate decorations to clean styles and back again. It’s almost an endless cycle repeated over and over. This cycle happens in the different arts and other fields where design is involved, like software. Let’s trace it in architecture first. Here is the Abbey Church of St James in Hungary (1206), a clear example of the Romanesque style. By its side, Notre Dame, completed in 1345.| Jose M. Gilgado
A family in my environment has recently lost their child in a terrible accident. I cannot imagine what those parents must be going through, but it has made me reflect on what it means to be a parent. In this semi-digital world, we’re losing touch with what makes us feel fully alive, what makes us feel, cry, laugh, and bond. What makes us human. Some experiences can keep you in touch with that human side: art, an honest hug, faith, a good book, your first kiss, a genuine laugh, or losing som...| Jose M. Gilgado
Photo by Suzy Hazelwood I remember my breakfast as a kid. It was as sugary as it gets, with cereal and milk or a good marmalade toast and a chocolate shake to start my day. I remember the highs and lows of my energy levels throughout the day or how I would look in the mirror and wonder why I grew as a chubby kid instead of thinner and stronger like some friends.| Jose M. Gilgado
I haven’t watched the news in over three years. Yes, I’m living in a bubble. We all are, but mine is a bit smaller. More controlled. It’s not that I don’t care about our world, but we’re not designed to keep up with this level of information coming in from all directions. It sometimes feels too much because it is too much. I still remember how hard it was to resist the temptation to get another small dose of the daily external drama, perhaps to be a good and informed citizen, but mo...| Jose M. Gilgado
I read somewhere that we should invest a lot in whatever separates us from the floor: our mattress, our car (or tires, more specifically), or our shoes. There are countless options when it comes to shoes, but most of them are the wrong choice for your feet. Let’s see why. Your foot and its natural shape The main problem with our shoes is that they need to be designed based on our feet’ natural form. Here’s a photograph from a study made in 1905 by Phil. Hoffmann, in which he compared th...| Articles on Jose M.
Photo by Pixabay Computer Science sounds so boring, so academic, that sometimes it’s hard to know if there’s even any useful knowledge for our jobs building actual software. Of course, I’m half joking. Computer Science is very important to understand what’s going on in a computer but I understand it doesn’t sound as attractive as learning a specific technology that’s in demand in the industry. With this series of posts, I’ll try to extract from those long boring books a few thin...| Articles on Jose M.
I’ve created a small gem, Bruno, to convert a Localizable.strings (iOS) file to a strings XML file (Android) and vice-versa. To install it: $ gem install bruno A Localizable.strings file in an iOS project looks like this: "APP_NAME"="Test App";"TITLE_ACTIVITY_MAIN"="Test";"INFO_TITLE"="Information";"INFO_SUBTITLE"="More information"; And with a single command: $ bruno convert --in Localizable.strings --out strings.xml You will get this file: <?xml version="1.0" encoding="UTF-8"?><resources>...| Articles on Jose M.
If you are using dynamic conditions in Rails 3, like Time.now or 1.week.ago you should use a Proc for that condition. Here’s an example: has_many:rented_cars...,:conditions=>proc{"'#{Date.today.to_s(:db)}' <= end_rent_date"} This way, Date.today will be called every time you perform a query. If you would have done it like in the following example, there will be cases when the results you’ll get are not expected since the condition will have the day you started the Rails application and Da...| Articles on Jose M.
If you are developing an API with Rails you need to rescue from the errors produced by a bad formatted JSON. In order to do that I use a middleware file placed in app/middleware named ParamsParserRescue.rb. classParamsParserRescue<ActionDispatch::ParamsParserdefcall(env)beginsuper(env)rescueMultiJson::DecodeError[400,{},["Bad Request"]]endendend And with this middleware file you need to tell Rails that should use it. In the configuration file application.rb add: config.middleware.swapActionDi...| Articles on Jose M.
In order to remove all the files from the repository after they have been deleted from disk you have a couple of options. Using Sed: svn st | grep '^!'| sed 's/! *//'| xargs -I% svn rm % Or with AWK: svn st | grep '^!'| awk '{print $2}'| xargs -I% svn rm % If you don’t trust these commands (you shouldn’t but nowadays we don’t have enough time right?) you can see the list of files that will be removed from the repository without the xargs part: svn st | grep '^!'| sed 's/! *//' Or: svn s...| Articles on Jose M.
Don’t wait until January 1st, or next Monday, or any other random date when you think everything will be perfectly aligned to start. Do something before today ends. Do you want to get fit and still cannot go to the gym for some reason? Do 100 burpees today, or go for a run. Do you want to read more? Try to read ten pages before going to bed. Do you want to meditate or adopt any other habit?| Jose M. Gilgado
When we buy something, we pay only a small fraction of its cost. I reflected on this while also realizing how many good things capitalism does for us (others not so good, but that’s for another day). Given enough demand, more companies compete to offer you a better product, usually at a lower price. Products get better and cheaper over time. Take ‘Elden Ring’ as an example. This video game, five years in the making, can be purchased for 60 USD and is yours forever.| Jose M. Gilgado
It’s amazing what we can achieve in ten years. At 15, Hakeem Olajuwon joined a local Nigerian sports tournament. He had planned to play handball there but ended up playing basketball, and it changed his life. “He couldn’t even dunk at first,” said one of his first coaches in an interview. The article’s headline was “Olajuwon: He’s not the best yet.” They didn’t know how accurate it was. A decade later, he was the undisputed leader of the Houston Rockets in the 1988-1989 season.| Jose M. Gilgado
If you have worked with Subversion and iOS you are probably aware of this problem. Whenever you are going to do something with a file that has an at sign in its name you can’t. For instance imagine you’ve just added a file for retina and try to add it to the repository (XCode can do this too): $ svn add logo@2x.png The message from Subversion will be: Skipped logo@2x.png That’s because Subversion uses the @ for other purposes.| Jose M. Gilgado
I’m angry today. As web apps become increasingly complex, developers need more shortcuts to map various actions. Now we have countless shortcuts for any site. Take GitHub’s shortcuts as an example; they have a few. But there’s a limit, and I’m here to draw that line. Your website shouldn’t hijack the default browser shortcuts. Don’t assume your feature is more important than years of muscle memory. I want to get things done, but I feel lost when I use a shortcut, and your website ...| Jose M. Gilgado
When you open your browser, you usually have a legitimate interest. What’s the weather like tomorrow? How long is the flight? How do you write “definitively”? All valid questions, and the Internet provides. But then, you jump to another type of content. This second phase starts with a dangerous question that defines what you’re about to do: “What new things do you have for me?”. Like in a slot machine, you insert your coin and pull the lever of the Internet to see what you get.| Jose M. Gilgado
Opening your eyes, you glance at the clock on the night table—time to get up. The house is completely silent as you make your way to the kitchen. Each sound feels amplified at this early time in the morning. Entering the kitchen, you remember the fantastic croissant your partner bought you yesterday. It looks delicious and crispy on the outside. It must taste so good. You can’t help but wonder if you should have it.| Jose M. Gilgado
Let me introduce you to WordStar 4.0, a popular word processor from the early 80s. WordStar 4.0 As old as it seems, George R.R. Martin used it to write “A Song of Ice and Fire”. Why would someone use such an old piece of software to write over 5,000 pages? I love how he puts it: It does everything I want a word processing program to do and it doesn't do anything else.| Jose M. Gilgado
Capitalism is great at giving people what they demand and making them even want things they don’t need. Once a company creates a product or service, the industry streamlines its production, distribution, and sales to maximize efficiency. The more they sell, the better it is for the business. Living in a market-driven society is a blessing if you want to buy a good fork or a reliable car. However, there’s a flip side to this coin: an entire sector focuses on enticing consumers with addicti...| Jose M. Gilgado
I’ve always loved lighthouses. Apart from their astounding views and beautiful settings, they’re a great reminder of how we can have a deeper meaning in our lives.| Jose M. Gilgado
I’ve been fighting all my life. I always wanted to move forward, to get somewhere. Once I pass that exam, everything will be ok. Once I get my degree, I’ll be fulfilled and happy. Once I get enough money, my life will be great. I was always looking forward to the next stage, always wanting something more. Like if all my problems would fade away as soon as I achieved something.| Jose M. Gilgado
I’ve been working fully remotely for more than ten years now. The last eight as a software engineer at Buffer, a fully remote company since its inception in 2010. From all these years, I’ve learned a lot: how to balance my work and my personal life, how to communicate better when I write, heck I’ve even learned how to use the right emoji at the right time; it’s more useful than you think if you’re on Slack each day.| Jose M. Gilgado
There are two fundamental components in the world: human beings and nature. By influencing either one of them, you can effectively create change in the world. It’s hard to have a significant impact on nature, though. Even if you use your bike more, recycle regularly, or vote for the right politicians to pass environmentally-friendly laws, your impact will be small. While we should all strive to make a difference, we won’t be able to witness much of that impact in our lifetimes.| Jose M. Gilgado
If you’re like most people, you have some free time every day to choose what to do with daily outside obligations like work or taking care of your family. What you do with your free time has a direct and profound impact physically and mentally, and you probably repeat some activities each day. They’ve become your habits now. If we repeat certain behaviors daily, wouldn’t it be helpful to think deeply about what they bring to our life?| Jose M. Gilgado
Your car is perfect until you see your neighbor’s. Everything seems good enough, but then you see an ad or your Instagram feed and wish you had that beautiful desk instead of the perfectly fine one you’re using. “If only I had that new thing.” “If only I could go to that beautiful place.” “If only I could get that new laptop, car, or watch. My life would be much better”, we might think, but we’re wrong.| Jose M. Gilgado
Once you’ve learned something, it’s not interesting anymore. What was surprising once now feels dull and obvious. Have you ever chatted with an adult friend about how rivers form? How does the water evaporate in the sea, forming clouds, and then the rain creates snow in the mountains? How is that snow melted and rivers are born, bringing that water down to the seas again? I bet you haven’t because it’s obvious to you.| Jose M. Gilgado
Naturally, as you grow in your profession, you develop a vision and think about ideas and opportunities you can take to grow and have a more significant impact. The natural process when these ideas come to mind is to add them to a never-ending to-do list. When I have time, I’ll propose that thing I’ve been thinking about for the last two months, you might think. Sometimes, it’s even worse. You forget about them.| Jose M. Gilgado
It’s Saturday, and I’m enjoying the last sunlight for the day in my studio. The house is silent now; my family is taking a nap downstairs. And I’m here, writing, in silence. There’s a thought that kept coming in the last few weeks. As painful as it is, any creation happens in isolation without any signals or external validation until it’s complete. Any idea or creative work you can think of happens in silence.| Jose M. Gilgado
I love my Kindle. It allows me to read and buy a new book, and that’s it. Everything on it is oriented towards reading e-books. When you’re reading a book on it, there’s nothing else on the screen and no interruptions. I hate my smartphone. It allows me to do almost anything without a clear sign of what’s more important. I can receive a notification about a doctor’s appointment for my kids or the last offer from a random brand I bought from once; both can interrupt me in the same way.| Jose M. Gilgado
When debugging an object in Javascript, you usually do something like: console.log(myObject); Or even: console.debug(myObject);| Jose M. Gilgado
It’s so tempting. We have a new idea, a new hobby that’s exciting and the first thing we do is buying something new. It seems necessary at the moment and it’s so easy.| Jose M. Gilgado
In Scala you can’t declare class methods, all the methods defined in a class belong to the object.| Jose M. Gilgado
Scala has a powerful pattern matching mechanism, that we can think of a kind of “switch” if we come from another programming language, but it’s much more powerful and I’d love to explore some of its options here. A simple switch in Scala would look like this: a match { case 1 => "One" case 2 => "Two" case _ => "Whatever" } In this case we have cases with 1 and 2, and if something else is matched then we return “Whatever”.| Jose M. Gilgado
I’ve worked on some Scala projects recently using SBT (Scala Building Tool) and every time I had a change in a file I needed to go to SBT and type compile until I found a simple instruction to keep it compiling for me. Just execute SBT and run the following command: ~ compile Now every time you save a file it will be compiled automatically. In the official documentation you can see more details.| Jose M. Gilgado
The last week I had a spec with a request where I needed to specify the content type and Google sensei didn’t help me. It took me an hour until I finally found it, so let me show here briefly how to do it just in case I have to find it again.| Jose M. Gilgado
I’d like to share some sites with programming challenges, also known as programming puzzles. I find them very useful to learn a new language, much more than reading a lot of books. Actually, I usually read one book for beginners of the language and after that I go to one of the following sites and start to code. My favourite is /r/dailyprogrammer. /r/DailyProgrammer. Subreddit with three challenges every week or so (easy, intermediate and hard).| Jose M. Gilgado
I’ve started the great journal of learning Vim. I’ve heard a lot of good things about this editor and I’d like to learn how to use it effectively and share here all the things I’ll learn and my thoughts about every step of the way. As a novice I’ll make a lot of mistakes but I’ll try to search all the commands and tips to make sure they will be accurate enough to be shared.| Jose M. Gilgado
A predicate method is tipically one that should return a boolean value (true or false). These methods are useful in a lot of scenarios, like when you have an class with a boolean attribute.| Jose M. Gilgado
I’ve started to develop applications for iOS about 3 months ago and there were a lot of things new for me in that environment (there are a lot yet) and Objective-C wasn’t an exception.| Jose M. Gilgado
I had a little doubt about when to do the return if you have a big if, something like the following function:| Jose M. Gilgado
The radio buttons in HTML come in handy when the user should select only one option in a form.| Jose M. Gilgado
It’s well known that Apple supports HTML5 from the very beginning, that comes with a lot of advantages for Javascript developers. One of them is knowing the exact position of the iPad using a couple of events.| Jose M. Gilgado
Some months ago I started to learn Python, I found a lot of resources and not all of them were really useful, they were either for non-programmers or too long for an introduction. After some research I came up with a list of resources.| Jose M. Gilgado
I’ve been experimenting with ways to be more disconnected from technology for a long time, from disabling notifications to using a dumbphone. However, a challenging exercise still hard to do is to go for a walk without my phone. When I leave my place without my phone, I feel like I’m leaving my pants at home; the whole experience is stressful. What if someone needs me? What if I need it for something?| Jose M. Gilgado
We constantly question ourselves when attempting anything new for the first time, which is daunting. And what’s worse, it prevents us from doing anything new, so we can’t change who we are. If you’ve always been terrible at sports and want to start working out, the natural reaction after a few attempts is to stop and return to your old habits. At the end of the day, you’re not an athlete.| Jose M. Gilgado
In the summer of 2019, I started to build Planleave, a SaaS product to manage time off days in an organization. I did it as a side project while working full-time as a software engineer at Buffer. Three years later, in 2022, I sold it. I’ve never worked harder on any side project than on Planleave. When I start any project, I usually go through the first honeymoon phase of absolutely loving the idea, but that fades away quickly, and I usually stop at that point.| Jose M. Gilgado
We’re losing our capacity to focus. When Apple introduced the iPhone in 2007, little we knew how much that would change the world, it was the first step towards the ubiquity of smartphones. There was a premonitory phrase from Steve Jobs: “iPhone is like having your life in your pocket”.[1] iPhone presentation in 2007 And we loved it. We’ve embraced smartphones to the point where it’s hard to find someone who doesn’t own one, but we have yet to consider the consequences.| Jose M. Gilgado
Youtube is a great free source of information and entertainment that we’ve all used at some point. Here’s a guide on how to make it less distracting| Jose M. Gilgado
I’ve recently launched a side project, a SaaS product to manage absences in companies. It might generate some money in the future and yet, I don’t need any of it. I know what you’re thinking. Money is always nice, and you’re right, but I’m also working full-time as a software engineer. Any extra income is welcomed but not needed. This is a great path for many creative people. You have the good parts of working for an employer and the benefits of having a side business where you can ...| Jose M. Gilgado
We all try to create good and clean code, projects that are maintainable and easy to change and yet, we don’t appreciate when we have one. Do you remember the last time you easily change something in your code? Maybe it was a simple constant that was only in one place, or a new parameter in an API endpoint that was fast to test. You might remember but I bet you didn’t stop to appreciate how easy the change was.| Jose M. Gilgado
I’ve recently used a nice feature in Gitlab to automatically post my articles scheduled in the future in Hugo and I share how I did it in this article.| Jose M. Gilgado
When creating software, you’ll make mistakes. Sometimes they’ll be huge, sometimes they’ll be small but you can always learn from them if you spend some extra time documenting them. In order to learn from those mistakes and try to avoid them in the future you can develop a bug log. We’ll see here what that is and how it works but I promise it helps.| Jose M. Gilgado
In order to render a React component in the static generator framework Hugo, we need to do some adjustments to our theme. In this guide we’ll see all the steps to use JSX too.| Jose M. Gilgado
The current scene, with so many companies working remotely, leaves the employees with some changes in how things work in a company when there’s no office that are not obvious. Dynamics, habits and workflows change to some extent in a remote organization. Here I share some of the things I’ve learnt in the last few years that helped me from the perspective of a regular employee in a fully remote company.| Jose M. Gilgado
Bitwise operations are really useful and fast for storing and operate on certain values. In this first article about bitwise operations, we get a quick introduction to them.| Jose M. Gilgado
How to remove empty elements in an array in PHP without having trouble with the indexes. This happens because the result of array_map or array_filter can leave some indexes out of the array.| Jose M. Gilgado
From the interviews with Buffer until now, over four years later, I have the feeling I work in a unique environment and I want to share here some lessons I’ve learnt so far.| Jose M. Gilgado
Introduction We can visualize the knowledge about an application as an iceberg where the users will head down as they use it more and more and the UX experts should be in charge of guiding them step by step to deeper areas. This knowledge will allow them to perform actions quicker and more efficiently. On Gmail, for example, you can create a new mail by clicking on the “Compose” button or by pressing the key c.| Jose M. Gilgado
Many times in our careers as software developers we tend to use the same known tools to do a completely new different project with new constraints. Why do we tend to choose the same tools with small changes over and over again if we have the chance? Abraham Kaplan wrote in 1964 [1]: I call it the law of the instrument, and it may be formulated as follows: Give a small boy a hammer, and he will find that everything he encounters needs pounding.| Jose M. Gilgado
After some years working as a software developer in different companies I have used many programs and utilities in *nix environments that I’d like to share. This is not an exhaustive tutorial about how to get the most of them, many options will be just ignored and I will list only how I use them on a daily basis. Text processing I use these utilities to get info from a log or to quickly change a config file on a server.| Jose M. Gilgado
REST is a style of software architecture, often used in web. The design of Rails, for instance, is based a lot on REST. The idea behind this architecture is to have very similar interfaces to access all the resources in your system. Recently I had to create 2 APIs in 3 months so I had to learn all I could in a very short time. I’d like to share some conclusions but giving the fact that to develop an API people usually say you need 10 years of experience take them with caution.| Jose M. Gilgado
I think as developers we tend to create complexity if we don’t think carefully about every line of code we are typing. Systems tend to be complex and managing that complexity is one of the main task we have. Routines are great, they are one of the best ways to encapsulate algorithms and make your code more readable. Sometimes we think routines are too short, but actually the usually are too long.| Jose M. Gilgado
One of the easiest ways to start sharing your work in the form of writing, designs, or photographs is by using the latest trendy platform in that space, especially when everyone else seems to be using it. How many Blogspot sites are you checking these days? They still work, but Google has killed one or two services, so who knows for how long? Medium was great for publishing content, but it doesn’t seem to be the case anymore.| Jose M. Gilgado