<![CDATA[Fatih Arslan]]>https://arslan.io/https://arslan.io/favicon.pngFatih Arslanhttps://arslan.io/Ghost 5.115Thu, 27 Mar 2025 18:46:57 GMT60<![CDATA[I was wrong about AI Coding]]>https://arslan.io/2025/03/26/i-was-wrong-about-ai-coding/67dfbb1a5549f50001ea7f93Wed, 26 Mar 2025 13:46:27 GMT

A few thoughts kept me busy and I wanted to get it out.

I'm mostly anti-AI person since the AI hype started years ago. The basic reason was the quality of the content created by AI. I'll keep it short, but some of the things that made me keep away from AI were:

  • Hallucination is a big issue. AI answers are full of wrong assumptions.
  • Images generated by AI feel very fake. People use AI-generated images all the time, and it's just poor taste for me.
  • Vibe coding is real, but people using them don't know what they do, and they vibe code until something is fixed, without understanding what has been fixed. For me it's a huge red flag, because it signals the person doesn't care about quality at all.
  • FAANG created AI related products that truly suck (see latest state of Siri, or Google populating the search results with false narratives).
  • AI-generated text and blog posts feel immensely fake. People think that others won't care or don't understand the difference, but you can smell one from hundreds of meters away.

You can argue that most of these are better now, or that “quality” is merely a term used to deter newcomers from entering the field. However, I still believe there’s a significant issue with how we manage AI tools. And a part of me that always prioritizes quality over cheap work still holds this belief.

Tipping point

However, I'm a Software Engineer for almost two decades, and over the years, I've always tried to learn more. I think it's always good to be open-minded and take the good parts of your learning journey. All great Software Engineers I've worked with so far have one thing in common: they are open-minded and have an immense desire for new knowledge.

Let me admit one thing first before I move on: I was partly wrong on the "Coding" part of AI.

I believe now that it's truly powerful if you know how to use it. How did I change my mind? There were a few people in my circles that made me rethink my stance against AI, and then when I used it in a few projects, I decided it's time to write this blog post.

The first person was Thorsten Ball. You should follow him. Thorsten is a Software Engineer and worked on various things over the years (Code Search, Editors, Type Systems, etc.). He also wrote a great book on how to write a Compiler and Interpreter for Go. So he knows his stuff. In the past months, he is advocating more and more for Software Engineers to be open minded and to learn more about AI tools. But what made me rethink was his blog post about why people should take Coding with AI seriously: https://registerspill.thorstenball.com/p/they-all-use-it

This was a tipping point for me, because as with many friends like me, I wasn't really into it, but the curisiouty in me couldn't let it go. Reading the blog post made me realize that I should really change my attitude. I think Thorsten did a great a job of advocating for a future where AI can be used to create "Quality" work in a way more efficient way.

The second tipping point was the various sessions I had with my friend Mustafa Akin. I believe it was about two or three months ago that we met for lunch. I asked a simple question to him: “I think the entire AI concept is overhyped and unrealistic, but I know that you’re also trying and experimenting. Do you have anything that could potentially change my mind?”

He launched Cursor and demonstrated to me in just ten minutes how he had resolved an issue in his personal project that would have required him a day or two. In the following months, he consistently showcased various examples of how he utilized Cursor and other similar tools. Each example he presented improved compared his previous examples. These observations made me to reconsider my stance on AI.

Using AI for coding for first time

Having changed my mind slightly, I was looking for an excuse to use it. I'm a heavy NeoVim/Vim user. I’ve used it for almost 23 years, and even after trying lots of IDEs and editors, I always come back to Vim. This is important because I never wanted to use VSCode with Copilot, Cursor, Zed, or any other editor. I tried Zed a few times, but again, it's not the same. So when Claude Code was announced, I really loved it, because I could use it with Vim side by side on my terminal.

A few days ago, I worked on a bug that was caused due to connectivity failures between Etcd members in different regions. This was because the Kubernetes service responsible for Etcd was misconfigured. After several debugging sessions, I implemented the fix in our controller. Next, I had to write a proper unit test to ensure that the controller always creates the correct services with the appropriate annotations and labels.

Usually, what I would do is scaffold a table-driven test in Go and slightly build it with lots of edge cases. And I knew it would take me a few hours because we didn't have any tests yet. Adding a case to an already written table-driven test takes a few minutes mostly, but writing a new test from scratch is not always fun, honestly. So I knew what to do. I've used Claude Code and asked a simple question:

I added a new function called reconcileEtcdServices. Write a table driven unit test for it.

It was quite straightforward and simple. More importantly, I didn’t mention the location of the new function definition or provided any specific instructions. I could have been more detailed, but I intentionally omitted it to observe how well the code executes.

The results blew my mind. Claude Code wrote a test that had the specifications:

  • It was truly Go idiomatic. Even the test name followed the convention TestType_Method.
  • It used existing frameworks (such as testify) and wrote the test that resembles exactly how our other test were written.
  • The table driven test had 4-5 cases. It not only tested whether the services were created properly, also made sure that they were NOT created when a certain configuration was disabled.
  • It read my doc comments that I wrote of the function, and used those descriptions in the test cases.

If I were to share the code with any of my colleagues, I believe they would perceive it as being well-written by me.

However, something was off with the test. First, it wasn't as tidy as I would write; second, it didn't compile at all. I immediately knew, though, because it hallucinated and assumed there must be some sort of function called identifier.SetX(), however, the identifier was a global package modifying an internal value, so it had to be initialized differently.

I told Claude Code to revisit the code again, pasted the error, and told him to initialize the value in a different way. I knew how to do that, but I didn't tell Claude the solution. I wanted to see if it could understand and figure it out. In the second iteration, it recognized the error, did a deep search, and found the correct way of initializing, and also refactored the test again. At this point, it was compiling fine, and all the tests passed fine.

In total, it took me about 4-5 minutes to do all of this, whereas previously it would take me maybe a few hours, depending on the test. Claude Code said the total cost was $0.81, which I think is not bad at all.

What's next

I was wrong about AI Coding
Photo by NASA / Unsplash

I shared my experience within the company on Slack and explained how it significantly sped up my work. There were already a few people experimenting with AI Coding, some of whom had negative experiences, while others had positive ones. Overall, it was a mixed bag. Nevertheless, I sensed that everyone was excited to give AI Agents a try.

The issue, particularly in my use case, is that the codebase I’m working on is a Kubernetes controller, which is quite complex, comprising hundreds of rules and business logic. It's responsible of creating horizontal scalable databases across thousands of nodes. Most of these rules are based on assumptions that aren’t within that repository (for instance, performing a regional failover for a multi-regional database).

Hence, I'm not sure how useful it'll be for things that work only in a distributed system, where assumptions and requirements are represented by multiple entities and repositories. However, going forward, I'll be trying to incorporate more and more AI coding into my dev workflow. I think with time, I'll also be learning certain assumptions, how it works best for our use case. Tests, for example, are a good candidate so far. Small, decoupled logic could also be a good candidate.

If you're like me, and always hesitated, I'll suggest doing this. Read Thorstens blog post, and afterwards maybe spent a few hours trying Cursor or Claude Code. Give it a try, and maybe spend a few hours understanding how it fit your workflow. You won't regret it.

]]>
<![CDATA[Plotter Notebook System]]>Taking notes, in my opinion, is the best thing one can do for themselves. Writing is a form of thinking, and writing manually, in an analog manner, elevates the process. It has a positive impact on your well-being. It’s akin to working out for hours and then returning

]]>
https://arslan.io/2025/02/24/plotter-notebook-system/67b961bfd5fff000017ec3a6Mon, 24 Feb 2025 15:00:46 GMT

Taking notes, in my opinion, is the best thing one can do for themselves. Writing is a form of thinking, and writing manually, in an analog manner, elevates the process. It has a positive impact on your well-being. It’s akin to working out for hours and then returning home to relax. You know your body hurts, but it feels good. Writing has that same feeling for me.

Over the years, I've been using several notebooks, from several brands. These were small Field Notes distributed around the house, car, and several Moleskine Notebooks for Journalling and Notes (nit: I'm not very happy about Moleskine for a long time and over the years I've replaced them with other brands, but that's another story).

However, I discovered that I don’t have a system or a plan on how I take notes. It's chaotic.

Plotter Notebook System

Readers of this website might be confused because all my habits are built around systematic work and discipline. Unfortunately, taking notes is an exception. I’m a heavy user of Apple Notes, and I have around 400-500 digital notes. Relying solely on Apple Notes doesn’t work for me though.

I get lost, and I’ve discovered that I don’t prefer using digital tools for organizing my life (nit: this is mainly due how frictions in various parts of our life shape our habits, I have a draft post about this that I plan to publish at some point). Of course, essential tools like calendars and a shared grocery list with my wife are crucial, but everything else just doesn’t work for me.

I wanted to go back to writing analogy. However I also wanted something that is highly modular and supports a few things, most important:

  • To Do lists
  • Weekly/Monthly Calendar
  • Notes for one-off projects
    • Like the design of my Block Lamp
    • Planning upcoming family trips
  • Goals
  • Habit Tracker
  • Commonplace book (a place to write inspiring quotes)
  • General Notes/Scribbles
  • Journalling
  • Sketching

Some of the bullet points may overlap, but each has its own purpose. Using a Moleskine notebook for planning doesn’t work because it’s not a planner. Alternatively, I could purchase a separate notebook for planning, journaling, and projects, which would result in multiple notebooks. Therefore, I need a flexible and modular solution.

Enter: Plotter Notebook System

Plotter Notebook System

There is a lot to cover. Let’s dive into it. (p.s.: This is not an Ad, I purchased all my notebooks myself, and Plotter didn't sponsor me. I like what they do, though.)

What is Plotter?

Plotter is a binder system that uses rings to hold refills. It’s not a novel concept; ring binders have been around for a long time, with brands like Filofax being popular. However, they tend to be bulky and primarily designed for planning and calendaring, rather than creative tasks like note-taking, journaling, or sketching. These kind of systems are also called "System Techo" and extremely popular in Japan:

The word “techo” derives from the Japanese word “techo (手帳)” which means a planner or notebook system at your hand that helps you stay organized. A system techo is a method of organizing various types of refills and paper types in a ring-binder system. The flexibility to remove and replenish pages wherever and whenever you want is one of its greatest appeals.  

You can be flexible with how you manage your writing and move out or change your papers around. And I'll come to that, but it enables a few workflows that are difficult to do with normal notebooks.

Plotter Notebook System
Plotter's are handmade in Japan

Plotter was created in 2017 in Japan, and then introduced in the U.S in 2022. It's only being sold in those two countries, but there a few ways to get them in Europe or other countries, which I'll explain later. Checkout the video from Takayuki Saito, the founder of Plotter, where he explains how Plotter was evolved and created:

Rings

Plotter’s unique feature lies in its small sized rings, measuring only 11mm. This size imposes a limitation on the number of pages that can be placed within the notebook, typically around 80 pages. While this might appear as a disadvantage, it actually serves as a constraint that encourages the user to carry only the most essential.

Plotter Notebook System

Once a certain point is reached, the pages that are no longer required can be archived (checkout my Zettelkasten blog post about a method you could for example use with Plotter) or thrown away. Plotter provides a refill storage as well. The Ring system is based on the design of Krause, which is also used by other brands. It's a well known brand providing high quality ring systems. Most companies get it from them. Therefore, you have the option to use papers (refills) from other companies as well.

Size and Leather Type

Before you begin using Plotter, you must select your Leather Binder, which will hold your papers (or what they refer to as “refills”). It’s a single piece of leather securely attached to Plotter backplates. The backplates are crafted from brass and coated with various gold colors, which vary depending on the type of leather used.

Plotter Notebook System
The Mini and Bible sized Plotter Binders

There are several sizes you can choose. As of 2025 these are from largest to smallest:

Plotter Notebook System
  • A5
  • Bible (In Japan the size Personal is called Bible)
  • Narrow
  • Mini
  • Mini 5

Each of these sizes comes with different leather options, each looking different, with different textures and colors. The most popular one is the leather called "Pueblo" with a gold-plated brass backplate. That's also the one I've picked up. However, Plotter releases limited editions of different leather types or backplates, so there is a certain type of collectibility if you're into it.

Refills

Once you’ve chosen the leather type and the size of the binder, the next steps involve adding the various accessories and paper refills. Plotter offers a range of accessories that enhance the user experience of their notebook system.

Accessory Refills

Plotter Notebook System

Let me first go over the non-paper refills. Here are some of those:

  • Lifter: It's essential a plastic divider and used for multiple purposes. Added to the beginning and the end, it protects the paper refills from the leather contours. It's also useful for dividing between different paper refills.
  • Band with Lifter: A lifter with an elastic band to keep the Leather binder tight.
  • Penholder with Lifter: A lifter with a leather pen holder.
  • Ruler Pad: A refill that can be easily detached/attached. You can use it as a ruler, protractor, line width chart, but also as a bookmark due a small protrusion.
Plotter Notebook System
  • Leather Ring Supporter: It reduces dents caused by the rings to the leather. It also cushions and protects the rings from unintended impact.
  • Fastener Case: A zipper pouch solution. It's made with a translucent material with a grid pattern with the right amount of transparency. You can quickly find what you need, but also hides your items in a subtle way.
  • Project Manager: These are designed to organize refills by themes with folders, or use them as an index.

Paper Refills

Plotter Notebook System

The Plotter Paper Refills are glued together like a notepad, and this allows us to carry them easily unlike other brands. Each Refill contains 80 pages. Here are the official paper refills you can put inside your Plotter Binder:

  • Plain
  • Dot Grid (5mm)
  • Grid (2mm)
  • Ruled (6mm)
  • To Do List (a handy paper refill with progress bar)
  • Monthly Schedule
  • Weekly Schedule

These are the official Plotter refills, but the beauty of this system is that you can also obtain them from other brands, or even create your own! Some brands include Filofax (a sister brand of Plotter), Knox, Davinci, Bindex, Ashford, Life, Graphilo, and Kamiterior. Filofax was quite easy to find when I was traveling in Germany, as it seems to be well-known in Europe.

However, since this is a Japanese system, the majority of refills can only be found in Japan. Fortunately, Amazon.co.jp sells most of these, which is how I managed to get some of them. For instance, I couldn’t find the weekly schedule for my Bible sized Plotter, so I bought the alternative from the Davinci brand. The papers from these Japanese brands are excellent, and most of them are fountain pen friendly, which I appreciate.

How do I use Plotter?

Now that I listed all the refills, let me show with photos how you could in theory create your own system using all these accessories and paper refills. Below I'm going to show a series of photos that shows how I my established my Plotter arrangement from scratch (I've used the photos of the Mini sized Plotter, however I use a Bible sized Plotter, the concept is the same though).

  1. First, we'll add the ring protector. This will make sure to protect the leather against the ring’s pressure. The rings will still cause some marks on the outside of the leather over time.
