< Back to the archive

Like what you see? Subscribe here and get it every week in your inbox!

Issue #298 - November 24, 2024

Here are the top threads of the week, happy reading!

Top comment by curious_cat_163

This collection of starter packs might be useful:

https://github.com/stevendborrelli/bluesky-tech-starter-pack...

Top comment by frompdx

How about building an electric guitar? I made one when I was 17. It does require some special tools. Stewart Mac is a great resource for information and parts/equipment. Check out their book. https://www.stewmac.com/luthier-tools-and-supplies/supplies/...

Building a fender-style guitar first is the easiest route, especially if you use a double-truss neck rod (get it from Stewart Mac). I recommend buying a pre-cut fret board as well. Also, you can use tung oil instead of clear coating. Trying to do an opaque spray job was my biggest regret. I could have oiled my beautiful mahogany body with much better results.

Tools:

* Flexible edge (for pegboard and body profile https://shop.pacificarc.us/products/flexible-edge-curves)

* Bandsaw (body and neck shape)

* Drill Press

* Router (For the neck and body cavities)

* Thickness planer (only need this once to plane the body wood before gluing)

* Curved carving knife (Like this https://ramelson.com/product/curved-hook-carving-knife/) to profile the neck.

* Pipe clamps

Nice to have tools:

* Oscillating spindle sander

* Belt sander

* Router table

I recommend using an easy to work wood like maple for the first attempt. I found mahogany to be a lot of effort to work. Expect the project to take quite a wile. I think mine took 200 hours.

Top comment by kogepathic

I have a 12th Gen Intel Framework from work. I cannot recommend Framework as a brand.

Yes, they are repairable. That is where the list of Pros ends for me. Perhaps the only unique selling point is being able to upgrade the motherboard later, but...

The screen, keyboard, touchpad, and IO are all inferior to a ThinkPad.

You can only ever have 4 ports, which is considerably less than your average PC laptop of similar dimensions and weight will have.

ThinkPads and other corporate-tier machines are dirt cheap used after 3-4 years, and finding spare parts for them is usually a non-issue as long as you don't mind eBay. Lenovo will happily sell you parts for a few years after the laptop is released, although availability and pricing are not great.

Framework had a partnership to only sell Western Digital SSDs when I ordered mine, and it later came to light that WD had serious firmware issues with these models resulting in sudden data loss. [1]

Additionally, the 12th Gen model has received ONE firmware update in over a year since release. [2] While Framework have committed to delivering more frequent firmware updates, they don't have a good track record there. No LVFS support either, so you have to burn a USB stick to update.

Prior to the firmware update, I've had the laptop completely discharge the battery while powered off, refuse to power up until being connected to a charger for ~15 minutes, and then display a large error saying the screen and battery were not connected (they were).

Even after the firmware update, I still have issues with phantom battery drain when the laptop is completely powered off.

[1] https://community.frame.work/t/tracking-wd-black-sn850-sudde...

[2] https://knowledgebase.frame.work/en_us/framework-laptop-bios...

Top comment by kevmo314

I used to have a pretty successful browser extension that I shut down because the site it worked on shut down.

I grew it by adding features that people would ask for on the site's forums, for example a user would say "hey can we have x feature?" and I would respond saying "great idea, I added x feature to my extension y!" This was very effective and over time others would start responding saying my extension had whatever feature they were asking, capitalizing on how relatively slow companies are to implement features.

This does rely on the extension having a site it operates on and having a forum for users though. If I were to do it today I'd focus on finding places where my extension's users concentrate, Discord, a community Slack, or otherwise, and doing the same thing.

Top comment by Meleagris

I really enjoyed reading "The Blue Machine: How The Ocean Works".

It turns out the Ocean is fascinating, and I learned something crazy:

"Between 1950 and 1973, world fish harvest trippled, but the amount of fish directly consumed by humans stayed the same. The rest went into fishmeal, as a supplemental food for livestock, and this became an essential ingredient for modern industrial farming".

I didn't realize that fishmeal was a primary input to modern animal agriculture. Global fish stocks collapsed not only because people ate fish, but also because of animal agriculture in general. It's fascinating how it's all connected.

Also, sea turtles cry 8 litres of tears an hour.

Needless to say, this book ended up as a permanent fixture on my bookshelf.

Top comment by reilly3000

Retool is fantastic but truly priced for inhouse use cases only. My general advice with low-code / RAD is you only find out it’s showstopping limitation when you’re already too deep into it. It’s inevitable that something that seems obvious and simple to you will be nigh impossible on the platform, or at least require a series of expensive and brittle hacks. Use a common language to build the system your customers want, and accelerate your progress with coding LLMs if you want. You’ll own it, (hopefully) understand it, and can maintain it for year 2 and beyond operations.

What is your exit plan if Retool doesn’t fit your needs otherwise?

Top comment by peutetre

Use Firefox and uBlock Origin. It always worked best on Firefox anyway:

https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-b...

Top comment by nghia999

999

Top comment by duped

Drive by language design tips

Stop caring about syntax and start caring about semantics. For example

> if (a == (10 || 20 || 30) || b == a) && c { }

I get what you're after, but don't optimize syntax for bad code. `a in [10, 20, 30, b] and c` makes a lot more sense to me conceptually than trying to parse nested binary operators, especially when you consider the impact on type checking those expressions.

> async function will be called from no async function but no async/await keyword. If you want to block main thread then block_main() function will be used. block_main() /* operations */ unblock_main()

Think very carefully about the concurrency model of your language before thinking about how the programmer is going to express it. In particular, this model leaves a footgun to leave a program in invalid state.

> What are the features you found or you need in a programming language?

The biggest misdesigns I see in languages are a result of PL designers pushing off uninteresting but critical work so they can explore interesting language semantics. Like the compile/link/load model and module resolution semantics have far more impact over the success and usability of any new language (because they empower package management, code reuse, etc) and the details are hairy enough that taking shortcuts or pushing it off until later will kneecap your design.

Top comment by perrygeo

I know this sounds like a zen koan but to be consistent, don't worry about consistency. A description of the desired outcome is not a strategy for achieving it.

An actual strategy: track all of the blockers. You say that your sprints "go wrong" but that isn't a helpful observation. If you track why it goes wrong - write down the start and end time any time you get stuck, blocked, confused, waiting on others, dealing with unforeseen issues, "tech debt", etc.

This is not a failure, it's a vital signal! The time spent on blockers are literally what's standing between you and consistency. Address them head on with empirical data. You should be able to estimate the risk for any new change based on how much time you wasted in the past working on that subsystem. It's a clear choice. Slog through the problems again and deliver inconsistent results - or fix it and deliver consistently.

You do have to be selective - don't just fiddle with the code until it's pretty - fix only the observed problems that stand in the way of delivery. "Make the change easy, then make the easy change" - Kent Beck.