Well, they brought MagSafe back, and the M1 chips are almost unbelievably good, so current state = good. The worst thing I can say is most all their screens are 60 Hz.
I would recommend the cheapest M2 laptop they offer, and maybe some SD cards (some folks think the storage is small).
I think all of the M1/M2 macbooks have ProMotion (120hz) displays
The 14” and 16” M1 MacBook Pros have ProMotion displays. The 13” M2 MacBook Pro and the M1/M2 MacBook Air do not.
My M1 macbook pro does not have promotion. it’s 60hz, non HDR. still a very good panel though.
Totally agreed on everything but the “cheapest” if only because the SSDs were changed from 2 separate chips down to 1 which makes read and write performance noticeably slower.
If you go with SD cards be sure to check the speeds as well, since there are still very slow SD cards being sold.
Interesting, thanks for writing.
The problem you run into with Ansible (as an example of a stateless solution) is that removing resources from your config doesn’t ensure they’re removed from the cloud without some care. So say I create a VPC in the YAML, run Ansible and it gets built, then I remove it from my YAML and run Ansible again, the VPC will continue to exist indefinitely without adding some other steps.
By contrast, Terraform with state typically ensures that the resources will be cleaned up once removed from the HCL.
In theory you’ll end up with much more cruft over time the stateless way. Whether or not that is more painful than working with terraform state is a compelling question. I think it depends on the team size and apply process.
This is exactly correct. When Terraform was very early on, I think 0.3 or some such? Well before data resources – I initially did an on-prem to AWS migration solely using Terraform.
Unfortunately, it wasn’t quite up to snuff so after a few months I rewrote it all in Ansible, which ended up being far, far more verbose and had all the problems you listed. From an operator pov it ‘felt good,’ though.
Had I to do it again, I would likely use Ansible to ‘bootstrap’ all the Terraform stuff (s3 buckets and iam users/roles/keys) and do the rest with TF. Shooting for 100% Terraform (or really 100% only one tool) is usually the wrong path.
At a previous company we had a bootstrap terraform repo that would setup the basics for the rest of the automation, like backend buckets and some roles. The bootstrap terraform used local state, committed to the repository. It worked well enough.
My approach is generally to use a bootstrap Terraform stack which creates the buckets and so on that Terraform needs, then change the bootstrap stack to use the bucket it created as its state backend. Having some backups is useful (as with all statefiles) but it’s generally and easy and safe approach.
That’s thought provoking. I wonder if it would be reasonable to run Ansible (or some other stateless tool) in a mode where it went looking for things that didn’t exist and removed them. The flaw there would be that no Ansible config sets up an entire system from first principles, but assumes there are some tools already in place.
Maybe git or other source control could be used to store take on the state burden to detect removal.
The downside of that idea is that it is extremely common to have multiple Terraform workspaces managing resources at the same provider. If you did “destroy all resources that aren’t in your configuration” you’d end up removing, say, all the QA infrastructure every time someone did an update to production if the two are managed separately.
terraform et al are great in theory. it’s in practice where they often fall apart. it’s one of those domains where sanity must be enforced though disciplined conventions, which is hard.
If such culture existed, then ansible, terraform et al would probably never spring to existence.
This usage is very much motivated by a mindset of throwing a flashy tool at a problem, rather than understanding the fundamental problem and how to control it.
For example, using yet another AWS service out of their line up of hundreds, is a choice that is rarely questioned. Then that device has its own challenges… Ok, AWS offers yet another service to ‘solve’ them, and so on.
There is no time for discipline in this reality… Just keep adding stuff and hiring engineers to cope with the system untill the next company mass lay off.
This is a classical problem with stateless tools, going as far back as make.
This is also a thing in Puppet (another stateless system). The answer is that you have to put the absence of the resource in the config (in Puppet terms, ensure => absent). Then when the config has been applied everywhere it needs to be, you can delete that “tombstone” resource. For some resources there is also a purge attribute that means to delete all unmanaged resources found in a scope (like a directory).
ensure => absent
Company site: https://thougtbot.com/
Position(s): Development Team Lead, Design Team Lead, Apprentice Designer who Codes, DevOps Engineer with Ruby on Rails Experience
Location: Americas, remote
Description: thoughtbot is a software consultancy. Clients hire us to help make their products, mentor their team, and improve their process. We have
Tech stack: Our tech stack in the client tech stack. It varies, but lots of Ruby on Rails, React, Stimulus, GraphQL, with some Python, Node.js, and other JS frameworks. Lots of testing
Compensation: We’re not FAANG (or MANGA, I suppose) but we are competitive outside of that. We reserve at least 20 days of the year (and often much more) for continuous improvement to make ourselves, the company, and our community better by learning new tools and techniques, working on open source, blogging, creating new products, volunteering our time, and more.
Contact: You can apply for all out positions here or email me: edward at the company’s domain.
When my previous employer went through a hostile takeover (in the US), the new overlords forced us to sign an agreement that anything we create in our spare time is wholly owned by them. Even to the point where if I design a left-handed potato peeler for my wife, they would claim it as theirs.
Prior to the takeover, my employer graciously hosted the entirety of the HardenedBSD build infrastructure. Conversations regarding whether the new overlords could take ownership of the project were had.
After 18 months trying to make things work, I decided I needed to find new employment. Not only for HardenedBSD, but for my own very literal sanity. When I say hostile takeover, the word “hostile” doesn’t really do it justice. I especially felt that I needed to protect HardenedBSD.
In May of 2020, I found that new employer. Turns out, they were already using HardenedBSD as the basis for their product. They’re now the hosting provider for the HardenedBSD build infrastructure. I report directly to the executive team, who are incredibly supportive of all my extracurricular work, not just HardenedBSD.
I’m so glad I made the switch. My mental health situation has improved, and I feel HardenedBSD isn’t being threatened anymore by my employer (as above, it’s the exact opposite: they’re enabling the success of the project, and thereby enabling the success of their product.) Yay synergy!
That sounds awful. Sorry that happened, and I’m glad you’re somewhere better now.
I would recommend adding a short description to your splash page. It’s not clear what exactly this does (i.e. differentiating features compared to Medium itself). Even after visiting your example link, I’m still not sure. Note: I’m not a regular visitor to Medium.
Thanks for the suggestion. You’re not the first to make it 😃 I’m trying to figure out what I might say. If you’re not a regular visitor to Medium, you don’t need this site! 🙂 If you know what an alternative frontend is, and you don’t like reading content on Medium, you probably don’t need to be told. For example, look at Nitter and any Invidious instance. They don’t explain themselves at all on the homepage, although nitter does have a ? link to explain more.
All that said, it’s easy enough to whip up a paragraph with a brief explanation. I really want to avoid the “why” though because everyone has different reasons: more privacy, less paywall, less platform dominance, better UI/UX, etc. I provide the service, why you’d use it is for you alone.
I’ve been using https://archive.today/ for the longest time, which essentially does the same thing minus the changing of the visual layout. Plus, it’s good for other sites as well like The Economist. It can be a bit slow to archive if the page hasn’t been archived before, but other than that couldn’t be happier with the premise.
Since your version seems to be significantly faster: do you foresee adding support for other sites as well that may implement per cookie “free” articles?
Thanks, I hadn’t heard of archive.today. I don’t have any plans to build anything similar for other sites. All the code written here is built for medium, so building support for other sites would be effectively a whole new project which I’m not looking for right now.
I like the concept, but do you really think they will let you circumvent their paywall forever? This seems like a project with a built-in expiration date.
Thanks! And yeah, this could stop working any moment 😂 I still got a lot of value out of making it and launching it though. It’s also possible this doesn’t make a big enough dent in their profit for them to care. Nitter, Invidious, and the like all continue to work well.
Don’t let that discourage you! I love these types of front ends. I currently used the Privacy Redirect extension in Firefox for Invidious mirrors, nitter, libredd.it and others. They’re all amazing, and contributes have kept many of them functional as well as providing several alternative hosts!
Most of them are way better than using the actual sites as far as usability goes as well. Thank you for your effort. These types of frontends are really important.
You get the first 2 or 3 articles “free”; if you don’t store cookies in your browser then you always get “free” articles. If the scribe.rip service gets banned then you can host your own version – it’ll be hard to block that as long as they keep the “first n articles for free”-scheme.
In practice, it’s more than 2 or 3 because whether or not articles go behind the paywall is a decision made by individual authors (though it’s now enabled by default, rather than disabled by default as it was up until about a year ago). This proxy seems to remove the intrusive pop-overs asking non-logged-in users to register, which people repeatedly mistake for the very visually similar paywall pop-overs.
Nice job. Does it also remove the paywall?
It would be a very nice addition to Privacy Redirect : https://github.com/SimonBrazell/privacy-redirect
And yes it does get around the paywall. The API I’m using just… doesn’t check. I’m not even sure how I’d support the pay wall.
Ah cool. I hadn’t seen that extension before, thanks!
Edit: looks like someone’s already working on that: https://github.com/SimonBrazell/privacy-redirect/pull/311
This is cool, and Redirector is a very cool project! Are there any lists of common redirections for, eg, twitter and other sites that are very slow? I use quite an old machine to browse the web
Thanks! Redirector isn’t mine FYI, but I agree it’s nice. @ploum pointed me toward Privacy Redirect which has similar sites listed. That might work well for you 🙂
You should consider listing an example article on the front page so it’s clear what the result looks like.
Thanks, you’re not the first person to suggest this. I’ll put that in my queue.
Edit: It is done.
I’m working on my alternative frontend for Medium called Scribe and would love some people to kick the tires. Specifically looking to see if you run into anything that feels broken or missing.
Looks cool! One idea: replace internal links to medium with their scribe equivalent.
Yeah, good idea. Why didn’t I think of that 😆
I need this in my life. I will try it when I hit the Medium brick wall.
This is so great. Thank you for making it!
These maps look incredible. I’ve put together a little CLI with the first notebook’s map’s rendering settings. The interactivity of Jupyter Notebook isn’t great when these take a few minutes to render.
$ python3 run.py --location='Old Town, Tallinn' --radius=1000 # ../prints/oldtown_tallinn.png
$ python3 run.py --location='Kuressaare Castle' --radius=800 # ../prints/kuressaarecastle.png
Great script, thank you. As a note, the ../prints/ directory is required or this will crash.
This seems pretty interesting. I could see it breaking down eventually (what if you need to center?) but also this could be a great way to model for simpler UIs like game menus/HUDs. It’d be cool to hear about a shipping app/tool that used this.
Looks like JUCE have a tutorial on doing layout like this - https://docs.juce.com/master/tutorial_rectangle_advanced.html - although they don’t really cover whether anyone actually uses it or not in shipping apps.
Don’t really have any thoughts on the article, just wanted to express my gratitude for all of the different kinds of content Thoughbot has produced, several years ago when I was first getting into Elixir there were a few succinct guides that illustrated conceptual leaps not in the official Elixir docs which made grokking things a lot easier.
It’s the only company blog I have willingly subscribed to. Thanks for not just being more noise on the internet.
Thank you! That’s very kind of you to say. I’ll share it internally. 😊
Awesome tip and well written. It does make me worry that everyone reading this will insert this threading/drop behavior every time which is certainly an over optimization in most cases. Maybe I’m worrying over nothing though.
I agree that this is the sort of thing you should do after profiling performance and identifying it as an issue, and to be aware of this as a pitfall of large data structures with interior pointers during architecture/design of a system.
I’ve only just started playing with rust but I wish all programming languages/frameworks compiled a compact list like this. It’s a nice reference when I’m trying to figure out why some old documentation references some new feature.
I write about ruby or algorithms or whatever side project is taking up my time.
Very cool independent derivation of this trick. I first learned about it via factorial bases; I think that you’ve found Lehmer coding.
Thank you for linking these! I didn’t think that came up with this first, but I couldn’t figure out how to search for preexisting solutions. Lehmer code looks great. Cheers.
Company site: https://thoughtbot.com
Position(s): Lots! iOS, Android, Ruby on Rails, Elixr/Phoenix, Front-End/UX/Product Designer
Location: Boston, Raleigh, SF, New York, Austin, London
We’re a consultancy making digital products. We believe there is always a better way to do our work, and we want to find it and share it with as many people as possible.
We strive for few job titles, few departments, and few hierarchies. We prefer composition of roles necessary for projects and company objectives over inheritance of bosses and direct reports. We are at thoughtbot primarily for our design and development skill, and want to apply it, rather than creating company overhead. Check out our /purpose.
Contact: You can DM or email me or visit thoughtbot.workable.com