@danderson@hachyderm.io
@danderson@hachyderm.io avatar

danderson

@danderson@hachyderm.io

Software developer by day, other kinds of nerd the rest of the time. ADHD says current hobbies are 3D printers, building CNC machines, old computers in space, and general shitposting on whatever grabs my interest.

Nazis, TERFs, other terrible people: please go away, there's nothing for you here.

This profile is from a federated server and may be incomplete. Browse more on the original instance.

schrierc, to random
@schrierc@hachyderm.io avatar

Trying Linux on my personal desktop for the first time in years. Installed Ubuntu 24.04 on an external (USB) SSD due to familiarity and (known) Steam support.

danderson,
@danderson@hachyderm.io avatar

@schrierc Nice! Ubuntu is a decent effort vs. reward choice these days, particularly since a lot of non-free software tends to assume linux==ubuntu, so higher chance of things working out of the box.

Because I'm a distro hipster I have some feelings about it (death to snaps), but thankfully it's totally fine to ignore all of that and just use the thing, and it'll be broadly Fine IME.

danderson,
@danderson@hachyderm.io avatar

@schrierc If you're taking suggestions, Fedora Workstation is the other "just works" desktop OS on my list.

More esoteric and probably broken for a bunch of use cases but with interesting ideas/tradeoffs:

Fedora Silverblue: what if ChromeOS but more linux-ey?

Bluefin: Silverblue but turned up to 11 and trying cool new things, but needs a bit more time in the oven IME

Manjaro: Arch Linux underneath for very fresh rolling distro, but with creature comforts

danderson,
@danderson@hachyderm.io avatar

@schrierc ... but if the goal is have an OS where steam and friends just work and you're not forced to wrestle the OS... Ubuntu or Fedora Workstation are it right now, IMO. Other choices offer either minor variations on those two, or give you much more control/power/something in exchange for more ongoing work, or are radical experiments that maybe are the future but the future's not quite here yet. Still nice to explore though!

danderson, to random
@danderson@hachyderm.io avatar

Forget this LLM nonsense, you want to feel like you're talking to a helpful computer, fire up SLIME and write yourself some Common Lisp. Phenomenal cosmic powers, and doesn't require stealing, superstitious ceremonies, or bumping into effective altruists at VC events.

danderson, to random
@danderson@hachyderm.io avatar

Every time I pick up Common Lisp again, something like this happens.

Oh, I have an idea for a pretty nice API structure, but that would require a behavior that's far too clever and "do the obvious thing the source code suggests", that's not going to work. But I wonder how it fails exactly.

a few moments later

... Oh, it actually does the clever but obvious thing that I was hoping, and the reason it's not mentioned anywhere is it didn't occur to the spec authors that it'd be weird.

danderson,
@danderson@hachyderm.io avatar

And so now I'm reading chapter and verse of the HyperSpec to figure out exactly where this is spelled out. It's obviously deliberate, but I need to find the bit of the spec that specifies how function application works in the exact detail.

danderson,
@danderson@hachyderm.io avatar

The thing that surprised me:

(defvar dynamic 42)
(defun fn (&key (mykey dynamic))
(format t "value: ~s" mykey))

(fn :mykey 1)
;; value: 1
(fn)
;; value: 42
(let ((dynamic "magic")) (fn))
;; value: "magic"

That last one is what I didn't expect to work, because I assumed the default would be evaluated at definition time, not evaluated at each callsite like you need it to for dynamic scoping to work.

In retrospect, yeah obviously it does that or dynamic variables would be borked, but

danderson,
@danderson@hachyderm.io avatar

The section that defines ordinary lambda lists, which is what the defun parameter list is, effectively says this happens because it says the init-form of a parameter can reference any other parameters defined to its left in the lambda list and get the right values, which means the init-form must be evaluated at every call site... But there has to be a bit of the HyperSpec that describes function application and spells this out further?...

danderson,
@danderson@hachyderm.io avatar

So far it's not spelled out in 3.1 evaluation (that talks about evaluating the parameters at the call site, but then just says the function is called with the evaluation results - that doesn't address binding and resolution of init-forms), and not defined in 3.4 lambda lists (other than indirectly via what the init-form can reference, which implicitly requires the init-form to be evaluated at function call time).

Can you tell I'm not very familiar with the hyperspec's layout...

danderson,
@danderson@hachyderm.io avatar