Plotter Notebook System
  1. After the ring protector, we're going to add the Fastener Case. This is the only way to add it, because once you start adding other refills, you won't be able to do it.
Plotter Notebook System
  1. Next we're adding the Lifter with pen holder. I think it makes the most sense to put the pen holder at the end, because the pen has a weight, and it makes easier to move around the other refills.
Plotter Notebook System
  1. After that we'll add the Band refill. I've changed the location a few time though afterwards.
Plotter Notebook System
  1. Next comes Project Managers. Since project managers aren’t frequently used, it’s logical to place them at the end of the Plotter Binder. I have several project managers. These are essentially folders to put several paper refills in one place. It helps organizing them. For example in my case, one of them is the Blog folder, where I store my draft ideas for upcoming blog posts (this current post you're reading was created from my notes!). Another one is called Habits and Goals, where I keep all my habit trackers and goals I’m trying to achieve (like the number of books I want to read in 2025). I plan to add a Vacation and Design folder in the future once I have a few notes.
  1. Now, let’s begin adding paper fills. This section is what I call the Notes section, where you can add whatever you like. I have a few plain and dot grids available. You can use these papers to write down rules, grids, or just plain notes. These papers are ideal for taking permanent notes or sketching/scribbling. Later, these notes might be transferred to a Project Manager.
  1. To separate the next section we'll add a plain lifter. This functions a divider.
Plotter Notebook System
  1. The second section has the To-Do papers. I use two paper's one personal and another one for work. I don't use a Today, Next, or Someday list. If something needs to be done it's go here. If that todo is a big item (i.e: blog post, design project, vacation trip), I start using a new paper from the Notes Section, and cross it from here. I use a dash - for new todo, convert them to a plus + for in-progress items, and finally put a circle if they are finished. This allows me to easily find all todo's I didn't started yet,todo's I've started and working on, and todo's I've finished.
  1. The first section of the calendar includes weekly or monthly calendars. I’ve been using Google Calendar for scheduling my life for years, and my wife also has one, so we can easily see each other’s schedules. However, there are a few features with PLotter that really help me stay organized. For instance, it’s much easier to plan a vacation when you can simply flick through the months refills. If I have a specific task to do on a certain date, I can easily add it to the calendar. While this section is not my most used, I deliberately place it at the front so that I can become familiar with it.
  1. I also add the ruler pad here. It has two use cases. The first one is as a divider. The ruler pad can be easily removed because the holes are created to be pulled and pushed. And it has a index allowing me to quickly jump to the today in my weekly if I need it.
Plotter Notebook System

Finally we established our complete Plotter system:

To recap, I have three sections with paper refills + project managers

  1. First section includes my Calendar with weekly refills
  2. Second section includes my ToDo lists for both personal and work
  3. Third section includes my Notes, these are used to create either permanent notes OR for random sketches/scribbles. Please read my Zettelkasten blog post for more info on permanent notes.
  4. Finally I have project managers at the end. These also have paper refills, such as goals or a list of things, which are either transferred here from the Notes section, or already here (such the list of books I've read so far).

Since I started writing this post, I changed a few things over and over again, but that's really why I love this system so much. For example here is a great video showcasing how someone uses the Mini 5 Plotter:

Unofficial refills

I have a few other non-Plotter refills that I've ordered from Amazon.co.jp and bought when I was traveling in Germany. Here you can see them for my Bible sized Plotter:

  • I got a refills with customizable indexes. Currently, I use basic color codes, but it enables me to quickly switch between my weekly, to-do, and notes sections.
Plotter Notebook System
  • The Fastener Case was to big for my use case and plan to use it when I travel. Hence I got a refill that allows me to use it only on one side. It also allows me to carry a brass ruler in 15cm width that comes very handy if I need it.
Plotter Notebook System
  • I couldn't find the Weekly refill from Plotter itself, so I got something similar from Amazon.co.jp, Davinci branded.
Plotter Notebook System
  • I use a 12-month-long calendar (double-sided, printed) that I can quickly glance at to see all the important events happening in the next six months (and the other six months on the other side). I’ve included the official holidays in the United States and Turkey, as well as other relevant events like company PTO days and school events for my children.
Plotter Notebook System

Pens I use with the Plotter System

Plotter’s paper is quite thin, but it performs exceptionally well with fountain pens. I’ve used my Lamy 2000 with a Montblanc Permanent Blue cartridge, as well as my Kaweco Liliput with a Lamy Short Blue cartridge.

Plotter Notebook System
The Mini sized Plotter pairs exceptionally well with the Kaweco Liliput.

I’ve attached a Pilot G2 (0.7mm) to my Bible-sized notebook, and the Kaweco Liliput to my Mini binder. I believe the Pilot or similar gel pens are ideal for the plotter. They’re smooth and ready to use. However, when I have my Plotter notebooks at my desk, I always prefer my Lamy 2000. All these pens perform exceptionally well.

Plotter Notebook System
The Bible sized plotter paired with the Lamy 2000 fountain pen.

The fountain pens are slightly smoother and glide more effortlessly. If you’re concerned about scratchiness or resistance, there’s none. However, there are different refills available from various companies, so you can always find one that suits your preferences. On the other hand, I’m not a fan of rollerball pens, so I can’t comment on their performance.

Pros and Cons

How does it feel to use the Plotter? There are a few things that I love, and a few things that could be better. For one, the 11mm Ring system is really good if you like a minimalist and lean notebook. The design prevents the notebook to become bulky, however it also means that if you need more paper or more capacity you're limited. Whether this is an advantage or not is up to you.

The Bible-sized planner, is a delightful to carry. Its size is neither too big nor too small, and I believe it offers an ideal amount of space for various tasks. While I would require more space for journaling. Fortunately, Plotter provides an A5-sized binder, which is larger than the Bible-sized. So there is an option if I ever need one.

Plotter Notebook System

I love that I can arrange the refills according to my needs. Notebooks like Plotter are the ultimate modular notebook system in my opionon. Nothing comes close to it. There are other brands that embrace modularity, such as Traveler's notebook, Roterfaden, X47, etc ... However none of them can give the flexibility of a Ring notebook. The rings also allow us to attach custom refills. The sky is your limit.

Another small issue is that the paper won't stay fixed. Because they are attached to the rings, they wiggle a little bit. It didn't become a big issue, but it doesn't feel like a proper notebook because of that. Other than that, the rings never bothered me so far, in a very rare occasions did I felt that the ring was annoying I would take out them (i.e: when I was drawing lines with a ruler), but the advantages outperform the disadvantages.

Plotter Notebook System

I think the leather binders for Plotter are a bit pricey for a notebook. And if you add up all the refills, it quickly becomes a lot. It makes it a bit of a luxury item, unfortunately. I wish they had a more affordable option, maybe with a different fabric? The same company that makes Plotter also has other brands like Knox and Traveler’s Notebook that are much cheaper. So, I think they put Plotter in a higher-end category for people who value quality over quantity. But for me, it’s totally worth it. The leather is a tad better than the Traveler’s Notebook case, which is already a very good leath. Again, whether it's worth or not, that's up to you.

Plotter Notebook System

The paper refills are of high quality and very smooth. However some of the refills, such as the dot and grid are hard to use because the dots or lines are barely visible. I wish it had a better contrast. They are very thin, but the quality is there. This is the same company (DesignPhil) that also makes Midori papers, so they know one or two things about papers for sure.

The backplate is shiny and looks great when placed on a desk. However, it has sharp edges that require caution when placing it in a bag (or even on a desk). I’ve noticed some people on Reddit using sandpaper to smooth the edges. I might do the same.

How to order

If you reside in the United States or Japan, your options are quite convenient. You can conveniently order Plotter directly from Plotter U.S.A. Alternatively, you can purchase Plotter from various stationers in Japan, including their online store. However, things become more challenging if you’re not located in either of these countries (like me). I went over the distributor list and identified the stationeries that carry Plotter. The complete list is available here: https://plotterusa.com/shop-list/

I visited every single stationery website, even emailed some of them, and discovered that only a few would ship items overseas. Yoseka Stationery, based in New York, was one of them. So, I ordered everything related to my Bible-sized plotter from there to a friend in Germany. I paid extra shipping and customs duty. Fortunately, at the same time a friend’s friend in the U.S. was willing to also bring a few Plotter-related items. Therefore, I ordered a set of Mini Binder + refills from Dromgoole’s, based in Texas. Eventually, I got them delivered to Turkey (which is a whole other story).

Plotter Notebook System

I later discovered that I’m able to buy refills from Amazon.co.jp and ship them to Turkey directly. It’s not very efficient due to the 30 euro limit (everything greater than that requires me to go through an elaborate tax process involving lots of papers). But it’s there if needed.

Lastly, there are a few Japanese merchants on eBay that sell Plotter refill and binders. They also ship to Europe or any other country if you're interested.

Verdict

Plotter really helped me organizing my life and writing down lots of things in a convenient way. The modular system made it easy for me to try out different use cases and eventually adapt something that I really like. The leather is beautiful and feels good in the hands, the design language and refills have been thought carefully. You can see that a lot of care and thinking has gone into developing it. There is a huge community over at YouTube and Reddit sharing tips and tricks, and I've learnt a few things from them.

Plotter Notebook System
The Plotter compared to my other notebooks

Plotter made my life easier by providing a convenient and organized way to jot down various ideas. The modular design system allowed me to experiment with different use cases and eventually I found a system that truly resonated with me. The leather material is beautiful, and the feel in the hands delightful. The design language and refill options are thoughtfully crafted. It shows the attention to detail and thoughtfulness that went into developing this product. The Plotter community on YouTube and Reddit is incredibly active, sharing valuable tips and tricks, and I've learnt from them a few things.

Plotter Notebook System
The Complete Plotter System.

I plan to stick using the Plotter for the foreseeable future. I’m considering getting an A5-sized Plotter for journaling and planning, or a Mini-5 for carrying a pocket-sized Plotter with me. However, I haven’t made a final decision yet. For now, I don’t use the Plotter for journaling; instead, I use my Molesking or Leuchtturm notebooks. However, I might also use the Plotter if it makes sense for my needs. (I also have a Traveler’s Notebook system with a few refills, so I’m planning to give it a try for journaling. I have a feeling it might be better suited for long-term writing compared to the Plotter, but we’ll see.)

Thanks for reading if you’ve reached this point. Please don’t hesitate to reach out if you have any questions. You can email me at the address provided in the about page or send me a direct message on Instagram using my handle, which is also listed in the about page.

]]>
<![CDATA[The Zettelkasten note taking methodology]]>https://arslan.io/2025/01/30/the-zettelkasten-note-taking-methodology/679b60148d09de00012610e7Thu, 30 Jan 2025 12:10:52 GMT

I've recently finished the book "How to take Smart Notes" by Sönke Ahrens. It's describing a note taking methodology, used by the famous scholar and researcher Niklas Luhmann, and later popularized with the rise of software apps like Obsidian, Logseq, and Room Research.

Luhmann never talked about his methodology explicitly, but he wrote more than 70 books and nearly 400 scholarly articles published on a variety of subjects, such as economy, politics, art, religion, ecology, mass media, and love. Because of this, the University of Bielefeld started researching the methodology in more detail. What exactly makes this method so good?

People assumed Luhmann was a genius (which could be), but the productivity came from his note taking methodology. It's called Zettelkasten, based on a set of crates/boxes with slips (Zettel in German). It's a knowledge retrieval system, based on notes taking by you, in a specific way.

TL;DR:

All your thoughts and notes are temporary. They become permanent notes when you rewrite them in your own words, attach a unique ID to it and link these notes if they are connected. Once connected, the notes guide you to new thoughts and let you find quickly past thoughts.

Let me explain more about the system.


The Zettelkasten note taking methodology

What I've found fascinating is how the system was created. For first the whole idea is built on the things we should forgot. You as a person should never remember anything, instead you have to delegate it to your notes. And the second important part is, to create notes that are used from bottom-up instead of top-down. The system discourages you to use projects or folders.

All the notes are loosely put inside a box, but linked together via a unique ID system (you can use whatever your want). Each note has a number (a unique ID), which are incremented based on whether it's a new concept or linked to the previous note. You'll find your starting point by using an index, which tells you which note to find where. That's your initial starting point, after that you follow the notes. It's one of the earliest analog models of the Hyperlinks we know.

How does one start collecting notes:

There are three different note types:

  • Floating/Fleeting notes: These are your everyday thoughts. Thoughts that come to your mind while you're walking, or taking a shower. Thoughts that you talk with your friends. The goal is to immediately capture this. Write it down somewhere.
  • Consumption notes: These are notes while we consume contents, such as Books, Articles, Podcasts, etc. (They are called Literature/Reference notes in the book, but I think consumption is a better word). Things that can be consumed, and you want to remember are part of this. Everything that has a start and beginning, and that can be "referred" in the future. The author discourages for example underlining important details in a book, instead take a note with a reference, you're going to use that later. Three things are important though. They should be concise (short and on point), they should be written by our own words, and lastly they should have a way to link back to the source (article name, book name and line, podcast link with their minute/seconds.)
  • Permanent Notes: This is where our ideas and information ends up. We combine fleeting and literature notes, and create new Permanent notes. After creating a permanent note, you throw away the old notes. One important aspect here is, we should write it in a way that someone with no context can understand it. Never copy the temporary note directly to a permanent note. Lastly, permanent notes can be linked together. This is the main idea of the Zettelkasten system. To recap: A Permanent note has an ID/Number that uniquely describes the note, the content of your idea in your own words, and lastly any reference (no reference means it's your own thought).

That's the main gist from what I've understood by reading the book. There are a few details (such as how to do the numbering). Reading the book is highly recommended if you're interested in this system.

Thoughts

The Zettelkasten note taking methodology
Source https://commons.wikimedia.org/wiki/File:Zettelkasten_(514941699).jpg

I like the idea of floating ideas and literature notes becoming a single permanent idea. I agree that writing a note isn't that useful. What are we going to do with a few lines of thoughts?, or quotes from a book that is shelved in good knows in which page of your notebook. A few months later you won't remember anymore what you note you took.

I immediately thought about my blog. When I write a lengthy blog post, it's a bunch of temporary notes I take and later I go over it, and write it down in my own words. This blog post you're reading is a perfect example of it.

The system encourages you to "permanently" store your notes in a way that helps you to grow and build. It's like growing a tree in your yard. Instead of throwing thousands of seeds around and hoping one of them will stick around, the Zettelkasten approach wants you to tend and grow a big tree with leaves, that is able to grow fruits (this blog post is a fruit you're currently enjoying!). Where you can learn with time, and build on top of it your knowledge empire.

