Mac mini server 2011 – the last upgrade

Running a home server is kind of a hobby with some benefits. I’ve been doing it for almost two decades, starting out with a Windows machine put together from old parts. Then I upgraded, upgraded some more, and at some point, I ended up with a Mac mini G4 (ah, good times) and finally a Mac mini server 2011, which I purchased around 2014-2015.

I ended up with Apple equipment because it was a good compromise between money, my needs, and my skills. At the time, I was pretty fed up with Windows and wanted to use Linux but fell short on skills. Besides, back in the day, Apple was quite serious about server equipment and server OS – they had separate CDs with server OS – yep, CDs! Unfortunately, that didn’t last, and nearly a decade later, Apple started losing interest in it. After another decade, Apple no longer had server OS or interest in servers.

I’ve been running the Mac mini on OS X 10.13 “High Sierra” for the past six years, past all the releases that no longer support “old” hardware, and I guess quite insecurely. Luckily, I don’t expose my server to the outside world. One of the biggest reliefs was Docker, which allowed me to expand the capability of “High Sierra” and prolong its service. Anyone who has ever used OS X knows it’s really easy to use features and services – smooth sailing. But the moment you want something that doesn’t come with OS X, get ready for some pain and uphill battles – for example, built-in Apache with a PHP module. Fortunately, Docker sidesteps all of that.

Unfortunately, this year, good times came to an end – Docker received a breaking update, and old Docker could no longer find/download new Docker images. Considering Apple releases a new OS every single year, it doesn’t seem to make much sense to support Docker development for a 5-year-old “High Sierra.” So, the time for a tough decision came.

Should I buy another Apple hardware or simply move to Linux and see how far I can get with Ubuntu LTS (Long-Term Support)? I wasn’t keen on buying a new Mac mini – the upfront cost of $1200 is something to consider carefully. The used option is a bit tricky since the Mac mini 2018 is already out of OS X support and, at the same time, can’t be upgraded – on the chip storage. So, I can buy a used pre-2018 Mac mini – which is out of support and hope that Docker will be working fine for a while. Gambling is not my strong suit. Besides, the long-term goal is to move to Linux and different hardware (perhaps Raspberry PI) – so user-friendly Ubuntu it is.

Before installing Ubuntu, I had one last gift to give my already old Mac mini server – SSD drives all around (main and secondary drive). The main drive in the mini was so old that the paper sticker started disintegrating into dust in my hand – an impressive 12 years of service, considering it started giving some trouble recently. The Ubuntu installation was straightforward, and the OS runs fast, blazing fast. I guess 4 cores i7 and 16 gigs of RAM is still a pretty decent setup.

Overall migration went ok, I managed to hit lots of troubles with data transfer, but it was my own mistake – I didn’t prepare, and in my deep ignorance, I thought that Linux and OS X file systems know how to talk to each other properly. Then naturally, I hit issues with permissions and some other small stuff. Once file permissions got straightened out, the only big hiccup was Samba service – which as I learned 6 hours later, does NOT advertise its presence on the local network, like OS X does – silly but yeah. Everything else was more or less ok, thanks to a friend of mine, who knows his way around Linux. I managed to complete the entire migration from start to end in 3 days. Not a bad result, considering I spent nearly one day on data transfer and another day fighting for nothing with Samba service – well, you live you learn.

I’m very excited about Ubuntu; after nearly 2 decades, I’m finally on Linux for my home server. I can definitely say that Ubuntu has progressed a long way. I don’t recall it being this well-refined out of the box before. I’m sure I’ll have to learn some more about Linux and go down to the command line and edit configs with Nano, but hey, in some cases, it is easier than OS X. For example, crontab is so easy I had to ask a friend a couple of times to make sure that I didn’t need to do anything else (OS X requires more work to achieve the same). Backups on Ubuntu are pretty good as well, especially I got impressed by Timeshift. It needs a little bit of configuration out of the box, but it looks a lot more powerful than Time Machine – I mean you make a snapshot, then mess with the OS as much as you want, and then you can rollback everything, including OS updates and configurations – wonderful.

Anyways, the last upgrade to my Mac mini server 2011 is complete, and now I’m wondering how far will it make it. Will it last another couple of years or all the way to its 20th birthday and perhaps beyond? Time will tell.

Bialetti – buy with option to return

Recently, I purchased a Bialetti moka pot and was somewhat disappointed. However, I was pretty determined to have a nice Bialetti moka pot, so I ordered another one – a 9-cup size. I really wanted to see if I was unlucky with the first one and hoping the second one would not have any blemishes, and the pressure release valve would not be too close to the handle.

