Hi, I'm Gabriel, a guy in Ecuador interested in computers and programming. Most of my projects are open source and you can check them out on GitHub. Occasionally, I write stuff here.
I’m no graphic designer, but every time I need to do some basic image editing I go with GIMP. I always try to go with free software, even for the most meaningless tasks. GIMP may not be the most popular program, or even the best one, but it is free and you can do a lot with it. To illustrate this, I’ll show you how to use GIMP to create stickers for Telegram and WhatsApp. The goal of this tutorial is to use create this sticker from a photo. Even if you are not interested in stickers, you can still learn how to work with layers, remove the background from photos, and add smooth borders to any kind of shape.
Sometimes it is necessary to process data that is so large that it is no longer practical to load it all into memory. This is often the case in mobile apps, where computational resources are very limited, so it’s better to stream the data and avoid an
OutOfMemoryException. Recently I was working in an app written in Kotlin that processes big files, up to 300 MB, so I decided to write down some useful tips for working with byte streams in Kotlin.
Android development should be easy. Most apps that I’ve worked in aren’t that complex, they usually boil down to just displaying some data from a remote server and then letting the user post new data to that server. Nevertheless, their codebases often ended up being ugly and convoluted. After all these years I think I have finally figured out how to avoid common pitfalls.
In part 5 of Building a Blog I will talk about how I automate deployments of new blog posts using CircleCI. Every time I push to the master branch of my GitHub repository, a web hook is triggered and CircleCI checks out the latest code, runs a few tests, and finally deploys it. This makes it really easy for me to add new posts. However, the process isn’t that simple under the hood, and I want to explain in this post how it works.
In part 4 of Building a Blog I will talk about Nginx and how it is configured to serve static files efficiently and forward API requests to my Scotty server. The goal is to have Nginx as a secure and performant entry point to my site.
In part 2 of Building a Blog I will talk about how the small HTTP API used by this blog was implemented. Once again, because I like Haskell, I’ll use the Scotty web framework to listen to HTTP requests and run SQLite queries with the Beam library.
In part 1 of Building a Blog I will talk about how the static pages served in this blog are generated. Writing HTML for every posts is too low level and cumbersome. I don’t need to rewrite the structure of the page for every post. It’s better to write the content in a more high level language like markdown and convert it to HTML using a predefined template. Programs that are able to do this are usually called static site generators AKA just what I need.
I’ve been wanting to have my own blog for a while now, and only recently I finally had the time to sit down and work on it. I think knowing how to write and communicate effectively is a very valuable skill, specially for somebody working in tech. I’m by no means a good writer, but here I am.