Another weekend, another day without doing much. 🙁 Had some good plays on a few games, but other than that was a slow day.
I've avoided to talk about cryptocurrencies (crypto, in all mentions going forward) for a long time on Twitter because of the polarization that exists on the internet about it. My feed is flooded with crypto haters and also crypto maxis. It's crazy to see that people is so passionate to dismiss crypto. Their reason is that if they don't dismiss it, and ban it, it will consume the world. It might be true, but also is it really that bad as they say?
There are a lot of arguments to deny crypto. They say that it is bad for the environment, and that it doesn't contribute much to the world, it is a solution waiting for a problem. On the other side it is considered a holy grail, and hordes of people just love coins, blindly. They can be scammed by people that control the tokens, and still believe that those people have good intentions. It's crazy to see.
It's crazy to see the opinions of both. On the deniers side they seem very conservative, while on the maxi side they seem very libertarian. Personally, I have a hard time understanding politics, because it wasn't always anything that really pulled me in. I think I'm at the center of the right-left spectrum and on the libertarian side, not a lot, but a fair bit.
My perspective on crypto is that it is mostly good for the world. There were moments where I thought it was all going to end, but I see its potential. I love the concept that humans and machines can trade currency without the need for a central system. For most cryptos, no one has single control of the crypto. There is a lot of manipulations, of course, but they don't control the issuance, and transmission of those assets. The assets are free to move from one wallet to another without restrictions, for the most part.
Since I'm an engineer, I mostly admire the engineering behind it all. From the miners, validators, and other mechanisms of issuance, to the smart contracts, and other tech that is built on top of the blockchain. All the countless websites that analyse the data, and the one that serve as portals to access the decentralized apps made possible with these technologies.
This is a brief intro to this topic, and I want to expand on this in the future. There are a lot to be said on this.
Front-end technologies (HTML/CSS, Flutter) are starting to feel a little boring to me, compared to Back-end. #RandomThoughts #Flutter— André Baltazar (@AndreBaltazar) April 28, 2022
I've been feeling like that for some time. I really enjoy getting on the hardcore engineering parts of the different projects, but than I get bored when there are things that need to be repeated way too many times.
For example, I'm in the 5th revision of a program I've been writing that I really want to do, but it never works as intended. I'm moving slowly on it now, because I've done the common parts many times, and I just enjoy the parts that are a challenge. Of course, I know that a lot of things we do are boilerplate, and it is just how it works. But there are so many different engineering challenges out there that frustrating over something that you don't enjoy is stupid. This is why I always stop my projects, I just find something more interesting to do, the problem is that after that I see the old project, and just feel bad that I didn't finish. It's a very complex issue.
I'm an engineer at heart. I want to build, build, build. Just a bit lost at times.
As seen on my Twitter:
Flutter has so many cool packages to help build applications.
Here are 5 of my favorites. 🌟
Hive - pub.dev/packages/hive
A simple and lightweight key-value database that can help you store configs and much more.
Riverpod - pub.dev/packages/riverpod
A compile-safe version of provider to help in your state-management needs.
Dio - pub.dev/packages/dio
An advanced HTTP client, compared to http package, which supports interceptors and many other great features out-of-the-box.
Another state management library that simplifies connecting your reactive data with the UI.
Freezed - pub.dev/packages/freezed
A code generator for data classes with serialization, and other basic methods.
I started working towards the app for this journey as I continue working on other things in parallel.
I will talk a lot more about this in the coming posts, but for now there is the video of the layout that I made today. It's just wireframes with dummy data.
I'm planning again. I have an idea to create a meetings/discussion app for teams. This is a pain point I had in my jobs. I want to allow meetings that are asynchronous, enabling anyone from across the globe to slowly participate in a meeting.
Today I've defined some basic tasks I need to get done. The stack I want to use, and also designed some screens on paper. I don't have anything final, but I want to set things up tomorrow and then continue to work on it slowly, but sharing everything here and on Twitter.
I'm ready to do this!
Everything going very slowly.
I have nothing to show for today. I actually worked on the other project, but also did some black and white sketches for another project that I've been wanting to do for a while.
If this idea brews a little more in my head, I think I might start it next week.
I've been slacking really hard on this journey. Today I did some work but on something outside the scope of this MVP journey, so I don't think there is a need to go in depth on it here.
It really is hard for me to focus here, at least for me. I don't have any ideas of what to do, that could be nice a lot of people. I'm stuck.
Just living another day. Actually did a bunch of personal stuff, and a few interviews. Started doing a Chrome Extension to try to use VR on some websites, but Valve Index doesn't support WebXR API yet on Linux, so I had troubles with that. Going to do it tomorrow on Windows.
It has been a nice day nonetheless.
Just delved into some other things and didn't do anything related to the journey.
Nothing interesting (tech related) to share today. Here is a cat 🐱 #CatsOfTwitter pic.twitter.com/r0yKdoUhWr— André Baltazar (@AndreBaltazar) April 20, 2022
I think defining the basics of what I want to do is very important. So I will define them here, but first some story time.
It has been a long time since the first time I wanted to create a project that I can then sell to other people, and make a living. I've been dwelling on it for years with very little action, and sometimes none at all. There has been many factors that led to this. My indecisiveness is one of them, sometimes I can't pick one thing and work on that. There is also perfectionism which always leads me to dwell on things, sometimes I don't even start because I know I will not end in some way that is good. Trying to get better at this.
The idea behind this journey is to share the struggles and the achievements that happen along the way. I want to post every single day, as a way to improve my writing as well. It is going to be a long journey, as the previous posts indicate, there are a lot of things to work on. I will do my best to keep it going.
I've always seen the building process as a way to improve my skills and to learn some new thing, but the novelty wears off very quickly. The struggle is real.
As previously mentioned I want to make solid projects that can be polished and working. But concepts and other things are expected along the way. I will not be working on projects each and every day, because there are other things I do, that require focus and time as well. As I write this, I also realise that distracts me from the main objective, but sometimes it is just necessary things that are needed in life.
Most of all, I want this journey to be enjoyable. I will keep on working on this journey but as I heard recently it is not about the destination, nor the journey, I hope there are other things that come from this that make this journey worth embracing.
Nothing to show for today as well. I spent the day looking around once again, and defining a plan of what I want to do.
Yesterday, I ended up taking a day off from this, but I still did some things. I provisioned an AWS instance to try and boost a project that I had been working on before, but with no avail. I ended up terminating it anyway.
As for the journey, I think I'm out of ideas. It is really hard to think about problems that I want to solve in my life, that are also things that can be "productized" for other people.
Even though I don't recall anything right now, I will be working on something today. Let's see what it ends up being.
Just had a nice lunch out with family, that's why this post is late. I'm taking this day off as predicted yesterday. It is really hard to focus with so many other random things.
Ended up not doing anything. I think this weekend will be kinda an off weekend, I played a couple of games today as well, and then had a dinner out, which took a long time, so I ended up not doing much.
After updating the website yesterday I spent a quite a few hours playing many different games. It had been a long time since I played any AAA games, so it was kinda nice.
I'm probably going to be distracted once again with games, but I'm going to try to do something new today.
It is done. I've improved the blog using a generator. It generates the different pages from simple blog post files which follow a simple article format, so it's easy to manipulate, for example, to insert URLs in the title automatically. The pages are generated from a simple PHP file that runs on a first stage of the Docker build and the final posts are then copied to the final image.
I've been loving Docker lately. It is so simple to just run things. I can get new sites running in a few minutes, with just a couple commands. It's much easier than having to configure a ton of nginx files. It is basically only three commands: build, push, deploy.
Not sure yet what I'm doing next, since this actually was a very fast thing to do today. I'm going to catch some sunlight, and then do something else.
I initially thought that I would extract the List widget as an open source today. I even started writing about it:
Today I want to actually extract the List Widget as an open source package. I decided to do this even though I'm not going to publish it this weekend. In my opinion it is nice to contribute to open source, as it contributes to the global intelligence and to moving the edge of the adjacent possible ever so slightly forward.
The opinion about open source still holds true. I think contributing things to open source, even if just a few people see them, is mostly beneficial to the world. But I decided against it right now. I don't have what it takes to maintain another package, and something with so many moving parts (quite literally) that isn't finished to a point that can be easily reused. There are quite a few things that would need to be improved in the current interface, and other things that need to be added to make it more reusable and user-friendly.
What I'm going to do instead is to improve this blog slightly. I'm going to extract the posts from this static HTML, and generate pages for each of them, allowing direct linking as well. It should be a fairly quick thing to do. And I will use the other time that I have to explore something else.
I'm quite happy how the work today turned out:
I ended up creating a simple API in PHP to story the data, it is quite inefficient, sending all the data for the app in each request, but it works. It is just a proof of concept, so I'm happy with it. The items are retrieved at the start of the app, and then saved when something is modified.
Posted that video on Twitter, and it was suggested to add a log for the work done, for metrics. So I quickly added a new screen, and a logging mechanism for when the tasks are moved to the "Done" list.
I want to develop this into an app for other users, but might be quite difficult to get an app like this started. So I'm not pursuing that right now. Tomorrow I will decide on what to work next.
It was once again a good day. All that is left to do today, is move over the only task to the "Done" list.
Yesterday, after the post, I still made a few adjustments allowing more customizations on the different stages of the reordering and dragging. I think it is enough for now, so today I'm moving on to making the app work for my needs. Basically adding the core parts of the app like I said in the last post.
I'm still debating on what I'm going to use for the backend, either WebSockets to maintain a connection with the server, in case I want to have 2 instances easily in sync. Or go for a simpler option that is just creating a few PHP scripts to do it. Might go the simple route, just need to make sure not to edit the lists in two different instances of the app at the same time.
Let's get to work. It's going to be a good day!
It has been quite a good day in terms of programming. I made some amazing progress on it. It now works to move things between lists. It is just missing auto scrolling in case of too many items in the list. I don't know if I'm going to worry with that right now. Here is how it looks:
Tomorrow I want to add the ability to add new items, as well as, save them somewhere, allowing for the app to actually function. This is going to be just a personal app for now, so I will probably hardcode some API methods into it, and make it work just for me.
The progress is going well, and I'm trying to share the journey on Twitter, semi-successfully. I think the consistency matters, so let's see where this Twitter thing is in a few weeks of months.
I'm continuing on the path to create the Flutter App. I want to finish the widget today with all the fancy things that it has, allowing to move items between lists.
Yesterday, after the last post I also looked a bit more in-depth into KiCad, I saw a bunch of videos how to create the PCBs with it. I had a general understanding of how to do it, but got a much in-depth look. It will also be a fun thing to explore. I want to create a custom Raspberry Pi 4 Compute Module carrier board.
Into the woods we go! Let's get some work done.
I finally made some progress! Here it is:
Since the purpose of the app is having the two lists and being able to organize them, it is quite important to be able to move items between two different lists. It is something that Flutter does not have as a default Widget, so I had to implement it. It is still a bit buggy, and doesn't fully work yet. It's not possible to drop the items yet, and no lists change when the item drops. I think that is a simple part once all the other parts are done. The measuring of the items is not done yet, so basically it is only placing the item based on a hardcoded height, and it is also missing auto scrolling in case the list is bigger than the view. That is for tomorrow.
I'm quite happy that I made some progress on something. Tomorrow I will try to keep this up, even though I also want to continue working on compiler stuff. My mind is kinda crazy, when I don't have any external force acting to focus me on something, like a deadline, it is very easy to go onto the next thing.
Today starts a bit later. I was just building a different kind of project:
This is Pão de Queijo, which translates directly to "Cheese Bread", which originated in Brazil. I just made it by hand, and it is looking amazing. Can't wait to try them out.
Focusing on the journey now, yesterday I tried to start something, even after the "No work done" post, but I didn't actually go through with anything. I have a simple idea of a daily helper app that I want to make, so I'm going to get started on it today.
The app is really simple. A list of what you have to do today. And a list of future things to do. Every day you drag things from one list to the other. And when you complete them you just mark them as completed, and they disappear. Simple. Will be doing it in Flutter, to allow it to work everywhere, mobile, desktop, and even web (although web is not Flutter's specialty).
Interestingly I also have a job interview about Flutter today, so let's see how it goes.
I was certain I would start. But nothing came of it. I tried to create something. Maybe even way too hard. Tomorrow is another day. I'm a bit disappointed in myself, but life goes on.
For a long time I've been maintaining a list of ideas of projects to build and things that could be improved. The list started growing very fast at first, but then slowed down. I lost interest/forgot that I was gathering ideas every day for new projects. Since then, I just add a few ideas every other month. Most of them are just bad. There are others that are quite cool.
A few weeks ago I did this thing were you select generate a random word. and you think of an idea based on that word. That is something that other people have done before, and I think it's quite a good way to develop ideas that are not necessarily problems you have, but might be good overall.
I came up with projects like a project that based on your inputs from things that you like to do, distance of travel to supermarkets that you like, etc., finds the best region for you to live. For me, this is quite an interesting project, even though I have the opinion that we should try to minimize our transit for going from/to work as well. For people that work remotely that's not an issue, but for everyone else it is.
So after thinking of all this, I decided since I already committed to doing this blog, to also start thinking of new ideas. It will be easier to do both of them together. I like to dream of what is possible to do in this world.
I'm going to start something new today. Not sure what yet, but something will come.
As I shared on the last post, today was a day of reflection.
It has been amazing to ponder about so many things. A few hours ago I found The Joy of Small Projects through Hacker News, and I found it inspiring. Seeing the process that other people go through to actually be able to finish projects as well. I might adapt some of those things here in this journey as well. It's quite a simple process, but I think it can be very effective.
One other thing that stuck with me was a comment that was posted on the discussion of that post, which talked about "avoid projects that have user accounts". It is quite an interesting perspective, but very true. The only reply that it currently has, goes deeper. The reply talks about users sharing content and the need for moderation. I found it very interesting because of my project, because it touched on all these points. I knew this to be true before, but I thought I would give it a shot anyways. In the end I just stopped myself again from committing to something that would be more difficult to implement and polish in a project that was supposed to take a week.
The Gogo experiment also ended today. While it is sad to see him go, I see the opportunity to go deeper into the rabbit hole of what is possible to do next with something like Gogo.
😢 It is over. #LDJAM #indiedev #gamedev pic.twitter.com/W7cGYYyoYp— André Baltazar (@AndreBaltazar) April 10, 2022
Lastly, and what mostly affects this journey, far straying it from its original path, I'm striking the "MVP every week" from the title. I want to build. That is the goal, but the post mentioned above, made me realize that different projects have different needs. Some of my older projects took 2 weeks to do, while others only took a few days, so like everything I think fully restricting this journey to one project a week, while maybe more catchy for anyone from outside looking in, maybe more difficult to keep up in the long run.
There are other things that I want to explore, like building PCBs with Kicad, or diving deep into so many technologies, maybe even create a simple SMTP server from scratch. Tomorrow is a new day. It reserves something new and special to be explored. I will be here to do just that.
It has been absolutely delightful to write here. It's been only 4 days doing it daily, but I've rediscovered the joy of writing. I wrote for over 8 months daily on a notebook, filling pages with thoughts, my daily activities, my struggles, and everything in between. It's nice to do it again. I'm going to stop numbering the days, as this is a marathon, not a sprint, and in the long run those numbers will not mean anything.
While this is not a place for more deep thoughts about life and my daily activities outside of the MVP journey it will bleed in from time to time. I'm not the best writer, but I enjoy writing way more than I enjoy reading. It might be reflected here, with many grammatical errors that may come with writing daily and without much proof checking. I don't truly care about that, if there is an error I will still be able to understand, and it shouldn't be that hard for other people to understand as well.
The journey on this planet is numbered, but on this website it won't be. As I think about numbering things, I also think about the demand of creating a new project every week. While it forces me to stay consistent and with discipline, it also comes with the darker side of forcing myself to work on something when I don't really feel like it. I enjoy creating projects and new stuff, but making everything into a project to share with the world, even though there isn't any feedback from this website, puts a lot of pressure to make it presentable.
I want to be able to go through this journey at my own pace, even though putting pressure on it might drive it to be more successful. The journey has begun a long time ago. I realized yesterday that it has been 16 years since I started programming, and this programming journey has been incredible. There has been so many projects over the years and many other things that will contribute to this journey that is just starting.
Moving step by step but with focus. Focusing on what comes every step of the way, and on the bigger picture. Even though the journey just started for this particular chapter, it will also end some day. I want to make the best of it. Today will be a day without much to show for. Gogo is dying (probably today) and it represents exactly what this website also represents. Every day should be cherished as it will end. Memento Mori.
It took a dark turn, but not all days are bright. This is just a dump of my thoughts, unfiltered. See you later.
I've added a section for the projects today. And included the "subnot" project with "Terminated" status. I'm done with it for now. It's been fun interacting with Telegram, but it's time to move on to new things. I'm not sure what's going to happen next. Tomorrow is Sunday, I might actually skip it and just start fresh on Monday.
I've decided to put a stop to this notification system project. It's very early in development, but I've come to realize that it can be used for a lot of spam if not done properly. As I don't have control of what is posted on the endpoints, providing my own bot for Telegram can be a recipe for disaster. Allowing people to send messages against the terms of service is not good. I could allow people to provide their own bot, which would be better, but still, everything is coming out of the same server, and it could be bad, once again.
The project has potential as something people configure and allows them to send their messages to their users, a library or self-hosted solution, but providing a service that does this can be more of a hassle. This is something I'm not willing to continue and see where it goes. I know the idea of this site is to build a new MVP every week, at least for now, but putting effort into something that you no longer believe is just insane. So I will no longer develop this project right now, unless I find a better way of dealing with the identified issues. Who knows, maybe I will build the self-hosted solution in the future. But right now I would rather develop a different kind of project.
The objective is to show the journey, and not to show the successes only. It's not easy to start with a failure, but it is expected for a lot more of them to come.
So the task for today is to create a page on this very same website where I will list the projects from this journey, and their status. I will also 'soft launch' this website. It will be available on the internet, with no one knowing about it. It will be a long journey, this is just the beginning. A failure on Day 3 opens the possibilities for a success to come earlier.
Finally, there is also something that I want to explore. As I mentioned in the first post on this website, I was going to participate on a game jam. I actually did it, but I realize I didn't share anything as promised.
The image above represents the game that I developed for Ludum Dare. The theme was "Delay the inevitable" and I decided to make a crowd-sourced game. Everyone needs to keep feeding the dog to keep him alive. It's available at https://savegogo.icy.pt, it will probably be dead by the time most people read this, if anyone reads this. At the time of writing he has about 7 hours to live, and will probably be dead tonight.
I want to expand this idea further, it has some potential to become viral and evolve into something different. This is like a group digital tamagotchi. It will take time to get something polished out of it though.
I'm conflicted on what exactly to do. If I should continue on to develop the notifications as a self-hosted solution, or if I should move on to a new project. The Save Gogo v2, is probably a good candidate, but I don't want ot rush it. I thought a few times about scrapping this whole posts as start anew, saying I've changed my mind to create the self-hosted solution.
It is cool to be able to have this stream of thoughts, without judgement. Some day, if this website becomes more popular, people will see this, and probably judge it, but as I said I'm here to share the whole journey. It will be a good one. You will know what I've decided to do at the end of the day.
Turned out a great day. Even though I skipped 2 hours of work to deal with other stuff I managed to get basic subscription and notifications working on Telegram. It's a first pass. The API calls, and probably the way everything is persisted in the database is very likely to change, but it was a great day.
Here is a quick video showing the progress for today:
Set up Composer to include some dependencies, set the database connections, and also memcached for some future features. I upgraded everything to PHP 8.1 to be able to use the latest features and that also took some time and a lot of debugging breaking changes. Everything ended up working nicely.
Everything is running on Docker, so it's easy to keep track of what dependencies are needed like the `pdo_mysql` and `memcached` modules for PHP for deployment in a real environment.
A lot to do tomorrow:
- Work on browser notifications
- Work on filters to allow fine-grained control of notifications
- Think about how messages are going to be displayed via different channels: Templates vs Providing the whole message
It's a new day! Will be working to add some persistence to it all, and adding basic notifications via Telegram. It's quite a lot, but I think I can make some real progress.
Progress was made! I started creating the subscribe button and working on the handling messages from Telegram. Here is what it looks like:
The buttons don't really work yet, the only thing that happens is the "Telegram Message" creates a deep link to the bot I created on Telegram which prompts the user to start a chat. When the user starts, a message is sent to the server, and he will be subscribed to whatever that button belongs to.
Tomorrow I want to hook everything up to be able to subscribe and send a message through Telegram. Let's see if I can make it.
As fate would have it I'm off to an awful start... So today I'm starting my first MVP.
I have had this idea for a while of managing streams of data. You can send data into a pipe, and it basically processes, filters, and outputs something. It can also perform tasks based on that data. This idea evolved into a more generic concept where programs could store data into a system where everyone could do computations on that data. Then I came to the realization that it looks a lot like the EVM (Ethereum Virtual Machine) where the data is accessible and the contracts are able to operate over that data.
While this idea was still brewing in the back of my mind, I moved on from it, but then came across someone who was wanting to notify people based on certain things they would subscribe. I thought this could be a great use for a pipe as I wanted to develop. Basically you would put a notification message in. It would filter based on what you wanted and do some tasks on it. It looks a lot like IFTTT, but I wanted to make it focused on notifications and filtering. Then came the realization I could do something else.
The idea of building a notifications project. I already have a project before that allows people to register for notifications and then send notifications to that endpoint, for solo developers, for example, if they to get notifications of errors or something else. It was a failure, but I think I could make it work with a different approach and different target group.
So the final idea is simple: "Build a generic notification system that end-users (public) can subscribe to get updates". The updates can come from different channels, via browsers Push API, Telegram, email, etc. The people providing the subscribe button have a page that they can use to send notifications. And a simple API as well. I can also provide a simple page for people to redirect their audience to and subscribe to get updates from them.
I know, I know... Notifications trigger for some people. However, there are some good uses for them and discarding all those because of the bad is not what should be done (like it happens in a lot of different things). The idea is that you know if you subscribe to this you will get the notifications. There is no other purpose for those buttons.
The reason this was delayed is that my MacBook Pro broke and had to go into warranty. That was a bit of a setback because I wasted a couple of hours each day to get it to the shop/from the shop, and ended up slacking a lot with other things as well, like my Pi Cluster:
Clustering Pi #raspberrypi pic.twitter.com/eupCG0ujkp— André Baltazar (@AndreBaltazar) April 5, 2022
Today marks the start of a journey to create an MVP every week.
There will be daily entries with updates of each project as I go and the objective is to share the journey of building and launching them. This is heavily inspired by I'm Launching 12 Startups in 12 Months, 180 websites in 180 days and others who came before.
I've always built a lot of projects for many many years, but never this open. None of them really have anyone using them or are never published. I will share the code and learning for many of them. My motivation to do this website is to show my projects to the world and to force me to finish what I start. It's always easy to start, but to launch anything there is always something to perfect, something to change, or something to add, and that makes it difficult. Having a deadline of 7 days for each project will require me to plan to launch. Also quite important is that every project needs to be viable, not just a feature without the surroundings. I don't want to build what I call an improved bike with a nice seat but no wheels.
Work on the projects will start on Monday, 4 April, because tomorrow is the 20th anniversary of Ludum Dare which will join and make a game. I will share that here as well, just as a pre-journey to the MVPs.
Updates for all the projects will be on this website and on Twitter @AndreBaltazar.
This site will not be public for a week, as I test this concept privately before committing to such a crazy journey. So by the time of release there will be at least a few of these entries. Of course there will be days skipped, with travels, and don't know the impact of that on this project, but let's see. Thanks for reading this far! Let's get building.