Skip to main content

Author: markozivanovic

Reading debt – bookmarking shit you’ll never read

Reading debt (also known as bookmark debt or Ctrl-D compulsion) is a concept in casual web browsing that reflects the implied cost of additional bookmark organization and undesirable future reading.

It’s caused by reckless pressing of Ctrl-D instead of using your brain for a moment to consider if you’ll ever want to read the damn thing later.

No, this isn’t an existent, known concept. I wrote it into its existence a few moments ago, following the sentence structure found on the Wikipedia page about technical debt.

It does however embody a sentiment of frustration that revolves around an unorganized mess created by hoarding and bookmarking material that will probably never be read.

This Friday afternoon, as I was adding yet another bookmark to the already overcrowded bookmark bar (filled with idiosyncratically named folders, the names of which are now reduced to mostly two-character acronyms, so more can fit), I decided I had enough and determined to do a general cleanup.

Just as a junk food addict would say, “This is my last burger before I go on a diet!” I said to myself, “This is my last recklessly created bookmark!”

Finding the solution

I remember I used Pocket some years ago – before Mozilla acquired it, and before it changed its name (it was named “Read it Later” previously).

My research went that way – looking at the current state of Pocket and its alternatives, including PinboardInstapaper, and Raindrop.

While I definitely understand how some people find value in these services, I realized they wouldn’t solve my problem. If anything, they would only make it worse – encouraging me to save more and more articles to read later, creating even more reading debt.

These services would help me organize the debt better, and they would undoubtedly display my hoarded treasure in a sexy way, but that’s not what I want. I want to get rid of (most of) it.

Shift in thinking

I ended up going to bed that night after failing to come up with a proper fix that’ll prevent me from ending up in the same situation two months from now – being overwhelmed by the amassed heap of hyperlinks I considered deserving of keeping at the time.

I kept the reading debt problem loop running in my mind for the next two days, albeit with a lower priority. What I came up with is a low-tech solution. So low tech, it consists of merely three questions I’ll ask myself every time before I want to save something to read later and a simple weekly reminder that will notify me to revise the status.

This is the algorithm:

  1. Every time before you want to save something for later, ask yourself this:
    1. Is this an advertisement or a puff piece?
    2. Does this have a short expiry date, with no relevance to you, your family, or your job?
    3. Do you need this for your future research/writing/development?
  2. If the answer to the first two questions is no, and the answer to the last question is yes, bookmark the reading material.
  3. Revise the status of the reading material weekly. If the article has not been read within a week, trash it. If you need it for further research, tag it and store it properly.

Only a week has passed since I incorporated this into my thinking process, but I can already say I recognize the benefits after the first revision.

Who knows, maybe it’s just me being more conscious and mindful about the problem, and the whole three-part process is unwarranted. Maybe the only reason I became more conscious and mindful is due to that three-part process.

It doesn’t matter. What matters is I’m on a good way to reduce my reading debt problem. If you have a better solution, I would love to hear about it!

Screw it, I’ll host it myself

It’s all fun and games until someone loses an eye. Likewise, it’s all fun and games until someone loses access to their private and/or business data because they trusted it to someone else.

You don’t have to be an expert seeker to be able to quickly duck out (it’s like the verb ‘googling’, but used to describe searching the interwebs through a decent search engine, like DuckDuckGo) all the stories about little guys being fucked over by “don’t be evil” type of corporate behemoths.

You know what? Let me duck it out for you:

A drinking game recommendation (careful, it may and probably will lead to alcoholism): take a shot every time you find out how someone’s data has been locked and their business was jeopardized because they didn’t own, or at least back up their data.

Owning your data and your tools

Owning your data is more than just having backup copies of your digital information. It’s also about control and privacy. It’s about trust. I don’t know about you, but I don’t trust a lot of services with my data (the ones I do are few and far between).

As this is a post about self-hosting, I won’t start preaching (trust me, it’s hard for me not to) how you should consider switching from WhatsApp to Signal, Google Maps to OpenStreetMap, or how you should quit Instagram and Facebook. You’re creating a lot of data there, and they don’t do pretty things with it. Fuck, I’m already preaching. Sorry about that.

Note: I’m not fully off social media. I’m using Twitter and LinkedIn. Everything on Twitter is public/disposable and I don’t use their private messaging feature. LinkedIn is there for professional correspondence and I will start to taper it off slowly, but that one is tough to quit.

