1. 60

Following up from this post, I’d love to know what you Lobsters are planning to pick up in 2022!

  1. 20

    Formal methods. I’ve already committed to this since I convinced my team lead that it’s be a good idea to specify our system in TLA+, so I’m gonna read up on it during the holidays and hopefully not prove myself wrong.

    Prolog, wanted to do a web application with its http library and use it as database.

    Some hardware stuff maybe. My BU at work does a lot of hardware/embedded stuff and I’d love to learn how some of it works.

    Reading/writing assembly, so spending a lot of time on Compiler Explorer probably.

    1. 5

      Prolog, wanted to do a web application with its http library and use it as database.

      I’m curious why you’re interested in Prolog. When I was taught Prolog, it was as an example of a category of programming languages that doesn’t really exist. I’ve actually written a non-trivial amount of Prolog (and enjoy it), but the languages that inherit ideas from Prolog tend to be proof assistants and solvers, rather than general purpose languages. SMT solvers such as Z3 are the closest to descendants of Prolog and are a lot more generally useful (Prolog has SLD derivation and cuts to hack it to try to explore the solution space in other directions, most solvers have pluggable tactics). If I were starting today, I’d learn Z3 rather than Prolog.

      1. 2

        Well first of all, Z3 doesn’t really fit my purpose of writing a web application, and my plan was more to write a web application and learn Prolog through the process rather than learning Prolog by itself. I’m admittedly more interested in getting the program done than learn everything about Prolog.

        Second, I don’t really know what I could use Z3 for, or rather, I don’t know what it does exactly and I haven’t found a project that interests me where I think it could be useful. Maybe somebody else could enlighten me on this.

        1. 2

          Z3 is an example of an SMT solver. Those take a set of constraints as input, and try to either return an example set of values that satisfy the constraints, or prove that it’s impossible.

        2. 1

          SMT solvers such as Z3 are the closest to descendants of Prolog

          I’d consider Answer Set Programming (ASP) to be the closest descendant. Current practical implementations also have a “solver” flavor (like Z3) but the language uses close to Prolog syntax, and retains semantics that imo capture many of the interesting features of Prolog, like negation-as-failure, ability to straightforwardly define transitive closure, etc. (it comes out of attempts to come up with a less operational semantics for Prolog, of which one proposal, the “stable model semantics”, became the basis for ASP). I use clingo as the implementation, which is pretty solid.

        3. 4

          Plus one for learning TLA+ this year. I ordered @hwayne’s book a year or so ago and read it but didn’t complete all the exercises.

          I found the whole thing frustratingly almost made sense while remaining just out of reach. I had trouble imagining systems that were both motivating to try to model, and also small / simple enough that I would have a chance of succeeding. Systems that would be really helpful to model at work were just way too complicated for me, but problems that I felt I could probably get working seemed trivial and not interesting enough to motivate me to work on them.

          I’d be very interested if anyone had some suggestions for exercises or problems of various levels of difficulty to practice on. Something like exercism for TLA+ would be awesome.

          1. 1

            I think our system is at a sweet spot where it’s not terribly complicated, but also very prone to missing edge cases, and there’s a few very clear invariants that should hold up all throughout, so I think mapping it to what (admittedly little) I know about TLA+ should be possible without too much pain. I’ll probably also try to write a blog post about it when I’m at a good point in specifying it.

          2. 2

            TLA+ legitimately changed how I view software. That’s really the best case scenario when learning a new tool - it affects the way you think, whether or not you actually end up using it at your day job.

            One of the reasons that TLA+ is so much easier to learn than so many other formal methods tools is that Leslie Lamport is, in my opinion, pretty much the best technical writer there is. So many formal methods books and papers are really tough to follow, even with lots of the background knowledge. I found Specifying Systems to be extremely easy to follow along with, and there’s even asides on math concepts when he feels that it’s useful.

            Can’t recommend going down that path enough.

          3. 16
            • How to optimize PostgreSQL (@work)
            • How to repair a house I just bought in the countryside; Maybe wood work too.
            • More stuff surely, but I don’t know it yet !
            1. 8

              Woodwork is very rewarding. Even if you do crude things at the beginning, it’s still incredibly fulfilling to me.

              1. 5

                I’m curious, how did you start learning it ? A book ? Videos ? Just you trying things ?

                1. 6

                  Well I started by trying first and only occasionally googling how a thing is done.

                  I did have “second hand” experience from watching dad make things. He always made stuff with very low education and he instilled in me the fact that you don’t need school to make things, you need to make things to make things.

                  But how I started is I wanted a really specific desk for my apartment and I just couldn’t find anything looking good enough to buy. So I drew what I wanted, figured out what kind of planks and stuff I needed and ordered them from a woodworking skip. They cut the stuff for me and all, and I mostly just glued it together. But the plans were mine and it was a start.

                  Later on I did more and more things for myself. For example, the last piece was bunk beds for my kids. Where I sawed the wood, lacquered it, cut it, assembled, everything.

              2. 5

                Re: Postgres: may I suggest looking into https://www.pgmustard.com/ ? It’s a really neat query explainer explainer tool

                1. 1

                  Thanks, I am going to have a look at it :)

                  1. 1

                    +1 on the suggestion, I had a lot of success with pgmustard. It has a nice user-friendly hints associated with the highest costing things in your query plans, so you can really dig in and learn something about what makes queries efficient.

                2. 2

                  How to optimize PostgreSQL (@work)

                  Are you talking about queries or the DB itself?

                  In either case, I can highly recommend really digging deep into the documentation and also their Wiki. And also make sure to not trust external stuff. Next to stuff changing between versions, sadly some information even on PG consulting company pages are outright wrong.

                  But much fun to be had, with query analysis, understanding how memory is used, how much a difference locales can make (collate), when most don’t even think about it. Really interesting stuff.

                  1. 2

                    Nice! How are you planning to tackle the Postgres optimization?

                  2. 14

                    Only very vague for me, but I am itching to do something different.

                    After having done DevOps work for the last couple of years (Kubernetes, hashistack (to all thinking about learning: good idea!), cloud computing at large, ..), despite there being money in it and despite everyone offering more jobs, more pay, etc., I really want to learn something to get me out of that perceived insanity.

                    I want to learn technologies again, rather than products. Basically I’d want to be the guy that would like to build these products, but I think it’s oversaturated and I really dislike how that whole part of the industry is basically littered with marketing and marketing terms that it has even become gross to lead a technical conversation. It’s just not fun nor particularly interesting anymore - only on rare occasions.

                    I think the most interesting way is probably going to lower level stuff. Not completely sure about that though. Maybe the right way would be getting more distance, like management-y, but that feels a bit too far great from what I tried. I also tried that fit the last three, four years by doing consulting instead.

                    Anyone here having a similar situation? I would really appreciate any recommendations.

                    For lower level stuff I think about re-learning C, some assembly language, maybe try Zig, maybe play with hardware, toying with compilers, maybe drivers, etc. But since I don’t really have a concrete project in mind I might be ending up somewhere completely different.

                    Worst case I’ll stick with cloud land and think about that again for 2023, after all it’s clearly a first world problem to have and there’s more important things in life.

                    1. 5

                      Anyone here having a similar situation? I would really appreciate any recommendations.

                      Have you considered getting in touch with a mentor?

                      I was in a similar situation a few months back and ended up talking to someone who had a lot more experience than me in the industry and that conversation helped me a lot!

                      If this sounds interesting, I can recommend looking at https://www.mentoring-club.com/ (I’ve tried this one personally) and https://mentorcruise.com/ (haven’t tried this one myself but have heard good things about it).

                      1. 1

                        Thanks for sharing. I don’t think that’s what I am looking for though.

                        Honestly this sounds like more like the stuff I went to get away from. It also feels more like something for people at the beginning of their careers. I’ve been there for a while, worked at some companies, worked on own projects, ended up consulting, etc.

                        So my question isn’t really a career question. I think about significantly reducing my hours and do more fun stuff. It might have sounded like a career switch question, but I’m a bit worried that just switching to another field would mostly show me how that field is similarly bad in terms of everything being marketing, buzz, trend driven, people talking about things they seemingly don’t really understand.

                        I want to avoid that hype driven environment. So the website with big company names, books on marketing and business, etc. seems like the stuff I’m trying to get away from.

                        Thanks again for sharing. Maybe it helps someone reading about this thread. :-)

                        1. 2

                          Ah, then I misunderstood your comment. Sorry about that!

                      2. 4

                        Anyone here having a similar situation? I would really appreciate any recommendations.

                        I have, sort of. Some of the things that worked for me in this situation – admittedly some of these may be a little esoteric… – were:

                        • I’m not sure how else to put it but, uh, don’t stress it. The world is full of problems and no one in their right mind is enthusiastic about most of them. It’s hard to search for something cool to do without trying to do it and most of the things you do try turn out to be pretty boring. So… you know, don’t overthink your search for something nice to do. You’ll know it when you see it.
                        • Completely and shamelessly ignore the matter of usefulness. It’s not 1961, there’s a good chance that anyone’s (including your) first attempt at anything is going to be bad and entirely useless. In my experience, no bit of knowledge, no matter how obscure, is useless forever. If something looks like it might be cool to hack on, just do it for a couple of afternoons. Of course it’s not gonna be anything grand, the age of amazing things hacked one afternoon is probably past us, but it doesn’t have to be grand.
                        • This is also gonna sound like a cliche but what the hell: keep an open mind. You never know when and where something cool is going to pop up. I know you said “low-level things” but maybe your next big thing is going to be a JavaScript framework for holographic displays, you never know. If you stick only to the things you know you’re gonna be bored out of your mind.
                        • Don’t let the cool things you read out there put you off. I know how it is to read something on someone’s blog and think man, this guy’s a wizard, and I’m barely getting my crap to compile. Everyone looks like a wizard if all you get to see is their “finished” code. Everyone looks pretty dumb when you see the work-in-progress version.
                        • Our industry fetishizes enthusiasm and there’s a whole array of content mills out there to keep this insanity hype going. I found it’s best to ignore this stuff – there’s an endless stream of language blogs and Raspberry Pi blogs and whatnot out there, and they are absolutely a steaming pile of hot, self-important garbage, mine included, most likely. If you’re looking for something cool to do, don’t try to force yourself to like things a lot of other people like just because they might be useful. The Internet is a big place, if you’re passionate about something, no matter how weird or obscure, you’re gonna find someone to talk to about it.

                        That being said… it’s worth keeping in mind that the grass always looks greener on the other side. There’s plenty of marketing garbage in the low-level side of this industry. Lots of low-level code written out there is of abysmal quality and powers things that should probably not even be a thing in the first place (looking at you, in-car infotainment…). Doing cool things might deliver your from professional insanity but in my experience switching jobs just gets you another job ;-).

                        I’m sorry I don’t have anything more concrete to suggest, like a particular project to try. I suppose it’s something you have to figure out on your own, but if you got some more specific questions about the lower-level side of things, shoot! There seem to be a bunch of folks interested in this over here, maybe me or something else can give you a pointer (heh!)

                        1. 2

                          Thank you for your response.

                          Yes, you are certainly right about the grass looking greener on the other side. It’s a bit what I intended to imply with probably just continuing to do consulting. It’s not a bad job per se, fun, often smart people, having different clients also helps with seeing different things, which is a big part of doing that in first place.

                          Just when I start to reflect I can’t help but notice how this is really not the reason I got into IT in first place.

                          This is oversimplified but maybe it helps to bring the point across. When I go to a company that needs help with improving their (typically cloud) infrastructure what I’ll be doing is helping them with understanding some technologies, some products, etc., but these feel very fast away from computers. It’s a bit like I’d explain Word or Photoshop to someone.

                          Let’s say I’m using terraform. While for some people it’s fun to throw around with big infrastructure that can feel really fun and like having much power (lists hope they don’t throw around with it, but I hope you understand what I mean). However I see it as a hack to deal with some HTP API abstraction to make mostly orders, specifications of what you want from a given cloud service provider. So it’s a bit like filling out technical order forms. The actual work that I’d find more interesting is hidden behind a product and outsourced to the cloud provider. Just that no one usually calls it outsourcing, because we throw a lot of money at people like myself.

                          Of course it’s a lot more complicated than that, and it’s not like this is uninteresting per se, I don’t end up there by chance and you need to know a lot more things, terraform is just a tiny piece, but I am trying to get across why I think going down the stack sounds interesting.

                          For a while I thought, okay just apply for a job at a cloud provider then, but thinking about it more, also talking to people I realized that it’s (again oversimplified speaking) if it’s a new product, you end up writing some automaton scripts, bump the HTTP API over it, do maintained, etc. It’s not like you make interesting choices in many situations. It’s what cloud environments lead to. There’s standardized little building blocks. It’s someones a bit annoying if the blocks don’t quite fit what you are building, but having nice Interfaces and structures you can more easily repeat and software being aware of it is certainly a good thing and I’d argue that even if you build your own infrastructure from scratch, with zero cloud providers those not really codified standards software follows helps a lot. How much easier it would have been for sysadmins 20, 30 years ago if they could have said “funny store state outside of…”. That only was possible when it became a requirement to follow the trend of cloud computing.

                          But that is going OT. The points ignoring usefulness strongly resonates with me. I think that’s something I’ve been missing a bit. It’s also part of why I mentioned lower level/hardware stuff. I don’t think I’ll quickly end up somewhere useful, so I don’t end up in that spot that I am in so quickly. Another reason is that it’s fun to be relatively new to something. Things have that magic touch and seeing new things and understanding new stuff and systems is even what makes many games and puzzles so fun.

                          The other parts, especially fetishizing enthusiasm also very much resonate with me. Thanks a lot for sharing your thoughts.

                          I think a lot is really a “first world problem” and just that I’ve been doing the same types of things for too long, feeling comfortable because one naturally ends up being the expert, which comes with certain perks.

                          It can be a bit hard to then dare to jump into something new entirely. Not that I didn’t have to progress learning new things all the time, but more that maybe they were too close to what I understood and do it is very much repeating patterns.

                          So then stuff doesn’t feel fresh for too long and what one is doing isn’t challenging in the same way as topics where you don’t know where to even start.

                          So I went to for something with less hype that is somewhat new to me. Also it’s certainly enough for it to be a useless hobby.

                          Just was wondering what people do in similar situations. Whether people just jump into another field or end up woodworking or gardening in their free time or something I didn’t think of.

                          Again thanks for your response.

                          1. 2

                            Hey, you’re welcome! I hope some of this helps!

                            So… I don’t know if this holds true for cloud and infrastructure projects, it’s far removed from my field and whatever sysadmin experience I have from years ago is irrelevant by now. But I can tell you that there are plenty of jobs that consist of nothing but putting standard things in standard boxes down the stack as well.

                            For example, there are plenty of embedded Linux consulting shops out there whose model of business is effectively Googling for error messages as a service. All you get to do is move patches back-and-forth, mostly with Yocto or buildroot. It’s basically the lower-level equivalent of editing YAML files all day.

                            I’m not saying this to discourage you – what I actually want to point out is that, while some aspects related to a job are inherent to the field it’s in (cloud, embedded, whatever), some are really inherent to each particular position, and to each company/client. Maybe you can find something interesting to do where you can reuse much of your existing skill set. I’m not sure what that might be given how far apart our fields are. But I imagine there are problems in distributed systems, for example, that can’t be solved by just configuring Kubernetes correctly.

                            I realize big cloud vendors, and large cloud users in general, are likely to offer jobs that mostly consist of making existing building blocks work together. Maybe you can work on the building blocks? Maybe there are smaller companies out there that lack the large-scale experience and are willing to offer a large degree of autonomy to someone with the right experience there?

                            Just was wondering what people do in similar situations. Whether people just jump into another field or end up woodworking or gardening in their free time or something I didn’t think of.

                            When that happened to me, I jumped into another field. The jury is still out on whether it’s been a successful or not but it is looking good so far. I used to do embedded systems for a living, now it looks like I’ll be writing games for the foreseeable future. Not gonna lie, it’s been extremely scary and intimidating. It absolutely involved working for peanuts for a while, which I know not everyone can afford to do. It also definitely involved making all sorts of rookie mistakes and embarrassing myself in Slack channels and the like. It’s also not the kind of thing you can do anywhere, there are plenty of companies out there that are simply unable to cultivate an atmosphere where people can make the kind of mistakes that are inherent to making new things and own up to them and fix them.

                            That being said, since you’ve mentioned gardening… I know, also from experience, that when your profession fill your whole time, not being able to do things as well as you think they should be done is draining, even when it’s not your fault, and even if you are perfectly aware of the line between your profession and something that’s just a job. It’s useful to have other things in your life.

                      3. 10
                        • web things: htmx and Hyperscript
                        • programming languages: one or two of Common Lisp, Rust, Zig, Nim
                        • devops: Hashicorp stack
                        1. 3

                          Htmx is super nice. I’ve been playing around with it over the last few days for a side project and it’s such a refreshing change from the complexity that the “modern” stack sometimes tends to introduce.

                        2. 9

                          Creating multiplatform apps using SwiftUI.

                          I dipped my toes in SwiftUI while doing rcmd and it just clicked with how I envision UI programming.

                          Recently I started an app for controlling the volume of AV Receivers that should hopefully work on macOS, iOS and watchOS from the same codebase.

                          1. 3

                            You made rcmd? Nice work! I have my owner hyper key through Hammerspoon/Karabiner Elements, but I’d recommend rcmd for people for a friendly way to get into it.

                            1. 2

                              Thanks! I’m so glad you find it useful!

                              Yes I also have Caps Lock as hyper-on-hold/escape-on-press using Karabiner but I like the dynamic part of rcmd where I can still focus new apps I haven’t assigned yet.

                              Besides the Hyper Key is already assigned to so many other actions, I wish there was an app to fuzzy search all my hotkeys sometimes.

                              1. 1

                                That makes sense. I hadn’t thought about it that way.

                          2. 8

                            Elixir/Phoenix. Still.

                            1. 2

                              I am too. I wanted to know if others learning Elixir and Phoenix feel similar, but for me Elixir/Phoenix is not easy to adopt into an existing system, so I only get to work on it on my own time. It feels like you need a commitment to Elixir/Phoenix to start using it because everything it does is for building systems, not writing scripts/small programs. Am I alone in this?

                              1. 2

                                It’s a bit difficult to explain to people why I like Elixir so I haven’t even gotten people to the threshold of the language, let alone to try it out. I haven’t been able to come up with a sufficiently compelling elevator pitch. (Granted, I don’t often try to.)

                                1. 1

                                  I’d be interested to hear you try. Elixir has been stuck in the back of my head for the past week, and I plan on doing some Holiday coding in it, if nothing else, I’d like to hear your take on it.

                                2. 1

                                  I definitely have had this experience. Right now I’m trying to do an end-run around that by writing a polling filesystem watcher, so that I have a mini-system in place that’s easy to build scripts inside of.

                                  (And, I know that inotify-based watchers exist, this is more an exercise in porting and understanding than anything)

                              2. 8
                                1. Gamedev. I’ve been working on a custom engine written in Zig + OpenGL and so far I have a basic 3D renderer that can load gltf files, play skinned animation, render BoTW style grass with a geometry shader, render tessellated terrain from a heightmap, and live reload assets with an inotify-based reload system. I’d like to get it to the point some time this year that I can build some quick prototypes for gamejams and the like but will have to learn how to implement a bunch of stuff: basic collision detection, more rendering optimizations (frustum culling, depth ordering, BSPs, etc), Janet (the scripting language I chose, because I wanted to try it out), some kind of job system for multithreading, low-latency input, audio, debug views, VFX, AI stuff (pathfinding, a utility system with a debugger, and maybe fuzzy pattern matching for dialog?), and a simple UI system.

                                I’m also going to try and do a few video game remakes or “covers” (i.e. verticle slices of a game I like) to practice my general gamedev skills. Currently working on a cover of sailing in Windwaker in Godot.

                                1. Music. I’ve been working on writing a song every week for the last 30 or so weeks, so now that I’ve reminded myself that I’m capable of finishing and releasing projects (:P), I’m going to try and polish up some of the best songs and take some private lessons from real producers to get feedback on composition/mixing. I’d also like to improve my ear (primarily for guitar) so I can pick up songs faster and maybe even practice sight reading (it’ll be an extremely painful process if I end up doing it…).

                                2. Reverse engineering/exploit development. I doubt I’ll be able to get to it much this year, but I’d like to learn to reverse engineer hardware/smartphones for mobile Linux development. I’d especially like to learn about writing power-efficient and low-latency software[1]. Also, I want to do a CTF or two and improve my exploit development and cryptoanalysis abilities.

                                [1]: I’m aware these are at opposite ends of the spectrum, but when I’m not using my phone I want it to be as efficient as possible and when I am using it, I want it to be as responsive as possible. Apple software tends to be pretty good at this, but Linux software is usually configured to live at one end of the spectrum or the other.

                                1. 2
                                  1. This is a really nice idea. It’s great you posted the mp3s. Just keep doing it, show up; keep taking notes. Do interval practice for your ear (not much time is needed, short practice but often): https://www.musictheory.net/exercises/ear-interval
                                2. 8

                                  Non-programming languages:

                                  • German
                                  • Icelandic (currently learning it actually)
                                  • Swedish

                                  Programming languages:

                                  • Going to really try and give Python another chance (though I doubt I’ll get far)
                                  • More fluency in Lua
                                  • Various lisps
                                  1. 2

                                    Good luck with the language learning! I’m personally learning Hebrew (well, was learning, recent busyness put a stop to it)

                                    1. 1

                                      For the human languages: are you planning to move to any of these countries or just for the fun of it?

                                      1. 3

                                        Icelandic is more important, I have a friend in Iceland and I was planning to take a trip there sometime. As for German and Swedish, I just like those languages so those will be for the fun of it.

                                    2. 8

                                      I got two things on my list for now.

                                      • Unity. So for the past two years or so I’ve been slowly moving away from embedded systems work, which was pretty sad, actually, because I love it and I really didn’t want to do that, but I didn’t have much of a choice. Entirely by accident, I ended up doing some game development and I might have a pretty cool contract lined up next year, so I have basically taken a very long detour to fulfilling my mission from back when I was nine and I decided I want to learn programming to make my own games (naturally). Unity, as you know, is pretty big in this field. I’ve already learned enough of it to be dangerous but it’s not exactly second-nature to me, and I need it to be.

                                      • Exploit writing. For the longest time I’ve hovered at the borders of “real” security work, again, mostly by accident. Writing crypto code or doing security audits was never formally a part of my job description but I occasionally lent a hand whenever weird hardware and electricity were involved. I’ve also worked on hardware and software that was relevant in this field, and it’s been a long-time interest of mine, too. So this year – now that I don’t have to chase embedded projects anymore – I may have a little more time for it, and this looks as good a place as any to get started with.

                                      Background stuff:

                                      • Lua. Python has been my go-to scripting language for a long time now but today, managing anything written in Python is a pain in the ass. I’m sick of nursing pip and virtualenv and whatnot for hours just to cobble together a ten-line script. I’ve played a little with Lua, a language I’ve been interested in for years now, and I like it and I think I might just run with it.

                                      • Rust. I’ve been slowly absorbing it over the past couple of years, to the point where I could write and play with a very simple OS kernel in the background. Unfortunately, it’s excruciatingly slow work, and it’s not particularly rewarding. It feels like I’m doing cool stuff about 20% of the time, and the rest of the time is spent tricking the compiler into doing something useful, and I’m not enthusiastic enough about the language to frame it as “it’s forcing you to make good design decisions”. I’m also not yet convinced it’s worth it in the long run, so I’m taking it slow.

                                      • Swift and macOS development. It’s been nearly a year since I switched to this thing and, other than Homebrew being a pain in the ass, I sort of like it. I don’t like everything about it, but a year without having to debug why systemd won’t restart my computer or start my VPN tunnel again, without firing up a game only to find out sound is coming out my monitor instead of my speakers again, without any pretentious drama pouring out of the GTK ivory tower… I don’t like my computer, but I’m content with it, and not by using it like a PDP-11 with a fancy graphical terminal. Only problem is I know jack shit about programming this thing because last time I wrote something for a Mac, the OS X flavour of the day was Tiger. Now I keep coming at it like it’s a weird FreeBSD machine, and I think it’s time I did something about it. Thing is, though, I’ve used FOSS systems for so long I’m not sure I want to do it. Apple is a huge commercial vendor, and I’m not sure I want to invest much in a system that, ten years from now, might decree computers are obsolete and start selling me iPads that I can’t do anything on without an iCloud account…

                                      1. 1

                                        python: Yep, the tooling (culture) is surprisingly behind. Use asdf to manage language runtimes and poetry to manage dependencies. If you want a binary to share, make a docker image. That’s as good as interpreted gets (“I have some code to share with you, please install a dev environment, sorry!”). You could also look at nim-lang which compiles and has similar syntax. Or do none of this and continue with Rust but of course it depends on the project. I think you summed up the whole trade-off for like a CLI pretty well.

                                        1. 1

                                          Exploit writing

                                          Any resource to suggest to learn it? I have “The shellcoder Handbook” on my bedside.

                                          1. 1

                                            Any particular resources you’re looking at for learning exploit writing? It’s something I’m interested in too, and I read a lot of exploit writeups, but without exercises I don’t really get the concepts concretely. I’ve done some CTFs (which are pretty sink-or-swim, but have managed a few of the easier binary and web exploits) and really enjoyed working through a some of the problems in cryptopals.

                                            1. 2

                                              I got this thing bookmarked from a while back: https://dayzerosec.com/blog/2021/02/02/getting-started.html . I’ve no idea if these are any good or not but maybe some of these might be useful starting points. I’ve been putting off a real literature review for after Christmas, my brain is a little low on neurons after this year :-D.

                                              1. 1

                                                https://guyinatuxedo.github.io/ was a great intro for me during the last lockdown. It’s a collection of CTFs, coming with all the binaries needed for the puzzles, write ups for all challenges, and even an introduction to some techniques and for how to use ghidra… It’s quite addictive ;)

                                            2. 8

                                              I’m going to continue learning Cantonese and how to read and write traditional Chinese, I’ve been doing a bit every day this year.

                                              I also want to dive deeper into C and get more familiar with the OpenBSD source code.

                                              1. 2

                                                I was also thinking of trying to work up my workaday C skills. Would be interested to hear what learning resources you plan to use, or if anyone else has advice for the both of us.

                                                1. 1

                                                  I’m making my way through the k&r book and doing all the exercises to refresh my memory. Separately I’ve been reading through these OpenBSD daily source code readings, they’re fun and interesting https://github.com/mulander/openbsd-daily

                                              2. 7

                                                Containers and virtual machines. I ran into some strange Docker behavior at work and dug in, only to learn of overlay file systems and now I’m more curious than ever.

                                                1. 7

                                                  Overlay filesystems have some really fun corner cases if you mutate the lower layers (what even is the correct behaviour if you modify the file in the top layer and delete it in the layer below, or if you add a file in the top layer and then also add a different file with the same name in the lower layer?). This is part of the reason that containerd has moved away from overlay filesystems as an abstraction. It uses a snapshotter abstraction, where you start with an immutable layer, modify it, and then create a new immutable snapshot. This maps directly to things like ZFS snapshots and can also be implemented with overlay filesystems, without hitting any of the painful corner cases.

                                                  1. 1

                                                    excellent! new path added to my rabbit hole queue

                                                2. 7

                                                  Lately, Clojure. I like its focus on problems over puzzles. I’ve started to regard parts of other languages as unnecessary bullshit—operator precedence to name one. A hurdle is the lack of static types, which I’ve almost always had available. So I might give TDD an earnest look for once.

                                                  1. 6

                                                    My plan is to learn C++ with OpenGL. Basically the target is to start writing desktop applications that I needed mainly on Linux for my daily use.

                                                    Background is that I’m coming from higher level or more abstracted programming languages and doing web applications by writing more and more Go code for the last 4 years. And did Python for some years before.

                                                    Another thing is that, I’m interested in learning how the underlying memory management works. In other words, I don’t have a strong foundation with fundamentals. So, I need to start somewhere - I’m going to do that with C++ to see how it works and go from there.

                                                    1. 4

                                                      In case you haven’t already seen it, the best resource I’ve found for learning stuff is LearnOpenGL. There are loads of other websites with out-of-date OpenGL code floating around on the internet and it takes a fair amount of work to find examples that are sufficiently modern and correct. Most OpenGL code on the internet is bad copy-pasta written by people who don’t fully understand what the functions are doing (which is, to be fair, because OpenGL is a terrible API).

                                                      If you want even newer functionality (like DSA which is available 4.5+ so you don’t have to do horrible global state manipulation with the old functions), there’s a handy cheat sheet available here: https://github.com/fendevel/Guide-to-Modern-OpenGL-Functions (I used it recently when writing a toy game engine in zig, starting with LearnOpenGL code to get stuff running, then rewriting it with modern DSA).

                                                      Oh, and for debugging apitrace and RenderDoc are absolute lifesavers. They make debugging blank screens and mangled GL buffers much easier. RenderDoc especially is a necessity, since it allows you to visualize each step in the rendering pipeline. They’ll also report certain invalid state errors that glDebugMessageCallback or glGetError won’t catch.

                                                      1. 4

                                                        Full-time C++ programmer here … it may not be the right language if your goal is to understand memory management. C++ is kind of an awkward in-between: its library tries to shield you from doing doing manual allocation/deallocation, to the extent that calling new or delete is considered very bad style, but you end up still having to understand what allocation is going on behind the scenes because the language doesn’t shield you from pointers; it doesn’t do the kind of lifetime analysis Rust does. (That said, the Clang memory sanitizer and undefined behavior sanitizer help with this, at runtime. I consider them essential during development, the equivalent of seat belts.)

                                                        If you really want to learn and play with memory management, you can always avoid good style and do C-ish stuff like new/delete or even malloc/free, but it will be out of sync with what books teach and how modern libraries work.

                                                        On the other hand, C is such an impoverished language, I wouldn’t wish it on anyone. Better to use a small subset of C++ and get methods, constructors, RAII and such.

                                                        I haven’t used it, but Zig is probably a great language for learning about low level stuff like allocation.

                                                        1. [Comment removed by author]

                                                          1. 0

                                                            I’m familiar with C syntax but I didn’t dig deeper into it to understand the fundamentals. Also, I don’t want to do that as I know this caveat with string manipulation on C.

                                                            Since my target applications are best related to C++, I’m starting with that and I feel, if I start doing that and researching more into it, I will get to know how to learn the fundamentals either via relevant books or online resources.

                                                            1. 4

                                                              I’m familiar with C syntax but I didn’t dig deeper into it to understand the fundamentals. Also, I don’t want to do that as I know this caveat with string manipulation on C.

                                                              Note that string manipulation in C++ is a complete mess at the moment. std::string (or, rather, std::basic_string) is a poorly designed API for two reasons:

                                                              • It enforces a representation (a linear block in memory). This is fine for immutable strings with fixed-width encodings, but if you need to handle insertion you end up doing O(n) operations in terms of the length of the string.
                                                              • It isn’t really a container for text, it’s a container for integers. The fact that it iterates over code units is painful for UTF-anything-other-than-32 because you typically want to iterate over either code points or grapheme clusters.

                                                              There are some proposals for sane unicode text APIs that may make it into C++23 but at the moment everyone ends up using some external library for string handling. Doing string processing in C++ quickly ends up going down a rabbit hole.

                                                              I say this as someone for whom C++17 / C++20 is their go-to language: strings are the worst part of the standard library and are an embarrassment to the language in 2021.

                                                              1. [Comment removed by author]

                                                                1. 0

                                                                  Don’t wanted to get into the language war :)

                                                                  It is just that I find this approach would be better as far as my research goes so far.

                                                          2. 6

                                                            What a fun question.

                                                            Career-related: soft skills; team leadership; all the “cloud” stuff I’ve put off out of distaste for the constant bombardment of hype; the Linux networking stack.

                                                            Personal: Haskell; GTK; OpenSCAD; compiler design. I’m also planning to go through the TAOCP box-set I got for my birthday.

                                                            1. 2

                                                              OpenSCAD

                                                              Warning: hacks abound. OpenSCAD suffers from a fundamental issue where:

                                                              1. You need to constantly create shapes by subtracting one shape from another shape
                                                              2. Said shapes need to be precisely defined
                                                              3. OpenSCAD doesn’t handle subtracting a shape with a precisely-overlapping surface due to rounding-error issues on the same real-number calculated differently.

                                                              The end result is that you need to slap on epsilons everywhere, i.e. you create a constant ‘epsilon=0.01’, then instead of carving a cube(5,5,10) from a cube([10,10,10]) you have to carve a translate([0,0,-epsilon]) {cube([5,5,10+(2*epsilon)]);} from a cube([10,10,10]).

                                                              This means you have off-by-epsilon errors everywhere, for basically every complex shape you make. First you create the shape, then you spend several minutes adding all the

                                                              What’s worse is, sometimes you do get the epsilons right, but you still get weird z-fighting artifacts in the preview with no elegant method of removing them. Not to imply the epsilons are an elegant solution in the first place.

                                                              1. 1

                                                                That sounds.. painful. Thank you for the insight. Perhaps I should have my goal be to learn CAD in general rather than OpenSCAD.

                                                            2. 6
                                                              • jq (and/or alternate tools like dasel)
                                                              • want to try making small games, likely using https://microstudio.dev/
                                                              • improve writing/presentation skills, especially for landing pages
                                                              1. 6

                                                                Hydroponics, healthy eating habits, swimming crawl and more Blender / Godot for games.

                                                                1. 6

                                                                  To drink and not to get drunk!

                                                                  1. 6

                                                                    Great idea! I had to scale way back midway through last year. Realized I was just drinking every day out of habit and the amount had kept going up. Once I stopped, I felt so much better. Best of luck!

                                                                  2. 6

                                                                    I need to learn OpenGL. Hard to say what else I’ll need, there’s little sense in making plans.

                                                                    1. 1

                                                                      OpenGL ES or something like OpenGL 4?

                                                                      1. 1

                                                                        The oldest reasonable thing that will work on Linux desktops and macOS. I need it for rather simple texture transformations, because those are incredibly slow on a CPU, but I like to have deep understanding.

                                                                        1. 2

                                                                          Potentially useful resource on writing shaders? https://thebookofshaders.com/

                                                                          As far as my experience has gone, most of the buffer management stuff for OpenGL is pretty boilerplate (it’s just slinging buffers to the GPU and sometimes fetching results back), so most of the interesting work happens in the shaders.

                                                                          1. 1

                                                                            Also if you don’t need realtime rendering since it sounds like you might be doing batch processing, it could make sense to just use gpgpu features like OpenGL compute shaders or even OpenCL.

                                                                          2. 2

                                                                            People say that the book of shaders is good. I’ve found that going to shadertoy and tweaking some simple shaders heavily and googling built in gl mathematical functions to understand the ways I can modify the colors and point positions to be more interesting.

                                                                      2. 5

                                                                        Elm, Godot and how to protect against and how to execute TLS man in the middle replay attacks (pointers to how to get started with this are warmly welcome!).

                                                                        Also, more of: Rust, Blender, Renoise, BitWig, Octatrack, the game of Go (currently at ~4 kyu), ML and AVX2 assembly. Perhaps read a book or two about soft skills.

                                                                        Maybe some more Zig and Agda, if time allows it.

                                                                        1. 1

                                                                          Wait, isn’t it the entire point of TLS that such attacks are impossible?

                                                                          1. 3

                                                                            MITM attacks are possible against anything that either doesn’t check the cert chain or which allows certs signed by malicious entities (the latter includes all web browsers, since the default certificate bundle includes things like the not-the-Turkish-Intelligence-service-honest root cert, among others). Replay attacks and downgrade attacks are possible against older versions of TLS, which is why there was a big push to get everyone onto 1.2 or later. Attacking an older TLS / SSL stack is a good exercise for learning why features are present (or, in some cases, absent) in the newer protocol versions.

                                                                            1. 1

                                                                              not-the-Turkish-Intelligence-service-honest root cert

                                                                              Ouch, that sounds sexy, as in, a lot of things fucked. Can you write a short summary? Maybe backed by some links? Or just a link will do

                                                                              1. 3

                                                                                It looks as if that one (TURKTRUST) is gone now, after they were caught signing certificates for google.com for random people. The Turkish rep at one of the security conferences in the wake of this made such a big deal about this registrar not being in any way affiliated with their intelligence service that at the end no one believed him.

                                                                                My system appears to have 158 trusted root certificates. Unless you’re doing DNSSEC and publishing CCA records, any one of them can sign a cert for any of your domains and my system will trust it. Want to bet that all of them are trustworthy?

                                                                                1. 2

                                                                                  My system appears to have 158 trusted root certificates. Unless you’re doing DNSSEC and publishing CCA records, any one of them can sign a cert for any of your domains and my system will trust it. Want to bet that all of them are trustworthy?

                                                                                  Isn’t this what https://en.wikipedia.org/wiki/Certificate_Transparency addresses?

                                                                                  1. 2

                                                                                    Kind of. Certificate transparency lets you see if you’re seeing a different certificate to other folks or if the cert has changed. I think Chrome may be querying the CT logs when it sees a cert now (which has some privacy issues) but it’s not clear what constitutes a false failure and what a user should do if they see one. If the domain owner needs to update the CT logs (as seems to be the case in the new system - originally clients would report the certs that they saw to the CT service) then that means you now have a centralised single point of failure to accomplish exactly the same security guarantees that CCA records with DNSSEC give you.

                                                                                    CT checks also make it difficult to use something like Let’s Encrypt for non-routable domains with a split horizon DNS (which you can do with the DNS-based version of the ACME protocol) without also leaking the names to the public (they end up in the public CT log, forever). In exchange for this information leak, you get a weaker security guarantee than with CCA records. With a CCA record, if a malicious registrar provides a cert for your domain, it will not work. With CT, if a malicious registrar provides a cert for your domain then there’s an audit log that might let you know that some clients had their connections compromised.

                                                                                    1. 2

                                                                                      With CT, if a malicious registrar provides a cert for your domain then there’s an audit log that might let you know that some clients had their connections compromised.

                                                                                      The “might” isn’t really fair there. Significant efforts goes into this and the intent is not to flag an error to the user (which they might click through) but to be a deterrent and a way to identify bad actors. You have to be prepared to burn a CA if you choose to coerce it into issuing certs it shouldn’t, since it would have it’s trust revoked.

                                                                                      There is a “how it works” overview here: https://certificate.transparency.dev/howctworks/ and there aren’t single points of failure in the sense you suggest.

                                                                                      DNSSEC is not without its own problems, including adding several more failure modes. CT doesn’t seem to add any negatives.

                                                                        2. 4

                                                                          Work related:

                                                                          • terraform
                                                                          • K8s / k3s or nomad
                                                                          • Lua, due to reasons
                                                                          • poudriere
                                                                          • Maybe something related to Windows Server (as that is what we use at my current job)

                                                                          Life related:

                                                                          • Potty training the children (I’m currently on parental leave)
                                                                          • Learn to ski (I can only do some cross country skiing now, and the snow season here is ~8 months it’s a great way to pass time)
                                                                          • Maybe get a drivers license

                                                                          But I’ll probably end up learning potty training and not much more of that list. Hopefully I’ll also learn some more tools that make me more relevant for interesting jobs.

                                                                          1. 4

                                                                            How to self-host a compiler.

                                                                            1. 4

                                                                              Korean, vegetable gardening, house maintenance. 6502 assembler to do something useful with my Ben Eater kit, maybe port uxn to it. How to rebuild my blog into a plain HTML+CSS site, no JS, instant load etc, investigate HTMLite and other small-web projects.

                                                                              1. 1

                                                                                I’m here for this, lemme know if you do some progress on porting uxn to 6502.

                                                                              2. 4

                                                                                I’d like to become a better writer. Some of my blog posts have gotten a lot of traffic and I’d like to be able to write more clearly. So I’m taking a class in effective writing and spending some time with a long-time editor friend who is going to try and get my stuff into better shape.

                                                                                Outside of writing I’d like to start to transition my career from pure infrastructure, which I’ve been doing now for coming up on 17 years, to writing more actual software. I have obviously written a lot of internal tooling for teams and even web services, but I’m ready to step out of that space and into a more pure development role. It’s been fun, especially focusing on stand-alone GUI applications, just because it is so different from what I normally do. I’ve been a little surprised how bad some of the tooling is, especially Xcode which is a disaster.

                                                                                I also have parental leave coming up in 2022, which is going to be hard. I’ve been consistently employed since I was 15 and I don’t really know how being the parent who is going to stay home with the kiddo for 6 months is going to feel. However I think its important, both to support my spouse and also because its a once in a lifetime opportunity to bond with the kid and maybe give my brain something different to work on.

                                                                                Also I’m going to sit down and take serious Danish classes. I’ve tried classes here before, they were terrible and I didn’t learn much (even though I passed the exams). It’s time to stop mucking around and focus up. I do have a terrible time with language learning, primarily around retention. The most successful thing I did was label everything in my house with Danish, so now I know all the household words, but that strategy doesn’t extend to random conversations.

                                                                                1. 2

                                                                                  I’d like to be able to write more clearly.

                                                                                  Be sure to check out William Zinsser’s book “On Writing Well”. It used to be (probably still is) a gift given to new authors by some publishing houses, it’s that good.

                                                                                2. 4

                                                                                  Continuing on from my various explorations that I have done in 2021:

                                                                                  Formal Methods

                                                                                  Read most of Practical TLA+. Now, I have to get around to actually writing some TLA+.

                                                                                  Raku

                                                                                  I use it as an enjoyable, general purpose programming language. Would like to release some libraries and contribute to the community.

                                                                                  NixOS

                                                                                  Have just started using it on my personal laptop. Some compelling ideas, wonder if I can use it at work.

                                                                                  OpenBSD

                                                                                  Runs on my personal desktop, and VPS. Want to gain more experience with using and running OpenBSD.

                                                                                  Reading

                                                                                  Ordered Computer Systems: A Programmer’s Perspective and The Garbage Collection Handbook, so will gradually read through them to improve my knowledge in these areas.

                                                                                  NeoVim

                                                                                  Primarily an Emacs user, but want to be able to reach a point where I can get work done in NeoVim to keep my brain flexible.

                                                                                  Rust/Haskell/ATS/Agda/Coq/C/C++

                                                                                  These will need to wait I guess. Already too much going on.

                                                                                  1. 4

                                                                                    Kubernetes! My org switched to it from Marathon, and after a slight period of annoyance, I’m excited to make the switch. I’ll try to pass the CKAD certification as a related goal.

                                                                                    1. 1

                                                                                      My org switched to it from Marathon

                                                                                      Haha that was enough to notice you’re a (distant) coworker of mine!

                                                                                      1. 1

                                                                                        Hehe, it’s a small world!

                                                                                    2. 3

                                                                                      I will try and push more towards soft-hardware – FPGAs, hypervisors, a DSP or two. Anything that comes after kernel-land on smartphones and SBCs is a valid target. Both from a security angle like side-channel attacks and glitching and from an engineering angle to see how much of a network stack I can hack together.

                                                                                      On the creative / artsy side I have been away from 3D printing for a long while. I built one back in the RepRap/Mendel days and eventually grew tired of how much it was about building printers more than building things with them. Basically going to get both an FDM and SLA, work through the rooms in the apartment and figure out a project or two befitting of each room with some kind of mechatronic touch. The hope is to eventually get skilled and relaxed enough to approach designing/building a pinball machine.

                                                                                      Also thinking of picking up a new musical instrument, Guzheng being a likely candidate.

                                                                                      1. 3

                                                                                        As I want to specialize more in the niche I’m currently more active, I’ll try to learn more Prolog. This means finishing The Craft of Prolog and probably reading the WAM Book. Also, I’ve been pondering about making my own toy Prolog but I have doubts because it’s a long task even if it’s a toy and probably that time is better invested in making patches and libraries for Scryer Prolog. However, Scryer Prolog is not yet ready, it’s missing three important things to use it myself more: GC, FFI and threading.

                                                                                        Also, I have some interest in Erlang but it’s another independent ecosystem (I’m already into Python, JS, Rust, Prolog and Java/Kotlin worlds) so I’m not sure if it’s worth it.

                                                                                        Also, I’d like to start a game project, but nor Prolog nor Erlang are going to fit well (Prolog maybe, but some technical bits are missing to be usable). Not having a real type system also makes me wonder if Rust is just a better option.

                                                                                        1. 3

                                                                                          Phoenix/LiveView. I am picking up my old Phoenix/LiveView clone of this site after a 6 month hiatus. It’s turning into more than just a clone. But, I am committing myself to finishing it.

                                                                                          1. 3

                                                                                            I want to get back into GUI development. Cocoa (AppKit) used to be my bread and butter 20 years ago, but I’ve steadily worked my way down the stack till I’m doing cross-platform C++, some of which is so gnarly it doesn’t even use dynamic allocation. (My whole b-tree db library probably only has a handful of system calls…) Which has been fun, but I’m yearning to make something people can touch.

                                                                                            I’ve used SwiftUI a bit, and when it worked right it was lovely, effortless. I may also do web-type stuff, but only with a local back-end. No server dev for me.

                                                                                            1. 3

                                                                                              Anything that gives me more “marketable” skills and opens opportunities, especially in backend dev and devops, right now all my skills aren’t what the market is looking for. I’m starting with K8s and Docker, then I’ll check new fancy toys like Prometheus, Zipkin, Jenkins, Vault, AWS maybe, and others.

                                                                                              1. 2

                                                                                                I’m not big on setting goals arbitrarily. But i do think I’ll try and plan to learning either flutter or python. Or both.

                                                                                                Also, composition in photography. Some people seem to “just have the eye for it”. Not me, I need rules and guidelines to break learn.

                                                                                                1. 2

                                                                                                  Kubernetes! I don’t think I’ll use it very extensively if I have the choice, but I think it’s probably a good idea to at least learn about it since it’s used so much nowadays. (If anyone knows of good learning resources, please do share.)

                                                                                                  1. 2

                                                                                                    I should start with something like “how to learn less things, but actually get somewhere with them”. :D Jokes aside:

                                                                                                    • More Spanish, maybe a bit of French and Italian as well
                                                                                                    • Guitar
                                                                                                    • React
                                                                                                    • GraphQL
                                                                                                    • ClojureScript
                                                                                                    • Datomic
                                                                                                    • TypeScript

                                                                                                    I’ll consider the year great if I make some headway with at least 2 things on the list. :-)

                                                                                                    1. 2

                                                                                                      For work I’m planning to dive deeper into Vitess/MySQL. I spent a lot of years working with Postgres, and I’m looking forward to seeing how they compare.

                                                                                                      Outside of work, I’m keen to keep learning Rust, and go beyond the toy problems I’ve solved with it so far. In particular, I’m interested in writing FFI-based extensions for Ruby gems with it. There’s some hot paths in the Prometheus gem I’d like to have a go at optimising.

                                                                                                      1. 2

                                                                                                        SDL or GLFW. I’m porting an old Macintosh game and I am at the point where I need to display graphics.

                                                                                                        Zig. I’m familiar with the language now but I want to try Zig for larger projects and see how it manages. The game I’m porting is in C, and maybe I’ll introduce Zig to experiment with Zig’s C interop.

                                                                                                        Writing, and actually sharing what I write. I enjoy the challenge of technical writing, but have always hesitated to share.

                                                                                                        1. 2

                                                                                                          CAD/CAM and embedded firmware development (hopefully in Rust) in service of the product I’m starting a company to build…which also not so incidentally means I’ll be learning a whole new kind of business operations stuff to go with my eng management background: sales, fundraising, and biz dev, plus maybe how to run a tech co-op.

                                                                                                          It’s daunting and exciting to be somewhere near the lower slope of the first big knowledge hill to climb on a project after 20-ish years of incremental progress towards mastery of web applications/SaaS/Linux/general software carpentry.

                                                                                                          1. 2

                                                                                                            I’ve been learning Nim for the past month or two, so I’d like to keep up with that next year for some other projects that I haven’t figure out yet.

                                                                                                            I also want to get back into my Atari 2600 emulator, since I got stuck early this year, and decided to put it away for a while. Just getting past the horizontal sprite positioning will be enough progress for me :)

                                                                                                            Outside of that, I’ve got a lot of home projects (gardening, painting, tiling, etc.) that need a lot of focus next year. And a lot of skills in those projects that need learning.

                                                                                                            1. 2

                                                                                                              What I would like to practice:

                                                                                                              • Making boardgames
                                                                                                              • Drawing
                                                                                                              • Creating music
                                                                                                              • Swift and SwiftUI
                                                                                                              • Designing simple electronic widgets
                                                                                                              1. 1
                                                                                                                • finishing a unity game for my mfa thesis, so have some 3d modeling/animation stuff to learn
                                                                                                                • zig
                                                                                                                1. 1

                                                                                                                  Work related topics:

                                                                                                                  • eBPF/XDP
                                                                                                                  • Improve my skills on AWS
                                                                                                                  • Shellcode writing
                                                                                                                  • Improve my Golang

                                                                                                                  Not work related topics:

                                                                                                                  • start again learning Mandarin
                                                                                                                  • trying to understand Bayesian methods
                                                                                                                  • improve my cycling training skills
                                                                                                                  1. 1
                                                                                                                    • Python - it’s ubiquitous enough to be required
                                                                                                                    • Rust - memory safety is an extremely compelling feature.
                                                                                                                    1. 1

                                                                                                                      My mind has decided that it’s time to try to pick up Elixir again. So I have loose thoughts of trying to port my blog from Go to Elixir, but doing it at a lower level than Phoenix, so I can build a muscle memory for things like GenServer/Task and such better.

                                                                                                                      Over the holiday break, though, I plan on learning enough OTP to build my own polling file watcher. (Why implement an existing thing badly? Because it helps me learn the OTP side of things, I find).

                                                                                                                      1. 1

                                                                                                                        Algebraic Topology.

                                                                                                                        This has been the big demon to slay for a while now.. I have the books, I have the time, I have the reasons, I’m going to grind through Hatcher, Stone Spaces and SGL (not all of them in 2022 but the first two to a significant degree and the latter one at least a peek).

                                                                                                                        Programming.

                                                                                                                        I know quite a bit about formal languages and computer science, I even know quite a lot about the history, implementation and tradeoffs of different programming languages, I’ve even worked professionally as a software engineer but I am still desperately lacking when it comes to applying these ideas to real world problems. My resolution for 2022 is a program a day for the whole year. I need to just put in the hours and attack my todolist, there’s so much low hanging fruit as things stand and so many quality of life improvements I can make (mostly because I enjoy painting myself into a corner with bleeding edge setups - I am perpetually on an auxiliary laptop where something is broken and now my only phone is a pinephone so I am in an even deeper hole than usually).

                                                                                                                        Bureaucracy

                                                                                                                        I struggle a lot with following through on filling out forms and doing all the tedious nonsense they feel entitled to (the bureaucrats) nevertheless I could benefit substantially from relatively minimal effort, if I would open a bank account, get registered as living in the country and get a phone number then I’d almost be a normal person. There are also student discounts available if I pursue that and various grant programs available. To be honest I doubt I will actually do this one though, I’ll just keep saying that I’ll do it one day and meanwhile I will focus on the other two (nobody manages to fully follow through on new years resolutions….)

                                                                                                                        1. 1

                                                                                                                          The last few years I’ve picked up lots of new tech and new hobbies. And I’m really happy having done that, but it always felt like I was on to the next one as soon as I gripped the previous.

                                                                                                                          2022 I’ve decided to hone my skills I already have instead of learning brand new ones. I want all my personal projects to utilize Rust as far as programming goes and I want to focus on honing my music skills with guitar and my other devices I’ve purchased these last few years.

                                                                                                                          1. 1

                                                                                                                            Might finally get into Rust, since it looks like I’ll be in a good spot to resume my embeded projects.

                                                                                                                            If things pan out well in the next few days, might even also get a real chance at finally learning control theory, and how to tune systems.

                                                                                                                            1. 1

                                                                                                                              Nothing technical, but self promotion.

                                                                                                                              This year I’ve accumulated expertise in design systems, started to write a book and to create an online course. Now the task is to promote all these.

                                                                                                                              You are welcome :)

                                                                                                                              1. 1

                                                                                                                                I’m still in the process of defining the goals for the next year, at the moment the only thing I am sure will be present in that list is “Improving my Rust skills”, but I haven’t decided yet by how much.

                                                                                                                                1. 1

                                                                                                                                  I’ll be trying to learn more about embedded programming, generally low level programming. The plan is to transition to that area within couple of years.

                                                                                                                                  1. 1

                                                                                                                                    I’ve been feeling like going back to my physics education and trying to fill in gaps that bother me, particularly building my intuition around thermodynamics and special relativity, and maybe a historical pass through quantum mechanics (go back to Heisenberg, work my way forward through Dirac and Pauli, skip ahead to Bell and modern work in entanglement and information).

                                                                                                                                    I’m also tempted to go learn graphics programming. And maybe build skill with Swing or another GUI toolkit so I can more easily build my own GUI apps.