Second, the system's main selling point is that the more permanent notes you have, the easier it'll be to find the right connections, and come up with a good idea. Creativity is never born out of air, and creatives are inspired by other ideas. That's how life works. Zettelkasten allows us to build on top of this core concept.

Most people use tools Digital tools like Obsidian, Logseq or Room Research which brings the whole concept to a whole another level. (Together with the book became Zettelkasten popular amongst people) However that's the part I'm not sure I want to be a part of. Lately I'm more and more inclined to use analog tools. There is something magical writing in an analog fashion. Second, I feel the system to be more suited for Academics who do research, or who always have to work on new things constantly.

Third, it's not a good system for journaling your life. As an example, if I want to read how I felt a year ago, or what happened during that time, Zettelkasten would be a poor system, because notes are not sorted historically (the digital tools allow you to retrieve the notes in an historical way, but on paper that wouldn't be easy unless we write the date we create a permanent note).

Verdict

The Zettelkasten note taking methodology

The Zettelkasten system is a great concept for when you are constantly working and creating academic/technical work on a constant basis. The linking system is perfect. Back then, the world didn't have hyperlinks, but software has changed that. The only caveat I could find is that it requires discipline to write and constantly create permanent notes. If you can do it, I think the benefits are great; however, it might not be for everyone. 

For me, I'm going to take the good (or the things I believe are good) parts in my note-taking journey. For example, the idea of creating permanent notes is great (which I partly do in the public via blogging). I think having a bunch of book quotes is indeed not helpful, but summarizing them and making them accessible is a better outcome. I should do it more.

]]>
<![CDATA[My first lighting design: Block Lamp]]>After designing a few gadget-related projects, I decided to take on a new challenge: designing a lighting from scratch. Lighting is an area of fascination for me. I have an ongoing draft post about the various designer lamps in my home that I plan to publish soon. In the meantime,

]]>
https://arslan.io/2025/01/25/my-first-lighting-design-block-lamp/67915f458f81d600012e4e3aSat, 25 Jan 2025 08:36:56 GMT

After designing a few gadget-related projects, I decided to take on a new challenge: designing a lighting from scratch. Lighting is an area of fascination for me. I have an ongoing draft post about the various designer lamps in my home that I plan to publish soon. In the meantime, let me share my latest work.

I was curious to explore something truly unique. While there are countless 3D printed lamps available, they tend to resemble one another. Of course where is the joy of creating something yourselves. And I like to push my limits. I had a different vision in mind—something bold and industrial that could be utilized in various ways.

My first lighting design: Block Lamp
The block lamp can be used on a desk or side table as well

My espresso bar has two shelves, which is the only poorly lit area in my office room. So, I had to design something versatile that could be used in multiple ways:

  • Ambient lamp, where the light reflects from the wall
  • Ambient lamp, where the light reflects from the desk
  • Task lamp, where the light hits the objects directly.

After several iterations, I come up with the "Block Lamp"

The Block lamp has several distinct features, and appears quite different from various perspectives. It's a single, unassembled piece. There are no glues, bolts or any parts that needs to be hold together. This significantly extends the lamp’s lifespan. Initially, the plan was to use CNC-machined aluminum in the long run, but to achieve that, I wanted to test its durability and usability by using it in my office for a few months (or even years).

My first lighting design: Block Lamp
The front handle allows you to carry, pull, push or rotate the Block lamp.

The handle on the front of the device is designed to be pulled, pushed, and even rotated. It's an invitation to the user. There’s a hole behind the handle, which is small enough to prevent light from leaking out but large enough to highlight the handle.

The base is heavy. While working on it, I ensured that the part had 95% infill to create weight. Normally, people use sand or steel infills, but I wanted to experiment with using the filament as an infill. Surprisingly, it worked perfectly fine.

My first lighting design: Block Lamp

Some friends have asked about a portable version of it. The design is perfectly fine to be converted to a portable lamp. The front handle allows you to carry it easily as well. And the base is actually a placeholder for a battery. So when I designed it, I already made sure it can be also converted to a portable lamp in the future. However, I don't like battery-powered lamps because you have to constantly charge them.

My plan is to continue working on lamp designs this year. I also plan to work on several other things. Looking forward to share more. For now, you can see all my past and current works so far from my "Works" page.

]]>
<![CDATA[Four years at PlanetScale]]>https://arslan.io/2025/01/20/four-years-at-planetscale/67666c37a328750001424f2dMon, 20 Jan 2025 15:45:38 GMT

It's been four years since I joined PlanetScale. It's also the longest I worked for a company (second is DigitalOcean). I still can't believe how time flies since I accepted the offer to join PlanetScale.

I haven’t shared any of the projects I’ve worked on so far during this period. My LinkedIn profile is essentially empty, and I received over the past years quite a bit questions about my work and responsibilities. In the past I would share a lot about some of my open source projects, but since 2018 I also stopped doing significant work on that area. So I thought now is the best time to reflect that. Second, I must admit I'm pretty bad at remembering what I did in the past, unless I write it down. So it's a convenient excuse for me and share some my past experiences.

Before I start, let me short explain what PlanetScale is and what we do. We offer an extremely, horizontally scalable MySQL database. Straight from our homepage:

PlanetScale is the world’s most scalable and reliable OLTP database. Built on Vitess, our cloud platform is trusted by some of the world’s largest brands.
Four years at PlanetScale
Some of our customers

Before we start, I’d like to shed some light on our work culture. While I’m speaking from my perspective, it’s important to acknowledge that our projects are often the result of cross-collaboration with multiple teams. Any person would know that projects of this magnitude require the collective efforts of multiple engineers working together seamlessly. Hence, I want to clarify that without the help and collaboration of my coworkers, most of it wouldn't be possible.

Second, PlanetScale is a highly flat and autonomous workplace. Almost all our engineers are senior-level professionals with decades of experience in scaling products to millions of users. Employees are accustomed to fixing and implementing workarounds independently. They devise solutions, convince others, and complete projects from start to finish. They require minimal guidance here. Of course, we do planning and have weekly meetings or quarterly alignments. However, within the overall structure, it’s largely autonomous. I know this isn't for anyone, but if you're someone that worked like this before, you would be very happy.


First Year (2021)

My first year, I joined the team that was working on Product side and everything that touches it. So it's all the UX/UI bits, Frontend, our Rails app (which also provides the Public API), the CLI and many other things that doesn't come to my mind. Even though I'm good at building products, I'm not exactly the "Frontend" person you would call. So when I joined, I worked on the CLI and features that needed Go and backend expertise.

Four years at PlanetScale
Our UI showing the various components of a database.

We already had a CLI (we named it pscale), but I immediately started improving it with lots of internal changes, refactoring to make it more testable, adding a release pipeline via Goreleaser, making sure everyone on the team could release a new version in SemVer with just pressing a button. It's been 4 years and we still use the same exact foundation I created. It's so easy that everyone on the Surfaces can merge a PR to our CLI repo and release a new version. That's a huge productivity boost. All this is open source and you can find them in our CLI repo.

Next I worked on the pscale shell and pscale connect features. Once authenticated with the our CLI these features would allow us to securely open a mysql CLI shell to our Database, or would open a secure tunnel to our DB on localhost, so if you want you could connect with any tool you wanted (e.g: mysql -u root -h 127.0.0.1 -P 3307). Of course this simplicity was implemented with several backend additions, such as a Go reverse proxy that was able to parse the MySQL protocol. This was one of my biggest projects that year. We used it for several years until our Edge team replaced with a far more superior implementation. It was good for what we did at that time, and with all good things, it was time to replace it with more performant implementations, allowing us to expand our products with new features.

Since I've joined, I also started working on other Go services that weren't directly related to the Product Team. I started making a few contributions, mostly making it more Go idiomatic, adding tests, improving the state of CI, etc.

Eventually, this led to my moving to our partner team. I contributed so much that I was at some point the diplomatic person between these two teams, so it was very easy for me to transition. The new team was a lot more aligned with my skills and past work experience. It was all about Go RPC services, distributed systems challenges, and running workloads on Kubernetes, via an Operator (eg: using controller-runtime). Since then I'm with my current team (and currently the oldest member of the team). We're in the cross section of our Product Team and our Infrastructure/Database (Vitess) teams.

After joining the new team, I took on various responsibilities. I significantly enhanced our observability capabilities by adding tracing, improving error and panic reporting, and improving our RPC service with numerous small, yet impactful improvements.

One of the latest projects I've done in 2021 was to implement a distributed lock based on DynamoDB's conditional writes. We use the distributed lock in our control plane for certain actions that require diligent and care. Of course our Kubernetes operator is completely idempotent, but there were are few internal services requiring us to be cautious. I cannot share what I've did there, but Clever has a similar open source project if you're interested: https://github.com/Clever/dynamodb-lock-go

Second Year (2022)

This year was the year where I slowly deep-dived into how Vitess works en grande. At the beginning, I was working with our control plane RPC service, but with time, I also started taking a stab at our Operator. I had extensive experience already with Kubernetes due to my past work at DigitalOcean. I was not only on the founding team that built Kubernetes at DO from scratch, I also worked on several CSI-related projects, even wrote one of the longest and most detailed blog posts about how to implement a CSI Container Storage plugin.

The biggest challenge here wasn’t Kubernetes, but rather another CNCF project: Vitess. Although we’re a database company, I had never worked with databases before. However, I had been familiar with Vitess for a long time, and eventually, I had to make significant changes and overcome my fears. The best way to overcome such challenges is to actually take on a difficult task and tackle it head-on. This advice has been repeated to me countless times in various literatures. Whenever faced with two options, one easy and one challenging, always choose the latter.

Four years at PlanetScale

So hence, my first big project was to implement the deployment and management of multi region clusters. I started working on making our Databases to work across multiple regions. This was a big project for the company, and also probably a tipping point for me at PlanetScale. I had to finish and implement it. There was no other way.

Vitess already is capable of supporting multi region clusters, but our control-plane wasn't able to spin up databases that would cross multiple regions. When we talk about multi regional clusters, database experts might have several questions. Is it multi write? Does it only support reads? Does it support fail over? What happens if a region goes down? etc... Our first goal was to implement multi region clusters with a single primary region, and several other read-only regions.

Four years at PlanetScale
PlanetScale allows you to shard your database easily from the UI.

The biggest challenge I had to find out was, how to make operators coordinate between each other, without using any state? Each operator in each region only takes care of databases created in their region. They don't know anything about other regions. Also all our databases, once created, are self-sustained. So they don't have any dependency on any service. We successfully shipped the project after months of work, and we released it in May 2022: "Introducing PlanetScale Portals: Read-only regions" (as a reminder, this project spanned multiple other teams, so I worked with them closely, every team worked on their side of the projects, I don't have to re-iterate it, but it was one of biggest cross-org projects we shipped as a company)


Another big project I worked on in 2022 was autoscaling disks of the DBs. Initially, one of my co-worker started the project, but midway through the project, I took over it. I completed it and released it to production afterwards. This project was also challenging, not like the previous one, but we had to be cautious not to mess up with our customers’ databases. Hence, we slowly rolled it out to the fleet.

The idea here is simple, if the disk usage is over a given threshold, resize it to a bigger size. What was the challenges:

  • Because of the operator's idempotent nature, we had to make sure that once a disk was resizing, it was resized (finished) and not-retriggered accidentally. So we had to cautiously make sure to sync the state between the desired and actual value. Because PVCs (i.e: AWS EBS) don't immediately resize, there were a few edge cases we had to take care of.
  • AWS only allows us to resize every 6 hours. Once resized, the only way to grow a disk is by recreating it. We don't want to recreate unless we have to (it's possible by creating a new disk with larger size, start a Replica, and then promote it to a Primary, delete the old Replica), so it was important to pick up a good resizing value. Too low, the and the customer might reach the disk size earlier than we anticipated, too large, and we would spend more money than we want to.
  • Disks have certain limits. For example you can only resize up to 4TB at PlanetScale. So we had to be extra careful not to resize it in a way that would exceed the limit. More on this later.
  • Coordination between replicas. Once a disk was resized, it had to be the same across all replicas and regions. Because eventually the replication will catch up, and in theory all disks will have the same disk usage (in practice they might differ, especially if there is replication lag for example).

Finally, beside working several projects, I also worked significantly on our CI/CD architecture for our Control Plane RPC service. It was getting too slow, and becoming unmaintainable. I went over it and completely rewrote our E2e tests, making them 3x faster than previously.

I also worked on the Boost project. It was a caching layer for the database. It' s deprecated, and we no longer provide it as a product. I wasn't heavily involved on our end, but kickstarted the project to deploy the components needed for the database to work with the caching layer. My friend Matt Layher was the main person involving with Boost on our end, and he then finalized, implemented the main logic (API and several other things ) and shipped it to production.

Third Year (2023)

PlanetScale provides an import tool in the dashboard that allows you to painlessly import an existing internet-accessible MySQL or MariaDB database into a PlanetScale database with no downtime. In 2023 I worked on several improvements regarding database imports. One of them was the ability to support importing multiple external databases at once. One of our largest customers had a need for it to reduce the load on their primaries.

Next up, I worked on improving our current multi-region clusters. Initially, when I implemented it, it had a few shortcomings. These were mostly internal implementation details (not user-facing). One of them was a big blocker for a feature we wanted to add later: Regional Failover. The idea here was to be able to convert an existing Primary region into a Read-only region. Even though it looks easy, making sure all the intermediate data structures had the correct state, without zero downtime, was a big challenge. Once that was finished, we also worked on supporting Read-only replicas in the same region as the primary (nit: the main bodywork was done mostly by my coworker Alex Noonan, but I tagged alongside). This was a specific use-case for a large customer. Most of these features were advanced needs, mostly needed by truly hyperscale companies. They had vastly different requirements compared to a small MySQL shops.

Building on top of this momentum, my biggest work in 2023 was actually implementing regional failover between regions of a multi regional cluster. If you have read so far, you would know that we added support for Readonly regions. Back then your Primary region was static, and you couldn't change that. So you couldn't switch your Primary Replica say from us-west-2 (Oregon, US) to eu-central-1 (Frankfurt, DE). This feature is only available currently for our enterprise users. This was another tipping point for me. I worked with the Infra team to implement a global etcd cluster spanning more than two regions. Beside that I had to make sure that each Kubernetes operator could handle the failover, even though none of them share data between each other.

Other works that I remember working were adding concurrent shard rollouts and auto balancing Replica's across zones. Let me explain these to you.