Disclaimer:
I’m aware most of the people are not power users, and not everyone will want to spend time learning to set up their own alternatives to the services mentioned and create the backup strategies as I’ve done. It does take some time (mostly to set everything up) and some money. If you’ll take anything from this post, it should be to always back up your data (yes, even though it’s replicated across 5 Google’s datacenters). If shit hits the fan, it may take you a while to adopt new tools or flows, but you will still have your backup. Do your backups early and often.

What’s my setup?

I created a simple diagram to roughly show how my personal setup works. Before you say anything – I’m aware that there’s a group of people that wouldn’t consider my self-hosting as pure self-hosting. I’m using Vultr* to host my web-facing applications and not a server in my house. Unfortunately, the current situation doesn’t allow me to do that (yet).

So, here’s the diagram. The detailed explanation continues below.

I’ve separated the diagram into 4 parts – each part represents a different physical location of the data.

The part that gets the most action is the yellow part, living in the cloud.

Vultr

I’m living in Germany, so the obvious choice was to spin up my instances in Vultr‘s* data center in Frankfurt, as ping is the lowest to that center for me.

Right now, I have six compute instances running there. You can see types of cloud compute instances in the picture below. It’s pretty similar to what you would get from DigitalOcean or AWS EC2.

Why did I choose Vultr*? They have pretty good customer service there, and I just happened to stumble on them before DigitalOcean got big and popular and AWS became the leader in the cloud computing game. Having said that, for purely private use, I wouldn’t opt for AWS even if I had to choose now. I’ll leave it at that.

The breakdown looks like this:

  • 1 x $10/mo VPS + 1 x $5/mo object storage – Nextcloud
  • 1 x $10/mo VPS – Gitea
  • 1 x $5/mo VPS – Monica CRM / Kanboard
  • 1 x $5/mo VPS – various dev tools + analytics (Plausible)
  • 2 x $10/mo VPS – several web projects that I run for myself and friends

Everything combined costs me $55 per month.

Nextcloud

Nextcloud is the powerhouse of my everyday data flow and manipulation. With the addition of apps, it’s a really powerful one in all solution to serve as an alternative to widely popular offerings of the FAANG crowd. Once properly set up, not much maintenance is needed.

  • Tasks are the alternative to Todoist or Any.do which I used previously.
  • Notes are the alternative to Google Keep. Not as fully featured as Evernote or OneNote I have also tried out at one point, but it’s good enough for me.
  • Calendar is the alternative to Google Calendar I used previously.
  • Contacts are the alternative to Google/Samsung contacts I used previously.

I’m also able to stream music from Nextcloud to my phone, using Nextcloud music. For the client, you can use anything compatible with Ampache or Subsonic. My choice is Power Ampache. I’m not streaming a lot of music though. I always have 30-40 GB of MP3s on my phone that I rotate every now and then.

All the data from Nextcloud is in sync with Synology at my home via CloudSync. A big plus is a nice dark theme for the web UI:

Gitea

I’m a developer and more than I need the air to breathe and coffee to drink, I need version control. My weapon of choice is git, which is lucky because there are a lot of hosting solutions for it out there. I was thinking about this one for a while and it boiled down to GitLab vs Gitea.

For my needs, GitLab was overkill, so I went with Gitea. It’s lightweight, easy to update, and just works. Its interface is clean and easy to understand, and because UI is similar to that one of GitHub, people that I collab with find it as a seamless switch. On the negative side, if you want to customize it, it can be a pain in the butt.

Monica CRM / Kanboard

Monica is a personal CRM. Some people think I’m weird because I’m using a personal CRM. I find it awesome. After I meet people, I often write down some information about them that I would otherwise forget. I sometimes make notes about longer phone calls if I know the information from the call will come in handy later on. Colleagues’ and friends’ birthdays, ideas for their presents, things like that – they go into the CRM.

I mention Monica in my post on how you should not ignore rejection emails, where you can see another example of how it helps with my flow.

Kanboard is a free and open-source Kanban project management software. I use it to manage my side projects, but I also use it for keeping track of books I read, some financial planning, study progress tracking, etc. It’s written in PHP, it’s easily customizable and it supports multiple users. Usually, when I do some collaborations, I will immediately create an account for that person on both Gitea and Kanboard.

Development tools & Analytics

Plausible is my choice for analytics that I use on several websites that I own. It’s lightweight, it’s open-source, and most importantly – it respects your privacy. There’s a how-to that I wrote on how you can install it on an Ubuntu machine yourself. The bonus thing is that I really like developers’ approach to running a business. They have a cool blog where you can read about it.

Development tools that I’m mentioning are basically a bunch of scripts I have developed and gathered over time. Text encoders/decoders, color pickers, WYSIWYG layout builders, Swagger editor, etc. If I use something often and it’s trivial to implement on my own, I’ll do it.

