I highly recommend Fastmail [0] for this purpose. I have been with them for 5 years, and they're rock solid. I have ~10 domains on it, they support wildcards (send/recv at anything@you.com), the composer has sane defaults for multiple domains (e.g. replies are sent from the address it was mailed to) that can be overridden when you need, and you can easily create masked emails using your own domain.
$50/yr for all that is a steal. They don't charge you per-domain or have any funky tiered pricing for the stuff that matters.
Disclaimer: I am not related to them, just a happy customer :-)
How are you "training" them? It's important to drill down into what they're struggling with before you throw resources at them.
I've found that code reviews are the best way to mentor and transfer knowledge. And it goes both ways: you review their code, they review your code. When I'm explicitly training someone, I get them to review my code and I occasionally throw in some minor curveballs that I expect them to pick up on in the first few rounds (e.g. obviously incorrect conditionals, some convoluted loop, leaky interfaces, etc.) If they stamp the PR without picking up on those items, I highlight it using a "do you think this is correct/is there a better way for us to do this" line of questioning. 5-10 or so PRs later, they become the first to spot those issues :-)
Thanks for sharing how you code reviews with your juniors! You're definitely more patient than me in that respect. I'll try that out.
Our training program mostly revolves around teaching them the fundamentals, where I give them some specs & resources, and once they code that, I give a code review:
- They learned how to build some CLIs programs, where they make small clones of cat, find, grep, and cut.
- They learned how to build some basic data structures such as linked lists and some sorting algorithms.
- They learned some OOP by creating a CLI employee management system
- Also some Network Programming by replicating the core features of the rack gem, and building their own web framework from scratch
- They then take their hand-rolled frameworks, and they build the web version of the employee management system and ship it to heroku
- Other projects also include some common tasks in the company, such as creating their own authentication system.
- Lastly, they build their own design system using BEM CSS (a designer hands them a figma file, and they follow our internal CSS template / variables)
All of the above projects include code reviews, and the hope is that they learn how to become independent programmers & be able to contribute to any code, whether internal or open source. The goal is mastery of fundamentals.
I am not sure if I am too demanding -- our sprint is about 1.5 months long (0.5 months are for QA), but the expectation of that sprint is to ship one or a few features (e.g. a share button for a CRM for example).
You'd probably branch off a previous feature branch, introduce the bugs then do a mock PR that doesn't get merged, maybe even against a copy of the dev branch in case of accidents.
`requests` is just a HTTP library. Classifying it as a "scraping library" is confusing; it's part of the web scraping toolkit, but it's not a "scraping library".
ORMs come to mind. There's typically a lot of reflection and dynamic instantiation magic baked into its classes, which you really have to hack around typing to make it work nicely (or even at all).
Same. I treat them as immutable DTOs [0], or "value objects" if you will instead of "just a plain class". An unfortunate drawback is that not everyone is familiar with the concept of immutability, especially in the world of Python. It can also be confusing to explain how "frozen dataclasses are not actually the Python classes you know" :-/
I've been having a blast writing plain old HTML templates for the past few weeks. It's a traditional Django app. I also use plain old CSS instead of frameworks like Tailwind (well, I use Bootstrap, but I don't use its utility classes).
It's practical, pragmatic, and allows me to ship faster.
I've been looking into using ChatGPT as a writing assistant for myself. If you write a lot, it's worth a shot.
> What AI tools should I evaluate to improve my office?
Start with the problem - what do you need to improve? Talk to your office, ask them what pain points they have, what's slow and inefficient, what they think could be improved, what keeps them up at night, etc. Then figure out an "AI way" to solve it for them :-)
I'm in the process of standing up my own hardware (1U server/some simple compute box + FreeNAS) for doing this.
There's a variable I don't understand with self-hosted cloud/storage: what guarantees do you have that they're not peeking at what you store? Why do you trust them over $CORP? Do you encrypt your data at-rest (dm-crypt, fscrypt, etc.), and do block storage providers support this?
It's an issue, for sure. My thinking is I would include some sort of in-house encryption for stored objects; encryption is never perfect and rolling your own is usually a recipe for failure, but it would get in the way of intrusions of the "bored employee poking around the servers" variety. Such a lazy nose would move on to easier pickings, and nothing I'm doing matters enough to steal - even my creative work is CC so if you want my 3D asset files, they're all yours buddy.
99% of people are never going to have anyone interested in anything they do, but if you're really paranoid you'd want to host everything at home and use a VPN or cloud server to redirect to it.
However, if you go with a really small cloud/server provider, you may run the risk of a bored employee poking around. The larger ones will have auditing in place to catch stuff like that.
Of course you take care to set up encryption at erst and in transit, it's not that difficult. In case of virtual machines they can still peek at the memory of your system just like AWS and others, the question is why would they take the trouble.