A Vitess Database (we call it keyspace), might have one or multiple shards. If there are changes to the database that needs to be rollout across a single cluster (i.e: MySQL version upgrade), the operator would update each shard one by one. Until now this was never an issue. But some customers have hundreds of shards for a single keyspace. We're talking about hundreds of replicas. So rolling out a simple MySQL version upgrade will take quite a time. I made the rollout progress to be concurrent, which can be also configured up to certain limit. So it works like a semaphore. This allowed us going forward upgrading keyspaces significantly faster.

Four years at PlanetScale
By default every shard gets three replicas.

Lastly, auto-balancing Replicas across zones. By default, every cluster at PlanetScale receives three replicas. One of them is the primary, and the other two are referred to as replicas. (I mentioned three replicas because, by default, everything is a replica. However, we can promote one of them to a primary, which gives it a special name.) For a brand new cluster, if the cluster is configured to be deployed to three Availability Zones (AZs), we evenly distribute them. But with this kind of systems, anything can happen that might affect the distribution of the replicas. The underlying node might die, there might be network issues, the replica might become unhealthy, or we might decide to increase the number of replicas (or scale down). So we constantly add and remove Replicas from the system.

Initially, whenever we added a new Replica to an existing cluster, we added it to the most empty Availability Zone (AZ). However, when we expanded the number of AZs or changed the configuration, it would skew the distribution. Once the distribution was skewed, it became challenging to target a specific replica and move it. This is because replicas in our system lack any ordering. They have random names, and their availability can fluctuate. We treat them all the same. This trade-off enables us to scale such a system to its extreme limits.

I worked on implementing a self-balancing algorithm that would require a numerous number of inputs and evenly distribute the replicas across AZs. During the distribution, the algorithm makes sure to never move a primary (unless needed). Sometimes we want to move it, so it's configurable. It also makes sure to not pick up new replicas and instead pick up old replicas (because a new replica might be already put to the correct AZ). There were also very weird distribution issues, here is an example. You can see in us-east-1a there are two replicas:

replica1 in us-east-1a
replica2 in us-east-1a
replica3 in us-east-1b

Now there are actually two ways of distributing it, you could change the replicas:

replica1 in us-east-1a
replica2 in us-east-1b
replica3 in us-east-1c

This requires two replicas to be teared down (replica2 moves from us-east-1a to us-us-east-1b, and replica3 from us-east-1b to us-east-1c). Or you could change it to:

replica1 in us-east-1c
replica2 in us-east-1a
replica3 in us-east-1b

Here we only moved replica1. This is more efficient because it only requires a single replica to be moved, instead of two.

(nit: I've found out that to properly distribute evenly, with certain constraint requires either dynamic programming or a recursive function that evaluates the output against the input until all replicas are sorted. Just iterating over the existing set of replicas won't work)

Fourth Year (2024)

In 2024, I continued working on various improvements and features. One notable improvement was a new addition to disk autoscaler, which allowed us to shrink disks when necessary. This feature enabled us to scale down disk sizes if customers reduced their data usage. For instance, when customers decrease their data usage, they no longer require a larger disk. 

The other improvement we made was the algorithm we used to scale up in case we wanted to increase the size. Previously, we would increase the size in constant increments. For instance, if the disk was 50GB, we would double its size twice, resulting in a 100GB disk. However, for larger disks exceeding 500GB, we would add 250GB (half of its current size). The issue with this approach is that it’s challenging to determine the appropriate scaling factor. Doubling the size isn’t feasible once the data growth slows down significantly after a certain point. 

When I looked at it, I could see a pattern. We want to grow very fast, but slow down the bigger the data becomes. So there must be a grow function that exponentially grows, but then switches to a logarithmic scale. Upon some research I've found it, and it's called "Logistic Growth". It's a function that grows exponential but slows down like a logarithmic function. It's used for population growth (i.e deers, bacteria, etc.) where there is an initial size. Initially they grow fast, but then slow down because they are reaching the carrying capacity of their environment. So if you want to say scale something very aggressively first, but slow down when you reach a certain limit, this model is something you could use. The carrying capacity in our case was the maximum disk size limit (e.g: 4TB).


However, the most significant work I completed in 2024 was working on our Etcd clusters. (not the one that Kubernetes uses, but the one that Vitess uses.) Vitess employs a service called Topology, which serves as a distributed locking mechanism and a DB for storing various metadata about the cluster. While there are numerous implementations of Topology, the common implementation is to use Etcd. 

By default we use Etcd with 3 nodes. And we have hundreds of etcd clusters. The problem with 3 nodes is the failure tolerance. An Etcd cluster can go down if it loses its majority. With a cluster size of 3, we can tolerate only a single member failure. If two of the nodes are down, we lose the majority and the only way to recover is to create a Etcd cluster from scratch using a previous snapshot.

To improve the situation, I updated all Etcd clusters from 3 to 5 members, allowing us to tolerate up to two failures. In addition to that, all Etcd members are distributed across Availability Zones (AZs), providing us with ongoing operation even if an AZ goes down. All etcd member containers have been updated to use internal AWS and GCP image registry caches, allowing us to avoid interruptions from public registries. On the operator side, the operator is now smarter and safer while rolling out Etcd members. It manages the etcd membership itself, allowing us to simplify rolling out members without having to remove/add members to the etcd cluster manually. All these changes resulted in a more stable and resilient system that is easy to maintain. And of course, after months of work, I wrote an extensive FAQ and How-to documentation and shared my findings with the team, making sure the knowledge is preserved in the future.

Finally, even though we were in a much better position, there was one more thing. I wanted to also make sure that we could reinstiate an Etcd cluster, even if it completely lost all their members. Etcd has an extensive document that describes how to recover from a disaster: https://etcd.io/docs/v3.5/op-guide/recovery/ But it wasn't easy to apply these guidelines to our internal systems, because most of what is described isn't as easy appliable as it looks like. For one, we cannot just run a random etcd command against an Etcd cluster. Everything is secured and only certain services or entities with access can run them. So just around Christmas, I did several experimentations on how we could recover and added several improvements that allows us now to recover from a disaster. Now I could rest in peace.

Verdict

Four years at PlanetScale
PlanetScale values

Wrapping up, there were many, countless other things I could probably add here, but looking back I realized that I'm lucky to be working in such a challenging environment. All my coworkers are very good at what they do (thank you, folks!), they give me confidence, and I know I'm talking to genuine and smart people. It's rare to find a place you can enjoy, but for some, it's also important to push their limits whenever they can. And you can't do that alone; you need to have support.

One crucial aspect was that my manager and leadership consistently believed in my ability to work on projects. They trusted me to tackle significant challenges, and I am grateful for their unwavering support. Let’s see what the upcoming year 5 brings. We have an array of exciting new improvements and features in the pipeline. I'm looking forward to showcasing them to you all.

]]>
<![CDATA[New homepage design]]>I changed my website’s design. I'm using the previous design since September 30, 2022 (when I moved to Ghost from Cloudflare Pages). The previous design served me well for the past two years, but it was time for a change. Firstly, I wanted to create a

]]>
https://arslan.io/2024/11/04/new-homepage-design/6728aee437da150001161613Mon, 04 Nov 2024 15:00:14 GMT

I changed my website’s design. I'm using the previous design since September 30, 2022 (when I moved to Ghost from Cloudflare Pages). The previous design served me well for the past two years, but it was time for a change. Firstly, I wanted to create a leaner landing page, and secondly, I wanted to highlight some of my industrial design work.

Here is the new design:

New homepage design

It also supports a dark mode. To change the theme, simply click on the moon or sun icon:

New homepage design

I especially like the section that showcase my designs and works:

New homepage design

Of course all my writings are still available. You'll see some on the homepage:

New homepage design

But there is also a dedicated arslan.io/blog section where you can see all my writings:

New homepage design

I built my new blog (see: Kyoto) on a paid theme, so I’m still making a few tweaks, but it’s ready to be viewed.

Let me know what you think of the redesign!

]]>
<![CDATA[How I Designed a Dieter Rams inspired iPhone Dock]]>https://arslan.io/2024/09/23/dieter-rams-inspired-iphone-dock/66eeb9e9080c1a0001478cc4Mon, 23 Sep 2024 07:50:34 GMT

Dieter Rams and his friends (Dietrich Lubs and Ludwig Littman) designed many great looking alarm clocks. I'm looking for one for a long time. Because I have many books about Braun (the company) and Dieter Rams, here are some of their designs:

I have been looking for an original DN 40 for a long time. As many of you know, I also visited the annual Braun Collector's Fair to source this alarm clock. It's hard to find one in pristine condition.

However, there is another problem. This is what my current bedside table looks like:

How I Designed a Dieter Rams inspired iPhone Dock

If I put the DN 40 here, the bedside table will be crowded. For one, I like to have a watch that shows me the time when I sleep or wake up. I use the tray to put my hearing aids, watches, pens etc. Otherwise, they might get damaged or fall off. Third, I have an iPhone MagSafe charger. The problems I have with this setup:

  • They take up a lot of space
  • It's hard to put and take my iPhone
  • It's crowded, especially at night, and knowing where the objects are is hard.

So, a few weeks ago, I watched a YouTube video that changed my perspective on iPhone's Standby mode:

What a great video. Anyway, I immediately 3D printed this design:

How I Designed a Dieter Rams inspired iPhone Dock
Scott Yu-Juan's and Overwerk's Nightstand design, inspired by Braun DN 40

The DN 40 is the Alarm clock Scott and Overwerk were inspired of. However I had a few issues with the inspired design:

  • It's too big and still takes up a lot of space. This is no surprise, of course, because the iPhone's screen is big.
  • It replaces my charger and desk clock, but I still have to use my tray.
  • You need an adhesive for the MagSafe charger.

Over the years, Braun went through many turbulent years , but lately their Design department releases great products. They of course released a newer version of these alarm clocks, the BC21:

The new design reflects the current modern era better in my opinion. It's slick, slimmer and has a multi-purpose form. It's not only a wireless charging pad for your phone, but also an alarm clock.

I had a muse at that moment, and finally came up with an idea to solve some of my issues. I decided to combine all my objects (tray + charger + clock) into a single one.

So I started taking notes and created the first, basic prototype:

How I Designed a Dieter Rams inspired iPhone Dock

I also had a leather valet tray lying around, and I thought I could use that as an insert so when I put my watch, it's protected by the rough 3d texture:

How I Designed a Dieter Rams inspired iPhone Dock

After a few hours of design + a few hours of printing I had my first initial prototype

How I Designed a Dieter Rams inspired iPhone Dock

I nailed the valet part, but the MagSafe part didn't look nice. So I started iterating, and had many versions of the same design, each time with a more refined shape. Here is another one (I abandoned it later):

There were many small details I had to figure, for example the iPhone doesn't use a circle for their corner radiuses:

How I Designed a Dieter Rams inspired iPhone Dock

Instead the iPhone has multiple G points and curvatures:

How I Designed a Dieter Rams inspired iPhone Dock
From the Accessories Design Guide, on the top you can see that the corner profile of an iPhone has multiple corners. This is also called a G2 Curvature.

After fixing it, I played around with a case that would wrap the phone:

How I Designed a Dieter Rams inspired iPhone Dock
A prototype with corners that would match the iPhone Silicon Case.

Here is a version I came up with, which I used for my future iterations:

This design was not only looking better, also was heavily inspired by the BC21 (which was inspired by the DN 40). I printed a version of this and shared it on the internet:

How I Designed a Dieter Rams inspired iPhone Dock

Some photos how the tray is being used:

And here is how you take out your phone from the dock:

Of course, no design is finished. At least there are still things one can improve here. And I wasn't quite yet happy with it.

I went back to my CAD app and started working on it. During the iterations, I shared my designs with a few friends and asked them what they thought about them as well (thank you, Adem).

After a few tweaks, I came up with a design that was more rounded. I also printed with a more colorful color, as an ode to Braun 550 Hair Dryer and Jaro Gielen's "Soft Electronics" book.

How I Designed a Dieter Rams inspired iPhone Dock
The Soft Electronics books shows the various electronic gadgets created in the 60-80s. One of them, the Braun 550 Hair Dryer can be still found in good condition.

This particular design stuck with me. Initially I was skeptical about it, but the more I looked at it, the more I loved.

How I Designed a Dieter Rams inspired iPhone Dock

Of course because I 3D Printed it with a PLA filamanet, it's not as shiny and glossy compared to actuall electronic devices. People use acetone and various solutions to make it shiny.

How I Designed a Dieter Rams inspired iPhone Dock

What I like about this version is how more comfortable is to hold this. It has no sharp edges anywhere

How I Designed a Dieter Rams inspired iPhone Dock

Now the base design was finalized, I made a few more changes. The sharp edges at the front are removed, the tray insert is also less sharp.

However the most obvious addition was the cable canal optimization. After putting the Magsafe, the cable would juggle around, and I wouldn't say I liked that. Because of 3D printing, and because the cable has to be inserted after the print, I came up with this solution:


I'm still astonished by what you can do with CAD software and a 3D printer at home. Even though I'm a software engineer, it allows me to experiment with other arts and skills in my spare time.

I made the 3D model for free under the Standard Digital File License. However, many people like to pay for it, so I created a Gumroad page so people who can afford it can make a small contribution.

Here is the Gumroad page:

How I Designed a Dieter Rams inspired iPhone Dock

Vintage inspired iPhone Standby Dock

Made for iPhone 16 Pro, compatible with iPhone 14 Pro, 15 Pro

Download 3D Model
]]>
<![CDATA[My Homelab Setup]]>https://arslan.io/2024/09/10/my-homelab-setup/66db0b25343c6e000190dc81Tue, 10 Sep 2024 14:00:52 GMT My Homelab Setup

It's been almost four years since I moved to my current house. I knew my concrete home would be a big challenge if I didn't deploy multiple APs to every floor or room. Concrete walls cut out Wi-Fi signals more than dry walls.

I wanted several Ubiquiti devices, but obtaining them in Turkey was hard. I also didn't have any time. But there was one easily obtainable brand, TP-Link's Omada product line. So I fully went in. I bought a Router, Controller, a 24 PoE Switch, and 5-6 APs. I also got a set of Dahua cameras (PoE-powered). All this was at the beginning of 2021. However, my dream of using Unifi devices was still alive and never extinguished.

My Homelab Setup

Moving forward, I've discovered that buying Ubiquiti devices nowadays is possible. A close friend also showcased the latest Unifi cameras, the Unifi Network, and the Protect applications (the UI for managing Ubiquiti devices and Cameras) at his home. I loved it.

Why did I decide to update my networking infrastructure?

This question was asked a lot, and I've figured out that I didn't explained it well in this blog post. Previously I've used TP-Link's Omada system. Here is a photo of my old rack:

My Homelab Setup

I've used this system for almost 3.5 years with no issues. I had six APs and four PoE cameras. But there were many small things that bothered me and they piled up over the years:

  • Camera motion detection wasn't working well, and setting up it was not as straightforward as I imagined (I was using Synology as my NVR).
  • I would randomly get bandwith bottleneck while watching a video or if the kids would watch a video, my work laptop would get throttled for no reason. I've tried many things, but I couldn't figure out the exact issue
  • Omada's UI was slow and chunky, loading the devices, setting up VLANs and many other small things were just a chore to do. I knew there were better systems out there.
  • I bricked my controller two times over the years by just upgrading the firmware. This should never happen in a networking gear. On top of it, TP-Link documentation was very bad explaining how to fix it.

The hardware I was using was fine, but given the fact I also wanted to upgrade my AP's to use 6GHz band, replace my old cameras and use a product that provides superior UX, I've realized it was time to pull the trigger.


This is a 5,600+ word article with tons of details. Grab a coffee ☕️ , and let's dive into it!

Router and Controller

My Homelab Setup

First, I had to replace my Router and Controller. Unifi has several products. Because I already had a Rack in my attic, I went with the Unifi Dream Machine - Special Edition (UDM-SE). There are several reasons why I specifically chose this:

  • I wanted 10GbE WAN and SPF output to be futureproof.
  • I plan to purchase Unifi Cameras but not the NVR (it would be overkill). The UDM-SE has a 3.5" slot for an HDD that can store a month's worth of camera footage. That's enough for me.
  • The UDM-SE has PoE switches (compared to Dream Machine Pro (UDM-PRO)). I won't use them, but I wanted a backup in case my main switch fails.
  • I can buy UDM-SE and UDM-Pro here in Turkey.
  • It has an additional 128 GB SSD for detection recordings, which is lacking in the UDM-Pro.