Home

Desktop PC and NAS are part of my ‘home’ region.

Desktop is nothing special. I don’t play video games, and I don’t do any work that needs a lot of computing performance. It’s the 8th generation i5 with integrated graphics, 1TB SSD, and 16 gigs of RAM. OS I’m using is Ubuntu – the latest LTS version. It’s installed on both the desktop and laptop.

Everything except the OS and the apps is synced in real-time to Synology by using the Synology Drive Client.

Synology NAS I’m using is the DS220j. It’s not the fastest thing, but again, it works for me. I have two Western Digital Red drives (shocking, huh?), 2TB each.

Every last weekend of the month, I will manually backup all the data to Blu-ray discs. Not once, but twice. One copy goes to a safe storage space at home and the other one ends up at a completely different location.

Offsite backup

This is my ‘everything is fucked, burnt or stolen’ situation remedy. I’m not particularly happy with the physical security I’ve set up at home, so one of the concerns is the theft of disks and backups. Other than moving to a different location where it would be easier to work on upgrading the physical security, my hands are tied regarding this subject (not for long hopefully).

Other things could happen, like fire, flood, etc. Of course, it’s a bit of a hassle, but I believe in being prepared for any type of situation, no matter how improbable it may seem.

Laptop & Smartphone

When you’re self-hosting, it will, naturally, also reflect on the apps that you use on your portable devices. Previously, my phone’s home screen was filled with mostly Google Apps – calendar, keep, maps, drive. There were also Dropbox, Spotify/Deezer. It’s different now.

I have De-Googled my phone, using /e/ and F-Droid. There are compromises you’ll have to make if you choose to go down this path. Sometimes it will go smoothly, but sometimes it will frustrate the hell out of you. It was worth it for me. I value my freedom and privacy so much more than an occasional headache caused by buggy software.

This is the list of the apps I use frequently that are related to self-hosting:

  • OsmAnd~ – global mobile map viewing & navigation for offline and online OSM maps
  • Nextcloud Notes – client app for the Nextcloud Notes app
  • PowerAmpache – lets me stream music from my cloud
  • PulseMusic – my main music app that I use to listen to the music collection stored directly on my phone (30-40GB at any time that I rotate from time to time)
  • Nextcloud – this is the sync client for the phone and a file browser
  • K-9 Mail – really, really ugly looking email client that is also the best email client for Android I have ever used

As I mentioned previously, my Laptop is running the latest Ubuntu LTS, just like the desktop PC. To have things partially synced to the NextCloud, I’m using the official desktop client. Listing other tools that I use as a developer that may be tangibly related to self-hosting would be another two thousand words, so I won’t go into that right now.

Conclusion

Is it worth the time and hassle? Only you can answer that for yourself.

Researching alternatives to commercial cloud offerings, and setting everything up surely took some time. I didn’t track it, so I can’t say precisely how much time, but it was definitely in the double digits. If I had to guess, I would say ~40 hours.

Luckily, after that phase, things run (mostly) without any interruption. I have a monthly reminder to check for the updates and apply them to the software I’m running. I don’t bother with minor updates, so if it’s not broken, I’m not fixing it.

If I motivate even one person to at least consider the option of self-hosting, I will be happy. Feel free to drop me a message if you decide to do that!