Well, I received the second pot:

Okay, so the bottom piece is very nicely done, and the top piece doesn’t have any blemishes this time around. Now the safety release valve is about 90 degrees away from the handle once you close the pot tightly. I guess it would be good to have the valve at 180 degrees away, but it doesn’t look like Bialetti is measuring or trying to keep the valve at any particular location.

My impression of Bialetti didn’t improve much based on two samples. I figured the Bialetti moka pot could use some quality improvements! Objectively, the pot does not worth the money, and Bialetti sells based on marketing and legacy, meaning you are largely paying for marketing and not Italian-made quality.

My advice: if you just want a moka pot, don’t waste your money. Buy some other brand at a competitive price. If you are like me, who wants some part of the legacy, buy Bialetti in-person so you can inspect the pot before you purchase it, or purchase online but make sure you can actually return the item if you get a crappy one.

Bialetti – Italian Quality

I recently discovered the Moka pot and liked it so much that I decided to purchase a real Italian-made Bialetti Moka pot. After a couple of hours of research, I discovered that Bialetti only makes two Moka pots in Italy, the 6 and 9 cup ones. No problem, I wanted the 9 cup pot to share coffee with friends and family. I purchased the pot off Amazon and received it after several days.

I was very happy to see that the Bialetti Moka pot was indeed made in Italy, as I had paid a premium of $67 Canadian. The bottom part of the pot is very nicely casted and machined, and I’m very happy with it. However, that’s where the good news ends. The top part of the pot is less than ideal, with some blemishes, and the safety valve is located uncomfortably close to the handle. In case of an issue when the safety valve opens to release hot steam, I’ll have to grab it by the handle and hope the steam will not burn my hand, which is not ideal at all.

Now, I could buy a Moka pot for $20 at any mall, but I wanted to get the original premium pot from Italy and got a somewhat dubious product. Honestly, it’s a bit disappointing. I mean, Bialetti has been making Moka pots for decades. Is it so much to ask to have a quality product at par with the premium price?

Playa Maroma, Mexico

Between Covid and other complications, it’s been nearly five years since we ventured out. Yet again, we went to a resort, mostly because my wife had a deep desire to see the blue, blue ocean with a beautiful sandy beach and lack of other options at the time.

Despite overall satisfaction with Principe Bahia in the Dominican Republic, we went to Catalonia in Playa Maroma, Mexico. Now, I know, Mexico gets a certain reputation – cartels, drugs, shootings, poverty and such, but I believe the news paints a much worse picture than what the average vacationer will encounter. In reality, I think Mexico might be a bit safer than the Dominican Republic, but I’ll touch on it later.

Travel:

One big perk of Mexico is its proximity to the USA, and that translates into a relatively short fly time of less than 4 hours from Detroit to Cancun. Considering you have to arrive at the airport at least 2 hours before the flight, you might actually spend more time wandering around the airport than flying. In case you are flying out early in the morning, pack some food with you so you can have breakfast, since all restaurants/coffee shops at Detroit airport open up around 6 – 6:30.

Cancun airport is smaller than Detroit one but a lot more charming (IMHO). One curious layout difference is that every arrival and departure you get to walk through a Duty-Free store. I find the Duty-Free a lovely feature because I get to buy a few things that are hard or impossible to get at the resort and/or would cost you an arm and a leg. For example: it is impossible to find 18-year-old Flor de Cana rum at the resort, the best they can do is 5-7 years old. I’ll touch on the shopping a bit more later.

Now, the shuttle service to Playa Maroma was underwhelming at best and confusing at worst. No one met us; we just kinda stumbled outside and started looking for any sign of anyone who is looking for us. Ah, a very silly idea, since everyone is looking for you in Mexico: taxi, limo, bus and whatever other services. After a few minutes of the bedlam, we stopped a person that seemed to be familiar with the situation and asked for an Expedia shuttle. We got redirected to Expedia reps who were quietly standing to a side. After that, we got to stand around, waiting for more travelers, then we got to stand some more at a parking lot, waiting for a mini-van, then we got to sit in bad Cancun traffic (mostly due to construction) and as fate would have it, we got pulled over by the national guard and waited some more. I have to mention separately that the shuttle back was prearranged, but for whatever reason, I had to call some phone number and make sure we got a ride back to the airport. Overall shuttle experience was somewhat ok, but in the Dominican Republic, we got much, much better service.

Resort:

