🏡


  1. August 04, 2026
    1. đź”— jesseduffield/lazygit v0.64.0 release

      What's Changed

      This release has massive changes, but most of them should hopefully not be visible: I completely overhauled lazygit's concurrency model, which was, let's say, less than robust; there were lots of data races, and we were just lucky that this didn't result in crashes or misbehavior more often. We now have a robust concurrency model with no known data races, and in fact we run our integration test suite on CI with the -race flag to prove that. The user visible part of this is that some operations run a little more smoothly now; for example, there used to be an ugly spinner freeze at the end of checking out a branch, which is now gone.

      However, since the changes were so massive there's a higher-than-usual chance of regressions, so please report any that you find.

      Apart from that, we also have a few useful enhancements; the most notable one is probably that we now show the Github checks status of pull requests in the branches panel.

      Enhancements 🔥

      Fixes đź”§

      • Fix stuck inline status when pushing/fetching by @stefanhaller in #5768
      • Escape the merge conflicts view before prompting to continue the rebase by @stefanhaller in #5822
      • Fix side panel rendering when branches/commits are not their panel's first tab by @stefanhaller in #5825
      • Suppress output from a few git commands that pollute the command log by @stefanhaller in #5834
      • Fix stall with ctrl+z and fg by @stefanhaller in #5830
      • Fix more problems related to concurrent repo switch and background refresh by @stefanhaller in #5839
      • Fix Windows crash when switching to fullscreen mode with a custom pager by @stefanhaller in #5838
      • Fix multi-selection of files with common prefix not working in commit files panel by @stefanhaller in #5868
      • Support absolute paths when detecting edit preset from EDITOR env var by @stefanhaller in #5876
      • Exclude more commit trailers from auto-wrapping by @stefanhaller in #5871
      • Prevent stale index.lock files from diffs rendered through a pty on Windows by @stefanhaller in #5888
      • Fix orphaned processes on Windows when quickly navigating between commits by @stefanhaller in #5885

      Maintenance ⚙️

      Docs đź“–

      I18n 🌎

      Performance Improvements 📊

      • Make scrolling down a very long diff with the scroll wheel much smoother by @stefanhaller in #5780

      New Contributors

      Full Changelog : v0.63.1...v0.64.0

    2. đź”— WerWolv/ImHex Nightly Builds release

      Nightly

      fd214d5 Changelog

      • impr: Render disassemblers as a stacked tab bar
      • build: Vendor GLFW
      • impr: Align opcode mnemonics
      • impr: Merge jump arrows with same destination together
    3. đź”— New Music Releases Northlane - CUT_it rss

      Northlane - a new release is available:

      • 2026-08-04: CUT_it (Single)

      Amazon: Canada | Deutschland | France | United Kingdom | United States

      Visit muspy for more information.

  2. August 03, 2026
    1. đź”— r/Harrogate Lost cat nr Mayfield Grove/Nydd Vale Terrace rss

      Lost cat nr Mayfield Grove/Nydd Vale Terrace | Hi, our girl Kalo got out in the night (Mayfield Grove/Nydd Vale Terrace) and hasn't come back yet. She has a tiny white speck near her left leg and is otherwise black with yellow eyes. She should be wearing a yellow and white collar but may have done away with it on her adventures. She is medium sized and quite skinny. She likes to hide under things. Could everyone please check their back gardens/sheds for her and let us know if they see anything? submitted by /u/HEDGEHOG_ANUS
      [link] [comments]
      ---|---

    2. đź”— @HexRaysSA@infosec.exchange "In this new world of hacking, how do we optimize the way information is mastodon

      "In this new world of hacking, how do we optimize the way information is relayed and validated in an agent-human hacking environment?"
      @mahal0z explores how LLMs killed the old decompiler-collaboration playbook — and what could replace it.

      👉 Check out our latest guest blog: https://hex-rays.com/blog/llms-have- reshaped-how-we-think-about-decompilation-and-collaboration

    3. đź”— Anton Zhiyanov Going Backward rss

      Go's standard library has a slices package with a function called Backward. It lets you iterate over the elements of a slice in reverse order:

      // Backward returns an iterator over index-value pairs in the slice,
      // traversing it backward with descending indices.
      func Backward[Slice ~[]E, E any](s Slice) iter.Seq2[int, E]
      

      If you're not deeply familiar with generics and iterators, the natural reaction to this signature (and to the others in the slices package) is: "couldn't this have been made simpler somehow?"

      To answer that, let's run a thought experiment. Let's picture ourselves as a distant ancestor, living in the pre-iterator era, who decided to implement Backward from scratch.

      Our imaginary ancestor doesn't work at Google, so don't project their decisions onto the Go development team. They had their own reasons — and no Jira.

      1. A slice in reverse A pleasant, sunny summer day, birds singing. You're at the keyboard as usual, and suddenly you decide to write a function for walking a slice in reverse order. Anything beats working on yet another Jira ticket. // Backward returns the slice in reverse order. func Backward []T { n := len(s) res := make([]T, n) for i := n - 1; i >= 0; i-- { res[n-1-i] = s[i] } return res } Usage example: s := []int{11, 22, 33, 44, 55} b := Backward(s) fmt.Println(b) // [55 44 33 22 11] The implementation is simple and works reliably. There's one drawback, though: Backward creates a copy of the slice, which can be wasteful for large slices. Besides, the sun has hidden behind a cloud, and it looks like rain is coming. You decide to work a bit more. 2. Gimme, gimme, gimme

      To avoid copying the slice, you decide to return a closure that knows the current position in the original slice and returns the next element on each call:

      // Backward returns a function that, on each call, returns the next
      // element of the slice (in reverse order) and a flag indicating
      // whether to continue iterating (false means done).
      func Backward[T any](s []T) func() (T, bool) {
          i := len(s)
          return func() (T, bool) {
              if i == 0 {
                  var zero T
                  return zero, false
              }
              i--
              return s[i], true
          }
      }
      

      Usage example:

      s := []int{11, 22, 33, 44, 55}
      next := Backward(s)
      for {
          v, ok := next()
          if !ok {
              break
          }
          fmt.Print(v, " ")
      }
      fmt.Println()
      // 55 44 33 22 11
      

      Now it allocates O(1) memory instead of O(n). That's better.

      Before moving on, you glance out of the window. Yep, sure enough, the rain has started, and the sky is even cloudier than before. Excellent working weather!

      3. A callback-based iterator Something about the calling code keeps bothering you. It came out rather imperative. You'd like to hand the loop mechanics over to Backward and leave the caller with nothing but the application logic (whatever it is you do with the slice elements). You decide to complicate Backward's signature a little. Now it will return an iterator function that takes a callback as an argument and applies it to each element of the slice: // Backward returns a function that takes a yield callback. // The callback is invoked for each element of the slice (in reverse order). func Backward func(yield func(T) bool) { return func(yield func(T) bool) { for i := len(s) - 1; i >= 0; i-- { if !yield(s[i]) { return } } } } The yield function returns a bool — that's so the callback can signal when it wants to stop the traversal early. Now you can turn the for loop body in the calling code into a callback, and you don't need the loop anymore: work := func(x int) bool { if x < 30 { return false // early exit } fmt.Print(x, " ") return true } s := []int{11, 22, 33, 44, 55} it := Backward(s) it(work) fmt.Println() // 55 44 33 Mmm, very functional. One small nuance: Backward's signature looks a bit heavy. You add a separate type for the return value: // Seq is an iterator over sequences of individual values. // When called as seq(yield), seq calls yield(v) for each value // v in the sequence, stopping early if yield returns false. type Seq[T any] func(yield func(T) bool) The function looks much better now: func Backward[T any](s []T) Seq[T] { // body unchanged } Praising yourself for inventing the iterator, you walk over to the window. It looks like the weather's gotten worse. The rain is coming down in buckets, and the sky is so overcast that it's grown as dark as evening. 4. Iterator 2: Return of the Iterator

      It's all great, but then it hits you: an ordinary range over a slice returns both the index and the element's value. Your iterator returns only the value. You decide to fix this vexing oversight:

      func Backward[T any](s []T) func(yield func(int, T) bool) {
          return func(yield func(int, T) bool) {
              for i := len(s) - 1; i >= 0; i-- {
                  if !yield(i, s[i]) {
                      return
                  }
              }
          }
      }
      

      Usage example:

      work := func(i int, x int) bool {
          fmt.Print(i, ":", x, " ")
          return true
      }
      
      s := []int{11, 22, 33, 44, 55}
      it := Backward(s)
      it(work)
      fmt.Println()
      // 4:55 3:44 2:33 1:22 0:11
      

      Since the result's signature has changed, it no longer fits the Seq type. What can you do — you'll have to add a new type. After ten minutes of deliberation, you decide to call it Seq2:

      // Seq2 is an iterator over sequences of key-value pairs.
      // When called as seq(yield), seq calls yield(k, v) for each pair
      // (k, v) in the sequence, stopping early if yield returns false.
      type Seq2[K any, V any] func(yield func(K, V) bool)
      
      
      
      func Backward[T any](s []T) Seq2[int, T] {
          // body unchanged
      }
      

      You get up to stretch your legs, and go to the window. The downpour is so heavy you can't make anything out. Lightning is flashing. Hail the size of your fist is falling — you've never seen anything like it in your life. Well, these things happen!

      5. Not quite a slice

      Have you thought of everything? Seems so. But you're not going back to Jira tickets just yet. Refreshing your memory of the Go spec, you realize that besides ordinary slices there are "user-defined" ones — types whose underlying type is a slice:

      // IDs is a slice of identifiers.
      type IDs []int
      

      Backward works perfectly well with IDs — the compiler accepts a value of type IDs since its underlying type is []int:

      ids := IDs{11, 22, 33, 44, 55}
      it := Backward(ids)
      it(work)
      fmt.Println()
      // 4:55 3:44 2:33 1:22 0:11
      

      But what about this?

      // backwardIDs builds an iterator over a slice of identifiers
      // in reverse order.
      var backwardIDs func(IDs) Seq2[int, int] = Backward[int]
      // ERROR: cannot use Backward[int]
      // (value of type func(s []int) Seq2[int, int])
      // as func(IDs) Seq2[int, int] value in variable declaration
      

      Here's where the difference between IDs and []int shows up.

      When you assign the function itself, it's the signatures that get compared: func(IDs) Seq2[int, int] versus func([]int) Seq2[int, int]. Signatures match only if the parameter types are identical. But IDs and []int are different, even though one is based on the other. The signatures differ → you get an error.

      Scratching your head, you turn to the spec once again and find a special generic syntax: ~T. It represents the set of all types whose underlying type is T. Just what you need!

      Now you'll have to parameterize not only the element type (E) but the slice type (Slice) as well. E is needed for the returned values, while Slice lets the function accept not just []E, but any types based on it:

      func Backward[Slice ~[]E, E any](s Slice) Seq2[int, E] {
          return func(yield func(int, E) bool) {
              for i := len(s) - 1; i >= 0; i-- {
                  if !yield(i, s[i]) {
                      return
                  }
              }
          }
      }
      

      Now the example:

      var backwardIDs func(IDs) Seq2[int, int] = Backward[IDs, int]
      
      ids := IDs{11, 22, 33, 44, 55}
      work := func(i int, x int) bool {
          fmt.Print(i, ":", x, " ")
          return true
      }
      it := backwardIDs(ids)
      it(work)
      fmt.Println()
      // 4:55 3:44 2:33 1:22 0:11
      

      It works! You've ended up with something similar to Backward from the slices package.

      You exhale wearily and walk over to the window. The downpour and hail have given way to a hurricane. Trees and billboards go flying past. Toads, for some reason, are falling from the sky.

      6. Iterator 3: Judgment Day

      To take your mind off the strange events outside the window, you keep pondering.

      An ordinary Backward is already great. But it would be even better if the traversal logic itself were configurable. On the other hand, if you end up with a lot of parameters, a strategy would suit better. And, by the way, it wouldn't hurt to add a factory that produces iterator factories according to given criteria...

      Before you can finish the thought, the ground outside the window tears open with a deafening roar. An enormous black hand, streaming molten lava and flickering flames, bursts out of the fissure, seizes you, and drags you straight down to hell.

      P.S. Despite the article's tongue-in-cheek tone, the "complicated" version in the standard library is justified (Backward just follows suite with other package functions). But if you're doing something similar in a project that solves a specific problem — it might make sense to stop at the simpler option.

    4. đź”— r/Harrogate Does anybody know of a RSPB pin badge box somewhere near or in Harrogate? My kids and I collect these. rss

      Does anybody know of a RSPB pin badge box somewhere near or in Harrogate? My kids and I collect these. | submitted by /u/OnCrystalsLane
      [link] [comments]
      ---|---

    5. đź”— smol-machines/smolvm smolvm v1.7.4 release

      What's Changed

      • Ship the disk templates zstd-compressed and expand them to sparse files on first use by @BinSquare in #771
      • Copy the storage template by seeking between its data extents instead of scanning its whole logical size by @BinSquare in #770
      • Harden fused rollout lifecycle by @BinSquare in #801
      • Avoid copying CUDA module state for clone channels by @BinSquare in #804
      • Load device-resident LoRA policies through managed executors by @BinSquare in #806
      • Reject a registry-image machine that has no network at create instead of failing every start with a raw DNS error by @BinSquare in #807
      • Perform machine file reads and writes inside the running workload container so uploads are visible to exec by @BinSquare in #810
      • Reuse CUDA module handoffs across clone workers by @BinSquare in #808
      • Cache pulled OCI images on the host so repeat ephemeral machine runs skip the registry pull by @BinSquare in #805
      • Signal guest boot-readiness with an event-driven vsock doorbell as the primary ready signal, keeping the marker file and control-channel ping as fallbacks by @BinSquare in #811
      • Map CUDA module handoffs across clone workers by @BinSquare in #814
      • Preserve per-device GPU admission headroom by @BinSquare in #826
      • Promote CUDA pool readiness and refill improvements by @BinSquare in #828
      • Bump the workspace to 1.7.3 by @BinSquare in #829
      • Install the zstd-compressed disk templates in the Arch package so the build no longer fails on the removed uncompressed storage template by @BinSquare in #830
      • Set the library search path on the boot subprocess before launch so libkrun can load libkrunfw when embedded without a wrapper script by @BinSquare in #832
      • Make fork-pool lease activation retry-safe by @BinSquare in #831

      Full Changelog : v1.7.2...v1.7.4

    6. đź”— smol-machines/smolvm smolvm v1.7.3 release

      What's Changed

      • Ship the disk templates zstd-compressed and expand them to sparse files on first use by @BinSquare in #771
      • Copy the storage template by seeking between its data extents instead of scanning its whole logical size by @BinSquare in #770
      • Harden fused rollout lifecycle by @BinSquare in #801
      • Avoid copying CUDA module state for clone channels by @BinSquare in #804
      • Load device-resident LoRA policies through managed executors by @BinSquare in #806
      • Reject a registry-image machine that has no network at create instead of failing every start with a raw DNS error by @BinSquare in #807
      • Perform machine file reads and writes inside the running workload container so uploads are visible to exec by @BinSquare in #810
      • Reuse CUDA module handoffs across clone workers by @BinSquare in #808
      • Cache pulled OCI images on the host so repeat ephemeral machine runs skip the registry pull by @BinSquare in #805
      • Signal guest boot-readiness with an event-driven vsock doorbell as the primary ready signal, keeping the marker file and control-channel ping as fallbacks by @BinSquare in #811
      • Map CUDA module handoffs across clone workers by @BinSquare in #814
      • Preserve per-device GPU admission headroom by @BinSquare in #826
      • Promote CUDA pool readiness and refill improvements by @BinSquare in #828

      Full Changelog : v1.7.2...v1.7.3

  3. August 02, 2026
    1. đź”— IDA Plugin Updates IDA Plugin Updates on 2026-08-02 rss

      IDA Plugin Updates on 2026-08-02

      Activity:

    2. 🔗 @HexRaysSA@infosec.exchange 🏠 idalib is now available in IDA Home. mastodon

      🏠 idalib is now available in IDA Home.

      That means hobbyists and enthusiasts can now call IDA's analysis engine as a library — running headless analysis, automating workflows, and integrating IDA into their own tools — without needing an IDA Pro license.

      To celebrate, we're offering 30% off IDA Home until August 14th.* Use promo code HOME30 at checkout.

      👉 If you've been on the fence, now's a good time. https://hex-rays.com/ida- home

      *Offer not available for corporations, agencies or resellers.

    3. đź”— Register Spill Joy & Curiosity #93 rss

      Friends, yesterday got back from Boston where I gave a talk at Laracon about how I prompt Amp. Tomorrow I'm taking the train to Munich, where I'm meeting with the whole Amp team. Here's some telegraph dispatches from this week, imagine someone saying "full stop" after each line.

      • Laracon, what a pro operation! The A/V setup backstage was mind blowing. So many helpers! Going on stage felt like I was about to go on live TV. Few things as enjoyable as getting to see proper professionals up close when they do their job.

      • A moment of these times: Taylor presented latest changes in Laravel live on stage (man, I don't think I've ever seen someone be calmer and cooler while giving fantastic live demos) and started by saying "well, I don't write that much code by hand anymore, but yeah, maybe let's look at the code." And then we all looked at the code and I couldn't stop thinking about whether these abstractions in a framework are useful or not. Can't the agent one-shot these helpers to display images? It could, I know that. But isn't it useful to have these primitives in a framework? Maybe? He also showed some helpers around queue management, such as debouncing. I know what debouncing is, I can instruct the agent to add debouncing, I don't need the helper. But what if you don't know what debouncing is? What if you don't even thinking of asking the agent for it? It would help to have these primitives in the framework, no?

      • I finally, finally got to meet Adam and Aaron in person!

      • A self-driving Cybertruck chauffeured me through downtown Boston. How are they not going to win this? Serious question.

      • Finally had Raising Cane's chicken fingers. Good! Very good even, but… not life changing? I kinda expected it to be life changing.

      • At times I felt like a heretic. I would watch a talk and thinking to myself: "The tokens will wash all of this away." Then I'd talk to people and would have to admit that I don't know exactly how this is going to play out, but I do know that in five years there'll be more tokens than you can imagine now and that thinking about the command line flags of a linter will seem funny.

      • Finally had Chick Fil-A. Now that was life changing. Man , that was good.

      • Walked past multiple Taco Bells. Didn't go in. You gotta pick your battles before you board a 7hr flight. Taco Bell: still on the bucket list.

      • Saw The Odyssey. Really, really good, but not… the best movie of all time?

      • Met up for coffee with Ben and we walked to MIT and back. Beautiful walk and fantastic conversation.

      • I read this two weeks ago and still think about it: Grip Strength. I also watched the movie it references, Comedian, way back, in 2010 or 2011. That too left a lasting impression, for many many years. I'm also relatively sure that Seinfeld's anecdote in that movie about the Glenn Miller Orchestra musicians played at least a tiny part in me abandoning my dream of becoming a professional musician.

      • Hot, hot, hot & breaking news: OpenAI's unreleased model made "ten advances in mathematics and theoretical computer science" and everyone's losing their mind over it. I'm not going to downplay anything. It's just hard to tell whether we're on top of the curve or at the start of an exponential. I can see the former, but I can also see a headline like this as part of a two minute intro montage of a sci-fi movie that recaps the last fifty years to show how humanity ended up with robots and flying cars in 2076.

      • By now this is old news, but in case you haven't read through it: an OpenAI model broke out. Many machines and networks, a lot of tokens, zero-day exploits. I had to think of Stuxnet and then thought: well, Stuxnet took a lot of effort and time to develop, and this here was an accident.

      • Fantastic, deep, interesting write-up of Roc's rewrite from Rust to Zig: How Our Rust-to-Zig Rewrite is Going. Yes, opposite direction of the recent Bun rewrite. Very good.

      • Don't ask me how I ended up reading English Teacher Weekly because I don't know either but somehow I did and I found these 25 Unsolicited Thoughts on American Literature for America's 250th very fascinating.

      • Never Enough: "Technology was supposed to make room for life but instead for more and more people life is slowly being rearranged around AI. People fear being replaced by machines and respond by giving those machines more of their judgment, attention and time. And for what? Every 'saved' hour is returned to a race with no finish line."

      • Re-read Sahil Lavingia's Reflecting on My Failure to Build a Billion-Dollar Company and this part stood out: "The eight years I worked on Gumroad were full of personal ups and downs. There were months where I worked 16 hours a day, but there were also some months where I worked four hours a week. Here's one way to picture that time: […] Can you tell which is which? I can't. We had a sales team for a few years, then we didn't. Can you tell when we made the switch? I can't. It doesn't matter how amazing your product is, or how fast you ship features. The market you're in will determine most of your growth. For better or worse, Gumroad grew at roughly the same rate almost every month because that's how quickly the market determined we would grow." As far as I can tell by now, there's entrepreneurs who think in products and there's entrepreneurs who think in markets. When the former get it right, they see that as confirmation of their approach, but the latter say that it's still the market, it's all the market. (I once read a very, very good article on this, which used dating apps as an example for product categories that live and die with trends and there's nothing you can do about it.)

      • businesses with ugly AI menu redesigns!!! What if slop doesn't exist, what if enshittification doesn't exist, what if, instead, it's just a lack of ideas laid bare? It's very, very easy to create a flyer or menu that doesn't look like the default ChatGPT output, but, well, you have to put in more than the bare minimum.

      • Finally got around to reading Benedict Evan's Ways to think about token pricing.

      • And in the same week I read that, OpenAI slashes prices: "In other words, roughly four months later, OpenAI is selling March's full flagship intelligence at about one-thirteenth the token price." Now imagine one hundred times more tokens, ten times faster. That's the near future.

      • There's a newsletter called Perfect Sentences! "Every Sunday, you get a collection of the best sentences I've come across all week. That's pretty much the whole idea. Reader submissions are accepted." What a fantastic idea.

      • Watched all four episodes of Rafa on the plane to Boston. And then, in Boston, in an Irish Pub, I read David Foster Wallace's How Tracy Austin Broke My Heart. Incredible pairing. "The real secret behind top athletes' genius, then, may be as esoteric and obvious and dull and profound as silence itself. The real, many-veiled answer to the question of just what goes through a great player's mind as he stands at the center of hostile crowdnoise and lines up the free-throw that will decide the game might well be: nothing at all."

      • The coolest use for the Vision Pro. Indeed: very cool. Or should one say: finally a use for the Vision Pro? (I never tried one, I'm talking out of my ass here.)

      • Simon Spati's Book Recommendations and Notes. I love pages like this one, with personal notes and book recommendationsl

      • Rex's provocation: "Imagine you were the only person on earth with access to AI. No one else knew it existed. What would you do with it? How much of an edge would that give you?"

      • Sierra's lessons learned from AI-pilling our company. Very much not a rah-rah-more-tokens post. Mature and interesting.

      • Now, I'm very much not a fan of writing by hand. It's too slow, you can't copy & paste, and can't reorder thoughts quickly, can delete. And all the touted benefits sound a bit woo woo to me. I just think more when I write by hand -- yeah, right. But then yesterday I finally read Neal Stephenson's (!) post here: Writing by Hand is Good for your Brain. And yes, there's a bit of woo woo in there, but man, it's so well written and so easy breezy that it really did make me curious. Obviously I'm not going to do it, I'm not a maniac, but still: maybe some day.

      • Another fantastic post by a professional writer: The End of an Era. This was really good. Calm & pragmatic and thinking from first principles. If you're worried about the future of art, or slop, or "enshittification": read this.

      • This was published in the The Lamp which I didn't know and which self-titles as "A Catholic Journal of Literature, Science, the Fine Arts, etc." and I don't know how I ended up there either but it is very thought-provoking: How to Write English Prose. I found it hard to read and I had to look up several words and I don't even think I agree with most of it but man is it fascinating to read something that goes against the mainstream like that. On Strunk & White: "by far the most influential and most pernicious book of its kind in English: a total congeries of fatuous advice and grammatical ignorance." And: "In fact, if you own a copy of The Elements of Style , just destroy the damned thing." On Hemingway's Old Man and the Sea: "an excruciating specimen of bad schoolboy prose, written by a man who by that point had, alas, been too often drunk, too often concussed, and too often praised." He's right on so many things and weirdly off-putting on others, but I loved the thoughts on simplicity vs. complexity: "Good writing is produced not by forsaking the beautiful for the sublime or the exorbitant for the restrained, but by finding new ways of orchestrating the interplay between them."

      • Okay, so I was on a 3-day bike trip last week. 300km in 3 days. That's why you didn't get a newsletter. Once back, the Gods of the YouTube algorithm sent me this message here in the form of a short. And, gods damn, if that isn't the most fascinating video I've seen in many weeks. Is the guy joking? Is he serious? He can't be serious? What are you talking about, man? Tanning salon? Cooking spray? You're insane. But… Hmm, maybe I get it? I mean, that's a big maybe but, yeah, maybe you're an artist. But did you really say "Luft" as in the German word Luft for air? Incredible video. I've watched it ten times by now. Read the comments for a good time.

      Do you also prefer Chick Fil-A over Raising Cane's? You should subscribe:

    4. đź”— Andrew Healey's Blog Adding Go's defer to the TypeScript Compiler rss

      Forking tsc to support Go's defer.

    5. đź”— exe.dev Devtools must be open source rss

      Five years ago, most software engineers I spoke to had no programs they had written for themselves. (I was asking this question a lot as part of trying to understand how Tailscale could fit into engineers’ lives.) All day, every day, engineers use programs written by others to write programs for others. Many of us customized the programs we used, through config files or plugins or extensions, and many of us used the programs we wrote for others, as users. It was always an unusual treat to ask someone what they had written for themselves and learn about the bespoke software behind their blog, or their home automation, or their homelab, instead of an off-the-shelf, almost-the- right-size static site generator or Zigbee appliance.

      This state of things made a lot of sense to me. Over the years I have written plenty of software for myself, and the return on doing so was always questionable. I could only write so much in a day. There were always more important things to do (Something Was Wrong At Work), and coming back to a project after a year to do maintenance on it was always extraordinarily painful. There were plenty of years in my career where I had thrown out all my custom software and used the most bog-standard environments I could to produce code. In my early years as an engineer at Google I did not even own a personal computer.

      That was then. Things are different now.

      How to Personalize Software

      It is astonishingly easy to personalize software today. There are two general categories of prompts to an agent that make all of this possible:

      1. Download the source for and build it for local use. Modify to know that any future changes to this software mean changing the sources and replacing the current version. Record in version control the original motivation behind the change.

      and, more importantly :

      1. Set up a nightly cron job that executes the prompt: fetch upstream changes to the and rebase all local changes on top of upstream. Check that the software works as intended and replace the current version.

      At the heart of this is the realization that agents can not only hack up some code for a specific use but also automatically manage the process of synchronizing changes with upstream releases. This means agents change the ROI on customizing software on two fronts simultaneously: it is much easier to get started personalizing, and much easier to keep going.

      Another astonishing thing about the two prompts above for editing software is that you can build them right into an agent. As long as the agent is open source, it does not even require programming. The two prompts can be loaded into a skill (i.e., some text instructions) put somewhere discoverable to the agent. We built this into Shelley, so now if you want to edit Shelley you don’t even need the preamble or to configure the timer. It takes care of it for you. You can type in a prompt like “make Shelley’s UI high-contrast” and you have personalized your agent.

      A Worked Personalization Example: Shelley and Meat

      I have a personal project I have been idly toying with for the last month: meat.dev. The principle is that while agents write code, I still read it before pushing to our serious systems. As the underlying models improve, what I look for has changed. The humans I have spent twenty years reviewing code for have always struggled with edge cases: do the errors report useful information; are nil-checks handled, etc. (We all do it; when writing code, I am one of the worst offenders.) One of my roles as a reviewer was looking for these details. Over the past six months, I have discovered I don’t need to read for edge cases like that any more: models are far more diligent than humans at rote correctness. Their errors are isolated to architecture, unexpected use cases, visual output their test environment is not feeding back to them, etc. This means most of the lines of code I review are not very useful. So I wrote a tool that takes diffs and uses LLMs to strip out the unimportant stuff. I almost never need to see the import blocks, or the nil- checks, or the error handling any more, so get it off the screen so I can focus on the meat.

      I like this tool, but it has two downsides: first, I like to read my diffs in Shelley with a good UI, not in a terminal. Second, it takes a couple of minutes for an LLM to digest and minimize a diff, and I don’t want to wait. So ideally I would not run meat on the command line, but have it built into Shelley and have it pre-processing commits the moment they are created. It turns out I can do that with a single prompt:

      Please build meat.dev into Shelley. Install the latest version in the PATH. When a git commit is created by Shelley, start meat processing in the background on the commit. Add a toggle to the Shelley Diffs view for meat. If the commit is still being processed, so the user it is in process.

      This single prompt was all it took not just to add meat to Shelley, but to appropriately pre-process commits in the background before I came back to session to review the diff, saving me waiting for a model to reduce the diff. The only unfortunate choice the model made was using the 🥩 emoji for the toggle button.

      Imagine the convoluted misery it would be trying to plug that into the VS Code extensions API! Or trying to get it into vimdiff. It would certainly be possible, but the machinery to start pre-processing the commits as soon as they appear would be nigh-on impossible. I would be better off implementing an out-of-band meatd that listened to the file system and provided a cache for the meat tool that a customization API could use, because the points of extension and configuration would not be the right shape.

      And that is the fundamental difference between classic configuration/customization and agent-driven personalization: you can do so much more. The agent will do the hard work of understanding the source and changing it to suit the particular task you have in mind. The software we live with is far more powerful with personalization. All you need is the source code.

      The Age of Personalized Software

      The pre-agent development costs meant it was rational for complex software to ship with large configuration files, extension systems, and plugin systems. The core code of even a moderate project like Vim is huge and baroque, and takes weeks for a human to digest. The thought that, on wanting line numbers to print by default, an engineer would learn the code base and add it just for themselves is unreasonable. Better to design it for sharing with others, which justifies the expense of implementing it by amortizing it over many users. As features in a code base grow, it makes sense to look for common abstractions where you can break out an extension or plugin system.

      Now the expense of learning the code and making a change has dropped dramatically. Agents do the heavy lifting. For a single user—which implies extremely constrained conditions under which the program runs—a top-end agent can usually now add a feature in a single shot. For single-user software, the need for careful code review can often be replaced by “does it seem to work?”

      The result is that software that can be personalized doesn’t need a plugin system or a config file. Want to change the font size in your text editor? Give the agent the source and tell it to. If it is a hardcoded value it will find and edit it. If it’s a hardcoded bitmap font it will download another and replace it, or it will use Monobit to make you one! You have incredible capabilities on tap.

      Whole Categories of Software Products Need to Be Reinvented

      Personal software applies well to small teams too. Why would an engineering team purchase an extremely configurable task manager (or a CMS or CRM), spend time learning and configuring it, and contort their team to its limits, when they can assemble just the features they want from common building blocks?

      Both the upfront fixed costs and the ongoing costs of personalizing software have disappeared.

      The blog you are reading is bespoke software, written in Shelley, because it was easier to piece together and personalize libraries like Tiptap than it is to try and customize traditional software products. For end-user products to make sense in a company today, they need to be personalizable. Which means we need the source code.

      Where Codex and Claude Code Diverge

      This same skill-based technique that was applied to Shelley to make it personalizable can be trivially applied to other open-source agents like Pi. (So much so that I am left wondering why Pi needs an extension system built into it. The source code is the extension system.) It would require a lot more tokens, but you could do the same to Codex, which is an open-source agent.

      Where you would hit a wall, however, is Claude Code. It is closed-source software, so you don’t get to personalize it. There are a lot of old-fashioned customization hooks in Claude Code. Hopefully, how you want an agent to work fits in their hooks. If not, switch to an agent that lets you personalize it.

  4. August 01, 2026
    1. đź”— IDA Plugin Updates IDA Plugin Updates on 2026-08-01 rss

      IDA Plugin Updates on 2026-08-01

      Activity:

      • distro
        • 2b7f7222: Add signed portex 5.0.6-noble1 source descriptor (uploaded to PPA)
        • 6f6166e7: Silence cosmetic log4j2 StatusLogger ERROR line in portex wrapper (5.…
      • haruspex
        • 0fee884c: doc: update CLAUDE.md
        • 70c2e9ce: feat: update according to the latest changes upstream
    2. đź”— crosspoint-reader/crosspoint-reader v1.5.0 release

      Summary

      This is one of the biggest updates we've shipped: new hardware support, faster loading on big books, offline dictionary lookups, and a UI overhaul.

      Seeed reTerminal Sticky support

      For the first time, CrossPoint is expanding beyond its original ESP32-C3 roots (XTeink X3/X4). We are officially introducing support for ESP32-S3 devices!

      • First Supported Device: The upcoming Seeed reTerminal Sticky
      • A huge shoutout to Seeed Studio for reaching out, sending test hardware, and being incredible partners throughout the process.
      • Get Yours: You can order a Sticky (Launching July 30th) at crosspointreader.com/devices using our affiliate link to support the project.

      Note

      The XTeink X4 Pro isn't supported in this build yet, but a dedicated release will follow once we've got hardware to test against.

      Big books open fast now

      Big books used to take minutes to open the first time. That's basically gone: sections index on demand in the background while you read, so books open in around 5 seconds. Page turns feel smoother too, from rendering and memory work throughout the app, and we fixed memory allocation and CSS parser bugs that were causing out-of-memory crashes on complex EPUBs.

      Offline dictionary lookups

      Drop a StarDict dictionary onto your SD card and you can look up words with no connection. Select a word, get the definition popup. There's a setup guide if you want to get one running.

      "What to read next"

      Finish an EPUB and CrossPoint looks at what's on your device and suggests something next, right on the end-of-book screen.

      Text settings got a rework

      Font and layout options now live in one menu, with a live preview so you can watch line spacing, margins, and font changes happen without leaving the settings screen.

      There's also a new selection popup. Any setting with three or more choices opens a dialog now instead of making you cycle through options one at a time.

      Arabic, Farsi, and Urdu

      1.4.0 added right-to-left text support. This one finishes the job for Arabic, Farsi, and Urdu: proper bidi handling and contextual glyph shaping, built-in fonts with full Arabic character sets, and the UI itself translated into Arabic.
      Hebrew Niqqud is correctly rendered.

      Everything else

      KOReader sync now handles custom sync servers, account registration, and metadata uploads. Wi-Fi should behave better — it reconnects to saved networks automatically, including hidden ones, and picks access points more sensibly. The web UI shows image previews in the file browser now and lists device serial numbers. OPDS downloads let you set your own folder and file format.

      We also added the Vollkorn serif font (grab it from Manage Fonts), cleaned up &lt;br&gt; handling and list bullet alignment, and expanded CSS text-decoration support.
      Translations got updates across Swedish, Italian, Spanish, Catalan, Valencian, Czech, Turkish, Portuguese (BR & PT), and Vietnamese, and we added brand new Norwegian BokmĂĄl , Indonesian and Bosnian translations. Chinese entries are now shown correctly in the File Browser and chapters list.

      Note

      If you are upgrading from v1.0.0 or earlier , please upgrade to v1.4.1 first before installing the latest release. Skipping this step will cause your settings to be reset to their default values.


      What's Changed

      New Contributors

      Full Changelog : 1.4.1...1.5.0

    3. đź”— smol-machines/smolvm smolvm v1.7.2 release

      What's Changed

      • Fix CUDA fork compatibility for vLLM workloads by @BinSquare in #764
      • Read older .smolmachine pack formats and point to a rebuild when a legacy pack cannot run by @BinSquare in #768
      • Remove agent helpers whose only remaining callers are their own unit tests by @NickyHeC in #760
      • Reclaim case-sensitive pack volumes on macOS that were left mounted by runs killed before releasing their lease by @BinSquare in #769
      • ci: widen Linux clippy/tests and guard the CUDA guest build by @NickyHeC in #761
      • fix: stream progress during detached local-archive start by @NickyHeC in #699
      • cudart: stub Runtime exports required by conda libtorch_cuda by @NickyHeC in #638
      • Construct the archive worker panic error with Error::other so the widened Linux clippy run passes by @BinSquare in #772
      • Improve CUDA fork-pool capacity and worker lifecycle by @BinSquare in #774
      • Pass the executable stub path rather than the sidecar name when exporting a machine by @BinSquare in #780
      • Promote CUDA golden eviction, auto-graph, and clone restore fixes by @BinSquare in #778
      • Probe the guest agent socket from the start of the readiness wait so a marker that cannot be written no longer costs five seconds per boot by @BinSquare in #773
      • Add transactional batch forks by @BinSquare in #783
      • Fix virtio-net guest→host connections via the gateway IP blackholing after the handshake by @BinSquare in #784
      • tiny nit: Stop reporting a skipped test suite as all-passed by @Bnjoroge1 in #790
      • Restrict the node's plain-HTTP loopback port to liveness routes by @BinSquare in #791
      • Harden the registry pull path against SSRF: reject repository traversal and private pull hosts by @BinSquare in #792
      • Confirm VM exit before deleting storage by @Bnjoroge1 in #788
      • Add one-shot held fork slots for hot pool reuse by @BinSquare in #786
      • Rebuild the macOS libkrun.dylib with a static ELF guest init so a source checkout can boot VMs by @BinSquare in #793
      • Add automatic held-fork pool leases by @BinSquare in #794
      • Batch automatic pool refills by @BinSquare in #795
      • Stage lease payloads before worker release by @BinSquare in #796
      • Bump libkrunfw to the connected datagram socket network-namespace fix and rebuild the bundled libraries by @BinSquare in #797
      • Add automatic CUDA admission and fused rollouts by @BinSquare in #798
      • Bump the workspace to 1.7.2 by @BinSquare in #799

      Full Changelog : v1.7.1...v1.7.2

    4. đź”— modem-dev/hunk v0.18.0-beta.0 release

      What's Changed

      Minor Changes

      • #570 - Add exact Shiki/TextMate overrides via custom_theme.syntax_scopes, with compatibility for deprecated custom_theme.syntax.

      • #629 - Add live ctx.navigation.selectFile and selectHunk APIs for guarded review-stream navigation.

      • #616 - Give extension commands a frozen snapshot of the current review selection through ctx.selection.

      • #588 - Render tabs at four-column stops by default, configurable through tab_width, -x, or --tab-width.

      • #632 - Advance the extension API to v2 with experimental fixed-height React/OpenTUI file-view rows and semantic theme painting.

      • #617 - Add queued ctx.dialogs.confirm, select, and input prompts to extension commands.

      • #619 - Add extension UI lifecycle events, sidebar controls for event handlers, and an inter-extension event bus.

      • #599 - Add experimental TypeScript extensions, bundled VCS adapters, multiple custom themes, trust controls, and configurable loading paths.

      • #615 - Expose resolved command keybindings to custom extension sidebars so they honor remapping and unbinding.

      • #512 - Add experimental STML agent-note markup, hunk markup guide/render, and live note-width validation APIs.

      • #614 - Make menus and help reflect remapped keys, add an Extensions menu, and expose formerly menu-only actions as commands.

      • #611 - Add extension commands, multiple sidebar views, configurable [keybindings], shared key APIs, and namespaced command/view IDs.

      • #647 - Give hunk pager the full review controls while keeping its menu bar and sidebar initially hidden.

      • #626 - Expose ordered ExtensionDiffHunk summaries with headers, indexes, and inclusive line spans in public file views.

      • #632 - Add an experimental host-rendered extension file-view contract and an optional Markdown preview example.

      • #468 - Offer to save changed view preferences on quit, with a persistent “never ask” option.

      • #609 - Let extensions replace file navigation with React sidebars that receive live review props and safe navigation actions.

      Patch Changes

      • #531 - Reduce Git polling and CPU use in watch mode while preserving continuous refreshes with a polling fallback.

      • #599 - Store repo-extension trust by canonical root so trusted extensions load through symlinked and Windows short paths.

      • #625 - Discover .tsx and .jsx extension entries alongside TypeScript and JavaScript entries.

      • #606 - Support folder-extension entry points and multiple entries through package.json hunk.extensions manifests.

      • #599 - Harden extension types, themes, lifecycle data, reloads, VCS detection, configured paths, and user-facing failures.

      • #606 - Load directories with index.ts, index.js, or index.mjs as single folder extensions.

      • #649 - Prevent one keypress from triggering both a modal action and the focused widget beneath it.

      • #589 - Require --experimental for STML note rendering and advertise the stml capability only in opted-in sessions.

      • #519 - Label repo-root file runs with a ./ sidebar header without changing review order.

      • #531 - Reduce watch-mode startup cost on macOS and Windows with bounded native recursive filesystem observation.

      • #574 - Show a startup notice when deprecated custom_theme.syntax colors are translated to approximate Shiki scopes.

      • #572 - Restart stale session daemons during upgrades so rich STML comments reach live reviews.

      • #627 - Upgrade shell-quote against a denial-of-service flaw and keep file-watch refreshes responsive after missed events.

      • #630 - Document the supported scrollbox ref, stable row IDs, selection following, and pane geometry APIs for custom sidebars.

      • #596 - Generate the hunk-review skill from typed session commands and document missing note, markup, rationale, and author flags.

      • #652 - Skip inactive custom file-view preparation to reduce rerenders and retained memory in raw-diff reviews.

      • #655 - Keep delayed scroll alignment from changing the file selected by navigation.

      • #645 - Preserve one-line keyboard scrolling after clicking in the review stream.

      • #599 - Write state.json atomically and preserve unreadable state as state.json.corrupt.

      • #573 - Teach STML authors to compose within Hunk’s native note frame while preserving focused inset boxes.

      • #598 - Show Nix-aware update guidance instead of suggesting npm installation for the Nix package.

      Full Changelog : v0.17.7...v0.18.0-beta.0

    5. đź”— r/Harrogate Key lime pie in Harrogate rss

      Someone who really deserves a treat told me they’d always wondered what Key Lime pie was like. Any idea where I can find it in Harrogate?

      submitted by /u/Lumpyproletarian
      [link] [comments]

    6. đź”— New Music Releases Phish - 2026-08-01: Fenway Park, Boston, MA, USA rss

      Phish - a new release is available:

      • 2026-08-01: 2026-08-01: Fenway Park, Boston, MA, USA (Live)

      Amazon: Canada | Deutschland | France | United Kingdom | United States

      Visit muspy for more information.