* Links to [Vultr](https://www.vultr.com/?ref=8305838) contain my referral code, which means that if you choose to subscribe to Vultr after you clicked on that link, it will earn me a small commission.

Interview with the Cookie Monster

I had the privilege and sometimes the burden of interviewing dozens of developers in some of the companies I worked for previously. Some of those interviews were, well, immensely interesting.

There are few interviews in particular that I don’t think I’ll ever forget. The next story is a recollection of one of those experiences.

Arnold the Cookie Monster

Arnold was a young man with minimal programming experience. He was fresh out of college and was looking for his first gig as a developer. At the time, we were looking for a junior person. My team consisted of skillful engineers, and quite a few of them were thrilled to welcome someone young and unproven to mentor them and help them get up to speed.

I sat in maybe five or six interviews before that one, always with a more senior and experienced colleague. The only reason why I was leading this particular interview was that it was summer, and half of the people from the office were away on vacation.

It was a long Wednesday, one of those days when you’re looking at the clock thinking it’s broken. I was working on my last task for the day before attending a short meeting with a client. The “seemingly broken” clock was showing 4:30 PM when I heard the bell ringing. We scheduled the interview with Arnold at 5:30 PM, so I assumed that we’re having something delivered to the office.

Much to my surprise, it was Arnold – a tall, skinny guy with a big confident smile stretching from ear to ear. He shook my hand, immediately apologizing he’s an hour early. He explained that train lines were irregular that day because of ongoing construction, and it was his only means of transportation. I didn’t mind at all, but I had to tell him he’ll have to wait until our scheduled time, or at least until the client meeting I had to attend finishes.

Still smiling, he said it’s not a problem at all, reaching into his backpack and pulling out a copy of, at the time, a popular gaming magazine and a bag of snacks. I told him to follow me to our relaxation area, showing him where the coffee machine and fridges filled with the developer’s standard favorite drinks are. Yes, I’m talking about those poisonous, sugary energy drinks that were probably illegal in some countries.

One of the things I loved about that company was the variety of snacks! We had it all, everything you could think of. If there wasn’t something that employees wanted, it would be ordered. Cabinets were full of cookies, chocolate, candy, and salted goodies.

Arnold sat down on the couch, blissfully looking at the huge bowl of double chocolate chip cookies in front of him. He opened up the first page of his magazine, ready to relax and catch up on the news from the gaming industry.

I went back to my station, finished up the task, and committed my code just in time for the short meeting I had to attend before the interview. With everything finished, I headed back to the relaxation area to tell Arnold we can start with our conversation.

When I stepped into the room, it was a sight to behold. That skinny guy managed to eat all the cookies from the bowl (and I repeat, it was a huge bowl). He even found an unopened bag of candy on the counter that he used to refill the now cookieless container in front of him. His shirt was full of crumbs, and the table was full of candy wrappers.

I found it really funny, but I somehow managed to hold back my laughter, not wanting to embarrass him or make him nervous. In the end, he was just starting out, he was inexperienced, and he seemed nice.

We went to the conference room, sat down, and started talking casually for the first few minutes, easing into the technical part of the interview. It’s important to mention that earlier in the day, management had a meeting with some potential clients. That meant that the conference table was full of snacks – and Arnold still wasn’t finished with his feast.

Every answer he gave, he did it with his mouth full, battling between chewing the cookies and trying to provide solutions to my prepared and vetted collection of engineering questions.

Unfortunately, the solutions he provided and the way he approached the problems given to him were not good enough. He wasn’t the right fit for us at the time. I told him we’ll contact him in the next few days, which we did, but he probably already knew that it didn’t go that well for him that day.

Before he left the office, I went back to the snack cabinet. I pulled out a box of double chocolate chip cookies and gave it to Arnold. I said to him, “I’ve noticed you like these, and I know you have a long train ride home, so this is a little something for you.”

His smile, which he kept on during the whole interview, broadened into a grin. We shook hands, and off he went, undoubtedly already planning to open that box of cookies he was holding in his hands.

Don’t ignore rejection emails

Many people are currently facing unemployment or have already been laid off. Times are tough. We’re amidst major lockdowns, quarantines, and we’re uncertain of our financial future.

With all that in mind, if you find yourself in a situation where your job is on the line, or you’re already without one – recovering from it can be problematic. You’ll be sending many emails, and many of those will yield a rejection. But that’s nothing to be upset about – it’s a normal part of the process.

Rejection email – this is where the catch is. Most people will get that email, hit the delete button, and try to forget it as soon as possible. Don’t do that! Whether you’re a freelancer searching for a new gig, or you’re looking for a full-time job, one thing is sure – you want to have a steady income of opportunities going your way.

What to do instead?

Accept the rejection gracefully, don’t take it personally (it seldom is), and shoot an email back. Start by thanking the person for their time. Leave the doors open by offering your services in the future if ever needed. With that additional minute or two, you’ve accomplished at least two things:

  1. You left the door open for more natural and not so awkward future communication
  2. By acting professional and being positive, you made yourself stand out in a crowd of what is probably tens or hundreds of other applicants

It’s purely anecdotal, but by doing this simple step, I had people getting back to me even after one or two years when they were searching for new candidates.
After I write a follow-up email like that one, I will do the following:

  1. Make an entry in my CRM (I’m using Monica, but you can use something simple such as the Contact app you’re using) writing down contact details of the person, job/gig I was applying for, and the reason for rejection.
  2. I will connect with the person on LinkedIn if they have an account there. That way, I can do a quick check on their current professional whereabouts in case I want to reach out to them again.

I invite you to try it out. It’s a neat and low-cost way of widening your professional network. Who knows, your next opportunity might come from a person that had to turn you down in the past, whatever the reason was.