Hmm, there's no other obvious section of the spec that would spell this out further, this really would be either in the evaluation section (it's not), or in the function definition section (it sort of is, with a very careful reading of what the language promises about init-form's eval environment and what that implies). Maybe that talmudic implication is all I get?...

danderson,
@danderson@hachyderm.io avatar

Okay no there it is: http://clhs.lisp.se/Body/03_dad.htm

In the details of exactly how lambda lists handle keyword parameters, there is a more precise description of how incoming arguments to a function call are bound to names in the lambda list. And in particular, if a key has no value provided by the caller, and the key has an init-form, then the init-form is evaluated at that time to provide a value.

Phew.

danderson, to random
@danderson@hachyderm.io avatar

It's super interesting to infer the layers of history in the kicad file formats. There are "footprint" shapes and "graphical" shapes, and you can make the same shapes with both but footprint shapes are only to be used in footprint definitions, and seemingly only for electrically-relevant items? Whereas graphical shapes are for silkscreens and annotations and... also some electrical things like custom pad shapes?

I am confuse and am going to have to look at already defined objects.

danderson,
@danderson@hachyderm.io avatar

Also weird units stuff? Both footprint files and schematics have a minimum internal step of one nanometer, but dimensions are expressed in mm so in footprints you can go down as low as 0.000001mm but further decimal places are truncated

Similarly in schematics it's still one nanometer so you can go as low as ... 0.0001mm? Which is 100 nanometers, which is not 1 nanometer.

danderson,
@danderson@hachyderm.io avatar

Symbols have units, which is the thing of where you can do like one chip that contains 4 NAND gates, and in the schematic editor you get 4 standalone symbols.

For legacy reasons there's apparently a rigid naming format for these, including a "style" which indicates the body style, and can be either "1" or "2". I have no idea what these mean.

danderson,
@danderson@hachyderm.io avatar

It's all fine, I get it, someone went to the trouble of writing a lot of documentation for this format and I'm nitpicking the bits and pieces that aren't as elaborated as I'd like. This isn't a scathing critique, I'm grateful for the docs. I also enjoy visiting the minds of the authors and inferring what parts of kicad internals they knew a lot about, based on what's left unsaid as completely obvious :)

danderson, to random
@danderson@hachyderm.io avatar

hm, though if I'm reading this spec right, while the format is s-expressions, the order of attributes within each list is fixed? So (fp_circle (center X Y) (end X Y)) is valid, but (fp_circle (end X Y) (center X Y)) isn't? That's slightly annoying in that it's probably going to force me to define an IL that enables more freeform expression. Bit of a shame, but livable I guess.

danderson,
@danderson@hachyderm.io avatar

@4raylee I'm making an assumption, so far, because in some of the definitions there seem to be arguments that are ambiguous unless they are strongly positional. I could be wrong though! I'm still getting a feel for the structure of the files and the shape of available tools before I start iterating on code.

danderson, to random
@danderson@hachyderm.io avatar

omg kicad changed all its file formats to S-expressions! The docs feel obliged to make S-expressions sound less scary by calling stuff tokens and attributes, which makes me die a little bit inside, but omg it's so much nicer than the pre-2018 format! You can read stuff! It uses words to say the things that it means!

And most importantly, I can output this stuff fucking trivially from a lisp, muahahah

crawshaw, to random
@crawshaw@inuh.net avatar

Going to try installing graphics on this linux machine. It has been... a long time since I tried desktop linux. What do I use for a minimal low-latency desktop env? Is xfce still a thing?

danderson,
@danderson@hachyderm.io avatar

@crawshaw Unless you crave a specific form of minimality, I'd probably stick to Gnome on wayland tbh. It's evolved into a very restrained UI/UX, probably feels fairly familiar coming from (I assume) macOS.

Reason I say this is desktop environments have a lot more required baseline complexity these days (e.g. portals for sandboxed access to stuff, fancier network management needs, ...) and from recent experience only Gnome and KDE deliver all those things fully working out of the box.

danderson,
@danderson@hachyderm.io avatar

@crawshaw XFCE might, I haven't looked at it recently, but googling a couple recent desktop API things, I see recent forum threads asking how to make those things work so that e.g. screensharing in videoconference works. That's the sort of thing you end up fighting if you go outside gnome or kde, and I suspect that's not the kind of time you're after :) And I say this as a user of one of the hipster tiling WMs where I have to make all this work.

danderson,
@danderson@hachyderm.io avatar

@crawshaw ... And let me tell you the second Gnome or KDE ship decent tiling support that does what I need, I'm jumping ship because boy it's a chore.

danderson, to random
@danderson@hachyderm.io avatar

Reading a book about an old computer, and it's a very cozy vibe. Before getting properly started, it needs to explain what a silicon transistor is, because it's very newfangled and the reader may not be aware of the knock-on benefits of the NPN topology in silicon, compared to the more traditional germanium devices.

Also, section titles that sound like shitposts:

A. JUSTIFICATION FOR LARGE COMPUTERS

danderson,
@danderson@hachyderm.io avatar

"Two identical Multiply Units are included in the 6600 Central Processor. While this is small extravagance, ..."

Meanwhile, the CPU I'm using to write this has... a complicated microarchitecture but broadly speaking 100-160 multipliers? I think?

danderson,
@danderson@hachyderm.io avatar

oh wait no this is floating point multiply, so that's... 6 FPUs per core, times 16 cores, but also the issue width is quite limited so much less than the above.

danderson,
@danderson@hachyderm.io avatar

@natanbc oh right, vector units. Thanks!

  • All
  • Subscribed
  • Moderated
  • Favorites
  • JUstTest
  • ngwrru68w68
  • kavyap
  • everett
  • khanakhh
  • cubers
  • rosin
  • thenastyranch
  • DreamBathrooms
  • mdbf
  • magazineikmin
  • InstantRegret
  • Youngstown
  • slotface
  • megavids
  • Leos
  • osvaldo12
  • Durango
  • tester
  • ethstaker
  • GTA5RPClips
  • cisconetworking
  • tacticalgear
  • provamag3
  • anitta
  • normalnudes
  • modclub
  • lostlight
  • All magazines