The Dream Machine is an excellent value because it is a Router, a Controller for all my Unifi devices, and an NVR for my cameras. Like my TP-Link router, it also supports multi-WAN—more on that later. (For the record, I would buy the Dream Machine Pro Max gateway if I could find them, but they don't sell them here in Turkey)

Switch

My Homelab Setup
Unlike other switches from Unifi, the Switch Pro Max 24 PoE ports are horizontally aligned, making it easier to plug cables from the patch panel.

Next comes the Switch. I have in total four switches, each with a different purpose. Let's start with the main switch. Like my previous devices, I picked up a 24-port Switch, the Pro Max 24 PoE. Here are the reasons:

  • It has 16 PoE++ and 8 PoE+ ports, 8 of which are 2.5Gbe and the rest 1Gbe. There are a lot of PoEs, but we'll need them.
  • I plan to deploy Unifi's U7 APs. These are the most up-to-date APs and support Wi-Fi 7 (using 6GHz). This means, in theory, they can support up to 5.7Gbps data rate. These APs need to be powered by a 2.5Gbe uplink to get it. The Pro Max 24 PoE are 8 of them.
  • I'll use six PoE-powered Unifi cameras (some with PoE extenders via switches) and six U7 APs. I have seven rooms with several wall keystones. In addition, I have several devices (NAS, Printer, Home Assistant, etc.). All these need to be terminated, and 24 Ports are just right.
  • Unlike other switches, the Ports are all horizontally aligned. This makes patching easier and makes it look better from a patch panel.

I also have several Switch Flex's. This flexible 5-port, Layer 2 PoE switch is for indoor and outdoor use and can be powered with PoE++. It allows us to use multiple devices with a single RJ45 cable. This switch is so valuable. First, it's outdoor rated; second, it's a must if you don't have an RJ45 cable for every camera.

My Homelab Setup
The Switch Flex is extremely handy for outdoor usage, especially for deploying multiple PoE powered Cameras with a single RJ45, PoE++ powered cable.

Finally, I have a Lite 8 Poe switch. It's an 8-port, Layer 2 PoE switch with four GbE PoE+ and four GbE ports. This switch is deployed in my living room (I tried to wire all devices I could do) for these devices:

  • PlayStation 5
  • XBOX Series X
  • Nintendo Switch
  • Sony TV
  • Apple TV4K
  • U7 AP

The only caveat with this switch is that it doesn't support 2.5GbE. However, I had to get something, so it's okay for now.

Switch assignments

Because the Pro Max 24 PoE has different kinds of ports based on 2.5Gbe or PoE++; I had to devise a good plan to lay out the keystone jacks and assign my various APs and Cameras efficiently. Two rules were vital for me:

  • APs need at least 2.5GBe. I'll explain more about my APs in the next section, but all my APs support Wi-Fi 6, and if linked to a 2.5GBe port, they can support significantly higher speeds when clients use the 6 GHz band.
  • Switch Flex needs to be on PoE++. This is important because they will power down the line of other Cameras, so we must ensure they use the maximum power. Cameras don't need a lot of bandwidth, so 1GBe is good enough for them (most 2K cameras at most use 100 Mbps btw).

Here is a diagram I sketched before I worked on patching my keystone panel:

My Homelab Setup
My current port assignment for the Switch Pro Max 24 PoE switch.

APs

Part of using Unifi is also using their excellent APs (Access Points). But the challenge for me is deploying them in my concrete house. My house has concrete walls and floors. However, some rooms are divided by "Autoclaved aerated concrete" bricks (they are called Ytong here in Turkey because a company made them very famous).

Fortunately, these are good at letting Wi-Fi signals through the walls, but reinforced concrete is the opposite. You can expect a single wall to cut off 20dB of Power. It's like a Faraday cage. The second problem is that my house is like a townhouse that goes vertically. I have three floors, and there is another concrete slab between each floor.

My Homelab Setup
The U7 Pro Wall mounted to the Wall.

Hence, the optimal solution is to deploy multiple APs per floor but lower the Transmission Power so clients always pick up the nearest AP. Having explained the problem, here is the list of APs I've got for my house:

I had a few places where the Pros were more suitable and a few places where the Pro Wall was suitable. I also got a spare U7 Pro in case some of my APs fail. I deployed them in various ways. Some are mounted to the wall, and for some, I 3D-printed custom stands (I even designed one myself; more on this later).

Unifi has several tools that allow you to simulate the strength of a Wi-Fi signal. You can upload your layout, draw the lines, and define the wall types (concrete, drywall, etc..). After that, you can start placing all your devices. Based on the wall type shows how much the signals propagate. Here, you can see that in 2.4 GHz, it's well covered (I also optimized the Wi-Fi channels for each Band; more on this later)

The great thing about this is that you can also locate your device and see where it was deployed. This is for big installations with hundreds of APs, Cameras, and Switches. Nevertheless, it's a cool feature.

Configuring SSIDs

I have multiple SSIDs configured. Previously, I had SSIDs per Wi-Fi bandwidth (2.4 GHz and 5GHz). Now that all my APs also have support for 6GHz, I thought this was not suitable. Instead, I created three different SSIDs:

My Homelab Setup

Here is how they work:

  • Takayama: This is the backbone of our home. All wireless devices are connected here.
  • Osaka: We have a guest network. Guests cannot access any devices in our house, and I limit their speed to prevent rogue clients from using my household internet.
  • Hiroshima: I haven't yet configured this one, but I plan to configure my various Smart Hubs, TVs, Robot Vacuum Cleaners, and other Wireless devices I don't trust. This will use a dedicated VLAN.

Note that these are configured with VLANs (the Network columns show the VLAN names). Hence, we'll have to configure both of them together. I'll explain VLANs later in the blog post.

Wi-Fi Radio and Channel optimization

Deploying the APs isn't sometimes enough. Unifi does good work of automatically optimizing channel distribution. However, knowing that my house is a mix of brick and concrete walls, I improved it by assigning the band channels manually and changing the transmission powers. I have two APs on each floor, and all APs are in the opposite order (see the photos above). The best ideal way is to use non-overlapping channel numbers. For the 2.4 GHz band, we can only use 1, 6, and 11 (preferred). Hence, I came up with the assignment:

My Homelab Setup
The Channel and TX Power assignments for each AP.

For example, on the ground floor, we have my AP-Office and AP-Gym installed. Hence, they are on the same floor, that's why one has the channel 1 and the other one 11. However, above my office room, we have AP-Living Room. That's why we have to choose the channel 6 so it doesn't overlap with the AP-Office.

Finally, I've changed the TX power to be Low for every single AP. This immensely helps clients to drop when they go to another room or switch floors. The biggest problem with the 2.4 GHz band is that it's like a parasite and very good at passing through a lot of walls. Hence, it also causes a lot of interference. By changing it to Low, we're not only a good citizen in our neighborhood, we also get the optimal environment for clients that use the 2.4 GHz band.

Here, you can see that right now, the AP density is in excellent condition, and clients have a good signal to the various APs:

My Homelab Setup
Here's the AP density graph. The green dots are clients. Only one client is in poor condition, our car (a Tesla Model Y). I suspect it's because the Car is parked outside, and I've set the AP's TX low. But that's a good compromise because it's only used for software updates.

I did something similar for the 5 GHz and 6 GHz bands. However, the rules are not as strict as for the 2.4 GHz. Hence, I changed only the transmission power for those and enabled the channel assignments to auto. Unifi recently released a new Software upgrade that shows all the channels and bandwidth assignments.

It's also essential to use an optimized Channel Width. The channel width defines how much data you can pull in. However, the wider the channel, the more interference you'll see, which means packet loss and instability. Hence, in my network, I have these settings:

  • 2.4 GHz: 20 MHz
  • 5 GHz: 40 MHz
  • 6 GHz: 160 MHz

However, increasing the width gives you more speed out of your APs. Given that my ISP speed is capped at 50 Mbps, I was good with lower but more stable settings. (My ISP is currently updating our infrastructure and laying out Fiber cables, so this will change)

You can see the final result of channel configurations here:

My Homelab Setup

Lastly, another important detail is that all my APs are wired (powered by PoE). Hence, because all of them are wired, Wireless Meshing is disabled for me. Wireless meshing is needed if the APs are not wired to the router; hence, they need to create a wireless backhaul. We don't need it.

Designing a desk stand for the Unifi U7 Pro Wall

I wasn't sure if I wanted the Pro Wall installed on the walls in two places in my house. Those were concrete walls, and just putting holes there was challenging. Unifi sells a table stand for the U7 Pro Wall, but is always out of stock.

So, I decided to design it myself. After a few iterations, I developed a design that allowed me to reuse the Pro Wall's metal plate. It looks great, and I made it available for anyone to download and use freely.

My Homelab Setup

Unifi U7 Pro Wall Desk Stand

A stand to place your U7 Pro Wall on a desktop or shelf.

Download STL Model

Cameras

I replaced my existing Dahua cameras with Unifi ones. There were several reasons, but the biggest one is the ease of operation and integration. Second, the Dahua cameras (bullet, 2k) were not the best. Two failed over the years, and I wouldn't say I liked configuring them via their built-in UI. I was also using Synology's Surveillance software as an NVR. Even though it worked, its detection algorithm and many other things were not that great.

My Homelab Setup
The various cameras I got from Unifi

My friend who went to Ubiquiti was very happy with his purchases of Unifi cameras. So, I decided it was time to upgrade my camera system. Here is the list of cameras I got:

The G5 Pros are 4K, and Turret Ultras are 2 K. I also got the enhancers for the Pros, which add floodlight integration. I ensured that the Pros were installed in the most sensitive places of my house and the rest around its perimeter.

My Homelab Setup
The G5 Turret Ultra provides has a microphone and a wide angle view of the area, providing a good compromise between image quality and price.

So far, everything works as expected. One thing to note is that all these Cameras don't go straight to the Switch. I also deployed two Switch Flexs. These are outdoor-rated PoE-powered switches that can power other PoE devices. This was excellent because, in some places, I only had a single cable deployed from my Switch. So, I could fan-out use a single port for multiple cameras. This is possible because of PoE++ ports. High-watt output ports allow you to power multiple devices with a single port. This was something I discovered late in the game.

Rack Setup

My Homelab Setup
My 12U Rack

I have a 12U rack, though only half of it is being used. Because my rack has an enclosure with wheels, it's pretty useful because I have my NAS (Synology), Home Assistant Hub, PDU, and many other things at the bottom. There is a 9-port 2U, Schuko PDU, at the back. All my devices in the rack are terminated at this PDU. Then, the PDU is plugged into my UPS.

My Homelab Setup

I plan to replace my Synology NAS with a Rack-based version, but only if I find something I like. So far, the existing options are expensive and not worth it (at least for me).

My Homelab Setup
A 3kVA UPS from a local company

A 3kVA UPS tower powers all the devices in the Rack (including the NAS and various hubs). However, I bought the UPS 3.5 years ago, and it's unfortunately dying. I must replace the battery; however, I'm also considering purchasing a rack-mounted UPS from APC. Two things that I need with a UPS are:

1. USB cable support can send signals to my NAS and other devices if there is a power outage so they can shut themselves down gracefully.

2. A bypass switch to remove the UPS system from the circuit for servicing or maintenance or if it is no longer working correctly.

Besides that, I used several Unifi Rack accessories. Some were must-have, some were nice to have, and some were just for aesthetic reasons. Let me explain them:

My Homelab Setup
  • Two Brush Panels: These are for freeform cables that don't terminate at the Patch Panel, such as SFP cables between switches, Modem cables, or temporary devices. They are nice to have, but two are overkill. I bought them for aesthetic reasons.
  • One OCD panel: This is purely for aesthetic reasons, to keep the front unified.
  • A 24-Port patch panel: This is a must have. All my camera, outdoor, and indoor RJ45 cables terminate here. I also have a few inline couplers. A patch panel is the backbone of a good rack.
  • Etherlightning Patch cables: They are used purely for aesthetic reasons. They keep the Rack tidy. However, because they are so short, they don't obstruct the ports, which has the slight advantage of improving rack maintenance.
  • RJ45 Dust Covers: Protects from elements and aesthetically looks nice.
  • Keystone Blank Patches: If you don't use them, there are blank holes, and I don't like the look. Again, this is purely for aesthetic reasons.
My Homelab Setup
The Etherlighting Patch Cables were created specially to be used with the Pro Max switches with LED support. Because of the translucent socket it's able to reflect the LED colors.

Topology and naming devices

A nit thing, but I prefixed the name of all my AP's with AP- and all my cameras with CAM-. This makes it extremely easy to understand the device type while configuring a setting.

My Homelab Setup
All my Unifi devices

Another important detail I had to change was the STP Priority of my various switches. It's crucial to avoid Network loops. Network loops happen when multiple paths exist between two points in a network. This leads to data continuously circulating and potentially causing significant issues such as performance degradation, unexpected port blockages, complete network outages, and device crashes. It's like a recursive stack overflow bug in software applications.

My Homelab Setup
The current topology

In my case, my main 24-Port switch has a Priority of 4096 (the lower it is, the more it's preferred) and my other switch, the Lite 8 Poe, which I use in my living room for our Game Consoles and TV boxes, has a priority of 32768.

Dual WAN settings

I have two ADSL connections coming to me. They are both from the same ISP, so they're unused for backup. Because the maximum speed I can obtain is around 50 Mbps, it's not enough for the whole family. So, one WAN powers my office and my devices, and the second WAN powers the rest of the home.

My Homelab Setup

By default, all devices go to the Primary WAN, but I added routing that routes specific devices to the Secondary WAN. This way, I can ensure that the devices I use always use the second one. And if the Secondary WAN fails, it automatically fallbacks to the Primary.

My Homelab Setup

Making sure that by default, all devices that use the primary WAN has the benefit that no guest or new device will not congest the secondary WAN.

VLAN

A good network setup involves separating devices into their virtual network. This is done by creating VLANs and assigning ports or devices to these VLANs. You can go crazy here and add a lot of things. For me, I wanted to start small. Luckily, there is a great YouTube channel that explains these settings nicely, I recommend it as I've learned a lot from it: https://www.youtube.com/watch?v=krhsZWnAxVc

Here are the current VLANs I set up:

My Homelab Setup

Again, you can go crazy here, but keeping a clean state is tough once the number of clients increases. So, how do I use them:

  • Default: This is my main network. My MacBooks, iPads, iPhones, Switches, APs, etc., all go into this network. Some people split this into two VLANs and add another Secure VLAN which is used to isolate the gateway, AP, and switches from their other devices. I considered this overkill, so I didn't choose that option.
  • Guest: I don't have any wired or wireless device that uses this network; however, people connecting to the Guest network are put into this network. The guest network is isolated and cannot reach other networks.
  • IoT: Anything I don't trust or might be an attack surface goes into this, including Robot Vacuum Cleaners, Espresso Machines, Smart Hubs, Tesla Chargers, Game Consoles, TVs, etc. With smart appliances being so popular, this is especially important. IoT devices can reach the Internet but not other devices unless I allow them.
  • Camera: As the name says, this only contains the PoE Cameras.

All VLANs have a dedicated subnet with around ~249 usable IPs, which is good enough for household use.

My Homelab Setup
A simple Firewall rule that blocks my TV to the Internet

Of course, just adding VLAN is not enough. What matters is the firewall rules that define what VLAN can or cannot do. This is an advanced topic, and there are many Blog Posts and YouTube videos about it, but to give a recap, I have these in place:

  • Default VLAN can access all VLANs.
  • Block inter-vlan routing. No VLAN can see each other. For example, if a rogue device in the IoT device is compromised, they won't be able to access my different networks. This is an issue, though, if, for example, I want my HomeAssistant Hub to detect devices on other VLANs. Hence, I need to add explicit ALLOW rules for every single device.
  • Block access to gateways from each VLAN. Devices can still access the gateway addresses from other VLANs; hence, we must create custom firewall rules to allow them access. So, say if we have an IoT device with an IP 192.168.30.56 it won't be able to access 192.168.10.1 or 192.168.40.1. The gateway address is our Unifi Controller interface, so this is just an extra caution.
  • Limit the speed of Guests. I had a few instances where guest clients would consume all my bandwidth; that's a no-go for me.
  • Block specific devices to the Internet. For example, my Sony TV cannot access the internet, and I only enable it occasionally to check if there is any FW update. I use an Apple TV 4K box, which I trust more than my TV.

DNS settings

One thing I did that was a nice improvement was to assign local DNS names to some of my devices, such as my Synology NAS and HomeAssistant Hub. The idea here is to assign them fixed IPs and then create a DNS record by using a domain name that belongs to you (or anything else you want to use):

My Homelab Setup

However, it's important to understand what I mean fixed IP. I use the DHCP server, and each VLAN Network is masked with /24, which gives me 249 usable IPs. That's more than enough for us. After plugging your device, the DHCP server assigns an IP from the usable ports. This IP can be fixed in the settings, so the device always uses it:

My Homelab Setup
My Synology NAS has a fixed IP, with a local DNS record. That way, I can easily type nas.arslan.io in my browser, and it'll open my NAS without having to remember the IP.

This is different from setting a fixed, static IP from the device. Never do that. Instead, let your router assign the IP and fix it inside your network. After setting it up, you can verify if via dig and see that the local domain resolves to your fixed IP:

$ dig +noall +answer nas.arslan.io @192.168.10.1
nas.arslan.io.          0       IN      A       192.168.10.26

My gateway IP is 192.168.10.1, hence we target it to resolve our DNS name.

Tools

No Homelab project is finished without having to build a custom cable. Some companies do custom cabling (which is super dope), but I wanted to learn it myself because I sometimes need cable somewhere in the house.

To build the rack, I had to terminate a few outdoor RJ45 cables. Another thing I always wanted to fix was my old patch panel. Unfortunately, when we built the house 4-5 years ago, my contractor terminated all RJ45 cables directly at the wall without giving extra space. This meant I had to create extra hops and extend all the terminating cables again.

We did that before, but the contractors made the same mistakes and used short cables. Because of that, it was always a hassle to move my rack around. I decided to redo every single cable.

This was the most challenging part of the whole homelab project. At one end was a keystone jack (female part), and on the end was an RJ45 socket (male part). So I needed two tools—one tool for punching down cables into the Keystone jack and another one to crimp RJ45 cables.

Now, having these tools is nice and good, but the most challenging part wasn't using them but rearranging the color-coded cables into a specific order before we could punch them down. And if you made a single error on both ends, you had to redo it.

I also had to verify that it works after creating a single cable. You might think I have an Ethernet port somewhere that I plug in and see if two devices are connected. But there is a better way. Numerous devices enable you to verify whether you have correctly wired the RJ45 color-coded cables. Here is a small video of a tool that I use. It's a basic no-name device that I purchased from my local supplier.

0:00
/0:11

Finally, if you have so many cables, it'll be hard to understand which cable goes to which room or camera. So, the best way is to label them consistently and efficiently. There are many ways of doing that. The best and most expensive way is to use a heat shrink tube. I didn't have that, but I purchased a Dymo Label printer (model: LabelManager 420P) and used it extensively to label all my cables.

After labeling all the cables, I terminated them at my Keystone Patch Panel. All the wires are neatly held together with zip-locks (I know there are better ways of doing this, but this works for me).

My Homelab Setup

Pricing

Here is the list of things I purchased and how much I paid for them. There are a few things I didn't show you in the blog post, such as various patch cables that I bought as spare backups in case I need them.

One crucial detail is that I bought from several countries and marketplaces, so the prices differ significantly from those of the Unifi store. I also paid for customs because I imported some via Amazon.de or Amazon.com. I live in Ankara, Turkey, and our import taxes are quite high. Because of that, the prices you'll see are higher than if you buy it directly from Unifi.

My Homelab Setup
  • 2,296.73 € (date: 16.07.2024)
    • 1 x Dream Machine Special Edition
    • 1 x Switch Pro Max 24 PoE
    • 4 x U7 Pro (U7-Pro) (one is spare)
  • 403.97 € (date: 11.07.2024)
    • 2 x Switch Flex
    • 1 x Lite 8 Poe
  • 1447.04 € (date: 12.07.2024)
    • 2 x G5 Pro
    • 2 x G5 Pro Enhancer
    • 4 x G5 Turret Ultra
  • 1015.97 (date: 12.07.2024)
    • 3 x U7 Pro Wall
    • 24-Port Blank Keystone Patch Panel
    • 2 x 10 Gbps SFP+ Direct Attach Cable
    • 1 SFP to RJ45 Adapter (1G)
    • 15 x UniFi Ethernet Patch Cable (White/Blue/Black / 0.3 m)
    • 10 x UniFi Ethernet Patch Cable (White/Blue / 0.1 m)
    • RJ45 Dust Cover, 24-Pack
    • Keystone Blank Insert, 24-pack
    • 1U Blank Panel
    • 2 x 1U Brush Panel
    • UniFi Etherlighting Patch Cable (0.15 m (24-pack)

Total5,203.71 Euro ($5,751.24). Note for future readers: the prices might differ based on exchange ratios; these are approximates.

I spent around ~$5750 for all my devices and accessories. This includes 7 APs, 6 PoE cameras, and several switches. I rebuilt it from scratch, and my house is big. Here, you can see why people say Unifi is expensive. If you used other brands, this would cost you 2x or 3x less. However, none of them provide a user experience for Unifi. Quality and well-made, well-designed goods have a price. For me, it's worth it.

Future plans

When I told a few friends that I finished my homelab project, they laughed and said, "A homelab project is never finished". That's even true of what I have done so far. There are, of course, a few things that are nice to have and a few things I plan to work on:

  • I need to replace my UPS. As I said earlier, it is old and needs to be replaced. I could replace the battery, but the UPS doesn't give me confidence and lacks features (such as USB support and bypass). Hence, I'll probably replace it with a rack-based one.
  • Add an NUC. I currently run a few things on my Synology; I have a dedicated HomeAssistant Hub. But sometimes, it would be cool if I had a dedicated NUC or a small server.
  • I want to replace my existing NAS with a rack-based version. I love my Synology and have had no issues so far. But having a rack-based NAS would complete my rack. However, I've heard Synology's Rack-based versions are not worth it as they are expensive, but we'll see.
  • Update the Lite 8 PoE switch with a 2.5 GBe one, so I can use the full speed of my U7 Pro Wall. It's a bonus if it has a PoE input port.
  • Mount some APs to the wall for increased security and a streamlined look. Even though the desk stand I designed looks nice, I think having it on the wall is a better option.

Verdict

It took me around three months to finish this project. Of course, I had this plan for many years, but I'm glad I followed through with it. I had a few hiccups. Two things that stuck with me were:

  • There is no PPPoE setup when using the iPhone or iPad app. I didn't realize that, but my modem is used in bridge mode, so I need to enter the credentials. However, the iPhone or iPad apps wouldn't allow it. I plugged my controller into my old switch to fix it and started the installation process from there.
  • I had a few power outages. In one case, the Switch didn't come back online. I thought it was dead. It fixed itself after I unplugged the power cable and put it back. I honestly thought the Switch was dead. I later read that Ubiquit devices are poorly handling power outages.

However, besides these two things, everything else was superb.

My Homelab Setup
All Ubiquiti devices currently used in my Homelab

So far, the UI and user experience have been great. The devices update themselves seamlessly every night (if there are any updates); I can immediately see what's happening and which client uses the most bandwidth. I can easily create Firewall rules and change policies.

I especially like how easy it is to change the context, such as from the list of devices to a Switch, then from there to the Port manager, and so on. For example, the Unifi iOS App has aa AR mode; if you scan the switches or devices, it'll create an overlay of the devices onto each port. It's genius.

My Homelab Setup
The AR feature of the Unifi iOS App allows you to see which port is used by which device.

The UI flows with you, and I missed such a user experience. It's a breath of air.

My Homelab Setup
The Unifi Controller has a well design control interface.

Thanks for reading so far. If you have any questions, email me (see my About page for more details) or send me a tweet.

I want to give thanks to Cihangir Savaş, Can Doğancı, Harun Yazar, and Nursena Uzar for helping me build my Homelab Project from scratch and sourcing the components.

]]>
<![CDATA[A month in Munich]]>https://arslan.io/2024/08/31/a-month-in-munich/66d2d12c39e1aa00011c410aSat, 31 Aug 2024 14:45:00 GMT

I did something different this year. We stayed with the family (two kids and my wife) for almost a month in Munich. Luckily, I had a chance to stay at a friend's place. They went somewhere else for vacation, so we had the whole apartment for us. Having a kitchen and several independent rooms made the entire trip very comfortable for us.

It was fun to understand how it would be to live here for longer than a few days. Munich is one of my favorite cities in Germany, and I wanted the whole family to experience it. Second, even though I lived in Germany for 17 years, that wasn't the case with my kids and wife, so again, I wanted them to experience the urban lifestyle and German culture.

The post will include the places and events we visited, without any particular order. It's like a photo essay. These posts are also great because they create a history of my past. I like to go back and read and look at these posts.

(nit: except for a few, all photos were taken by me using my Leica M11. I brought all my lenses, which were the 21mm SEM, 35mm LUX and 50mm LUX)

Transportation

The first shock the kids had was not using a car anymore. Part of my goal was to use only bikes and subways for travel (we couldn't use the bikes, though, so often; more on this later). We lived near the U3 line, and it was great to easily visit some popular destinations (Münchner Freiheit, Marienplatz, etc..). We loved every bit of Munich's Transportation options. The subway was excellent and always on point.

Streets

Walkability is great in Munich. We only had some initial problems adjusting to the bike lanes, which usually followed the walking lanes. Our kids would walk randomly because we don't have this kind of bike lane in Ankara. Munich is a very sterile and clean city, except for one case, I never saw any litter.

Olympia Park

Olympia Park was near where we lived, so we visited it several times. We just walked around a few times, but there was also a Summerfest exhibition, and seeing it with the kids was great. It's cleaner than other parks, but also more crowded.

Coffee

I had coffee at several places, but my favorites were Man vs. Machine and Suuapinga. I tried quite a few shops, but these two were the best. Their coffees speak to me, and their pastries are above average.

Augsburg

I rented a car for a few days to visit some remote places. We had a day to kill, so we decided to visit Augsburg. It was a lovely, calm, great city to walk around. We visited the Fuggerei, the world's oldest public housing complex still in use (built-in 1516).

Deutsches Museum

The kids loved the Deutsches Museum. I once visited it ten years ago, and it was great to visit again with my two kids. The museum had several interactive exhibitions and even a place just for kids. Reservations are needed (via online), and I highly recommend it if you have kids.

Eibsee

Eibsee is a lake next to Austria's border and Germany's highest mountain, Zugspitze. I planned to visit the peak but later decided to wait until the kids were older. Eibsee was a great place to visit. We hiked around the lake and later rented a pedal boat. The kids loved it.

Neuschwanstein Castle

There's not much to say here other than that it's probably Germany's most famous tourist attraction. It was an hour's drive from Eibsee, so we also visited it. It was afternoon when we arrived, and the crowd had mainly left. We didn't see the castle's interior but hiked to the Marienbridge, allowing us to shoot the iconic castle in its glory.

Hannover

My brother lives in Hannover (near Hildesheim), so we took the ICE from Munich and visited them for a few days. Hannover is an underrated city. It's not sunny like Munich, but I love the greenery and amenities. Unfortunately, we had an accident there. My son broke his arm, and we had to spend a night in the hospital.

Englischer Garten

There is not much to say. It's one of the world's largest urban public parks and the biggest in Munich. We visited several parks in Munich, but this park is near the city, so we would grab some food and chill there. It's also a perfect place for the kids; they can run, shout, and leash out their energies.

Die Neue Sammlung - The Design Museum

The Neue Sammlung is one of my favorite museums in Munich. It's a modern museum with several small exhibitions. I wanted the kids to experience it as well. While there, I, of course, explained the furniture, designs, and pictures to them. German museums are also great because most museums always have interactive activities for kids.

Food

There are many things to eat here. Some of the food we had were Hendl (rotisserie chicken), Döner, Afghan cuisine, Korean (Bibimbap), Sushi, Ramen, Schnitzel, and Pizza (Neapolitan style). I also had the Spaghetti Eis quite a few times, as I would eat it when I was a kid in Germany. I also liked the sandwiches from Rischart.

Verdict

This is it. We enjoyed every bit of our vacation. It was also my most extended vacation (my longest vacation was in 2014).

With that, I also want to thank my kids, who were good citizens half the time, and my wife, who helped me immensely in organizing the trip. I love you all ❤️.

Here are a few other photos I couldn't fit in any of the above sections:


]]>
<![CDATA[Automating my gate door]]>https://arslan.io/2024/06/30/automating-my-gate-door-with-zigbee-relay/667fbd8488878900014dc87aSun, 30 Jun 2024 09:44:30 GMT

