• Home
  • Posts
  • About

🧮 andreas.hartel.me

  • Linkage

    February 18th, 2023

    Collecting a bunch of links here that I have meant to record for a longer time.

    • https://kerkour.com/rust-combinators
      A good introduction and overview article about combinators and iterators in Rust. Especially if you’re new to the language.
    • https://web.stanford.edu/class/cs25/
      A Stanford class about Transformers (the neural network architecture). With an introduction to the architecture itself by Andrej Karpathy
    • https://www.cs.toronto.edu/~hinton/FFA13.pdf
      Link to the original forward-forward learning algorithm by Geoffrey Hinton. Could be accompanied by this Twitter thread (https://twitter.com/martin_gorner/status/1599755684941557761?s=20) and this implementation (https://github.com/mohammadpz/pytorch_forward_forward/blob/main/main.py) which I haven’t yet at a close look at.
  • Domain-Driven Design and Clean Architecture

    February 11th, 2023

    Clean Architecture

    A colleague recently mentioned the concept of Clean Architecture (as named by Uncle Bob Martin). The essential idea is to have

    • a layered software architecture,
    • with the domain objects and business logic at its core
    • and all dependencies only pointing inwards

    Uncle Bob uses 4 concentric circles to denote the layers of a generic architecture and calls them (from inside to outside): Entities, Use Cases, Interface Adapters and “Frameworks and Drivers”. The outermost layer contains all technical details like the type of database that is used and which web framework (or UI or whatever) is applied.

    Of course, Uncle Bob would not be Uncle Bob if he would not suggest to use the dependency inversion principle to have the control flow point in the opposite direction as the dependencies. In my current job, where we work mostly in Rust, we would most of the time rely on traits and in particular the SerDe crate to take the role of the depedency inverter.

    Layered Architecture in DDD

    Not so long ago, I tried to read the book Domain-Driven Design by Eric Evans. It was also recommended to me by a colleague. But trying to read it I had a really hard time working myself throug the book. The writing style somehow didn’t connect with me that well.

    But then, more recently, I did discover the DDD reference which is a little summary of the patterns and definitions of DDD that is also authored by Eric Evans and that can be downloaded for free on this website: https://www.domainlanguage.com/ddd/reference/

    I mention this book here because it also has a section on Layered Architecture in which it says:

    Isolate the expression of the domain model and the business logic, and eliminate any
    dependency on infrastructure, user interface, or even application logic that is not business
    logic. Partition a complex program into layers. Develop a design within each layer that is
    cohesive and that depends only on the layers below. Follow standard architectural patterns
    to provide loose coupling to the layers above.

    DDD Reference by Eric Evans
  • Nick Tune on Domain-Driven-Design

    February 4th, 2023

    Today, Youtube recommend this talk by Nick Tune to me:

    I had actually never heard of Nick Tune nor the NDC Conferences before, but the title certainly struck a chord with me. For one, I am currently reading the book Team Topologies and I recently started learning about Domain-Driven Design. So overall, good job Youtube alogrithm!

    Now, the talk itself became most interesting to me in its last part, the part about indentifying and strengthening your company’s core domains. The first part was mostly about Event Storming, a technique that Nick seems to be using a lot as a consultang. The second part was a short introduction to Team Toplogies. The concept of the independent service heuristics sounded quite interesting and worth mentioning here.

    So for the rest of this post, I will mostly collect links that have been mentioned in the talk and maybe summarize some of the techniques that are mentioned there. I really liked the fact that Nick Tune and team have github organization called Domain-Driven Design Crew.

    Independent Service Heuristics

    The Independent Service Heuristics (ISH) are rules-of-thumb (clues) for identifying candidate value streams and domain boundaries by seeing if they could be run as a separate SaaS/cloud product. Based on some of the ideas in the book Team Topologies by Matthew Skelton @matthewskelton and Manuel Pais @manupaisable.

    https://github.com/TeamTopologies/Independent-Service-Heuristics

    This is essentially a checklist, or question catalogue, of 20-30 items that you shold try to answer. The more “yes” or “probably” answers, the greater the chance that you have found a good candidate for being a separate stream of change.

    Core Domain Charts

    As mentioned above, the third part of the talk is mostly about applying Core Domain Charts to different case studies and identifying patterns and anti-patterns wihin the framework.

    Core Domain Charts is a set of visualization techniques that is available as a github repository on the Domain-Driven Design Crew’s github. It’s essentially using 2 types of charts, one where business domains are sorted by the axes “Business Differntiation” and “Model Complexity”,

    https://github.com/ddd-crew/core-domain-charts/blob/master/resources/core-domain-chart-template.jpg

    and a seocond chart, more for the purpose of finding out about useful migration paths, where the axes are “Business Differentiation” and “Migration Complexity”.

    https://github.com/ddd-crew/core-domain-charts/blob/master/resources/core-domain-chart-template.jpg

    Nick Tune identifies 3 main areas in the Core Domain Chart: The acutal core domain (defined by highest business differentiation, the supporting domain (also called table stakes features) and then, lastly, generic subdomains (things that you typically want to by off the shelf where possible).

    The main strategies to improve on your subdomains is by exploiting (find complexity that can increase differentiation, i.e. migrate towards top right) and eliminate (find unnecessary complexity and get rid of it if it doesn’t harm your business differentiation, i.e. migrate towards bottom wherever you are on the x-axis).

    Some strategies he mentioned in the talk:

    • Watch out for Hidden domains
    • Decouple supporting domains for fast flow in core domains
    • Put your efforts into a Decisive core
    • Watch out for indefensible cores
    • Try to find a revenue stream for Big Bet Future Cores
    • Take your High-leverage Supporting Subdomains seriously
    • Suspect Supporting: Try to reduce the complexity in those, maybe their codebaes has just grown old over time

    The techniques summarized in this repository seem to be an elaboration on the chapter “Distillation for Strategic Design” in Eric Evans’ book Domain-Driven Design.

  • Solutions to exercises from Introduction to Analytic Number Theory by Apostol

    January 28th, 2023

    As I am currently working my way through the exercises in Apostol’s book “Introduction to Analytic Number Theory”. Since I wasn’t able to find solutions to all exercises and since the book does not contain solutions, I googled for them.

    And then I found this: https://gregoryhurst.com/solutions/. A PDF file containing solutions to most if not all exercises in the book.

    😳

    Since graduating, I decided to work out all solutions to keep my mind sharp and act as a refresher.

    Greg Hurst, author of the solutions, in its preface

    I was very happy to have found this work and I am very thankful to its author!

  • A visual guide for solving a Rubik’s Cube

    January 21st, 2023

    From time to time, my kids ask me to solve a Rubik’s cube for them.

    I still no how to solve the first 2 layers of the cube. Having once, a long time ago, implemented a virtual Rubik’s Cube app with an automatic solving functionality, I still can remember that part of the algorithm.

    But to solve the last layer of the cube, I always need to look up the solution. Here’s a website (in German) that explains the solution with nice intuitive visuals: https://www.keks.de/wuerfel/

    From now on I know where to find the solution without having to Google it.

  • A talk about Mob Programming

    January 14th, 2023

    A colleague recommended this talk about Mob Programming to me:

    At my current job, we try to implement Mob Programming as much as we can. But not all people accept it equally well. Some people like it more than others. I think I am one of those people who like the concept.

    This talk shows how the author and his teams practice Mob Programming and brings up some reasons for why he thinks it’s beneficial.

    One concept that he mentions in the talk is the concept of Question Queue Time. How long does it take to get an answer for a question that’s blocking us. If this time is too long, then we are blocked and tend to increase inventory, that is we start working on something else.

    Inventory is defined as the work items we’ve started working on but that do not yet deliver value.

    How can we keep psychological flow intact while working in a pair or as a mob? That’s a question that I think is crucial to making Mob Programming successful. One sentence from the talk that resonated well with me was thins one: “We enable individual flow by giving each person the safety and space to think in their own way”.

  • What is something you want to achieve this year?

    January 1st, 2023

    The title of this blog post is the first prompt of this year’s #bloganuary challenge by WordPress. It is, at the same time, a very natural question to ask on the first day of a new year. It implies the promise that new beginings are possible and that wherever life has brought you, you can still change your path and achieve whatever you want. That is of course, if only you are dedicated enough and invest enough time into it.

    If you think about this promise for a while, then it might even occur to you that every day of the year, every day of your life, every instant, every breath of each day offers that same opportunity to just begin again.

    To me, at first glance, these questions always seem like an illusion, like a false promise. Sure, you can achieve a lot, you can invest a lot of time into becoming physically stronger, eat better, become a better cook or, if you’re so inclined, a better mathematician. But at what cost? What other things in your life will suffer from their newly won lack of attention? Your work? Your kids? Your wife? Your health?

    My life, to me, always seems to barely work on a day-to-day basis. I always just have enough time to make a good job at work, as a husband and as a father. There’s hardly any time or energy for anything else really.

    So in that sense, I might even decide to become more efficient at work, as a husband and as a dad. Maybe that’s what I want to achieve? But, honestly, that doesn’t sound very actionable. We all know that time is not something you can posses and store on a bank account (unless you happen to be one of Michael Ende’s Grey Gentlemen). It turns out, you can only take time away from activities by using it on other activities first.

    Damnit, that brings me back to the original question: What is it I want to achieve this year? I didn’t quite manage to shake it off with my first attempt. So do I want to become a bit less addicted to food? Maybe a bit more physically fit? Probably a bit more organized as a dad and more empathic as a husband. Maybe finally understand the proof of the prime number theorem? I guess a bit of all of the above.

  • Annotating Serre

    July 12th, 2022

    I very much like the thought of annotating the book “A course in arithmetic” by Jean-Pierre Serre. It is a fascinating and dense math text book that I find very attractive. The book has also been recommended by Richard Borcherds as one of his favorite math books, and I very much like Borcherds’ online math lectures.

    But on the other hand, “A course in arithmetic” is a very hard book. I tried to read parts of it and most of what I read seemed to be very hard to understand. As I wrote in the second sentence: It is a very dense book. And people with much better mathematical backgrounds have tried before me and struggled: https://www.reddit.com/r/math/comments/80of13/how_to_read_a_course_in_arithmetic/

    When I read this reddit thread, I could very much sympathize with the original poster. But I was even more fascinated by one of the posts’ linking to this annotated version of the book: https://people.ucsc.edu/~weissman/Math222A/SerreAnn.pdf. It is admittedly not a complete annotation of the book but it is a nice start. It seems to be a project that started in a graduate course at the University of California, Santa Cruz.

    Another answer reads like this:

    Serre always gives the maximally elegant proof, putting in only what he considers the absolutely necessary steps. No motivation is given. This is the style popularized by Bourbaki. (A French mathematician informed me that they did this because didn’t want to contaminate the reader with their informal mental picture of what was going on. The reasoning was that their teachers would provide the intuition and “picture”).

    But to appreciate this elegance and economy of presentation, you either have to be so mathematically gifted as to be able to immediately see why he would do things the way he does, or to work hard and gain experience. (Most of us have to go the latter route).

    I think I would like to work through some parts of the book myself and see what annotations I come up with.

  • They progressed every day without particular effort

    March 24th, 2022

    Here’s a sentence:

    Always put an upper and a lower bound on habitual practices.

    Let’s discuss why I like this sentence:

    First of all, reading this sentence now, I feel like it’s almost stating a tautology. But I do still think that there is some good advice in it.

    What I mean by that is that it is notoriously hard (at least to me) to find balance between various things. Like, for example, working life and private life, or, exercise and rest, or, talking and shutting up, the list could go on for quite a while.

    I think that this sentence helps in keeping a certain balance. For example: When you are writing a daily journal, you might want to commit to writing no less than 1 sentence per day and no more than 5 sentences per day. This way you can leave something in your tank for the next day, so to speak.

    Or, to maintain a work-life-balance, you might decide to commit to working no less than 4 productive hours per day and no more than 8 hours. But please don’t forget to decide up front what you mean by productive hours (like e.g. coding, meetings, etc.). Resist the temptation then, after having worked for 8 hours, to sneak in more todos from your list or to just quickly complete that other project. Just call it a day and walk home as a happy and satisfied person. And tap dance to work then the next day because you’re finally able to continue working on that project which you did not complete yesterday.

    As a blogger, you might also decide to write no less than one post per week and no more than 5. This can help you to get into the habit of finding things you want to share with the world and get better a writing and explaining ideas.

    By the way: I got this idea from a video on Matt d’Avella’s Youtube channel the other day, in which he interviewed Greg McKeown, the author of the book “Effortless”. The examples I use are also partially from that interview.

    In the interview, Greg McKeown used one striking example to underpin this concept of having an upper and a lower bound. He used the example of the race to the South Pole between the British and the Norwegians in 1911. Both countries had sent expeditions to Antarctica and the Norwegians won the race (and survived the return) because, according to Greg McKeown, they stuck to a fixed distance of 15 miles that they would walk every day. This is in contrast to the British team whose mileage varied much more and who exhausted themselves in the process. Greg summarizes this by quoting a biographer of the event: “They progressed every day without particular effort”.

    The story was also masterfully illustrated by Matt, that’s why I highly recommend watching the video.

  • Inspiring websites

    March 20th, 2022

    Here’s a list of websites that I find inspiring. The reasons are quite divers. In general I find it very cool when people did a lot of cool things and collected (seemingly) all of their thoughts and projects and results on their website as an archive of themselves.

    • Terry Tao
      This is a mathematicians blog. When I first read its “Career advice” section, back in January of 2016, I was completely blown away by it. In it, one of the principles which the author recommends is to “Make your work available”. This has ever since inspired me to so myself. Part of the reason of why I started this blog.
    • Austin Kleon
      Austin Kleon’s blog operates on a similar principle as Terry Tao’s: Show your work (which is even the title of one of his books). He’s sharing what he comes across, what inspires him and what he created. He’s also famous for doing so in his (by now) 2 weekly newsletters.
    • Michael Nielsen’s Notebook
    • Vitalik Buterin
    • Greg Egan
    • Gwern Branwen
      Found this via Michael Nielsen’s article “How to use a personal website to enhance your ability to think and create?” and I must admit that the design of this website is just beautiful and great.
1 2 3 … 6
Next Page→

Blog at WordPress.com.

  • Follow Following
    • 🧮 andreas.hartel.me
    • Already have a WordPress.com account? Log in now.
    • 🧮 andreas.hartel.me
    • Edit Site
    • Follow Following
    • Sign up
    • Log in
    • Report this content
    • View site in Reader
    • Manage subscriptions
    • Collapse this bar