Denis' Blog https://denisthiessen.de My personal webpage for my stuff that I wanna talk about. Mon, 08 Jun 2026 20:17:02 +0000 This takes 6 minutes to read... https://denisthiessen.de/blog/countdown-meta.html Sat, 06 Sep 2025 10:50:00 +0000 https://denisthiessen.de/blog/countdown-meta.html Cosplaying as a Sysadmin https://denisthiessen.de/blog/cosplaying-as-a-sysadmin.html <p>Hey hey…</p> <p>Hope you are doing well so far. 🙂</p> <p>So recently I have been doing some fancy little thingies regarding my PC personal setup and a homelab.</p> <p>One of these thingies was to finally implement a proper backup strategy that isn’t: “Hey, I have a hard drive; let me put things whenever on it…”</p> <p>On that journey, I have learned an interesting thing or two and wanted to share that with whoever is actually reading this. 😄</p> <p>So yeah… Here. We. Go.</p> <h2 id="the-basics">The Basics</h2> <p>In general: Having multiple copies of your data is a good thing. Before you go out and buy 100 hard drives to store these in your closet: Hold your horses.</p> <p>You should also think about where you actually put your backups physically.</p> <p>There’s always the possibility of something happening in your home:</p> <ul> <li>A fire</li> <li>Robberies</li> <li>Natural disasters</li> </ul> <p>To give you some examples.</p> <p>Of course, you can’t have a data center everywhere like those cloud providers - so what is the middle ground?</p> <p>A good rule of thumb is the so-called “3-2-1” rule.</p> <ul> <li>3 copies of your data</li> <li>On 2 types of storage mediums</li> <li>With at least one of them being off-site at a different physical location.</li> </ul> <p>So an implementation of this could be done with, say 2 HDDs and one SSD with one of the hard drives being stored at a friend’s place.</p> <p>The cool thing is that this general rule-of-thumb can be expanded pretty easily.</p> <p>For example, you can expand on one more copy of your data to improve redundancy, one more backup medium type to lessen the average failure rates of your storage medium, or one more storage location to improve geo-redundancy.</p> <p>Each of these increases comes with the inherent cost of additional time spent on maintenance or inherent cost. Therefore, you need to weigh in each factor accordingly.</p> <h2 id="weighing-in">Weighing in…</h2> <p>As mentioned with each factor added towards our basic 3-2-1 rule, either effort or general cost increases. So let’s maybe look into that in a bit more detail. (<em>without making it too precise and outdated like in a week after publishing this…</em>)</p> <h3 id="backup-copies">Backup Copies</h3> <p>Regarding the “having X copies of your data” rule; that gets relatively simple. With each copy, ideally, you want to have that on different storage devices, the amount of necessary storage space increases. That increases inherent cost, which scales roughly linearly, depending on the storage type you get. Also, effort increases due to the necessity of duplicating your data. In theory, one could put the different backups in different NASes, but this would also a) pose an inherent security risk due to possible unregulated access and b) degrade the backup disks quicker; in turn causing more drive failures.</p> <h3 id="storage-types">Storage Types</h3> <p>When looking at the different storage types, that gets a lot more complex: There are around 10 types of storage mediums, that one could realistically choose from and not critically overpay as well (sorry floppy disks and other legacy media…)</p> <p>They are categorized into four main types:</p> <p><strong>Flash Storage</strong></p> <ul> <li>SSD (Solid State Drives): This includes SATA and the faster m.2 drives. However NAS-grade m.2 SSDs, as of writing are not available for the average consumer.</li> <li>SD-Cards: Includes both full-size and micro SD-cards however, since development is more geared towards micro SD cards and not geared towards long-term archival storage, this mostly takes them into account.</li> <li>CF-Cards: Mostly in use within cameras, therefore more relevant within this field.</li> <li>USB-Drives: Every type of flash storage drive; commonly in use with portable storage.</li> <li>eMMC Storage: Embedded flash storage chips.</li> </ul> <p><strong>Magnetic Storage</strong></p> <ul> <li>HDDs (Hard Disk Drives)</li> <li>LTO (Linear Tape Open) Tapes or other magnetic tapes:</li> </ul> <p><strong>Optical Storage</strong></p> <ul> <li>CDs/DVDs</li> <li>BluRays: And generally every type of BD-disc for larger capacities; typically used for high-definition media</li> <li>MDisc (MilleniumDisc) or similar long-term archival disks</li> </ul> <table> <thead> <tr> <th><strong>Storage Medium</strong></th> <th><strong>Advantages</strong></th> <th><strong>Disadvantages</strong></th> </tr> </thead> <tbody> <tr> <td><strong>SSD (Solid State Drives)</strong></td> <td>- High speed and reliability. <br /> - No moving parts, less prone to mechanical failure.</td> <td>- Expensive per GB. <br /> - Limited write endurance. <br /> - Data can degrade over time without power.</td> </tr> <tr> <td><strong>SD-Cards</strong></td> <td>- Portable and widely available. <br /> - Compact size for easy storage.</td> <td>- Not designed for long-term storage. <br /> - Prone to data corruption. <br /> - Limited durability.</td> </tr> <tr> <td><strong>CF-Cards</strong></td> <td>- Durable and commonly used in professional cameras. <br /> - Moderate capacity options.</td> <td>- High cost per GB. <br /> - Not optimized for long-term archival.</td> </tr> <tr> <td><strong>USB-Drives</strong></td> <td>- Portable and affordable. <br /> - Easy to use and widely supported.</td> <td>- Unreliable for long-term storage. <br /> - Limited write endurance.</td> </tr> <tr> <td><strong>eMMC Storage</strong></td> <td>- Common in embedded systems. <br /> - Compact and integrated.</td> <td>- Not user-replaceable. <br /> - Limited lifespan for archival purposes.</td> </tr> <tr> <td><strong>HDDs (Hard Disk Drives)</strong></td> <td>- Cost-effective for large capacities. <br /> - Widely supported and replaceable.</td> <td>- Susceptible to mechanical failure. <br /> - Magnetic data degrades over years.</td> </tr> <tr> <td><strong>LTO Tapes</strong></td> <td>- Extremely long lifespan (20–30 years). <br /> - High capacity and cost-effective for large archives.</td> <td>- Requires specialized hardware. <br /> - Slow read/write speeds compared to modern storage.</td> </tr> <tr> <td><strong>CDs/DVDs</strong></td> <td>- Inexpensive and widely available. <br /> - Easy to distribute.</td> <td>- Limited capacity. <br /> - Prone to physical damage and degradation (10–20 years lifespan).</td> </tr> <tr> <td><strong>BluRays</strong></td> <td>- Higher capacity than DVDs. <br /> - Better longevity (20–50 years, depending on quality).</td> <td>- Expensive compared to DVDs. <br /> - Requires specific hardware.</td> </tr> <tr> <td><strong>MDisc</strong></td> <td>- Designed for archival storage (1000+ years lifespan). <br /> - Resistant to environmental degradation.</td> <td>- High cost per disc. <br /> - Requires compatible drives for writing.</td> </tr> </tbody> </table> <p>This is also not mentioning data storage capabilities, accessible via the cloud, from the likes of Google, AWS, and so on. <em>which is number four in that list…</em> I didn’t want to directly compare that with the other types of storage media, because this one is, in contrast, not self-managed and comes with its own set of challenges and opportunities. More on that in <a href="#cloud-providers">Cloud Providers</a>.</p> <h3 id="offsite-backups">Offsite backups</h3> <p>Lastly, the conversation arises in regards to where you store that data and where you put it off-site. Generally, there are three philosophies regarding this:</p> <ul> <li>You don’t trust anyone with your data and have some place available offsite, where you could put the storage devices to.</li> <li>You trust people you know and put that data in their places.</li> <li>You can somewhat trust a cloud provider with your data.</li> </ul> <p>Each of them has a set of advantages and disadvantages, of course; but in the end, you have to know what is best for you in your situation. Maybe you have some extra space, where you could store some spare hard drives somewhere offsite. Or maybe you are also fine with the other two options as well. Even if the data were to be compromised, you could always employ encryption, with a tool like <em>Veracrypt</em>, meaning nobody could actually do anything with that data, essentially rendering it useless.</p> <p>Whatever you choose; that choice depends on your trust towards other entities.</p> <h2 id="fancy-network-attached-thingies">Fancy network attached thingies.</h2> <p>So… I have kinda touched upon that topic for a second but network-attached storage can be kinda cool. But what is that actually? In general that describes every category of storage that can be accessed via a network connection. That would kinda include cloud storage from third-party providers but for all intents and purposes, I am only talking about storage that you locally host and make accessible to the outside or just your local network.</p> <p>Sounds cool, right? Your own cloud, with all the bells and whistles. Throw something like Nextcloud onto a small mini-PC or Raspberry Pi and you can even have fancy features like albums, media viewers a fancy UI, or even automatic sync with your devices easily available.</p> <p>The caveat is just that you have to host that by yourself. This comes with its own issues. To not make it ultra-scuffed, you need to buy some extra hardware, like that aforementioned mini-PC in some way, shape, or form. Then you would also probably want some enclosure to not have everything just lying around.</p> <p>Well… And that is only the easy part. Handling the networking to route everything correctly and expose the drive or Nextcloud service or whatever you use. Finally, there’s the almighty “security” looming above you. Having an exposed service also means, that not only you can access it but potentially other people. Of course, pre-configured services have authentication measures configured but depending on how careless you set up everything one could always get into your system by some sort of backdoor, or misconfigured firewall (<em>did I already mention the firewall that you would have to configure?</em> 😂), non-secure password choice, or what-ever.</p> <p>Of course, there are pre-made systems, that make <em>a lot</em> of these steps a lot easier or already pre-configured. These, naturally, come at an increased cost though. <em>just like in real life it’s just a compromise that you have to make</em></p> <p>So having that extra fanciness leaves you with some extra choices to make and possible extra effort and extra cost spent. But don’t let that intimidate you: If you are able to do that, oftentimes it’s worth it since the extra comfort is often worth it.</p> <p><em>But strange guy on the internet: How does this link back to backups?</em></p> <p>I mean… In the end, this NAS is just another copy of your data on another storage medium that could be potentially placed off-site.</p> <p>You could also regard the NAS as your single source of truth regarding your state of the backups and then configure it in a way, so, for example, whenever a hard drive gets plugged in, the NAS’ contents get mirrored onto the hard drive, via an <em>rsync</em> script. The possibilities are endless and only limited by your imagination. This just serves you as an idea point to build your setup. So yeah… I guess you got the main idea of that: NASes are cool. 😁</p> <h2 id="security">Security</h2> <p>I already talked about a lot of things already: So let’s just complete this topic. Digital security is always kinda important; especially when you expose your drives to the outside world. Going into detail with that is a bit of a long one, especially since this is already getting too long for my liking. If you follow those tips at least somewhat, you are already on a good path.</p> <p>However, there is also the topic of the physical security of your backups. Securing it against intruders, or physical damage, like fires or floods. For the last one, there are disaster-proof cases for hard drives: so that makes it kinda easy. Securing against intruders is a bit trickier. You could always employ the encryption strategy to render the files of those drives useless. Otherwise, this is just like hiding any other valuables at your place and you know best, where to put them. Maybe in some hidden cupboard, or in a safe? You know it best. 😁</p> <h2 id="cloud-providers">Cloud Providers</h2> <p>Well… This one is also something I have touched upon a few times in this never-ending story. Their promise is simple: Easily scalable storage that is available with the press of a button and all of the backing up/security is already taken care of…</p> <p><em>All of that is for just a small monthly fee.</em></p> <p>Sounds cool, right? Well… It has its caveats. First, I already kinda mentioned this aspect “<em>a small monthly fee</em>”. Especially if you want to consider your backup in timeframes of years instead of months, this can become expensive. So can be buying extra hard drives for small amounts of data. Just keep that aspect in mind and when it’s worth it to go for one or another.</p> <p>Next up, the main advantage that someone else is taking care of your data basically is also its greatest disadvantage. Whether it’s privacy, (planned) obsolescence, or security issues (either account security or data breaches)… You’ve got it all. So are you sure that you want to give that data to someone else, especially big corp like AWS, Google, or whoever else…</p> <p>You could encrypt all of that data so that no one could do something with your data, even if it went to someone else but in the end, it’s a thing that you need to know yourself.</p> <h2 id="final-touchups">Final Touchups</h2> <p>Now that we’ve talked about a lot of different things, maybe let’s do some final touchups, that would be neat to keep in mind:</p> <ol> <li> <p>Backup Validation</p> <p>Regularly check that your backups are actually working. Trust me, it’s frustrating to find out your backups are corrupted; especially in the moments you need them most. (<em>Little tip: Hashes can be good to quickly and somewhat automatically verify your backup’s integrity.</em>) Test your backups every once in a while as well as the process to recover those files. <em>Maybe also see how that takes to retrieve your backups: especially the offsite ones; just in case you actually need them urgently…</em> 😁</p> </li> <li> <p>Error Correction</p> <p>Error correction can be cool to prevent corruption a bit… At least it gives you some added resilience, at the cost of added storage capacity necessary.</p> </li> <li> <p>Automated Backups</p> <p>Eliminate the human error factor by automating your backups. Whether through NAS software, rsync scripts, or third-party backup tools, automating ensures consistency without relying on your memory.</p> </li> </ol> <p>I think I talked long enough about backups and that kind of stuff… So yeah… Just think about it and do something; you’ll still be better than most other people. 😁 Maybe adapt it to your circumstances, since everyone’s situation is different, and write everything down, so you don’t forget.</p> <p>Well… Have fun and…</p> <p>See ya</p> Mon, 20 Jan 2025 19:20:00 +0000 https://denisthiessen.de/blog/cosplaying-as-a-sysadmin.html Apps/Thingies and being happy with them... Maybe... Who knows?!? https://denisthiessen.de/blog/simplicity.html <p>Hey hey…</p> <p>So recently I have had some time on my hand to try out different technical gimmicks or “trendy” pieces of software, which supposedly makes your life a lot easier, solve world hunger or bring back unicorns to life. However, this is rarely the case. There is always this one thing that bugs you out, or that is not properly working or put behind some paywall. <em>You can’t get everything in life, I guess…</em></p> <p>So in the end, you may end up unhappy, maybe even try out something else or give up completely. I, myself have not found a solution to this “problem” yet, nor do I claim to be the messiah in these circumstances. I’m just writing about this, because I simply felt like it.</p> <p>I am experimenting with this all the time, so probably the things I am using right now will probably change next week or next month, or whenever… However, these changes kinda all have one thing in common: They strive to make my life a bit easier or less complicated or solve some “issue” I had before.</p> <p><strong>Simplicity</strong></p> <p>A weird word, to be honest with you, mostly due to its subjectivity. Some things just come easier for people than for others and that is the beauty in life. Despite that, there is still some general consensus on what is considered “simple”. Does it include being intuitive, taking as few steps as possible, or being well-marked/clearly visible? Honestly, that kind of depends on the context and you could make an argument for or against each of these factors in isolation, but together it at least forms a good-ish basis. However, this is a topic for philosophers, or UX-designers, or someone else.</p> <p>But here’s where things often go wrong. The more features a product has, the more difficult it becomes to maintain that simplicity. However, applications with loads of functionality are naturally more complex by having lots of options. Yes, by designing these things well, you can still create something easy to use but you can probably see the issue. 😅</p> <p>Naturally the thought would be to choose or create something, that has the minimum amount fo features, that you might need, but selection can be quite limited and different people have different needs. Therefore you kind of need to deal with the “extra fluff” added. As with everything in life, there is a compromise necessary to be made. A compromise, that you kinda need to be mindful of, when introducing something new, not to overburden yourself and your users. I mean… This sounds a bit like your standard rambling about minimalism that should be a bit obvious, once you say it out loud. <em>d’uh</em> In a world, that maximizes on consumerism and the idea of getting <em>more and more</em>, it is something, that should be thought of more often.</p> <p>Besides the factor of having the latest and greatest thingy, or something that sounds really cool to have, the fear of missing out on them feels like a relevant factor to that.</p> <p>But does it actually help? Or does the thing just introduce additional problems?</p> <p>What would be the solution to all of that? Well… That is a bit of a personal question, but just being mindful about that, is a good first step in my opinion. I had the situation quite often, where someone wanted something new and specific but didn’t <em>actually</em> need it. But one should also try out different things and evaluate them accordingly… <em>Does that app actually solve a problem I have or is it just a shiny object?</em> ✨</p> <p>When I thought about it, these factors came to mind, when evaluating this matter:</p> <ul> <li>Utility: Does this app/feature solve a specific problem that is currently unsolved?</li> <li>Frequency: Will you use it regularly, or is it a “just-in-case” addition?</li> <li>Redundancy: Does it replace something you already have, or does it add a new layer of complexity?</li> <li>Integration: Does the thing with existing tools? Can it make the overall system more streamlined, not more complex?</li> <li>Replacement: Does it allow you to get rid of something else, simplifying your overarching situation?</li> <li>Longevity: Is this new thing going to be supported in the long run, or is it a temporary trend?</li> </ul> <p>Besides that, one should also gain the encouragement to let go of things, that you don’t <em>really</em> need and evaluate that frequently.</p> <p>So… Is everything that relevant? Not in every situation, there the basic principle <em>just think about it</em> applies. Be conscious and don’t overthink everything. You can’t really achieve 100 percent “cleanliness” for that matter. So don’t overdo it. You’ll waste more time than without it. Think of it more in terms of the Pareto principle with making big gains of the 80 percent, that you can easily prevent and not with the last, and hardest 20 percent. 😄</p> <p>Well… I guess, that is all I have on my mind right now, and how I at least handle that matter regarding that.</p> <p>I hope you found it at least a bit thoughtful.</p> <p>See ya.</p> Mon, 21 Oct 2024 15:20:00 +0000 https://denisthiessen.de/blog/simplicity.html Looking back, again... https://denisthiessen.de/blog/looking-back-again.html <p>Hey hey, everybody,</p> <p>Hope you’re doing well so far.</p> <p>Well… I’m done. <em>and not only mentally</em> I just finished my last exams and hand-ins, and now it’s on my Master’s Thesis. That will probably be another topic for another time, but I wanted to take a bit of time to reflect now, using “funny” statistics and random anecdotes.</p> <p>Anyway, let’s just get started. First, let’s look at some university-related statistics. Since I have just finished all the courses, I can provide the overall statistics regarding how long an MSc in Software Engineering takes. <em>okaaaaay… I haven’t done my thesis yet, and I missed the first three weeks… but still</em></p> <p><img class="img-center" width="90%" alt="A graph showing the total time spent" src="../assets/icons/posts/reflecting_part_two/total_timeline.png" /></p> <p>The interesting thing about this is that it is surprisingly roughly within the university guidelines regarding the amount of time spent. Assuming I spent roughly 40-45 hours on average for the first three weeks (as a low estimate), this means I spent roughly 1100 hours on the whole ordeal, give or take a bit.</p> <p>As of now, I have acquired 42 ECTS points within this program, for each of which you are supposed to spend 30 hours. That results in the 1260 hours you’re supposed to spend on it. That is even a bit lower than the supposed amount. <em>It certainly doesn’t feel that way, though…</em></p> <p>As of now, I’m yet to form an opinion on this fact, and I’m severely confused on so many levels while having “Vietnam flashbacks” of the days when I spent the whole day trying to get some project to work.</p> <p>To be fair, this amount of time is just pure Netto time, even exploding smaller breaks, like toilet breaks, to the best of my abilities.</p> <p>Cool. Now, let’s move on to maybe some more fun things in life. Here is the updated map of where I at least got off once, now including the various stations I had to change or get out in Germany to visit family/friends. <em>thanks DB</em> ❤️</p> <p><img class="img-center" width="90%" alt="A map with all of the public transit stops I visited during my time." src="../assets/icons/posts/reflecting_part_two/public_transit_stops.png" /></p> <p>I had quite a bit of time in January and used it quite a bit to travel around and explore various places here in the Netherlands or even outside of that. 😊 Even outside that, I tried visiting more stuff, and I think I was quite successful. 😉</p> <p><img class="img-center" width="90%" alt="A map with all of the 'places' I visited during my time." src="../assets/icons/posts/reflecting_part_two/places_map.png" /></p> <p><a href="https://www.google.com/maps/d/view?mid=1BSEwAlZK2wgJWiilUZg2gCORRqBD1jY&amp;ll=51.15766866122665%2C6.479080099999992&amp;z=7">Link to the map.</a></p> <p>Another cool thing that came to my mind is when and “how” I travelled all of those places with a sort of timeline. You see. Using an OV-Chipkaart really has the advantage of being able to export the check-in and check-out times at different stations, so with that data, I could put it into a map. Due to some inconsistencies in the data, creating such a funny-looking GIF with the stations and places popping up would be a bit “difficult” or tiresome.</p> <p>I don’t know about you, but this would be kinda cool, but yeah… <em>maybe also a list of cool places would be kinda cool in the future, but who knows… that is also something for another post.</em></p> <p>About potentially spending way too much time on this… I created a funny little tool to visualize all of that time-tracking data in a fancier and more interactive way. I mainly made it to learn a bit of React, but this was a nice side-effect of that, I guess.</p> <p><a href="https://trackervis.denisthiessen.de/">Here</a> is the link to that tool.</p> <p>Just select the corresponding preset and enjoy. ❤️ <em>In general, this tool can also be used to visualize Clockify time tracking data, which I used, but in this case, I’m also kinda giving it a second purpose.</em></p> <p>In there, you can also view the corresponding data for each lecture and even some subactivities.</p> <p><img class="img-center" width="90%" alt="A graph showing the time spent per lecture." src="../assets/icons/posts/reflecting_part_two/project_timeline.png" /></p> <p>See? Cool, right?</p> <p>Interestingly, when overlaying this time-tracking data with a daily emotional self-assessment, no major correlation between spending lots of time in uni and general happiness can be seen in my case. On some days, it does flow over, but the general trend doesn’t show such a correlation. Does that mean anything? I don’t know. I’m neither a psychologist nor a statistician. My best guess would be that for most of the time (besides that period around the beginning/mid-March), I found some enjoyment out of that ordeal and somehow could separate this and whatever was left of my own personal life. <em>but I don’t really know, haha</em></p> <p><img class="img-center" width="90%" alt="A graph with the total amount of time spent on university activities overlaid with my self-accessed emotional status." src="../assets/icons/posts/reflecting_part_two/emotional_graph_total_work.png" /></p> <p>Onto travelling. I have often gone back and forth between Germany (around Karlsruhe) and the Netherlands (Amsterdam). Anyone who travelled with “Deutsche Bahn” knows that this can be a relatively interesting ordeal filled with technical difficulties, strikes, fuck-ups and whatever you are currently not imagining. It will happen. (<em>my “favourites” were electrical issues at the border, “personal damages”, the inability to detach carriages and the unplanned stop in a tiny town with an ICE train</em>) Therefore, you can imagine travel times varied quite a bit. 😄</p> <ul> <li>Shortest ride: 4 hours 52 minutes (0 stops)</li> <li>Longest ride: 8 hours 46 minutes (4 stops)</li> </ul> <p>(<em>my longest delay in the Netherlands was 14 minutes, while in Germany, it was 132 minutes btw…</em>)</p> <p>My personal best travel “life-hacks” are:</p> <ul> <li>Surprisingly, few tourists know this. You can just pay with your bank card for a public transit ticket. Stop buying physical tickets. They are waaaay more expensive.</li> <li>When getting an ICE train from Amsterdam, a seat reservation is basically never needed. Most people will get in around the Cologne area.</li> <li>Every train station in Amsterdam and many in the Netherlands are equipped with ticket gates. Say you don’t want to use a specific ticket for, <em>whatever reason</em>, you can enter from another station with an OV-Chipkaart and check out inside the train departure area with specific check-out points at the platforms. <em>Or look like a confused tourist at Amsterdam Centraal.</em></li> <li>DB is <em>very</em> tolerant in giving you money back. <a href="https://int.bahn.de/en/booking-information/passenger-rights">Use it</a>.</li> <li>A Museumkaart also acts as the best toilet pass you can have. And those toilets are clean, as well, unlike those public urinals…</li> <li>The ferries are for free in Amsterdam. (For walking and biking people)</li> <li>The window to change over public transit options is very generous. (35 minutes) For me, that’s enough to go grocery shopping and still easily catch the next option, all being on “one trip”. This makes the changeover trip super cheap.</li> <li>Try to avoid the 2/12 tram during peak hours between Centraal Station and Museumplein. Don’t do this to yourself. Way too many tourists…</li> <li>When booking a train ticket from the Netherlands to Germany. Book over DB and not NS. It’s cheaper. There are some quirks, though: Book early (it uses flexible pricing), don’t look at a trip too often (it uses dynamic pricing), and after a few searches, prices can increase. To circumvent this, use incognito mode or pick the next or previous day and scroll back/forth (by pressing either the “earlier” or “later” buttons); especially if you’re under 25, consider getting a Bahncard 25, it can be worth it in a very little amount of trips, even just the one. 😄</li> <li>Based on my experience, the ICE train to/from Basel - Amsterdam has been the most reliable one. (<em>but that is also the most expensive one without careful planning</em>)</li> </ul> <p>Finally, here are just some random tidbits which just came into my head that you might find “funny”:</p> <ul> <li>Amount of times striving a bike/car: 7</li> <li>Amount of cheese consumed: Enough to kill any lactose-intolerant person</li> <li>Amount of photobombed tourist pictures: Way too many, should be over 30, including 4 TikTok dance videos.</li> <li>Best Dutch snack creation: Bittergarnituur (<em>you literally get an heartattack when looking at that…</em>)</li> <li>Most coffee consumed in a day: ~10 shots of espresso.</li> <li>Best sharing snack with other partners in pain, especially during stressful periods: The 1,19€ chocolate cookies from Albert Heijn. <em>#noad</em></li> <li>Weather forecast accuracy: If it’s not totally obvious by looking outside: Literally 0%. If it rains, it will always have extra headwind and rain in your eyes.</li> </ul> <p>Okay. There’s probably way more that I could think of that could be funny or interesting in one way or another. I feel like, though, that this is already long enough, so let’s just leave that for another day. 😉</p> <p>So yeah. Hope you enjoyed whatever that was.</p> <p>Have a nice day, and Happy Easter. 🐰</p> <p>See ya.</p> Sun, 31 Mar 2024 18:00:00 +0000 https://denisthiessen.de/blog/looking-back-again.html Looking back, for now... https://denisthiessen.de/blog/looking-back.html <p>Hey hey…</p> <p>Long time no see. 😅 It’s been a while since my last post of any kind, but I’ve been a “busy bee” in the meantime. I mentioned that before, but I started out my MSc in Software Engineering. If you wanna catch up, on how I got there even in the first place, check out the previous post, where I go into more detail.</p> <p>Well… I think the words from our program director describe it pretty well, regarding how I feel. “Intimate(ly) Pressure-Cook(ed)”.</p> <p>So yeah… Quite a lot of work. Quite a lot of adjusting. Quite a lot of “getting in the groove”. But also, quite a lot of learning new things.</p> <p>I wouldn’t even know where to start with this honestly. So let me just list a few things, which come into my mind.</p> <ul> <li>Dealing with randomized international teams for different projects.</li> <li>Learning various new programming languages and weird tools. <em>kind regards to out to you Rascal…</em> ❤️</li> <li>Learning to deal with high workloads and other people a bit better. <em>still working on that one…</em> 😅</li> <li>Dealing with way too many inconsistencies from different people.</li> <li>When there is a possibility to do an extra thing, which you can do… Do it. Often times, it’s worth it.</li> </ul> <p>Even when I’m looking at things outside of my studies, there are also quite a lot of thoughts.</p> <ul> <li>Living alone, for the first time is quite an adjustment but can be quite refreshing.</li> <li>Go out. Explore the world outside your door. It’s worth it.</li> <li>Be patient, when it comes to Deutsche Bahn. Being angry doesn’t solve any problems. Try to “enjoy” the ride.</li> <li>Try out some random things. Whatever you feel like in the moment. It helps out distancing yourself from all the other stuff going on.</li> <li>Look out for those quintessential people in your circle of influence. Don’t be a dick to them and try to help them out as much as possible. You can’t do this alone!</li> <li>Enjoy the ride. This doesn’t last forever.</li> </ul> <p>While thinking about this stuff, I’ve also tried visulizing different things. Maybe you find those at least remotely interesting. I guess this is one way to use this kind of data. Especially when it comes to how much you did in various aspects, this becomes pretty interesting.</p> <figure> <img width="90%" alt="A map of every place I visited." src="../assets/icons/posts/reflecting_for_now/work_graph.png" /> <figcaption>A bar graph showing the amount of work I did for my university studies. <br /> (Partially starting from the 26th of September, programme started earlier.)</figcaption> </figure> <p><br /></p> <figure> <img width="90%" alt="A map of every place I visited." src="../assets/icons/posts/reflecting_for_now/places_viz.png" /> <figcaption>Every "place" I visited.</figcaption> </figure> <p><br /></p> <figure> <img width="90%" alt="A map of every place I visited." src="../assets/icons/posts/reflecting_for_now/transit_viz.png" /> <figcaption>Every public transit stop I got on or off.</figcaption> </figure> <p><br /></p> <p>Well… Hope you enjoyed it.</p> <p>Merry Christmas everyone. 🎁</p> <p>See ya.</p> Mon, 25 Dec 2023 12:20:00 +0000 https://denisthiessen.de/blog/looking-back.html Amsterdam. Hoe is dat gebeurt? https://denisthiessen.de/blog/amsterdam.html <p>Hey hey…</p> <p>Hope you’re doing well. Well… This one is a bit in the making but I think you read the title. <em>Whatever it will end up being… I’m writing this one before I think of a title okaay…</em></p> <p>Amsterdam, I guess. 😅</p> <p>How did that happen, you may ask?</p> <p>About half a year ago a friend of mine inspired me with overseas university studies. At this moment I thought to myself… Well… Let’s try that out as well. What could go wrong? In the worst case, this will be training for future applications.</p> <p>So… One TOEFL test to demonstrate my English skills and a lot of application paperwork later, it was time to wait. And wait. And wait. Yes’es, No’s other application stages, everything happened. In the end, let’s just say… This was the most interesting thing that stuck. And oh boy, did it stick.</p> <p>A concrete “yes” for a Master’s program in Software Engineering at the University of Amsterdam. Oh. My. God. This kinda was a super big longshot and actually was the dream program for me. Well… A combination of an interesting curriculum, competent university, high reputation, intriguing physical location of the university, and my general interest in the field of Software Engineering inside Computer Science made it a “perfect” match.</p> <p>Okay… After this moment I was like… OMG. I got accepted to this super great Master’s program in the Netherlands. And then I was like… Fuck. I got accepted to this Master’s program <strong>IN THE NETHERLANDS</strong>.</p> <p>Another country. 600km away. Well…</p> <p><img class="img-center" width="30%" alt="An image of a search engine query where someone searched 'How to migrate to another country'." src="../assets/icons/posts/amsterdam/search_query.png" /></p> <p>Okay. Now you can imagine my thoughts going absolutely mad with all of the different things I need to do…</p> <p>So I calmed down. Let it settle a bit. And then collected a list of around three dozen things <em>with the help of my dad</em> 😅, which I need to do. I am not fully done yet. <em>Mainly because of a few different things which I can’t do yet, like claiming my student ID.</em></p> <p>But I did most of the things I already could. Let me give you an excerpt.</p> <ul> <li>getting certified documents of everything</li> <li>sorting out bank accounts and my phone plans</li> <li>full university registration and other administrative things due to me being a “special case”. 😅</li> <li>insurance plans for all sorts of things</li> <li>what kind of equipment do I need for this endeavor</li> <li>how do I get there and back in the most efficient way without absolutely killing my bank account</li> </ul> <p>And the almighty, the dreaded, the unforgiving…</p> <p><strong>HOUSING</strong></p> <p>For those of you who know… You understand. For those of you who don’t. Let me elaborate.</p> <p>The Netherlands is in a housing crisis right now. Even people with a job and everything have trouble finding a place to live. That’s especially the case in the bigger cities, and very especially around Utrecht and Amsterdam. Great. Not great start conditions.</p> <p>So you can imagine that students aren’t popular in the housing market, particularly the ones without money or a regular income.</p> <p>Flat advertisements with around 200-300 responses in a few hours aren’t unusual there. <em>Also, expect to pay 700-800€ for a room… Yes. You heard me correctly</em></p> <p>Luckily, I got one of the highly desired student housing places at the university. So that big problem is solved for me… But the aforementioned friend didn’t get so lucky.</p> <p>The best tip I can give you is to bring a lot of time with you and be persistent. Register to all of the different platforms and send out a lot of messages. Be aware of the scams though… 😅</p> <p>Someday, something will hopefully stick, and you find something. Maybe.</p> <p>This is the real filter, my friends.</p> <p>Okay. So this is solved, and I got nearly everything resolved. What now? I’m going to Amsterdam for about a year I guess. 😂 <em>this is still so weird and surreal to say</em></p> <p>This will be great, I think, and a really big opportunity to learn a lot of things, not only Software Engineering related.</p> <p>So… Let me give a few “predictions” of different things that might happen, and a year later, I will make a retrospective on how they will turn out. This will be fun. And with fun, I mean downright wrong with every manifestation I make right now.</p> <ul> <li>Being way more independent in my way of living due to me being alone in a foreign country.</li> <li>Developing better international communication skills.</li> <li>Enjoying the infrastructure of a city like Amsterdam. I think I don’t have to tell you about that one, though. Especially from the view of someone who currently lives in a German village.</li> <li>Catapulting my Software Engineering skills forwards. The curriculum seems to be pretty modern, and since the UvA is a pretty good university. Well, I expect to learn a thing or two and not only development related. Think about writing, English skills, general communication, and so on.</li> <li>Interesting professional opportunities in the future, not only due to the degree but also due to the “international networking”.</li> <li>Getting to know the “real” student life, which I couldn’t do previously in my Bachelor’s degree due to dual studies and Covid.</li> <li>Picking up something quirky or a weird hobby.</li> <li>But also appreciate the German way of life a bit more, especially missing certain things/people. As a result, I also expect to better cope with international quirks and develop a more mindful way of thinking.</li> </ul> <p>Okay. Now we got that one out of the way. Let’s see how my life ends up being with this cool thing happening… I think it will involve in the end a lot of extra stress but also fun, enjoyment, and general “life progress”.</p> <p>But we will see. Thanks to everyone to followed and helped me on my way to this blog post, whatever comes out of this. Don’t forget to dream a little bit. You never know what comes out of that…</p> <p>See ya.</p> Sat, 24 Jun 2023 18:50:00 +0000 https://denisthiessen.de/blog/amsterdam.html Introducing... The micro-blog. https://denisthiessen.de/blog/micro-blog.html <p>Well hello…</p> <p>Good to see you again. Hope you are doing well.</p> <p>Today I wanna show you a small little thing I made and most importantly maintain.</p> <p>While we’re at the topic of small things… don’t you dare… May I present to you. My new micro-blog.</p> <p>Conveniently found at <a href="https://micro.denisthiessen.de">micro.denisthiessen.de</a>.</p> <p>But why? some imaginary people that don’t exist because nobody ready this blog, think… You don’t even post that often here… and now you want to split up your time and workload…</p> <p>Yeah. You got it absolutely right. I think, I can’t leave that uncommented… especially since this is a blog entry and I want to write something down… 😂</p> <p>Okay. So, where does this come from? Well… Recently I read a book called “Show Your Work” by Austin Kleon. To put it in a nutshell it put forward a lot of good reasons why it’s a good idea to document all of the different things you do/make.</p> <p>First, we humans are notiouly bad at maintaining information in our brain. Documenting that stuff helps “remembering” that information by writing it down and referencing it later. Second, we use that as a “reference” of sorts for other people. Other’s can read it remember… we are in the internet, see what you do, get inspired, feel helped, or verify whatever feeling they had before.</p> <p>There’s even an entire chapter called “Share something small every day” which goes into detail about this phenomenon.</p> <p>I mean… Most likely most of this stuff will probably be not really interesting, or just a straight up worse explaination of something else you can find on the web. That isn’t really a problem though. Why?</p> <p>Well… First of all, you gotra keep Sturgeon’s law in mind, where according to this principle 90% of your output is crap anyways and the rest 10% is worthwile. So with enough mass you’ll eventually produce something interesting.</p> <p>Also, explainations/writings of the same topics always have different focus’, target audiences etc. So an explaination of an complete amateur sometimes is more useful to one person conpared to an explaination by a veteran in this field.</p> <p>So… What am I doing now with this…</p> <p>Well, this blog obviouly stays but switches focus towards more “elaborate” and “higher effort” posts. <em>a bit counter-intuitive since this isn’t that much of an high-effort post…</em> 😅 The new micro blog is mostly for smaller topics, recent learnings or other random interesting (from my perspective 😉) things.</p> <p>I’ve already worked on this micro blog for about a week, so there are quite a few posts already out there… 😅 I hope you find that as interesting as the writing experience until now for me…</p> <p>Check it out <a href="https://micro.denisthiessen.de">here</a>…</p> <p>And see ya over there.</p> Sat, 15 Apr 2023 13:50:00 +0000 https://denisthiessen.de/blog/micro-blog.html My new 'business card' https://denisthiessen.de/blog/codes.html <p>Ahoy everyone,</p> <p>hope you are doing well. ❤</p> <p>2-dimensional codes. I think I have to explain this one to you… Over the last few days, I’ve been thinking about this thing a bit. The Nintendo E-Reader. Most of you will probably think… <em>What the heck is this thing?</em> In a nutshell, it was one of Nintendo’s failed experiments for the Gameboy Advance. It’s a device that scans barcode-like stripes on business card-sized cardboard cards.</p> <p>In theory, this was a really cool and exciting idea. But, as usual, it had its shortcomings, like its usability and the extra game content it provided. So naturally, it failed.</p> <p>Why did I think of this then? I don’t know… Honestly. YouTube recommendations are one hell of a drug and I am an absolute nerd. <em>as if you didn’t notice that by now…</em> Nevertheless, it got me thinking since at its core it’s a really interesting idea. I mean. Think about it. This looking thing is the actual game/program. Isn’t that crazy? It makes you think about programs and how they work as well as what is actually needed to run one on a low level. <em>That could also be my strange brain…</em> 😅</p> <p>Well… In this case, the explanation is pretty simple. Binary. Those black and white squares represent binary values, which can be read in a special way, using a scanner, to reconstruct a computer program in a binary format.</p> <p>The cool thing is… That’s also basically how s and similar codes work. They encode their information/data, whether it’s basic text or program code, into a binary format and display it in this black-and-white square manner. <em>Okay… It’s not that easy, since s also do other shenanigans. But you get the idea. It would be a tad too long to explain that…</em></p> <p>Okay. What do we do now? I’ve only written about three paragraphs, it’s only 10 PM right now, and I don’t feel like going too technical today.</p> <p>Well… What are you then talking about strange mystery man? Maybe let’s do some interesting uses for those types of codes.</p> <p>Of course, there’s the possibility of storing plain text inside. If you ever felt like reading a blog post by scanning QR codes. Ehrm… You’ve got some weird taste but here ya go.</p> <p><img class="img-center" width="30%" alt="A QR-Code containing the entirety of this blog post" src="../assets/icons/posts/codes/blog_qr.png" /></p> <p>And you’ve probably encountered those types of QR codes where you get sent off to a far corner of the world wide web. Most likely to view the restaurant menu, only to realize that the cellular network connection is pretty bad and the technology fails. But we’re sidetracking a bit. <em>again</em></p> <p>Also, you can make a “digital business card” with the help of a QR code. Here’s mine. ;)</p> <p><img class="img-center" width="30%" alt="A QR-Code containing some personal contact data." src="../assets/icons/posts/codes/contact_qr.png" /></p> <p>Okay. But that isn’t the thing I meant with the title. ;)</p> <p>Well… Besides those pretty rudimentary ideas, there are some other neat ideas.</p> <p>First, you can put an entire program or even a game inside a QR code. I saw this video from MattKC about making a game fit inside a QR code. <a href="https://www.youtube.com/watch?v=ExwqNreocpg">Link to the video</a> It works by converting the Windows executable into a binary format and then optimizing it so much, that it can fit inside the restricted space of a QR code.</p> <p>But of course, it wouldn’t be fun if I didn’t try this by myself. <em>Okay… Not exactly like this since I don’t wanna waste multiple days, but you get the idea…</em></p> <p>So there we go… <em>But not here, later my friend…</em></p> <p>An even more extreme example would be the Nintendo E-Reader I mentioned in the beginning. They used these little dot matrix codes on the sides of these cards. These also contain the binary “executable” on one or multiple cards in this specialized data format. With this, they managed to expand the scope of these little dot matrix codes to even make NES games playable.</p> <p><img class="img-center" width="30%" alt="An example of a Nintendo E-Reader card." src="../assets/icons/posts/codes/ereader_card.png" /></p> <p>This inspired me to make my own little card in this type of format. One which is a bit more of a classic “business card” and one which is a bit more creative. 😉</p> <p>Well. Here’s the first one… As I already said. This has a pretty classic look and features a QR code with the V-Card feature.</p> <p>The second one uses this E-Reader style of format and data matrix codes to give you a special little surprise which I’m going to leave up to you. 😉</p> <p><img class="img-center" width="30%" alt="A personal take on an 'E-Reader' card containing the game Snake." src="../assets/icons/posts/codes/snake_card.png" /></p> <p>But yeah… I think I’ve talked enough without mentioning anything substantial. Hope it inspired you to think of the smaller things in a different way to make something cool as well.</p> <p>Have a nice day.</p> <p>And see ya.</p> Sat, 01 Apr 2023 15:50:00 +0000 https://denisthiessen.de/blog/codes.html A few thoughts on Software Accessibility https://denisthiessen.de/blog/accessibility.html <p>🎶 Ever since I was a young boy, I’ve played the silver ball… 🎶</p> <p>Well, hello there… <em>ten points to you if you got the reference</em> 😉</p> <p>I really don’t have to explain this post’s topic to you. If you’ve got a pair of working eyes… <em>oh… ehrm… this is awkward</em></p> <p><strong>ACCESSIBILITY</strong></p> <p>During my time learning about software development, I rarely came across this topic, simply because not many people think of this step. <em>At least that’s my assumption, based on eight years of learning.</em> I mean, most of you reading will probably have somewhat functioning eyes or other body parts. This isn’t the case for a pretty significant amount of the internet’s visitors though.</p> <p>Since I’m a <strong>hyper-professional</strong> blogger I <em>obviously</em> don’t have any statistics on hand. If I recall correctly, around 10% of males and 1% of females have some sort of color blindness. That might not sound like much but that’s just <em>one</em> of many possible impairments and that alone is something pretty significant if we think in the grand schemes of the internet.</p> <p>Also, the effects of non-inclusion mean that these people will have a pretty hard time enjoying the internet, like the rest of us. Maybe even impossible.</p> <p>So yeah… All of this interlude just to say that accessibility is pretty important and forgotten. <em>You needed a few hundred words for that… Really?</em> Let’s just start talking about different important things in this field.</p> <p>First, it’s pretty important that your general content is on point. Keep it short. Keep it simple. No real need to be fancy with words or jargon. I mean. If a non-impaired person has trouble understanding you, how do you think an impaired person would fair? Yeah… This also includes providing your elements with fitting metadata. What does that mean? Give your image a description. Say that a specific element is actually that element. Give your video subtitles. Make also sure that your content is easily navigatable. Your basics should be… On. Point. The cool thing is that also the corresponding tools will help you out a lot more if you’ve got those basic things down. Take a screen reader for example. If you provide element metadata in a web project, like “alt” tags or not using “div”s all the time, but rather their fitting counterpart, they will help you to interpret that information a lot better.</p> <p>Listen to this audio track of a screen reader, for example.</p> <audio controls=""> <source src="../assets/icons/posts/accessibility/screen_reader_example.ogg" type="audio/ogg" /> <source src="../assets/icons/posts/accessibility/screen_reader_example.mp3" type="audio/mpeg" /> Your browser does not support the audio element. </audio> <p>I don’t have to tell you which one is easier to understand.</p> <p>Second, let’s look at colors. I mentioned it earlier. Colorblindness is a big deal. I could talk about this for an entire blog post by itself. <em>Maybe I’ll even do this… Who knows.</em></p> <p>To put it in a nutshell, I’ve encountered too many standard themes that would be impossible to differentiate because they only use green and red colors. In these cases, I had to adapt the standard theme to make it more accessible, which of course came with its own problems. As I said, not ideal and there’s always an interesting story that comes with this scenario. I say this in the calmest of tones.</p> <p><strong>USE SOME FREAKING SYMBOLS AND ACTUAL SENSIBLE COLORS</strong></p> <p>It helps, <em>phew…</em>, to differentiate. Look at this picture, for example. One with “normal” colors and one simulated picture. You can see how information gets lost this way.</p> <p>By the way, if you can’t see a difference between those two pictures it means two things. Yay. My simulation worked. Second, you have red-green color blindness. Congratulations, I guess.</p> <p><img class="img-center" width="30%" alt="A comparison picture which shows the percieved colors for non-impaired and impaired people." src="../assets/icons/posts/accessibility/comp_color_weakness.png" /></p> <p>Okay, so last I wanna mention (user) feedback. This, not only, includes feedback from your target group of impaired users but also feedback from the different tools you use. There are so many different assistive technologies. <strong>USE THEM</strong></p> <p>Just because you aren’t impaired doesn’t mean they can’t help you. They give insight into how such users would use your piece of software thus you don’t have to guess. Also, stuff like that isn’t hard to configure. Think about it. One such user should be able to install/use such software. So I think you can do it as well… This way you can encounter roadblocks in your software earlier and make it more accessible.</p> <p>About physical user feedback. Sometimes it’s not possible to conduct user testing. That’s okay. You can’t test for everything in life and sometimes that isn’t needed. But if you rely on color as a means of information, for example, get someone with red-green colorblindness, there are enough people who have this kind of impairment. Chances are you’ve got someone at your office. This will help you further identify other barriers or challenges your users may encounter. Take their feedback into account and make the changes necessary to ensure your digital creation is accessible to all users.</p> <p>So yeah. There you have it. I could go on and on and on and ooon… As I mentioned, this is a pretty deep topic but this isn’t the main point of this post. The main point of all of this is that you keep accessibility a little bit more in mind than you did before, just so those impaired people can enjoy the digital world as much as we non-impaired people can.</p> <p>If I managed to strike that thought in you, I succeeded and hopefully, you will do your research on how you can improve this world a bit more.</p> <p>Thank you and see you.</p> Wed, 22 Feb 2023 17:47:00 +0000 https://denisthiessen.de/blog/accessibility.html Obsidian's graph drawing and other random babbling... https://denisthiessen.de/blog/force-directed-drawing.html <p>🎶 <em>Futures. Made of. Virtual Insanity… For useless. Twisting. All the new technology…</em> 🎶</p> <p>Well… Recently I’ve been more and more getting into different note-taking tools. <em>I’ve got a half-written blog post on that one lying around on that one… whenever I feel like finishing it :D</em></p> <p>One of them is a tool called <em>Obsidian</em>. The main feature of this tool is the interlinkability of different notes and then you can visualize those links with a cool graph. With this, you can recognize connections between different topics a lot better with plain old notes and even recognize knowledge gaps early, if you keep up your writing.</p> <p>Here’s an example of how one of those graphs might look like.</p> <p><img class="img-center" width="40%" alt="An example of an network graph in Obsidian." src="../assets/icons/posts/force_graph_drawing/obsidian_graph.png" /></p> <p>Interesting isn’t it? And I haven’t even told you the best thing about it…</p> <p><img class="img-center" width="30%" alt="A network graph and it's nodes and edges jiggling around by dragging and dropping a node around." src="../assets/icons/posts/force_graph_drawing/jiggle.gif" /></p> <p><em>it do be jigglin’</em></p> <p>But we are a totally professional “technical” blog and you, of course, wouldn’t assume otherwise, wouldn’t you? <em>Listen… I don’t want you to say anything… It’s 1 AM, I’m tired and still can’t sleep… Just let me have this one, okay?</em></p> <p>Graph visualization or graph drawing is a complex mathematical/algorithmic field, and I really don’t have the motivation to talk about all of the different methods but I want to take a closer look at the one used in this note-taking tool. <em>Force-Directed graph drawing</em></p> <p>Why you may ask? I took a bit of a “deep dive” during my Bachelor’s thesis into this field and want to refreshen my knowledge a bit… So come with me. It won’t be <em>that</em> bad. <em>pinky promise</em></p> <p>So… As the name already suggests different forces are involved in this kind of algorithm. In a nutshell, we run a “physics simulation” on the graph’s nodes and lines. This results in different forces affecting the graph components thus the graph having a certain amount of energy due to the different forces. The goal is now to minimize the overall forces and energy throughout the whole graph and this will result in an aesthetically pleasing graph.</p> <p>Sounds simple. Give me a second. 😅</p> <p>For the record… There are multiple ways on how you could go about doing this… I’m just telling you the, for me, “most understandable” method. So yeah… Keep that in mind. 😉</p> <p>First, imagine this graph from that picture. Okay. Now we take all of the edges of this graph and replace them with springs. Sounds weird? Yes. But bear with me.</p> <p>Technically you can compress (nearly) every material out there, but springs are pretty much commonly known to compress and uncompress with ease. We can also formulate these forces pretty well, but that’s just something incidental. 😉 <em>Also it still kinda looks like a graph edge as well. I mean, look at the pic from before…</em> 😂</p> <p>If you’ve paid attention in your Physics classes, then you can probably recite the formula for calculating the force needed to push a spring together. <em>For those of you who didn’t, I got you…</em></p> <p><code>F = D * l</code></p> <p>With this in mind, it means springs will always have a certain amount of compression, due to their hardness, since objects in our universe tend to be in their state with the least energy possible. If you want to compress or stretch the spring even more, then you’d need to invest energy in this process. This results in all of the different edges of a graph having a certain amount of force and energy due to the springs used. But this would result in a pretty compressed graph drawing since all of the springs were motivated to move into their most energy-efficient state. As you can imagine a very compressed drawing doesn’t really look that great, and neither is very readable, so let’s fix that.</p> <p>To do this, we introduce a second source of forces. Imagine that every single node of the given graph is an electrically charged particle. With <em>Couloumb’s Law</em> ( <code>F = k * ((r<sub>1</sub> * r<sub>2</sub>) / r<sup>2</sup>)</code> ) we can now calculate the forces between two graph nodes, attracting or repelling each other. If we give all of the nodes a charge from the same polarity (negative - negative or positive - positive) then the nodes will actively repel each other.</p> <p>We can use this phenomenon to our advantage, combining it with the spring forces mentioned earlier.</p> <p>You see, if we combine both of those forces, then both of them are directed exactly opposite to each other. If both of those forces are, by chance, at the exact same strength, then we hit a perfect balance and those two nodes and their shared edge reach an equilibrium. <em>Yes… Even though I’m not smart, I’m using smart words. I need to keep the facade alive, okay?</em> We can even modify how far apart or how close graph elements are by modifying the “electrical charge” of the nodes and the “spring hardness” of the edges.</p> <p>This behavior can be transferred to the entire graph and not only a set of nodes and edges. With this, we can calculate the potential forces of an entire graph. 😁</p> <p>Remember what we said earlier? If we minimize this energy, then we get an aesthetically pleasing graph. How can we do this? Well… We have a metric ton of equations on our hands and if we move the nodes around, then we can calculate the forces of the graph and look for the lowest final result. How we do this is up to the implementation but this is another topic. You get the idea. 😉</p> <p>Okay cool. But when do we stop this? That’s the best part… We don’t.</p> <p><img class="img-center" alt="The meme with 'That's the neat part. We don't'.''" width="40%" src="../assets/icons/posts/force_graph_drawing/thatsthefunpart.png" /></p> <p>That’s also one of the main problems with this type of graph drawing. It doesn’t have a fixed termination point and tries to optimize as much as possible. Since the algorithm can’t <em>without an extreme amount of effort</em> whether it has reached the minimum amount of energy, a termination point can only be estimated.</p> <p>Another bad thing is that since we gradually make steps toward the minimum amount of energy, we sometimes into minima, where you’d have to have to increase the amount of energy in the whole graph again, to reach the <em>real</em> minimum. (A so-called <em>local minimum</em>) I think that graph shows the difference between those two types of minima pretty well… But being stuck in such a local minimum isn’t optimal.</p> <p><img class="img-center" width="30%" alt="Function graph showing the difference between a mathematical local minimum and a global minimum." src="../assets/icons/posts/force_graph_drawing/local_global_minimum.png" /></p> <p><em>Don’t be such a downer… Talk about some good stuff already… And what about Obsidian?</em> Yeah right. You’re like 3 pages deep already. Give me a moment.</p> <p>So… Obsidian. Right… Remember that juicy jiggle I showed you? That’s also a cool thing that is easily enabled by this type of graph drawing. Since we perpetually do node movements based on the previous position of all graph elements in the step before, means that interactive graph node movements are easily done, since there is no adaptation for this case needed. I mean. It also means that the performance of this thing is kinda crap but we just ignore that. 😉 This fact enables us to do cool interactive things like drag and drop or this…</p> <p><img class="img-center" width="30%" alt="A network graph and it's nodes and edges jiggling around by dragging and dropping a node around." src="../assets/icons/posts/force_graph_drawing/jiggle.gif" /></p> <p><em>I could watch that for the whole day…</em></p> <p>Focus! Luckily, you don’t need that much focus to actually implement such an algorithm compared to other graph-drawing algorithms. I mean. Even I could manage to explain it to you without too much mathematics. <em>If you are the type of person who would read through this type of blog post in their free time, I think this shouldn’t be too much of an issue… And if you got here by me… Well. Hello. Hope you aren’t too confused by now.</em></p> <p>But yeah… My desire to write something down, and freshen up my knowledge has been fulfilled quite well and I think you’ve learned something new in the last few minutes. <em>as long as I was competent enough to explain it to you in a simple manner</em> Since this is quite a deep mathematical field, there would be way more to talk but I think that would be a good end to this precarious adventure in the field of graph drawing. I hope you don’t feel tortured right now and maybe you’ve learned something new along the way.</p> <p>Either way. Have a great day and I hope we can “see” each other in the future as well.</p> <p>See ya.</p> Thu, 09 Feb 2023 22:02:00 +0000 https://denisthiessen.de/blog/force-directed-drawing.html So... I finished. What now? https://denisthiessen.de/blog/i-finished.html <p>So…</p> <p>I finished. What now?</p> <p>You may be thinking. What is this strange person on the internet talking about. As you might have noticed I talk a lot about Computer Science related topics in here and the last three years I’ve spend getting a Bachelor’s Degree in Computer Sciences. About a month ago I finished it. Thrown my Thesis in the mailbox of my university. And… I was done.</p> <p>It may sound simple. It may sound ordinary. <em>Whoaa.. Look at this guy… He finished his bAChElORs thESIs.. whAT a GUy</em></p> <p>I don’t care. I don’t care if this is the 10000th post made on this, or how rudimentary this may seem in today’s day and age. I’m still proud.</p> <p>This first paragraph, this thesis, these three years represent a lot of stress, sleepless nights, anxiety and pressure. But it also represents a unique challenge, a learning experience, personal growth, comeraderie and even fun. <em>Yes… Even during Covid times…</em></p> <p>It would take way too long to go into further detail of my studies. This would be a topic for itself. Honestly these few words describe the experience quite well come to think of it.</p> <p>So, what do I want to tell you? It feels a bit weird. My “real worklife” has started. I started a job as a Software Engineer a week ago. But this still feels weird. “Nothing new”. Nothing really special. This might seem a bit entitled to say. I don’t have any other way to say it better though… My university life consisted of part-time working as a “Software Engineer” so I got introduced to the work there and the leadup wasn’t as drastic as it usually is. Especially considering that I stayed at the same company, in the same department, even in the same project this shouldn’t really surprise you.</p> <p>It still feels a bit different though. After a long journey I have reached one of my goals of becoming a Software Engineer and it baffles me that I can proudly and truthfully write those words. Sometimes if you’ve reached a long for which you need to work a long time it feels a bit weird afterwards since this part of your mind isn’t occupied with it anymore.</p> <p>What now? Well… I honestly don’t know. It’s also one reason why I’m writing up this. You might have noticed that my thoughts are a but chaotic but that’s basically my mind right now on this topic. So this helps me a bit to sort my mind out. Right now I’m working a bit full-time as a Software Engineer at my current company to get some actual work-experience in… Also this should help me get my life back on track since my work-life balance during studies really wasn’t that healthy. I really need to do some work in that area. A bit later in about roughly a year my goal is to start with a Master’s degree in Computer Sciences.</p> <p>Why do you want to do this again? Well… I’m up for the challenge. I want to learn more. And it fascinates me. Also I’ve spent 70-80% of my time studying during Covid conditions. I’ve never really experienced student life. So that’s also one thing I guess. But this is the short reason for that goal. That should take me about two year extra. It also feels a bit weird that I’ve got my life planned out for the next three years but that’s just the way it is…</p> <p>So yeah… I don’t really feel like I can say much more on this. I also wanna thank everyone from the bottom of my heart that stayed true to me and helped me out on this journey so far. ❤</p> <p>There would be quite a few ones that would be in the list of people to thank so I’m not gonna list everyone. But you know who you are and thank you. Without you I wouldn’t be where I am today and I really appreciate that and I can’t really express that graditude in words.</p> <p>❤</p> <p>See ya.</p> Sat, 08 Oct 2022 21:45:00 +0000 https://denisthiessen.de/blog/i-finished.html Disco in the world of Computer Science https://denisthiessen.de/blog/ai-gen-post.html <p>So…</p> <p>As you might have noticed by the title of this blog post this one is entirely generated by an AI. After my last adventures on AI writings I wanted to try this concept out but with a more ludicrous topic.</p> <p>Disco in the world of Computer Science. 🕺</p> <p>I’d have to say. I’m suprised how it managed to generate a story that seems sensible by the first read but more and more stupid/false the more you read it. But I think I said enough. Just wanted to show you this funny example of an AI generated story.</p> <p>Enjoy. 😁</p> <h1 id="disco-in-the-world-of-computer-science">Disco in the world of Computer Science</h1> <p>Computer programming is an intricate and complicated task that requires a lot of skills and expertise. It is also a field that has had a number of advancements over the years. In the early days of computers, computers were so complex that they looked like giant brains. The name “computer” originated from the combination of two words— arithmetic and computation. In other words, a computer can do arithmetic calculations and perform mathematical functions. Besides performing these functions, computers are also equipped with memory units to store data or programs.</p> <p>To represent the world of science, an era characterized by research and advancement, computer programmers used disco music in their projects. In the world of science, early computer programmers used disco music to represent their projects or ideas. For example, John Mauchly used to play jazz while conducting his experiments with ENIAC (Electronic Numerical Integrator and Computer). During this time period, disco music was associated with fun and fascination rather than with tedious calculations. A famous song by Donna Summer titled “Love to Love’ It has been used over the years in numerous scientific contexts. According to one research paper— “the use of Love to Love as a code song dates back at least 50 years”— as early as 1964.</p> <p>Because this song was associated with fun in the early days of computers, it suggests that it would be ideal for representing algorithms or instructions needed for digital computation. Disco music was also used to represent subatomic particles when scientists conducted experiments at CERN (European Organization for Nuclear Research). For instance, scientists conducted two particle physics experiments using different songs on the same dance floor— one for each experiment.</p> <p>One experiment used James Brown’s song “Get Up (I Feel Like Being Paid)” while the other project used Donna Summer’s “Oh Yeah” again fifty years later from Donna Summer herself! According to researchers at CERN, using disco music to represent subatomic particles makes sense since it originated from gay clubs during its golden age in the 1970s— when particle physics studies were carried out there!</p> <p>Apart from representing fun or excitement during computer programming stages, disco music is also associated with tedious tasks since it originated from gay clubs in America during its golden age in the 1970s— when particle physics studies were carried out there! Since this type of music was associated with FUN rather than work in earlier times, it suggests that it would be ideal for representing complex tasks such as those required by human brain development such as memory or learning strategies!</p> <p>Since disco originally referred to a club genre based on dance rock-and-roll, this type of music could be ideal for representing human brain functions since it is based on rhythm! Based on what has been stated above, computers have incorporated various types of music into their project themes over time but have always had fun intentions behind them! By incorporating disco into scientific projects alongside math and other FUN sounds like jazz or spy movies (like James Bond), computers were able to add zest and excitement without being too tedious!</p> <p>Besides representing FUN aspects in science projects all these years, computer programmers have helped advance our culture in many ways by putting FUN sound effects into their projects instead of doing math equations all day long!</p> Sun, 07 Aug 2022 16:20:00 +0000 https://denisthiessen.de/blog/ai-gen-post.html Writing a book without writing a book https://denisthiessen.de/blog/ai-book.html <p>Writing. An authors dreams. But every author knows that writing is hard. It needs a lot of creativity, a good idea and a lot of perseverance. So actually finishing a book is quite a task for an individual to accomplish…</p> <p>The idea of writing a book and being an “author” always intrigued me. But there’s big problem with that idea. Writing a book always means that you need to WRITE a book. As you might have noticed I’m pretty bad at writing and I’m not really creatively blessed… <em>Why I’m writing blog posts is completely beyond me… But okay… We ignore that one…</em> 😅</p> <p>So to accomplish this ambitious goal I would actually need to write a book without writing a book.</p> <p>The solution. Everybody’s darling. Artificial Intelligence. Well… What did you expect? I’m a software developer… I could’ve outsourced that work to somebody else but where’s the fun in that… So now that we’ve settled the “how”, now we get to the topic of the book.</p> <p>There are way too many ideas and topics that you could write a book on. Alternative cancer treatments, gardening, the history of Uganda, how a keyboard works or many many maaaany more topics. But as an aRTiSt I wanted to settle on something deep and thought provoking. Something highly intellectual. And what could be more intellectual and thought-provoking than those pseudo deep quotes from Instagram or Tumblr, that could come from 15 year old girls trying to be edgy. You know which ones I mean…</p> <p>So now we got a topic, let’s start writing. I mean… “"”wRiTiNG”””.</p> <p>I wanna spare you of the exact details of building an AI since that would be a blog post of its own and I’m not 100% into that topic. 😅</p> <p>The first step is creating a knowledge base, which means I need to scout the internet for those deep quotes… <em>uuurrrrgh…</em> About an hour and one brain meltdown later I had about 50-60 quotes from places like Tumblr, Instagram and Reddit which was enough for the AI and my sanity. Then it was up to a sentence generating AI to use that knowledge base and generate me some new “quotes”.</p> <p>At first the results were surprising. It worked. I was shocked… Nothing really ever works in the first attempt… Especially in this field… It was generating quotes like…</p> <blockquote> <p>My heart is not for love, but for action.</p> </blockquote> <p>or</p> <blockquote> <p>The point of life is not to live for the present but to enjoy the present moment.</p> </blockquote> <p>I was suspicious but happy and let the AI run for a while and left my computer to eat something. After I came back the style of quotes changed a bit and stopped the AI immediately. 😅 <em>but it was at least hilarious…</em></p> <p>The quotes became extremely Christian all of a sudden… Stuff like…</p> <blockquote> <p>At night when the stars shine so bright it’s impossible to not see God.</p> </blockquote> <p>I mean… I can see the connection between those styles of quotes but this isn’t the desired style I was looking for. 😅😂</p> <p>So I needed to root out those “tainted quotes” and let the AI train again with the increased amount of training data to become Christian again and so on. You might have noticed that cycle by now.</p> <p>After a while I got more than enough quotes to fill this strange book but some final filtering needs to be done. Let’s just say that there were some which were too generic, too non sensical or a bit too funny for the vibe I was going for. Here are a few examples.</p> <blockquote> <p>All creative people must have been depressed.</p> </blockquote> <blockquote> <p>If you are in a place that you don’t feel comfortable. Don’t stay there.</p> </blockquote> <blockquote> <p>I am on top of the world and my legs don’t work.</p> </blockquote> <p>or</p> <blockquote> <p>The first rule of pie, the second rule of life, always split the crust first.</p> </blockquote> <p>You can see why all of this filtering was necessary. 😅</p> <p>But after all of this manual filtering of those “low quality data sets” we finally have a list of AI generated pHilOsoPHiCaL quotes. Those quotes basically make up the main content of the final book.</p> <p>So throw in some artsy formatting and a few lines of preface and other random quirks and you’re basically done.</p> <p>A finished book without actually writing a book. Cool isn’t it?</p> <p>I mean… It isn’t yet a published thing and the plans are still a bit ambiguous to say the least… So I don’t really know what will happen with it but it was really fun to do this different writing experience nevertheless. Would I do it again? Maybe, but with a different book idea of course. But only time will tell…</p> <p>So yeah… That’s all for today.</p> <p>See ya soon when I become a world famous artist/author. 😂</p> <p><em>Just kidding…</em> 😉</p> Mon, 27 Jun 2022 20:10:00 +0000 https://denisthiessen.de/blog/ai-book.html Quick ('fun') facts on jellyfish https://denisthiessen.de/blog/jellyfish-facts.html <p>Ahoy everyone.</p> <p>Hope you’re doing well. Today I’ve got a quick little post for you and this time it isn’t event IT related or something deeply “philosophical” from my life. 😂</p> <p>Shocking I know…</p> <p>I just wanna share some quick little “fun” facts about jellyfish with you? Why you may ask? Well… I don’t really know. I just wanted to write something small up and my other ideas need some time in their implementation or are way too long by my quick writing pleasures.</p> <p>So I did what I always do in those kinds of situations. I asked somebody else for ideas. 😅</p> <p>To my rescue came a good friend of mine, <a href="https://li54.dev">Lisa</a>, who suggested “jellyfish”. I was a bit confused but thought… <em>Why not…</em></p> <p>So here we are… Ten quick facts on jellyfish. 😂</p> <ul> <li>Jellyfish are actually older than dinosaurs as a species. The oldest verified jellyfish remnants are about 500 million years old but they are speculated to have existed for about 700 million years.</li> <li>They aren’t made out of jelly but rather about 95-98% water. Shocking… 😮</li> <li>The tallest jellyfish can be up to ~2m tall. That’s taller than most of you out there…</li> <li>Jellyfish can cause various mechanical lock-ups in water-related systems (like ships or desalination plants) due to clogging as well as crush fishing nets.</li> <li>They have no brain, heart, bones or eyes, one of the few species to not feature either of those bodyparts.</li> <li>Jellyfish eat and shit from the same hole in the center of their body as well as shoot out a stream of water which they can use to swim.</li> <li>Some species of jellyfish can be basically immortal by “dividing itself up” into multiple polyps.</li> <li>A specific species of the jellyfish (box jellyfish, Chironex fleckeri) is the most venomous marine animal on earth.</li> <li>A rapid increase in a jellyfish population is called a “jellyfish bloom”.</li> <li>Due to their body shape jellyfish are one of the most efficient swimmers of the world, by rapidly contracting and expanding their body.</li> </ul> <p>Interesting isn’t it… I also didn’t expect to read up on jellyfish facts today but here we are. Life is sometimes pretty strange and amusing.</p> <p>So yeah…</p> <p>See ya hopefully soon. 👋</p> Thu, 23 Jun 2022 17:13:00 +0000 https://denisthiessen.de/blog/jellyfish-facts.html How I made graphic design as a backend developer... https://denisthiessen.de/blog/graphic-design.html <p>Hey ho.</p> <p>Hope you are doing well everyone. Today I wanna tell you a little “kind of funny” story I had experienced a while ago. I think it’s kind of interesting at least so let’s get into it. 😁</p> <p>A while ago I had the honor to choose an extra lecture during my adventures of getting a Bachelor’s degree. I made my choice on a lecture that focused on startup culture and innovation management, which was at least in my opinion the most interesting one. 😉</p> <p>Then I layed back, focused on other stuff and forgot about it…</p> <p>Until one day when my phone began to ring.</p> <p>An e-mail arrived.</p> <p>The lecture is getting canceled. 😥</p> <p>To put it a bit lightly I was pissed. I spare you of the many German swear words that were dropped at that moment but I think I you get my point. 😂</p> <p>After a while I began to talk with a friend of mine called Lisa about this topic. (Check her out <a href="https://li54.dev/">here</a>)</p> <p>We began to think after a while… What if we just provide the lecturers which dropped off because of private reasons? Let’s at least try it.</p> <p>Then we went to work. We got together with another university professor and made some ads to reel in some lecturers, posted them on LinkedIn and made some noice. I’m still bazzled about this but this hail mary actually worked. <em>Don’t ask me how…</em></p> <p>We got a nice pair of two lecturers which seemed pretty nice and compentent about this field and I was right in that regard. The lecture happened. It was pretty good and got a nice grade out of that one. An overall happy end.</p> <p>But what does that one have to do with graphic design you may ask? Well… Let me continue that story a bit further. After a while me and this ominous friend of mine got together again and talked for a bit. <em>Who would’ve thought…</em></p> <p>We began to think… Maybe a present would be nice for the university professor for the help in that lecture.</p> <p>She was a tiiiny bit more in contact with that other university professor than me. 🤏 Up to that point I was a bit of a third wheel in this story.</p> <p>After a while she was like… Yeah. A present would be nice. But she currently has a bit more problems with getting new lecturers for her courses that she provides. So help would be a bit more appreciated in that regard. We began to think and got in touch again with her and she confirmed these thoughts.</p> <p>Then we were like… Okay. Let’s create some ads then. But there was a tiny problem from my point of view. At least with my friend, she had a mostly frontend background and knew how to design something.</p> <p>But in my case not really. I’m a bit strange in that regard. Thoughout my “career” I have dipped my toes into nearly everything CS/IT-related. I’ve even read a few books on user interface/web design and other related topics to broaden my range. My home is the backend though…</p> <p>So graphic design is a completely new thing for me. The great thing though… I have a thing for unconventional ideas and had some ideas for those ads. So I busted out the ol’ reliable paint.NET (<em>yes… laugh at me all you want</em> 😂) and got to work.</p> <p>The great thing is that those ideas were at least simplistic to design and based on pre-existing UIs that you might know…</p> <p>So I could base my work on those UIs and add stuff to that basis. Luckily I made it. I couldn’t really tell you any specific thing from that process that I learned from this that was new but it was really interesting to try out this completely new thing. <em>The focus of this story is the way to this point, not really the actual design process anyways…</em></p> <p>I was pretty happy and showed it to my friend first. She was also pretty happy with them. So we put those ads from me and her into a cloud storage and send the professor those ads.</p> <p>The result. To put it lightly, she was extactic based on the amount of emojis she used in the answer. 😂</p> <p>And that’s the point where we jump to the present time. After some light general changes based on the information on those ads some of them are ready. <em>This is at this point a still ongoing process with some other ideas still in the pipeline…</em></p> <p>And then my friend messaged me… She published your ad! 😮</p> <p>I was like what??? 🤨</p> <p>Yeah… One of my ads made it. I was like… How did I got into this position of making lecturer ads for my university? (Which inspired me to transcribe this story in the first place) But I was happy.</p> <p>That wasn’t even the end of the story. <em>It currently isn’t anyways since we are still in the process of it… But you get my point hopefully…</em> 😉</p> <p>Someone on LinkedIn, where this ad was posted even left a comment really liking the graphic. I was like… Someone even liked that graphic. How the hell did this happen?</p> <p>And that’s where we get to the present day. I don’t really know what will come out of this in the future but right now I’m pretty happy and wanted to tell you all this story of mine up until this point.</p> <p>Remember… Life always writes up the most interesting of stories and I hope that you found my little one as interesting as me.</p> <p>Have a nice day.</p> <p>See ya.</p> Thu, 14 Apr 2022 12:03:00 +0000 https://denisthiessen.de/blog/graphic-design.html Learning everything in 5 minutes... Kinda. https://denisthiessen.de/blog/learn-everything.html <p>Hey. Hey. 👋</p> <p>You didn’t expect something new from me this quick didn’t you? <em>that assumes that someone actually reads this blog… but okay… I don’t actually know since I don’t track you but this is another story.</em> 😅 Hope you are doing well so far.</p> <p>Today I wanna talk about something not really related to computers and IT (<em>shocking I know</em>) but rather about something that can be applied to everyday life. I don’t really know how well known this all is so I’m taking a bit of a shot in the dark but I think you could make an argument about every piece of content on here. People also seemed to be kinda interested or never really heard about this so yeah. Here we go.</p> <p>What are we actually talking about?</p> <p><em>K N O W L E D G E</em></p> <p>Or rather the acquisition of knowledge. I think everyone has had this moment. You saw something cool or you wanted to do something else and just procrastinate it off or you say you don’t have any time. It happens to all of us. Especially me. I’m not really perfect in that regard and you shouldn’t orient yourself on me but I wanna share some advice on how you can mitigate that somewhat.</p> <p>About a year and a half ago I saw a university lecture where the lecturer talked about how the average person in the IT field reads less than one book per year and doesn’t really build up the knowledge in the corresponding field. After this moment I kinda felt motivated and as a university student it’s basically the best time of a person’s life to get a lot of books to read, for <strong>free</strong>. Thanks educational programs and libraries for that one. 👍 But then the demotivation kicked in when I started looking at all of this. Those books have at least about 300 to 400 pages of technical knowledge, sometimes even way more and that felt a bit daunting. <em>I can never do this… I don’t really have time for this…</em> 😢</p> <p>But then it hit me… Wait a second. If the average person reads less than a book every single year I can beat the average by reading <strong>a single page per day</strong>. A single page. That isn’t really a whole lot and takes even for the slower readers not more than one to two minutes to do. If you take out five minutes per day to read in that case you can read with a very conservative reading speed of a page per minute, five pages per day. 150 pages per month and 1825 pages per year. That’s a lot of pages. If you take an average length of 350 pages per book that’s about five books per year, about four more than the average per year.</p> <p>Crazy isn’t it? 🤔</p> <p>The more I think about all of this the more I think that this can be basically applied to every aspect of life that you wanted to learn. Basically everyone has five minutes a day free to do something, even the busiest of you and everyone has something that you wanted to do but procrastinated for a while. This aspect of taking a very small chunk of a day which is negligible in most lifes helped me at least to overcome this hurdle of entry, fend off procrastination and build a habit.</p> <p>You see. This habit building is also an important aspect of all of that. Once I started doing this reading it became a bit of a habit. I’m not really an avid reader right now but I think on average my reading time is above those five minutes I mentioned before. This aspect helped to propell my amount which I read per year from those five books to about ten. Ten books by doing basically “nothing”. Crazy. 🤔</p> <p>The last aspect I wanted to talk about this topic I wanted to talk about doesn’t really come from myself but rather from a <a href="https://www.youtube.com/watch?v=5MgBikgcWnY">TED talk</a> by Josh Kaufmann. He talked about how you can learn basically every skill in it’s basics in 20 hours. Go give it a watch. It’s a really neat one. Why is this relevant? You see, next to those factors of cumulative time acquisition and habit building you tend to learn new thing very very quickly in the beginning which also increases the amount of knowledge you can aquire.</p> <p>If you take 5 minutes a day that’s about 30 hours in a year. In this TED talk he learned how to play the ukulele pretty decently in about 20 hours and this can be applied to nearly everything. <em>even juggeling flaming chainsaws… I wouldn’t suggest you do that one though…</em> With this method you can easily take a completely new skillset like playing a musical instrument in that case and be pretty decent after a while.</p> <p>I’m pretty sure that there are a lot more factors which will help you even more in this method but I’m not really an expert in this field or the perfect authority in this matter. I’m just an ordinary person who talks about his personal experience but I think this advice can be beneficial for a lot of people out there who want to do something.</p> <p>So yeah.</p> <p>Hope you found my advice useful and take something from it for yourself. 😁</p> <p>See ya. 👋</p> <hr /> <p>TLDR: Take five minutes of your day to build a habit and learn whichever skill you wanted to learn in a relatively small amount of time quickly. It really works. Try it out. 😉</p> Thu, 24 Mar 2022 08:13:00 +0000 https://denisthiessen.de/blog/learn-everything.html Why can't everything be simple and quick. https://denisthiessen.de/blog/why-not-simple.html <p>Hey.</p> <p>Hope you are doing well right now. 😁</p> <p>You see… Last time around I’ve been talking about smaller more unknown and simplistic web-protocols and their niche uses. In there I’ve been also talking about a lighter more comfortable reading experiences without too much bloat.</p> <p>But this isn’t really a concept that cannot be achieved within our classic webpages and there are a lot of webpages around which make a lot with little. (<em>Including this one…</em> 😉) Those are just mainly experiences where the entire thing is based around those aspects but in actuality you cannot use it in your day to day life.</p> <p>I don’t really have to tell you that in the vast world of the world-wide web there is a lot of annoying stuff around, a lot of bloat, a lot of useless features. Everyone that has spent at least some time in the internet has experienced this and I would be even willing to bet money for that one. 😅</p> <p>And to be honest. It’s annoying. It’s tiring. As someone who works in the IT industry those things cannot be really changed that easily. There are a lot of people who make these design decisions who then say… Okay we need to embed these popup-videos or these ultra-high res video or this absolute chonker of a JavaScript library and it looks great on my machine with my 10 Gigabit connection with 64 gigs of RAM. Then there are also those people focused on analytics and want to get every piece of analytics data around for whatever reason with their tracking tools and millions of cookies. As I said. This trend is really tiring even though in the business side little can be changed in the end. People want to make their money or don’t really know better or “have to follow” certain decisions and this is just annoying.</p> <p>I mean. Isn’t it a really great user experience to enter a website which already has 3 MB of data to load and then loads in several video popups, cookie banners, ad-blocking notices and registration forms. I just want to read that damn thing. Please don’t make that so hard for me.</p> <p>But the crazy thing is that this bloat increases more and more into personal pages which is a thing that can at least be changed somewhat reasonably. With everything becoming more and more accessible by combining several things together it also increases the bloat. It’s a really tricky one because I don’t really want to restrict creating in this wonderful place that we call the internet. But I think you can understand me that this is straight up annoying.</p> <p>As you might have noticed my little page is kinda fast when it comes to loading since it is pretty simple and doesn’t really use that many resources. But I also did some tinkering with a static site generator to make this place my own and make it work for me. I can imagine that this isn’t really a solution for a non tech-savy person.</p> <p>The crazy thing is that there are a lot of different lesser known tools around which do a pretty simple website generation where in the end you just enter your text of the webpage content. People do not really feel satisfied generally with that “simple” of a thing around when there’s a lot of crazy stuff around but it doesn’t have to be this way I feel. In my opinion the main thing should be the content of a webpage. It’s basically the reason why we are on the web. The content. The rest is basically for making the content more accessible/readable or less accessible in most cases since the more simple websites tend to be more accessible in most of the times thanks to all of those extra components which aren’t “accessible” out of the box. But that is a topic for another day.</p> <p>So I’ve been talking about my feelings and thoughts for a while now. What are the ways of getting to a more simple way? Because to be honest. Not everyone lives in a city with a great internet connection. Not everyone has a great computer which can load things quickly. Generally not everyone has the means to traverse this more and more bloated web we are currently experiencing. So how can we change this?</p> <p>So first of all. Be aware what you want and what you need to use. A webpage isn’t a simple thing that you can just make. You need to be aware what you want to do on it. If you aren’t you might as well not make it. 😅 And if you think about that think about the best way you can achieve this.</p> <p>In a lot of the cases a static site generator is more than enough for most cases. And theses sites don’t really have to be ugly even if you like more elaborated things. In most of the cases it’s just a case of theming.</p> <p>When you do something like this then you can have a simple (<em>in most cases accessible, since it uses plain HTML/CSS elements</em>) and quick site which can look pretty.</p> <p>Another thing is about the third-party elements that you use. Do you really need that 5000th analytics element? Do you really need that other JavaScript library? Turns out in more cases than not the answer is no.</p> <p>And there are more advantages to that approach than speed. Ever noticed how this website doesn’t use any cookie banner for example? You don’t need those for when you only use technically necessary cookies for certain features. 😉 Just a little other example why it can be sensible.</p> <p>There are a lot more different things that you can do to make it more optimised. And you don’t really have to take it that far as I do. I’m a big nerd and I like doing stuff like this. But most people don’t. For most people it’s a way to do something and they need to do it like that and this is completely fine. You don’t have to be radical about those things. It’s not really good for everyone including you.</p> <p>The only thing that I want you to take away from this overly lengthy blog post is to think about what you use and how you use your elements in your webpage. It can make even your life easier maintaining everything. It’s easier for all of those different people who don’t use 100% optimal devices like you maybe. It’s a lot quicker and in most of the times more accessible.</p> <p>And it makes the lives of everyone easier when traversing our pretty bloated web and make your place look like a little oasis of simplicity. It just straight up works.</p> <p>So think before you make. It makes everything for all of us simpler.</p> <p>And most importantly also have some fun making. Don’t forget that in the mess of everything else around.</p> <p>See ya. 👋</p> Thu, 17 Mar 2022 19:33:00 +0000 https://denisthiessen.de/blog/why-not-simple.html The 'small web' and why you should care... https://denisthiessen.de/blog/small-web.html <p>What’s up everyone.</p> <p>Hope you are doing well. :)</p> <p>You see… Recently I’ve stumbled across something pretty niche that I felt like sharing with you. The so called <em>gemini</em> protocol.</p> <p>You might be thinking. What is this? Why should I care? What should I eat later for lunch? (Okay maybe not the last one… But you get the idea.)</p> <p>Just like the http/https protocol is used for serving different kinds of web page related content, there are many different variations of different protocols for this usage, some more useful than others.</p> <p>I don’t wanna go in detail what exists out there and their historical background they might’ve had. That might be another blog entry for sometime as well. :D</p> <p>Today I just wanna focus on two different ones you might not know about.</p> <p>So let’s get started.</p> <h2 id="gopher">Gopher</h2> <p>The Gopher protocol was actually around before the http protocol and you could see it as it’s predecessor when it comes to usage in this field.</p> <p>But due to questionable licensing decisions it’s decline began and http prevailed.</p> <p>That isn’t the end of the story though. Just like everything else it stayed somewhat alive by a small niche community and new gopherholes (websites made with the Gopher protocol).</p> <p>Why is that though… It’s simple. Just like it’s sites… Because it just contains basic textual content.</p> <p>In a world with way too many flashing pictures/videos, ads and bloated websites with way too much JS, this minimalistic approach is quite refreshing and very appealing in my opinion. So I can see it’s appeal in that sense.</p> <p>It just let’s you read the freaking content, so it never died because of that neat aspect.</p> <p>But there lies a problem… It’s a protocol from the nineties with it’s server security problems and the way of creating a page is a bit different “weird”. (You have to append a tag in front of each line to symbolize it’s content type, even if you use plain text…)</p> <p>Luckily there’s improvement.</p> <h2 id="gemini">Gemini</h2> <p>I already teasered this one before but let’s go into that one. Gemini first appeared in 2019, so it is a pretty recent one in this world of protocols but it aims to improve a bit compared to Gopher just as it’s “tagline”. (Lighter than http, heavier than Gopher)</p> <p>In it’s core it seems to be pretty similar. It’s webpages (capsules) are made up by text-based webpages with some smaller features sprinkled in it like links etc. and it’s syntax feels like markdown in a way but a bit more limited in a way.</p> <p>But compared to Gopher it has fixed up a lot of the different problems like the security aspect, by using TLS and it’s syntax is way better since as I said… It uses markdown.</p> <p>And the great thing. It keeps its advantages with the vision of a clutter-free web. This feels really great as a reader since you can just explore different corners, different capsules and their content, what they think or just whatever. It gives one a flash back to the past with a touch of modern features.</p> <p>This is basically why one might use these protocols. Gopher or Gemini won’t be replacing http… They have their niches and they co-exist and this is why they exist, because they are there for different things. I hope you get my point there. :)</p> <h2 id="how-can-one-start">How can one start?</h2> <p>Maybe you find this vision of a clutter-free appealing and you want to join but you might be thinking… How can I join?</p> <p>You can’t just type up “gemini://denisthiessen.de” and expect something from your typical browser.</p> <p>There are two ways.</p> <p>The easiest one is a traditional web-based proxy, a website which sends your request by itself and shows you it’s content inside the http protocol-based web. Just look one up with your search engine of choice and you can start.</p> <p>The second one is using a special browser which can access Gemini capsules or gopherholes. There are many of them out there and there are even browsers which can access different protocols at once, so you don’t need to install two browsers if you want to try both out. I use “kristall” but there are many different browsers out there. :)</p> <h2 id="so-what-to-do-now">So what to do now?</h2> <p>A great starting point to check out for Gemini might be the official website <a href="gemini://gemini.circumlunar.space">gemini://gemini.circumlunar.space</a> and the biggest Gemini-based search engine <a href="gemini://geminispace.info/">gemini://geminispace.info/</a></p> <p>For Gopher a good starting point might be also be a <a href="http://gophervista.benjojo.co.uk">search engine</a> to start your journey.</p> <p>Or you might as well check out my personal <a href="gemini://gemini.denisthiessen.de">Gemini capsule</a> if you made it this far…</p> <p>So yeah…</p> <p>That’s it for today. Don’t wanna drag this one out too far.</p> <p>Have fun surfing.</p> <p>See ya.</p> Fri, 04 Feb 2022 17:33:00 +0000 https://denisthiessen.de/blog/small-web.html Why I have this website... https://denisthiessen.de/blog/why-website.html <p>Hey hey.</p> <p>Long time no see…</p> <p>Hope you are doing well so far in the year. Recently I’ve been thinking about this webpage and it’s further purpose and also how I want to use it right now as well as in the future.</p> <p>It might now seem like much but I’ve been spending a bit of my free time on this little project of mine for a while. <em>I mean obviously… Look at the crazy output of blog posts recently…</em></p> <p>But I’ve been getting quite a bit out of all of that and I just wanted to share my thoughts on hosting a personal webspace.</p> <h2 id="independence">Independence</h2> <p>It’s really neat to think that in this ever changing world with ever changing platforms you’ve this own little space on the web which you can customize just like you want it to be.</p> <p>You can share your own content without worries, you can host your own tools without them suddenly changing from one day to another.</p> <p>Did I mention that you can go whatever you want however you want it to be… Just because <strong>you</strong> are in charge.</p> <p>Not just some third party service that might shut down or become irrelevant in a while.</p> <p>It just feels super liberating.</p> <h2 id="the-flex">The flex</h2> <p>It might sound weird and I don’t know if I’m the only one with that thought going around but it feels kinda cool to have this little webspace going around.</p> <p>I mean… how cool is it to be able to say that you’ve got your own webpage or web stuff going on, with your own domain/email/whatever that even contains just your plain name. <em>Big sorry on that part to all of the people out there with super common names… :(</em></p> <p>That’s pretty cool in my book.</p> <p>Btw did I mention that it kinda feels a bit professional to have this separate independent stuff with clean domains etc. ;)</p> <h2 id="the-tools">The tools</h2> <p>As you might have guessed I don’t spend my main time considering this webspace on this webpage alone. As I said… Just look at the output of blog content by me. :D</p> <p>I spend it rather on different kinds of web tools/thingies that I’ve got going around.</p> <p>A custom git, jenkins, wiki, Minecraft server with custom map, online LaTeX editor are just a few of those things that I’ve got running on my little VPS besides this website and I use these super powerful tools quite a lot. Yes it takes a bit of time to maintain these, but it feels so rewarding/useful to have this around and to know that you can do whatever you want with these tools, customize them however you want also feels amazing.</p> <p>So yeah… Those were my own thought on the topic of why I’m maintaining this webspace. Don’t get me wrong. It’s not for everyone, especially not for technically “talented” people.</p> <p>But for me it just feels very rewarding and cool to have this.</p> <p>See ya hopefully soon. :D</p> Wed, 19 Jan 2022 19:33:00 +0000 https://denisthiessen.de/blog/why-website.html How I'm using desserts for my version control https://denisthiessen.de/blog/private-git-server.html <p>Long time no see…</p> <p>But here I am again. :wink:</p> <p>Well… I had this one written out for a few months now but I sadly haven’t found the time to write/try everything out yet. <em>No wonder considering how long that one is…</em></p> <p>But I still wanted to publish that one finally to have at least the basic version out there. I should’ve split that one into two parts but well…</p> <p>What I basically wanted to tell is that I haven’t finished that section with the SSH-Keys out simply because I haven’t tried it out yet (because of other projects and the reasons outlined later on <em>(I simply keep it off 99% of the time)</em> and I don’t wanna tell you something that I haven’t done yet.</p> <p>So yeah… I’ll update that blog post some day in the future, but for now enjoy. :)</p> <p>“Today” I wanna talk a bit about an idea I recently had inspired by one of my university professors. Well… A few weeks ago I saw a neat little deal for a complete kit with a Raspberry Pi Zero W and thought to myself… <em>why not?</em> A few days later it arrived and was thinking about a project I could do with it. I tried different things like some general Linux Desktop shenanigans or <em>Retropie</em> a special OS image built on top of Raspbian which allows a cool emulation system for retro consoles. But I didn’t really feel like “that is it”… <em>and also needed some extra equipment for that Retropie stuff haha</em></p> <p>Recently one of my university professors gave me a really interesting idea by barely mentioning the words “private Git server” during a lecture. Then I leaned my head downwards by about five degrees and saw my poor little Raspberry Pi just sitting there and waiting.</p> <p>It was in this moment where everything came together. <em>Why don’t I just repurpose this fella as my own private Git server?</em> And that’s what I did. Now that I’ve made it kinda was easier than I thought. So that’s why I wanna share this with you out there. :)</p> <p>You see… Technically with today’s ecosystems and other cloud-based platforms there “shouldn’t” be a reason why an average person would actually need this. There are a lot of platforms like Microsoft’s <em>GitHub</em> which even offer private online hosting of your code-repositories with the corresponding advantages that a Git repository and version control offers. So why did I do this again?</p> <ul> <li> <p>I have this system 100% under my control which means a Microsoft for a example has no control over my code that I’ve written. So the privacy aspect is ideally even more protected than with a online service.</p> </li> <li> <p>The cost. You see… With an unlimited private repository service there is always some sort of cost involved. Whether it would be money or other “information”. Always remember kids… <em>If you’re not paying for the product then you are the product.</em> And with that method you only have a one-time cost associated with buying the Raspberry Pi (<em>if you don’t have one already…</em>) and some very small electricity costs. If you don’t let it run 24/7 these costs are basically non-existent, especially if you use less power-hungry versions like the Zero line like in my case.</p> </li> <li> <p>And last the “fun factor”. You see… You could call me a nerd or something else in that manner. I don’t what term is popular with the kids these days. But I guess you know the drill. Whatever term you chose, well that’s kinda true. I love tech and software and hardware and all of that stuff. And I also love playing around with that stuff. So for me this is a project to play around and have a bit of fun while creating something that I can actually use for my other projects. I mean… That reason alone is more than enough for most people. :D</p> </li> </ul> <p>Now that we have that out of the way let’s get onto the actual stuff.</p> <p>So we start out with the plain and basic Raspberry Pi just like it came out of it’s box. Now we use a simple micro SD-card and flash whatever operating system you wanna use. I’m using Raspbian because it is the officially recommended operating system for the Raspberry Pi but I’m pretty sure you could use basically any other Linux based operating system and still get along with this “tutorial”.</p> <p>With our freshly formatted SD-card in the Raspberry Pi we now boot it up for the first time and set up the Pi. I don’t wanna go too much into detail on that part since it is pretty intuitive and not really on the topic and could actually be very different dependent on which operating system you chose. A little tip from me. Enable SSH-Access on your Raspberry Pi so you can access it from your main PC and you can you everything from here on, on one computer. Now that the Pi is properly set up we go on with the process of setting up our private Git server.</p> <p>First of all, make sure that you use the newest version of our software that you’re using (OS Software, Package Manager (<code>sudo apt-get update</code>) and if it isn’t pre-installed already (if you are not using Raspbian), install Git with <code>sudo apt-get install git</code></p> <p>Now we create a folder wherever you like. This folder will be housing all of your repositories which you wanna create. I’m creating it in the root directory of my little Pi and call it “repos”. So use the <code>cd</code> command to navigate to your target destination for your folder and then execute <code>sudo mkdir <FOLDERNAME>&lt;/code&gt; (in my case <code>sudo mkdir repos</code>) to create your repositories folder.</FOLDERNAME></code></p> <p>Now we use the <code>cd</code> command again to navigate inside this folder we’ve just created and inside there we create yet another folder in the same manner. This folder will represent your single repository with all of it’s data. So execute the <code>mkdir</code> command again like this… <code>sudo mkdir <REPOSITORY NAME="">&lt;/code&gt;. I'm using the name "testproject" so for me it's <code>sudo mkdir testproject</code>.</REPOSITORY></code></p> <p>Then we go into this folder that we’ve just created and now execute the following command: <code>sudo git init --bare</code> This command will initialize a minimal bare-bones git repository inside this folder which is theoretically ready to use. The only thing left to use as a Git server is the outside access to this repository we’ve just created.</p> <p>To accomplish that goal we just go back one folder to our repositories folder (repos) via the <em>cd</em> command. In there we execute the following command. <code>sudo chmod -R 777 .</code> This command recursively sets the access level of each folder and file which is inside our repositories folder so that everyone who can access to the Pi has read and write access.</p> <p>Don’t forget to change the password of our Pi from the classic <em>raspberry</em> to something less crackable so we don’t accidentally make our Git server public. :D</p> <p>But now we are done with the basic setup on our Raspberry Pi and we have a private Git server on our Pi up and running. (if we leave the Pi running, or not… :D <em>it’s still a server kinda haha</em> )</p> <p>So now we get to how we can actually use this. To use our freshly initialized Git repository we have to do the following steps.</p> <p>Create a folder/directory in which your new Git repository will be based. Then open and navigate the command line to the corresponding directory that you’ve just created. Inside you can execute the following command. <code>git clone pi@IP_ADDRESS:/repos/YOUR_PROJECT</code> An example would be <code>git clone pi@1.1.1.1:/repos/testproject</code> (You may need to enter a password. That would be the one which you use to login to the Raspberry Pi. And make sure that Git is also installed on that device.) That command clones our Git repository from the private Git server to that folder but since there no content inside the repository this will be “empty”. Well… Not really empty. There will be a <code>.git</code> folder inside which configures the background stuff Git and the repository is doing. <em>To put it veeeeeery simple… ^^</em></p> <p>With the repository in place you can finally do the really cool Git stuff you are actually here for. <em>Cool does not have to be taken literally though since this is all pretty nerdy overall…</em></p> <p>We can now add some files to our repository. Doesn’t matter what or which… Whatever you wanna do inside the repository. ;) I personally think that if you are interesting in setting up a private Git server then you at least know how to commit and push something to a Git repository. But if you need a reminder or want to save one internet search I’m giving you a really quick rundown.</p> <p>After you added your files enter the command line inside the directory where your repository is. Then execute the command <code>git add .</code> This adds all edited/added files inside the repository to the <em>“staged changes”</em> When those files are staged execute <code>git commit -m "YOUR_COMMIT_MESSAGE"</code> to commit your changes and finally execute <code>git push</code> to push your changes to your private Git server. (again here you might need to enter the password I’ve mentioned before…)</p> <p>And that’s it. You’ve created your own private Git server and pushed your first commit to it. So that’s really great and I could end this blog entry right here since we have a usable product now… But that would be a bit too easy and we could make our lifes a bit better from here. :P</p> <p>The first thing I’d like to change from this baseline is the fact that we are currently using a password to authenticate ourselves to the Raspberry Pi. For many reasons this is kinda unoptimal which I don’t wanna go too far into detail because… <em>Well…</em> This security topic would be a blog post by itself. ;)</p> <p>Nevertheless we are currently just using basic authentication with a simple password which poses a security risk. I mean… If you only use your private Git server locally inside your network without any outside connections and isn’t even online 24/7 and just only when you need it (in very short bursts) then this isn’t really an issue I guess. If you think about it… You can’t get remote access to a device that isn’t even turned on. ^^ 11/10 security in my book. :D But this is kinda annoying to turn it on or off every time you use it, especially if you wanna use it frequently. So we need a better solution.</p> <p>That’s where the so called <em>SSH-Keys</em> come in. The <em>SSH-protocol</em> or <em>Secure Shell Protocol</em> (<em>yes IT people are really bad at making acronyms/abbreviations…</em>) is a different authentication method where the security is a lot higher than the basic authentication.</p> <p>But that is where I put a little cut. As I said, that’s where that explaination with the SSH-keys would come in but yeah… That’ll come in the future.</p> <p>See you hopefully soon</p> <p>Denis</p> <hr /> <p>Further Resources:</p> <p>PS: I’ll update these informations with more in resources in the future. :)</p> Wed, 28 Apr 2021 22:02:00 +0000 https://denisthiessen.de/blog/private-git-server.html Why... - Brainfuck https://denisthiessen.de/blog/brainfuck.html <p>Ahoy and welcome to this blog entry.</p> <p>Today I’d like to start out with some kind of ‘series’ about so called esoteric programming languages in which we will explore the wacky and unnecessary when it comes to programming languages. It’s called “Why…” and is actually an acronym for <strong>W</strong> acky <strong>h</strong> euristic novelt <strong>y</strong>.</p> <p>You see…. There are of course your C’s, your Java’s and your <em>&lt;insert your favorite “serious” programming language here&gt;</em> which have the intent of being somewhat viable in creating cool/useful applications. But some people with a computer science background thought to themselves…. <em>Nah… That would be boring</em> and they went on to create the more wacky side when it comes to this topic.</p> <p>So this is basically how this genre of programming languages was created. <em>not really but yeah… I’m not really giving you a history lesson here… Sorry.</em></p> <p>Since this topic kinda interested me here and there and I know a thing or two about some esoteric programming languages I’m starting this series as an introduction to those thingies.</p> <p>If you talk about esoteric programming languages the one most people are at least familiar with is Brainfuck so let’s start this series out with this absolute classic. <em>finally… This took way too long…</em></p> <p>Well… What is this ‘Brainfuck’ about? Created by Urban Müller in 1993 Brainfuck is a fully <a href="https://en.wikipedia.org/wiki/Turing_completeness">Turing complete</a> <em>(in short this means that it can be used to emulate a ‘Turing machine’)</em> programming language, which only consists of the eight symbols “+”, “-“, “&lt;”, “&gt;”, “[”, “]”, “.” and “,”. Crazy I know… But I don’t wanna get into the further historic details and other properties. Let’s get into how this strange language works.</p> <p>As I previously mentioned Brainfuck consists of only eight different instructions that you just concatinate by another. But how on earth can we get any meaningful programming done with this….</p> <p>Actually a lot of people seem to think that Brainfuck is quite complicated hence the name “Brainfuck” but it is actually quite simple if you understood the basic concept.</p> <p>You see…. You can imagine how Brainfuck executes it’s code kinda like a conveyor belt, paper tape with some spaces/slots with integer values you can put inside them or for the more technical person it’s kinda like this Turing machine that I’ve mentioned before but with only integer values in its slots.</p> <p>This imaginary tape has a pointer to the current slot which it is currently at.</p> <p>At that is basically it when it comes to explainations to understand Brainfuck and its operations. Now we can divide those eight different instructions into four different groups which all do kinda the same thing. So let’s go over them.</p> <p>The first group involves the current value of each slot. The “+” operation just increases the current value in the slot the pointer is pointing to by 1. The “-“ operation does exactly the same but it decreases the current value by 1.</p> <p>Two down, six to go. The next group involves the pointer and how it points to different slots. The “&lt;” operation moves the pointer one slot to the left and the “&gt;” operation moves the pointer one slot to the right. Quite simple isn’t it.</p> <p>So let’s make it a bit more difficult with the next group which involve loops. Yes… You can loop stuff/code with Brainfuck but how does that work? The “[” operation marks the beginning of the loop and the “]” end. In between you can put whatever you want in between, even other loops. But every loop needs some sort of exit condition, otherwise the loop would just go on forever. You see…. Every time the program gets to the “[” operation it checks whether the slot where the pointer is pointing is zero. If it isn’t zero it just continues normally with the code inside the loop. However if it is zero the program will jump forwards to the matching “]” operation of that loop. The “]” operation works kinda the same but in the opposite. If the value of the slot which the pointer is currently pointing at is zero the code continues normally with the code outside the of the loop. But if it isn’t zero the program will jump backwards to the matching “[” operation which basically provides the looping mechanic. That’s how looping in Brainfuck is done…</p> <p><em>Phew</em> That one was kinda a bit much but I promise, these were the most difficult to understand operations in Brainfuck. I’d say we finish it off with the rest. Those are just some operations concerning Input/Output. The “.” operation outputs the current value of the slot the pointer is currently pointing to but not normally. It outputs the ASCII value of the integer value of the slot. If you don’t know what that is, to put it very very <em>veeery</em> simple, it’s a table where an integer value corresponds to a character or other kinds of values. For example the integer value of 65 corresponds with this system to the character “A”. You can look up the table <a href="https://www.asciitable.com">here</a> if you wanna find out more. So that is how that one works. The “,” operation works quite similar but instead of outputting the value of the current slot it puts it’s integer value according to the ASCII table to the current slot the pointer is pointing to.</p> <p>With that we are done. We went through everything Brainfuck has to offer when it comes how it basically works. I might have left out a detail here and there but basically this is more than enough to understand the basic principles of Brainfuck.</p> <p>So let’s get started actually doing stuff with Brainfuck. The first thing that most programmers do is a “Hello World” program. It’s simple, it’s easy and it quickly done. This sounds great doesn’t it, so let’s a go.</p> <p>Our goal is to print the text “Hello World”. The only way to print stuff to the console is to use the “.” operation. Although we can only print one character at the time and this is kinda annoying it is the only way to get this done, so our goal is to print each individual letter of our text “Hello World”. If you remember the “.” operation prints the ASCII value of the current slot value. Now our goal is to generate each of the letter’s corresponding ASCII value. For our goal this means we need to generate the values 72, 101, 108, 108, 111, 32, 87, 111, 114, 108 and 100 corresponding to the letters “H”, “e”, “l”, “l”, “o”, “ “, “W”, “o”, “r”, “l”, “d” in some slot according to our trusty ASCII table.</p> <p>This is where our other operations and our creativity comes in. You see… To accomplish this you could <em>insert doubletime here..</em> put 72 “+” operations, then a “.” operation to print the character “H”, then put 29 more “+” operations, then another “.” operation for the “e”, then add 5 more “+” operation, following two “.” operations for the two “l” characters, add three more “+” operations with a “.” for the “o”, <em>theeeeen</em> do 79 “-“ operations to get the value ‘32’ in our slot with a “.” operation…. <em>and so on…</em></p> <p>I don’t want to continue anymore. I think you got the idea. This is very annoying, <em>waaaay</em> to time-consuming and most importantly not very efficient. If you look at the Wikipedia article you can <em>hopefully</em> find another “Hello World” example and this one is a lot shorter. So how is that one done?</p> <p>Well… Let me introduce you to multiplication. You see… Previously we used a <em>loooot</em> of individual symbols but just like you can let’s say use 20 add operations, you can add by five times four. Both equal 20, but it’s a different representation. We can use this concept to cut our code down by a lot of operations. Let me look at this example. We want to put the value of 20 into a slot. Normally we wanna just use 20 “+” operations and our task is done… But this isn’t that efficient. What we can do is the following. We say that 20 is equal to four times five. We just set the value of one slot to four by using four “+” operations. Then we can start a loop using the “[” and “]” operations. Inside this loop we wanna do the following. We go to a different slot using either the “&lt;” or “&gt;” operation. Then we increment the value by five using five “+” operations. Then we go back to our initial slot with the current value of four and decrease it by one with the “-“ operation. Now happens the magic. Since the value of this slot isn’t zero but three we go into our loop block again and the same thing happens. We go to our slot with the current value of five, increase it by five and go back to our initial slot and decrease it by one to two. This now happens two more times until the value of our initial slot is zero but now the value of our slot is the result of our multiplication, exactly 20. It’s just like magic. <em>whoaaaaa</em></p> <p>If you were to code something like this, this would look roughly like this. <em>++++[&gt;+++++&lt;-]</em></p> <p>As you can see. Instead of 20 operations we’ve only used 14 operations to accomplish the same thing. We’ve saved <em>30%</em> of program space. The great thing about this concept is that depending on which kind of multiplication you use on different sizes of numbers you can save even more space.</p> <p>And it’s this kind of memory management you can do in Brainfuck which makes it quite fun to program with. There are a lot of these little concepts / program blocks which let you do cool things like moving values, copying, setting the value of a slot to zero and even more. The possibilities you could do are quite a lot, even though you only have eight operations. :)</p> <p>There’s one thing that I’d like mention before we conclude this post. Besides Brainfuck there are a lot Brainfuck-esque languages since it is basically one of the most popular esoteric programming languages. A lot of those variations replace the text/characters of the Brainfuck operation. Let’s take <em>Ook!</em> for example. The functionality behind <em>Ook!</em> is basically equivalent to Brainfuck but the name of each operation is different. For example let’s take the “+” operation. In <em>Ook!</em> this operation is called <em>“Ook. Ook.”</em>. A list of each operation is visible <a href="https://esolangs.org/wiki/Ook!">here</a>. I don’t wanna talk too much in detail about this. The main takeaway should be that there are a <strong>lot</strong> of Brainfuck variations, but don’t be scared. These are most likely just the same and a lot of other esoteric programming languages work with the same principles as Brainfuck with a tape and slots and so on.</p> <p>Well… This isn’t really the <strong>THE ULTIMATE BRAINFUCK GUIDE OF DOOOOM</strong> or anything. This series should be rather an entrypoint to those languages. <em>this blog post is already way too long</em></p> <p>The main thing I wanna teach you is to look up stuff and inform yourself. Chances are, you view this blog post via a great medium called the <em>I N T E R N E T</em> and everything there is within the reach of your fingertips.</p> <p>With these words I’d like to conclude this little story about Brainfuck; an esoteric wonderland in the world of programming languages. If you wanna read up on even more Brainfuck I’ve linked to some further resources where you can at least start your journey. I take no responsibility in the content linked to these webpages or generally every link. At least at the time of writing this post these pages contained said resources. <em>just in case the webcontent changed there ;)</em></p> <p>See you hopefully soon</p> <p>Denis</p> <hr /> <p>Further Resources:</p> <p><a href="https://en.wikipedia.org/wiki/Brainfuck">Wikipedia</a></p> <p><a href="https://fatiherikli.github.io/brainfuck-visualizer/">Brainfuck Visualizing Tool/Interpreter</a></p> <p><a href="https://blog.twal.org/posts/2014/programming-in-brainfuck-part-1-common-patterns-conditions/">Some information about code patterns</a></p> <p>PS: I’ll update these informations with more in resources in the future. :)</p> Sat, 16 Jan 2021 22:02:00 +0000 https://denisthiessen.de/blog/brainfuck.html An Introduction https://denisthiessen.de/blog/introduction.html <p>Hello World.</p> <p>Denis speaking. <em>well I’m writing but you get the idea…</em></p> <p>And welcome to my little blog. I’m not really expecting that too many people, or even people at all but welcome. Nice that you’ve found this corner of the interwebs. So…. You might be asking yourself… What is this guy up? I’m glad you’ve asked. Or not. I’m answering this question anyways. :D</p> <p>Well… This blog is about me and my ideas, my interests and my projects and since my interests revolve around computer sciences and programming this blog will also mainly revolve around these topics.</p> <p>Also this blog serves some archival/learning purpose in the sense of outlining the basic approach in a certain topic/project and depthen my understanding on this topic.</p> <p>Don’t worry though… I’ll try to make it at least a little bit interesting since the idea of a personal blog always intrigued me. But I won’t say there wouldn’t be some off topic surprises here and there. :P</p> <p>I’ve already got some interesting ideas that I want to share with you so you can be ““excited””.</p> <p>So yeah… I don’t want to drag this one out unnecessarily long <em>don’t worry… I’ll do that more than enough…</em></p> <p>The main thing about this blog entry is to be this little introductory thingy. Nothing more. Nothing less.</p> <p>So see ya. :)</p> <p>Denis</p> Sun, 10 Jan 2021 21:02:00 +0000 https://denisthiessen.de/blog/introduction.html