It's been almost four years since I moved to my current house. I bought the land myself and built the house from scratch, so I had a lot of control over it. For example, I ensured every light, gate, blind, etc., had a manual switch. We rarely use an RF remote to open or close things.

Except for one thing: our gate door.

It's a sliding gate system that can carry heavy-duty doors in two ways. The motor and system are from a company called BFT, which is a very common brand here in Turkey for this kind of residential application. The gate has no physical switches, as they wouldn't be very useful. The gate door is used when I want to park my car in my garage; hence, I need to be able to open it remotely.

Problems using an RF Remote

Automating my gate door
The remote that I use to open the gate door. It's clunky and big.

But I have several problems with the remote:

  • The remote is clunky and big
  • The remote is usually inside my car, hence I can't open it when I'm inside the home.
  • I want to plug this into my home assistant setup to automate it easily via my iPhone. For example, I could remotely open the gate via my phone or CarPlay or make sure to understand whether the gate is opened or closed.

The RF remote works over 433 MHz with rolling codes. When you hear an RF remote, the first solution that comes to mind is to buy a universal IF/RF hub that replicates the remote codes and can be integrated into HomeKit or HomeAssistant.

One such product is the BroadLink RM4 pro . There are many similar products, but the way they work is that you keep your existing remote next to it, and after a few instructions, the hub is able to send and receive the same codes the RF sends. The hub needs to be within proximity of the application you want to control (in my case, it's the gate opener).

There is one issue, though: these products don't work well with remotes that use rolling codes. You might ask, what are rolling codes?

Rolling code means to "roll" the code, which means generating a new code every time the remote control is used to open the gate opener. When you click the remote button, a unique code is created, and only the gate receiver can decrypt the code. It's also called asymmetric encryption and, for some people, public key encryption. It's pretty good and safe, so it's hard for intruders to copy the RF while you're entering your home.

Using a smart relay

So, replicating the RF remote was out of the question. I had to look for something else, and somehow, I stumbled across a picture of the interior of the motor case. There, I could see that the BFT motor had plenty of I/O options to interfere with the gate directly. I immediately went outside and opened the case.

Automating my gate door
The interior of the gate motor

The BFT Motor I had at home used a HAMAL ARES control board, and the manual had plenty of information. The most essential ports were the 60/61 ports and the L/N (220V power supply). If the gate was short-circuited via the 60/61 ports, it would open (if closed) or close (if closed) the gate.

Automating my gate door
The 61 and 62 ports manually send a start command to the gate.

I had to test it out, so I cut a 2.5mm cable and tried it out, and voila it indeed worked out:

0:00
/0:11

Now that we have verified that we can open the gate via these ports, the next step is to enable it remotely. This is where smart relays come into action. Relays are circuits with WiFi/Zigbee/Matter, etc.. capabilities. There are many circuit types, for our gate all we need is a "dry-contact relay". We need a way to close a switch or open a switch without applying any energy to the contacts:

A dry contact functions as a standard switch that controls a circuit’s connectivity. It allows current to flow when closed and stops it when open.

So hence I bought a "Zigbee Dry Contact Relay". I also have several WiFi Dry Contact relays, but I recently purchased a Home Assistant Green with Zigbee hub (SkyConnect), so I decided to go with Zigbee, but you can use whatever you want. There are many brands, but I bought one from a Chinese no-name company. However, a friend suggested I get the Aqara T2 Dual Relay, so I ordered it and will replace it, but I went with this one for now.

Automating my gate door

Of course, the relay itself still needs power to control the switch. There are many ways of powering relays, but the one I bought had a 220V Line input (and 24v DC), and the Hamal Board's first two ports provided me with 220V, so all I had to do was plug the main board's power output into the relay's power input. Next, the Relay had several other outputs; for us, the most important is the COM and NO inputs.

Automating my gate door
I turned off the gate's power supply, so there was no power while installing the relay. I also prepared myself an iced Americano.

The goal is to trigger a short circuit but have it disabled by default. Hence, we need to make sure that COM and NO are used. NO means "Normally Open," meaning COM and NO wired together are open by default. But if we turn on the relay, COM and NO are closed, short-circuiting the 60/61 ports and triggering the gate to open.

HomeAssistant and HomeKit integration

After the initial setup, the following steps are to register the Device to our Zigbee hub, expose the relay as a device in HomeAssistant, and, from there, connect it to HomeKit (which is done automatically; more on this later).

First, after adding the relay to the Zigbee hub, I discovered it was added as a light entity in Home Assistant. This means it would look like you switched a bulb when you enabled the switch via COM/NO ports.

Automating my gate door
The Dry Contact relay looks like a light bulb you can turn on/off. It's turned on here, which means the COM/NO ports are short-circuited.

This is not an issue, though. We can treat it as a bulb, and all we have to do is turn on/off the bulb to open the gate door. We can also create a virtual device to turn on the bulb, wait a bit, and then turn it off. This is also called "inching," so we want to emulate a momentary button click.

Luckily, Home Assistant has something called a template, which can be used to create built-in virtual devices. One of these virtual devices is called the cover template. I don't want to complicate things further on, but below you can see that we have configured a virtual device that can be used to open/close/stop a cover:

cover:
  - platform: template
    covers:
      garage_door:
        device_class: garage
        friendly_name: "Gate Door"
        icon_template: >-
          {% if is_state('binary_sensor.gate_sensor_opening', 'on') %}
            mdi:gate-open
          {% elif is_state('binary_sensor.gate_sensor_opening', 'off') %}
            mdi:gate
          {% endif %}
        value_template: >-
          {% if is_state('binary_sensor.gate_sensor_opening', 'on') %}
            open
          {% elif is_state('binary_sensor.gate_sensor_opening', 'off') %}
            closed
          {% endif %}
        unique_id: garage_door_cover
        open_cover:
         - condition: state
           entity_id: binary_sensor.gate_sensor_opening
           state: "off"
         - service: light.turn_on
           target:
            entity_id: light.bft_dry_contact_relay_light
         - delay:
             milliseconds: 200
         - service: light.turn_off
           target:
             entity_id: light.bft_dry_contact_relay_light
        close_cover:
         - condition: state
           entity_id: binary_sensor.gate_sensor_opening
           state: "on"
         - service: light.turn_on
           target:
            entity_id: light.bft_dry_contact_relay_light
         - delay:
             milliseconds: 200
         - service: light.turn_off
           target:
             entity_id: light.bft_dry_contact_relay_light

The most important parts here are the open_cover and close_cover parts. Those hooks are called when you press the button on HA to open or close the gate. And as you see, we check first if the door is closed (off state or not), turn on the relay, wait 200 milliseconds, and then turn it off. This emulates a momentary click, like pressing the button of the RF remote.

You might ask, how do we detect whether the door is closed?

That part is done by the door sensor, which I've also installed. We don't need it, but it makes for a more stable integration, especially with HomeKit, as it can tell you when the door is closing or opening. Without the sensor, you can use something called the optimistic mode , which uses an internal state to track when you trigger the gate opening/closing. Anyway, I decided to use a door sensor; they are cheap and not that expensive.

Automating my gate door
The door sensor uses magnets and is a simple binary sensor. It emits two states: opened or closed.

Finally, I'm using the HomeKit integration, which exposes various parts of HomeAssistant as actionable entities in HomeKit. This means you can expose any non-homekit compatible device or a set of devices via HomeAssistant to HomeKit by using the HomeKit integration.

This is great because I can now use my iPhone to open/close the gate door remotely. Second, and the best part of this integration, is that because it's part of HomeKit, there is a dedicated button when CarPlay is used, and I can open/close the gate door when I approach home. It's fantastic!

From the iPhone, you can either use Siri to open/close the door or use the various widgets or Home app:

Of course, having it integrated into HomeKit enables other things as well. I can share it with my family members, use Siri to open it by saying, "Hey Siri, open the gate door," and automate it further, such as opening the gate door when I'm near home or making sure it's closed when I leave home.

Here is what it looks like from my car:

0:00
/0:15

By exposing the virtual device as a Garage, the HomeKit integration also exposes a button on the CarPlay screen

Final thoughts

I'm pretty happy with how all this ended. This was something I wanted to do for a long time, but I wasn't sure where to begin. I hope this blog post gives you some ideas on automating motors or certain home appliances via relays.

Automating my gate door
Knipex 12 62 189, Automatic insulation stripper

Some random thoughts during the installation process:

  • I had to cut various cables and had a chance to use my new Knipex cable stripper. It made things so much easier, and I loved every moment. I highly recommend it if you're stripping/cutting cables occasionally and want peace of mind.
  • After setting up the Zigbee Relay, I discovered that latency was pretty bad. I'm currently using SkyConnect as a Zigbee Hub (via ZHA). I thought Zigbee would be better than WiFi because of less interference, but apparently, it has similar issues with WiFi. So next, I'll try to move my Zigbee Hub to my office and ensure the garage door is within sight of the hub.
  • Adding a virtual device on HomeAssistant shouldn't be so archaic. I think the templating and scripting capabilities are very bad. However, despite all this, I'm astonished at what you can do with HA. It's a really good ecosystem, but it needs love and a lot of research. Even if you buy Home Assistant Green, not all things are just plug-and-play.
]]>
<![CDATA[Vitsoe vs USM shelving]]>https://arslan.io/2024/06/23/vitsoe-vs-usm-shelving-cabinets/662d5f3a5973c600010b4490Sun, 23 Jun 2024 12:40:25 GMT

Someone asked this question on Twitter recently. Both are great brands with great products that have been used for decades. They are iconic and still used after so many years. This is a subjective comparison; obviously, they are very different regarding looks and usability. I have an extensive Vitsoe 606 setup but plan to extend certain places with USM. Some friends use USM, and I've seen them as well. Personally, for me, the main differences are:

  • Vitsoe is much more flexible. It has more shelves with variable widths. You can have shelves for CDs, Books, Magazines, Vinyls, and big books. They start at 16 cm and go up to 36cm. The Flexibility is insane. USM doesn't have that kind of flexibility. If you have many paperback books, you must buy the shorter USM shelves, but you can't combine them with larger ones. With Vitsoe, you can mix and match shelves easily.
  • In my opinion, Vitsoe has a more refined taste. It's more minimal, and it's truly modular. You can use Vitsoe for your kitchen and maybe later in your life for your office. If you have kids, Vitsoe shelves can grow with you. USM has colored shelves, so adapting them later in life is harder. And you can't use a TV USM cabinet somewhere else.
Vitsoe vs USM shelving
  • Vitsoe has extensions like open-back cabinets, kitchen cabinets, and desks in various settings. If you're into Vinyl, you can buy rare Braun Audio equipment that Dieter Rams has designed, which perfectly fits into Vitsoe shelving, but not so much with USM.
  • USM is full metal and high quality. If you buy it, it'll outlive you. Vitsoe is also made well, though I think USM is one level better here. USM uses stainless steel in most places, and Vitsoe uses aluminum and MDF for its cabinets.
Vitsoe vs USM shelving
A friend's USM in their cabinet form
  • USM works nicely for cabinets, such as TVs, wardrobes, or small floor cabinets. It has more colors, so you can have a more artistic room if you want (think of Andy Warhol; he would probably use USM). They have nice colors, and they are made for life. Vitsoe works better for the office, though it's quite flexible. It's more under the radar, more technical and brutal, but also more minimal. It's a masterpiece from Dieter Rams.
  • Vitsoe needs a wall or a skeleton for non-wall options X-Post. Once you establish a Vitsoe project, it's not easy to disassemble it and move it. With USM, it's self-contained furniture. You can carry it and put it elsewhere. However, once you have a structure with Vitsoe, it's fully modular. You can change the layout, shelves, and cabinets to your liking. With USM, you have to disassemble the furniture.
Vitsoe vs USM shelving
Vitsoe 606 shelving

Of course, furniture is highly personal and subjective to feelings. There is no right or wrong here; furniture grows with people. The more you spend time with it, the more you understand if it's right for you. I have/had many things that I changed over time, and some that I love to use and look at every single day (i.e., Vitsoe).

]]>
<![CDATA[A morning in Nymphenburg Palace Park]]>https://arslan.io/2024/05/22/a-morning-in-nymphenburg-palace-park/6636aba2264dad0001a07685Wed, 22 May 2024 13:43:45 GMT

I visited Munich for the first time 11 years ago when I traveled to San Francisco. We had an 8-hour layover and decided to stroll in the city center. Since then, I've visited Munich several times, and one of the places that stuck with me was the Nymphenburg Palace Park. I have visited the Park several times since then. I especially like the mornings when there are not many people around.

Because it has a special place for me, I wanted to share a typical stroll whenever I visit Munich. Another thing to add, the park is free. If you want to visit the palace building, though, you'll have to buy a ticket. This article is about the park.

(nit: you'll see two different color themes in the photos; the photos are from November 2023 and May 2024, so you'll see Autumn and Spring photos)

A morning in Nymphenburg Palace Park

The park's iconic canal divides it into a northern and a southern sector. Water is provided by the Würm River in the west (ca. 2 km (1.2 mi)). I always start my walking from the main gate and then move to the left side towards the Badenburg Lake, in the Southern side of the park.