There are all sorts of resorts: big, small, adults-only, kid-friendly, and so on. At the end of the day, picking a resort comes down to your preferences and priorities. Our priorities were the beach, food, and kid-friendliness. My wife picked Catalonia in Playa Maroma because of these priorities, and we were not disappointed. Playa Maroma is a small resort that feels right down my alley. There is one jungle path that takes you all the way from the lobby to the pool plaza, past rooms, shops, along some restaurants, and other facilities. The size of the resort allows you to walk everywhere, and that is just lovely, as I really hated taking tiny shuttles at Principe Bahia resort in the Dominican Republic. There are also small shops, a coffee shop, mini food trucks, and of course, a bar by the beach and in the pool.

Another notable difference, in comparison with Principe Bahia, is that you don’t have to go to the bar. There is actual staff walking around who will take care of you, which is very nice and at times super convenient. Moreover, the bars seem to be sized and staffed properly, so there is rarely a big lineup or long wait. As far as the bar is concerned, Catalonia has it nailed.

One feature that stood out to me is internet availability. It looks like every resort likes to advertise “free internet” but asks for extra if you want internet in your room or anywhere else outside of the lobby. But Catalonia actually provides internet connection everywhere within the confines of the resort, and I mean everywhere – even at the beach, you are literally standing in the water and have internet connection. Now, one caveat with network coverage is the lobby bathroom. Wi-Fi connectivity there is so poor that it is basically non-existent. It’s somewhat puzzling considering that two meters away, you have perfectly fine connection; it must be something within the bathroom walls.

One nice touch is the coffee shop at the resort. I would love to compare it to Starbucks, but I actually don’t go to Starbucks much, so I can’t compare. In any case, the coffee shop is very cozy, cute, and serves decent coffee. It has a large enough menu of drinks and sweets, but be ready to have a local Mexican twist to all the offerings. My wife took a liking to the coffee shop, and we were regulars right before it closes at 18:00.

Now, what about the food? First, let me make a short disclosure: I’m not picky with food, and I would probably be a poor critic. However, I have to admit, Mexican resorts seem to have better food, especially when it comes to restaurants. Moreover, you can have dinner at a restaurant every single night (in comparison to Principe Bahia). Unfortunately, during our stay, we managed to get minor food poisoning – no fever or downtime, but diarrhea didn’t spare any of us. I don’t know what food caused the issue, but it did, and it’s important to mention it. After visiting the nearby city of Playa del Carmen, I can definitely say one thing: don’t go to any resort for any special food experience, just pick a resort with decent food.

One definite win for Playa Maroma is the lack of drug dealers. It sounds strange, considering that the country has issues with cartels and drugs, but there are no drug dealers on the premises of the resort! One of the most repulsive things I found at Principe Bahia in the Dominican Republic was the fact that multiple resort employees were actively selling drugs. Moreover, there were many sketchy people with backpacks roaming the beach and offering all sorts of drugs. In Playa Maroma, I never met any employee that was offering drugs or any sketchy people with backpacks. So, are there no drugs? Well, no, there are drugs, but they are offered very discreetly and professionally. There is only one guy, with a backpack, sitting at the property line of the resort and offering anything you want. He is not hiding, but he is also not harassing anyone. As far as my experience goes, the Mexican beach feels pretty safe and welcoming for sunset walks.

The last thing that comes to my mind on the subject of the resort is irritations, and yes, there are a couple. The first is the lack of paper napkins! Anywhere you go, you have to look or ask for them. If you are looking for napkins yourself, most of the time you will not find any. It’s like having a localized paper napkin shortage, some artificial scarcity. I have been outside of the resort, and there are plenty of napkins available outside, so what’s the problem with paper napkins in the resort? Note: there is no shortage of toilet paper! I don’t get it, and hopefully, someone will figure out the mystery. The second irritation is tea spoons – they are always supplied reluctantly and in fewer numbers than required. For example, if you get three cakes for three people, you are provided with either one or, if you’re lucky, two spoons – perhaps they are encouraging sharing and community spirit. Another minor irritation is the lack of straws. My kid likes straws, and with a huge menu of drinks available for kids, there isn’t a single straw. I guess they are saving the planet.

Shopping:

Let me get a few things out of the way: the resort overcharges 2-3 times on some items and services. If possible, bring stuff with you as purchasing options are severely limited at the resort. I have to admit that our resort had better quality items and better prices in comparison to some tourist places outside of the resort. For example, we went to Tulum as part of a tour and were dropped off at a shopping plaza. Most of the items sold at the plaza were of poor quality and expensive. Be wary of touristy shops as they always start with horribly overpriced offerings, such as tequila for $200 per bottle.

If you are planning to venture outside by yourself, read about local transportation, prices, options, and negotiate upfront. The resort will overcharge you. For example, a taxi from Playa Maroma to Playa del Carmen costs anywhere between M$500-600. However, if you negotiate with a taxi yourself, you can get a ride for M$200. It took us two attempts to find a taxi willing to drive us back to the resort for M$200 – it doesn’t take long.

Now, if you want to get good prices on some local produce, you should definitely go to a local supermarket or Walmart. You can get well-known, good brand tequila such as Patron for around $40 and 18-year-old Flor de Cana for $47. Essentially, go to places where locals shop, and you’ll find fair prices. Now, just for comparison, the same Flor de Cana costs $60 at Duty-Free… Why the local store has it cheaper, I don’t know, but you can’t beat the convenience of Duty-Free.

I know I’m sticking restaurant experience into shopping, but hey, it happened during a shopping trip so… On the way to Playa del Carmen, the taxi driver recommended us to visit “El Pirata” restaurant for a seafood experience. When we got to the place, it didn’t look like much: tables, walls, pictures, waiters in bandanas, your normal Mexican restaurant oriented towards locals rather than American tourists. The first good sign was the daily special consisting of freshly caught sea produce. We decided to pick food out of the regular menu (I wish I had tried the special), and what we got was spectacular. The seafood salad was just excellent, the guacamole was awesome, and the deep-fried shrimp was so juicy… I believe it was one of the best seafood experiences that I ever had. The food was unbelievably fresh, tasty, and very reasonably priced. If I ever come back to the city, I’ll without a doubt visit El Pirata again!

Last word:

The trip was quite fun, kid grew up over last few years and priorities changed once again. No longer she has interest in slides or mini golf but now she wants to swim, dive and play in a pool. In that regard the resort was complete success since all day everyday (unless going on a tour or shopping) we spent at the pool. I don’t know if I would come back to the Catalonia resort in Playa Maroma, don’t get me wrong it is a very nice resort, but I’m just not sure I would like to spend time there again. Here is a deal, after visiting Playa del Carmen, it feels like it might be more fun to rent apartment or hotel room in the city and enjoy some of local restaurants, beaches and whatever else city is offering.

Tulum pics

Simply Self-Hosted Bitwarden for Local Use

I find password managers to be extremely convenient, especially when they can be easily synced. However, after last year’s security breach at Lastpass, I decided to reevaluate my use case and strategy going forward. Changing over 150 passwords gave me plenty of time to do so.

Requirements:

  • Password access and sync
  • Browser-based plugin
  • Local network use only

Optionally:

  • Remote access

I’m not going to discuss Bitwarden or cryptography in depth. Firstly, there are plenty of reviews on different password managers available, and secondly, I don’t have much knowledge on cryptography. So let me share my rationale: cloud-based solutions are very convenient, and I’m sure every password manager out there is doing their best to protect your data. Unfortunately, security is not an easy matter and, let’s face it, everyone makes mistakes. Lastpass made a few mistakes, and now I don’t know when my metadata and/or passwords will surface. So, the only question I had to ask myself was “Do I actually need to take the chance again?”. My answer was “no” and here’s how I achieved it.

  • Host Bitwarden on your local network – choose a machine and give it a static IP (ex.: 192.168.0.2).
  • Use Docker and the unified deployment method, note that the unified deployment is still in BETA.

It took me some time, but I managed to create the simplest docker-compose file that actually works:

version: '3'

services:
  bitwarden:
    depends_on:
      - db
    image: bitwarden/self-host:beta
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - ./bitwarden:/etc/bitwarden
    environment:
      BW_DOMAIN: "bitwarden"
      BW_DB_PROVIDER: "mariadb"
      BW_DB_SERVER: "db"
      BW_DB_DATABASE: "bitwarden_vault"
      BW_DB_USERNAME: "bitwarden"
      BW_DB_PASSWORD: "db_password"
      BW_INSTALLATION_ID: "get it from bitwarden.com/host/"
      BW_INSTALLATION_KEY: "get it from bitwarden.com/host/"

  db:
    environment:
      MARIADB_USER: "bitwarden"
      MARIADB_PASSWORD: "db_password"
      MARIADB_DATABASE: "bitwarden_vault"
      MARIADB_RANDOM_ROOT_PASSWORD: "true"
    image: mariadb:10.6.11
    restart: always
    volumes:
      - ./data:/var/lib/mysql