A morning in Nymphenburg Palace Park
The plan of the Park

Initially, you feel like you're walking inside an untouched forest. It's very serene. You walk by the Crown Prince's garden, which has several seating areas.

A morning in Nymphenburg Palace Park

After a half km, you arrive at the Amalienburg building (constructed between 1734 and 1739). It's the first building that greets you at the park from nowhere.

A morning in Nymphenburg Palace Park
Amelienburg

Walking further down the road, you reach a small village with the Green Pump House and Deer Pump House.

From there, you have two paths: walk directly, which leads you to Badenburg Lake, or take a detour into the Lion Valley. Depending on my mood, I usually detour until I reach Badenburg Lake.

The park has two handmade lakes, and Badenburg Lake is the larger one. Especially in the morning, there are very few people here, and you can enjoy being alone in a fairy tale.

A morning in Nymphenburg Palace Park
The South Vista

From Badenburg Lake, you walk the South Vista and then reach the Central Canal, from which you can see the Palace from a far distance.

A morning in Nymphenburg Palace Park
The Central Canal (a view from the Great Cascade).

The Central Canal divides the park and has raised walking paths with beautiful trees aligned on both sides.

A morning in Nymphenburg Palace Park

At this point, I usually sit on one of the benches, eat a sandwich, drink some water, and watch the surroundings. After enjoying the bird chirpings, I continue walking into the Northern Park alongside the North Vista.

The North Vista leads to Pagodenburg Lake, which is the second, smaller Lake of the Nymphenburg Palace.

The Northern side is quiet and has fewer things going on than the Southern part of the park. It's more serene, at least that was the case whenever I walked through it.

A morning in Nymphenburg Palace Park

Finally, you reach back at the palace and finish walking. In total, it takes around 2 hours, sometimes less or more, depending on how much detour you make or rest in the park.

A morning in Nymphenburg Palace Park

It's quite a beautiful park. There are many such parks in Germany, but what makes Nymphenburg Palace Park unique is its size and location in the city. It's not exactly in the city center, but it's also not very far away from it.

Another interesting information: Riding the bike is forbidden in the park, so it's just people walking around.

A morning in Nymphenburg Palace Park

You see people flocking in, but at a very slow rate. Combined with the large size of the park, especially in the morning, you feel alone in the woods in 1800s Germany, with no one around you.

It's my favorite place in Munich.

Photography details

All the photos were shot with a Leica M11, paired with 21 SEM and 35 LUX.

]]>
<![CDATA[A comparison between the M2 and M4 iPad Pro]]>https://arslan.io/2024/05/15/a-comparison-between-the-m2-vs-m4-ipad-pro/66430d5f7decb10001672b07Wed, 15 May 2024 20:05:14 GMT

I'm a huge iPad Pro fan. I have several blog posts that go into the details of how I used it in the past and why I liked it. My current workhouse was the M2 iPad Pro (11-inch) until the M4 iPad Pro (still 11-inch) arrived today. My old iPad will be a household device for the kids.

There are many M4 iPad Pro reviews out there, so I won't go into that, but I want to compare it to the previous generation, the M2 iPad Pro. First, I'll share comparison photos, and then I'll share my initial impressions.

In the photos, the white iPad is the M2 11-inch version, and the black one is the new M4 11-inch. I always bought the black versions except the previous generation because I wanted to try them out. But I decided I liked black more, so I opted for Space Black for the new iPad Pro.

Here are some of the differences:

Initial impressions

I got the new iPad Pro around noon. I immediately shot some photos with my old one and then started to set it up. Interestingly, it downloaded the latest iPadOS before I could even install my apps. After that, I imported these photos and used them for a few hours. So, these impressions are fresh; I will probably follow up on them later.

  • The new magic keyboard function keys are the best addition. I love how easy things just got better for me. Some of the actions I can do now quicker with the keyboard:
    • Dim the screen
    • Turn on Do not disturb mode.
    • Play/Pause music, change music track
    • Change the sound volume
  • The number one reason for the update was the screen. It's miles better than the existing M2 iPad Pro. The blacks are more black; the whites are more white. It's a joy so far.
  • It's harder to open the Magic Keyboard case when it's closed. I suspect this is because the magnets are much stronger than in the previous version.
  • You can feel that the newer iPad is thinner, and it feels weird. The older one was already thinner, but I love what they did here. It's a magical device.
  • The sound seems to have less volume, but maybe it's my perception. It's not quiet, but also not very loud.
  • I used a scale and the newer iPad Pro is 56grams lighter than the previous generation. Even though it's not a lot, it was perceivable.
  • There is a new battery setting to limit charging up to 80%. I've enabled it.
  • Holding the iPad with the new keyboard in clamshell mode is a degradation compared to the old one. The old Magic Keyboard had a protective fabric around the hinge, and the design was cohesive.
  • I imported and edited the photos in this post on the new M4 iPad Pro. Adobe Lightroom is faster. Rotating, cropping, and processing RAW 60mp photos is a joy. It was already fast with the M2 iPad, but you can feel some speed gains here.
  • Typing on the new keyboard feels better due to the metal surface.
  • There are some software issues, like the inability to select keyboards (or switch to the emoji keyboard).
  • I have had many Space/Black variations of the iPad; this is by far the blackest one.
  • The screen on the new 11-inch feels wider. I thought it was an imagination, but I put them on top of each other, and there is indeed a 4-5mm difference.

Upgrading from the M2 to M4 is not needed of course, but I had two reasons. First, I hated the old M2's display (it was inferior compared to the 12.9 M2 iPad Pro). Second, we needed another device for our household so the kids and my wife could use it at home. So, instead of buying a new one, I passed on my iPad to them.

If you're considering whether it's worth upgrading, it's wise to ask these questions: Do you use the Magic Keyboard often? Do you watch a lot of videos? Do you edit photos? If you answer with "yes" to them, than I think it's worth upgrading. Everything is faster and smoother, and there is a perceivable increase in your quality of life. But, if you're not sure about these questions, I would skip this iteration or wait until the prices are in the second-hand market.

]]>
<![CDATA[Why I prefer the iPad over a MacBook]]>https://arslan.io/2024/05/11/why-i-prefer-the-ipad-over-a-macbook/663a9a78bc730b0001906915Sat, 11 May 2024 08:04:53 GMT

I recently traveled to Germany. Usually, I always bring my iPad, but this time, I had to bring my MacBook as I had a few errands that required me to have a full macOS. For the whole trip, I missed my iPad Pro (M2) every single time I had to use my MacBook Pro (M2 Pro, 14').

(for the reader: iPad means iPad Pro and MacBook means MacBook Pro in the context of this article, I know there are many differences between the Non-Air, Air, and Pro models)

Recently, a friend told me he didn't understand why people prefer the iPad's. For him, it was a toy. For me, it's a productive workhorse. It's a beautiful and magical device. The magic is not immediately clear, but the more one embrace the iPad way, and start using it, it becomes a joy to use it.

For me, here are the top reasons why I love the iPad and why I missed it during my travel (for the record, I'm currently using the 2022 iPad Pro 11' with M2. I ordered the new 2024 11' model with M4, and it'll replace my existing iPad. I plan to write a first impression blog post about it, coming soon.).

  • iPad works better in environments with constrained spaces, such as airplanes. I can hold it in various ways; I can't say the same for the MacBook.. The iPad is portable and small enough to put on an airplane tray. The ability to use the iPad in awkward places is a net benefit.
  • iPad has various apps that allow you to download offline Videos to watch later (Netflix, Prime, etc...). The MacBook doesn't have such apps. Of course, one can always download the videos in various ways, but it's a hassle.
  • It doesn't get hot when I use it on my lap.
  • I can use my iPad while cooking food for the family, it's easier to place it in various places on the kitchen countertop.
  • It's on instantly, whereas it takes multiple seconds on the MacBook to turn it on.
  • Switching between several apps is faster and quicker, especially if you use it with the Magic Keyboard.
  • I love editing my Photos on Lightroom via iPad. I hated using Lightroom CC on my MacBook. It's quicker and easier to edit photos on the iPad than on the MacBook. I probably can write a lengthy blog post about how the Lightroom is so much better on the iPad (of course Adobe also doesn't care a lot about their apps on the macOS).
  • Watching movies or watching YouTube videos is more fun on the iPad. (also, various offline modes rock when I have to travel)
  • Designing a 3D model with Shapr3D is better than trying anything else. I'm not a designer, but if I were to work professionally, Shapr3D + iPad would be the only reason to use the iPad.
  • I can use the iPad while lying on the couch.
  • I like to use it to write blog posts (nit: I'm currently writing this on my iPad Pro).
  • I can use my iPad while exercising to watch instructions or as part of my fitness routine, while the MacBook is very inflexible.
  • iPad is miles lighter than my MacBook. It makes a lot more sense to use it for travel.
  • The kids can use the iPad during long road trips. I can mount it to the seats easily.

I only use a MacBook for my professional Software development job. I need Docker, my Fish/Tmux/Vim environment, kubectl, and the ability to compile Go code, among many other things.

On top of these, some websites don't render well on the iPad, Safari, certain extensions are still missing, and I can't slice 3D models on the iPad yet. These are some of the software that is hard or impossible to use on the iPad. So, it's not a full replacement for a MacBook yet. (I actually tried it at some point, and wrote a lengthy blog post about my experience: Using the iPad Pro as my development machine)

I know Apple would and will never allow people to do any of these on an iPad, but the moment they do, there is zero reason I would prefer a MacBook for an iPad. The iPad feels like a future device, whereas the MacBook feels stuck in the past. The iPad needs a future OS, and unfortunately, Apple has intentionally held back operating system improvements. Once Apple stops treating the iPad like a poster child; it'll be the most incredible device on earth.

]]>
<![CDATA[Braun Börse 2024]]>The Braun+Design Börse is an annual event and fair focusing on Braun products. Braun might not be the design icon it was 40 years ago, but starting in 1955, it profoundly impacted the design world, starting with its cooperation with the Ulm School of Design.

With Dieter

]]>
https://arslan.io/2024/05/05/braun-borse-2024/66373979264dad0001a0773bSun, 05 May 2024 15:55:04 GMT

The Braun+Design Börse is an annual event and fair focusing on Braun products. Braun might not be the design icon it was 40 years ago, but starting in 1955, it profoundly impacted the design world, starting with its cooperation with the Ulm School of Design.

Braun Börse 2024

With Dieter Rams as the Head of the Design group, Braun became a Design Icon. Nowadays, Braun is again in the spotlight with their Head of Design, Oliver Grabes. Over the decades, many legendary products have been created. Most of them inspired other companies, such as Apple, immensely.

Braun Börse 2024

So, it's no surprise that a huge Braun collectors community exists worldwide. Most of these people collect Braun products for a living. These people are all over the place, from South Korea to Turkey to the US. And, of course, most of them are based in Germany.

Braun Börse 2024

Because of this, since 1982, there has been an annual event at the Braun HQ (Kronberg, Germany) for these people to come together. Initially, it was held multiple times per year, but it was later decided that once per year was better.

Braun Börse 2024

When I learned about this event last year from a collector in Turkey (thank you, Cem!), I planned a trip to Frankfurt for this year's Braun Börse. It was the perfect place for any Braun or Dieter Rams enthusiasts.

Braun Börse 2024
Several iconic Braun Watches from Dietrich Lubs and Dieter Rams

The event starts at 10 a.m. and ends at 4 p.m., though I've seen people arrive earlier. Entry is 4 euros, and there is coffee and cake, as well as a street food vendor outside the venue selling several snacks.

Braun Börse 2024

What can you find there? Of course, mostly Braun products from the '60s, '70s, and '80s, but also other brands, such as Apple, Herman Miller, Vitsoe, Lamy, Olivetti, and many others. It's not a huge place but quite compact and dense.

Braun Börse 2024

On the shelves and tables, you can find several products: Hi-Fi products, hair dryers, fans, watches (such as the AW50 I've reviewed in the past), posters, juicers, razors (lots of them), and many more.

Braun Börse 2024

It's the perfect place to find the particular products you were looking for or products you didn't know existed. For example, I met Jaro Gielens, the author of the Soft Electronics book. He was a great person and even signed the book for me.

Here, I discovered the Braun 550 Hair dryer in a stunning orange color (and purchased one!). The price usually changes depending on the condition. For example, beaten-up versions and used ones sell for around 30-40 euros but rarely used ones sell for more.

Braun Börse 2024
Various Braun razor models (there are collectors specialized in collecting razors only)
Braun Börse 2024
Some iconic Braun radios are stacked up for sale (such as the Braun SK1 in the middle). The SK1 in the picture looks new because the body was painted and restored. These pieces don't cost a lot of money. Pieces rarely touched and in good condition sell for very high prices.
Braun Börse 2024
Algol: the Brionvega television, an iconic collectible product designed by M. Zanuso, allows viewing even when the device is placed on the ground. As you can see, you can also find non-Braun devices.
Braun Börse 2024
The stacked boxes on the left were boxes for kids to build and experiment with various electronic components.
Braun Börse 2024
In the middle is the Braun T52, a portable radio designed by Dieter Rams in 1961. It's based on the "transistor 1" radio from 1957. It has inspired other products, such as the OB-4 from Teenage Engineering (2022).
Braun Börse 2024
Braun HL1 Tischlüfter (Ventilator). It’s an iconic piece because of its use when President Kennedy gave a speech at the Frankfurter Paulskirche in 1963.

The fair venue was compact and not crowded in the morning. However, it was overwhelming, so it's better to do multiple passes as you see things that you didn't see earlier. This was eye-opening for me.

Braun Börse 2024

In the end, I purchased several goods from the event and left with a big smile. Here is an overview of what I've got:

Braun Börse 2024

There are several things here, from the top left to the bottom right:

  • Braun AW 20 Watch
  • Braun AW 10 Watch
  • Stainless Steel Milanese Bracelet for Braun AW watches
  • Braun 550 Hairdryer
  • The book: Braun, Fifty Years of Design and Innovation
  • Braun Citromatic MPZ2
  • Limited Edition Braun ET66 Calculator in White
  • Nutcracker from menu.as
  • "Soft Electronics" book
  • A no-name stainless steel mug for small liquids
  • A book about Hans Gugelot (in German)
  • Flyer about various Braun watches.
Braun Börse 2024
I added to my Braun Watch collection the AW 20 and AW 10
Braun Börse 2024
The Braun ET66 calculator is a well-known iconic design. Although the white version is no longer produced, I’m happy to find one at the fair.

Verdict

This is my first visit to the Braun Börse fair. I loved the overall vibe, the people, and the energy filling the space. Next year I plan to come up with a more clearer list of things I want to get and also meet other fellow Braun enthusiasts.

]]>