Here are some important limitations to consider:

  • Email confirmation will not occur since I don’t have an email server and don’t see the need to set one up

  • You will have to use the Bitwarden Web app to import data, as it can’t be done via the browser plugin – more
  • Bitwarden Web only seems to work from localhost, otherwise you’ll get an error that says this.subtle is null

Once you have set everything up, the rest is smooth sailing. The Bitwarden browser plugin doesn’t seem to care about the IP address, and it works great. If I need remote access, instead of exposing Bitwarden through a reverse proxy, I would prefer to use a VPN so I can log into my home network and access Bitwarden that way (I think it is safer this way).

I hope this idea is useful, and that Bitwarden will fix some of these limitations in the future.

Cheers.

Teaching programming to a kid

I have been slowly teaching my kid a bit of programming. Programming is not easy, and teaching it to a child is quite a challenge, so anything that makes it easier is welcome.

Initially, I have been using Scratch to teach programming, however, I moved away from it because it is not really that easy to use once you want to make something a bit more complex (even I had some issues following online tutorials) or teach a kid about some programming concepts such as for-loops.

Next, I tried Swift Playground, it is awesome, however, I got stuck on explaining for-loops. It might be easy for grown-ups to get a grasp of syntax and associated concepts, but for a child, it is a challenge.

I have been thinking about what to do next. Python? Well, maybe it is a good direction, but again syntax will get in the way of learning programming concepts… Today, I discovered Hedy and it looks very promising.

Checkout GOTO2022 talk:

Designing Data-Intensive Applications

I chose this book among others because I wanted to get out of reading about programming, methodologies, and other related stuff. I wanted to read something more abstract, not necessarily applicable to my immediate work, and boy did I get what I bargained for.

Well, let me start with complaints. First and foremost, the book is a bit long. I feel like it could have been compressed a bit. No, there isn’t much fluff, just several chapters could have been reorganized. Second, and no less subjective, the book at some point turns into a “horror movie,” where each passing chapter, things get more dangerous, complicated, and helpless. But I have to admit, there is a certain charm to such a delivery. Last grumble of mine: few examples of highly scaled and/or distributed systems. I would love to see more examples and discussions about them. Now I know the grumble isn’t entirely fair, since I got what I wanted – “more abstract” – but by the end of the book, I was left wanting more. I guess appetite comes during a meal.

Now let’s flip the page and go in the opposite direction: the examples in the book are quite interesting and educational. I loved the discussion about Twitter’s design and a couple more along the way. I personally don’t work with databases or other data-related systems that much, so the author fascinated me quite a bit. Some discussions are quite lengthy and detailed, mostly due to the complexity of the subject, but that’s what makes them so good, opening up your mind to different ways of thinking about programs, structures, and networks. The “horror movie” comes and goes, it makes you doubt everything you took for granted, even a CPU’s ability to add two numbers together. The author seems to project a lot of paranoia, the levels are similar to the amount of paranoia exhibited by system administrators. It sure gives a lot of perspective to developers, since lots of things are assumed to work properly and not to fail at the most opportune moment. One last thing: as I was reading the book, it reminded me of a bit of fun I had reading research papers at university. Some of the design patterns did emerge from academia, and perhaps it is a good direction if you have an interest in it.

I believe the title speaks for itself. If you want to design data-intensive applications, the book might be a good start. Perhaps it will give you a good insight and/or wider perspective. But if you are looking for hands-on material, the book might disappoint you. It is hard to tell whether the book is worth it or not. I had fun reading it; I believe it is well written, and I can see that the author put a lot of work into it. So I’ll leave you with this: if you are curious about the subject, go for it!

In a nutshell:
+: Well written
+: Broadens horizons
+: Lots of discussions and examples
+: No requirement for specialized knowledge
-/+: In a way, a long book; in a way, it needs to be longer
=: If you have any interest in application design, the book is an awesome way to start your journey.

Title: Designing Data-Intensive Applications
Author: Martin Kleppmann
Cover:

Goodbye 2022

Just a blink of an eye and 2022 is gone. In the past few years, I was quite optimistic about the upcoming years, but this year finally broke my back… Covid, inflation, and finally war. I hate to sound like an old fart, but it’s getting harder to look optimistically into the future. I wonder if I’m just getting grumpier or if the world is making less and less sense – perhaps both are the same side of the same coin.

In any case, I’m happy that 2022 is finally over. I’m looking forward to 2023 and the victory of Ukraine. Perhaps after the war is over, the world will slow down just a bit and become a little boring for a while, giving us all time to catch our breath. I hope the economy will survive without going into a deep recession and that we can all just get a break. Well, at least I can dream and wish.