Latest Posts (20 found)

Re-architecting End-host Networking with CXL: Coherence, Memory, and Offloading

Re-architecting End-host Networking with CXL: Coherence, Memory, and Offloading Houxiang Ji, Yifan Yuan, Yang Zhou, Ipoom Jeong, Ren Wang, Saksham Agarwal, and Nam Sung Kim MICRO'25 This paper is the third one that I’ve posted about which deals with the subtleties of interfacing a NIC and a host CPU. Here are links to the previous posts on this subject: Disentangling the Dual Role of NIC Receive Rings CEIO vs rxBisect: Fixing DDIO’s Leaky DMA Problem The authors bring a new hammer to the construction site: CXL , which offers some interesting efficiencies and simplifications. This paper shows how CXL can address two specific problems with the HW/SW interface of a typical PCIe NIC: After the host prepares a packet to be transmitted, it notifies the NIC with a MMIO write. This MMIO write is expensive because it introduces serialization into the host processor pipeline. When the NIC sends a received packet to the host, ideally it would write data to the LLC rather than host DRAM. However, if the host CPU cannot keep up, then the NIC should have a graceful fallback. CXL Type-1 devices are asymmetric: the device has coherent access to host memory, but the host does not have coherent access to device memory. Practically speaking, both packet descriptors and packet payloads must still be stored in host memory (no change from PCIe based NICs). Because the NIC has coherent access to host memory, it can safely prefetch receive descriptors (RxDs) into an on-NIC cache. When a packet arrives, the NIC can grab a descriptor from the cache and thus avoid an expensive host memory read to determine where to write packet data. If the host CPU updates a RxD after the NIC has prefetched it, the CXL cache coherence protocol will notify the NIC that it must invalidate its cached data. Coherence also enables the tail pointers for transmit ring buffers to be safely stored in host memory. The host networking stack can update a tail pointer with a regular store instruction (rather than an MMIO write). The NIC can continually poll this value, using coherent reads. If the tail index pointer has not been updated since the last poll, the NIC will read a cached value and not generate any PCIe traffic. CXL Type-2 NICs allow packets and descriptors to be stored in NIC memory. The host CPU can cache data read from the NIC, as the NIC will generate the necessary coherence traffic when it reads or writes this data. The design space (what data goes into what memory) is large, and the results section has numbers for many possible configurations. Section 5.3 of the paper describes how a type-2 NIC can intelligently use the CXL operation to write received packet data directly into the host LLC. This is similar to DDIO (described in the two papers linked at the top of this post), but the key difference is that the NIC is in the driver’s seat. The CEIO paper proposes monitoring LLC usage and falling back to storing received packets in DRAM local to the NIC if the LLC is too full. With CXL, the NIC has the option to write data to host memory directly (bypassing the LLC), thus avoiding the need for DRAM attached to the NIC. The authors implemented a CXL NIC on an Altera FPGA. They compared results against an nVidia BlueField-3 PCIe NIC. Fig. 10 compares loopback latency for the two devices, normalized to the BlueField-3 latency (lower is better) for a variety of CXL configurations. Source: https://dl.acm.org/doi/pdf/10.1145/3725843.3756102 Dangling Pointers One fact I took away from this paper is that CXL coherence messages are much cheaper than MMIOs and interrupts. Burning a CPU core polling a memory location seems wasteful to me. It would be nice if that CPU core could at least go into a low power state until a relevant coherence message arrives. Thanks for reading Dangling Pointers! Subscribe for free to receive new posts and support my work. After the host prepares a packet to be transmitted, it notifies the NIC with a MMIO write. This MMIO write is expensive because it introduces serialization into the host processor pipeline. When the NIC sends a received packet to the host, ideally it would write data to the LLC rather than host DRAM. However, if the host CPU cannot keep up, then the NIC should have a graceful fallback.

0 views

Microsoft and Software Survival

Listen to this post : One way to track the AI era, starting with the November 2022 launch of ChatGPT, is by which Big Tech company was, at a particular point in time, thought to be most threatened. At the beginning everyone — including yours truly — was concerned about Google and the potential disruption of Search. Then, early last year , it was Apple’s turn , as its more intelligent Siri stumbled so badly it didn’t even launch. By the fall it was Meta’s in the crosshairs , as the company completely relaunched its AI efforts as Llama hit a wall. Now it’s Microsoft’s turn, which is a bit of a full circle moment, given that the company was thought to be the biggest winner from ChatGPT in particular, thanks to its partnership with OpenAI. I wrote in early 2023 in AI and the Big Five : Microsoft, meanwhile, seems the best placed of all. Like AWS it has a cloud service that sells GPUs; it is also the exclusive cloud provider for OpenAI. Yes, that is incredibly expensive, but given that OpenAI appears to have the inside track to being the AI epoch’s addition to this list of top tech companies, that means that Microsoft is investing in the infrastructure of that epoch. Bing, meanwhile, is like the Mac on the eve of the iPhone: yes it contributes a fair bit of revenue, but a fraction of the dominant player, and a relatively immaterial amount in the context of Microsoft as a whole. If incorporating ChatGPT-like results into Bing risks the business model for the opportunity to gain massive market share, that is a bet well worth making. The latest report from The Information , meanwhile, is that GPT is eventually coming to Microsoft’s productivity apps. The trick will be to imitate the success of AI-coding tool GitHub Copilot (which is built on GPT), which figured out how to be a help instead of a nuisance (i.e. don’t be Clippy!). What is important is that adding on new functionality — perhaps for a fee — fits perfectly with Microsoft’s subscription business model. It is notable that the company once thought of as a poster child for victims of disruption will, in the full recounting, not just be born of disruption, but be well-placed to reach greater heights because of it. I do, I must admit, post that excerpt somewhat sheepishly, as much of it seems woefully shortsighted: All of these factors — plus the fact that Azure growth came in a percentage point lower than expected — contributed to one of the worst days in stock market history. From Bloomberg last week: Microsoft Corp. shares got caught up in a selloff Thursday that wiped out $357 billion in value, second-largest for a single session in stock market history. The software giant’s stock closed down 10%, its biggest plunge since March 2020, following Microsoft’s earnings after the bell Wednesday, which showed record spending on artificial intelligence as growth at its key cloud unit slowed. The only bigger one-day valuation destruction was Nvidia Corp.’s $593 billion rout last year after the launch of DeepSeek’s low-cost AI model. Microsoft’s move is larger than the market capitalizations of more than 90% of S&P 500 Index members, according to data compiled by Bloomberg… The selloff comes amid heightened skepticism from investors that the hundreds of billions of dollars Big Tech is spending on AI will eventually pay off. Microsoft’s results showed a 66% rise in capital expenditures in its most recent quarter to a record $37.5 billion, while growth at its closely tracked Azure cloud-computing unit slowed from the prior quarter. I laid out my base case for Big Tech back in 2020 in The End of the Beginning , arguing that the big tech companies would be the foundation on which future paradigms would be built; is Microsoft the one that might crack? It can, when it comes to vibe coding, be difficult to parse the hype on X from the reality on the ground; what is clear is the trajectory. I have talked to experienced software engineers who will spend 10 minutes complaining about the hype and all of the shortcomings of Claude Code or OpenAI Codex, only to conclude by admitting that AI just helped them write a new feature or app that they never would have otherwise, or would have taken far longer to do than it actually did. The beauty of AI writing code is that it is a nearly perfect match of probabilistic inputs and deterministic outputs: the code needs to actually run, and that running code can be tested and debugged. Given this match I do think it is only a matter of time before the vast majority of software is written by AI, even if the role of the software architect remains important for a bit longer. That, then, raises the most obvious bear case for any software company: why pay for software when you can just ask AI to write your own application, perfectly suited to your needs? Is software going to be a total commodity and a non-viable business model in the future? I’m skeptical, for a number of reasons. First, companies — particularly American ones — are very good at focusing on their core competency, and for most companies in the world, that isn’t software. There is a reason most companies pay other companies for software, and the most fundamental reason to do so won’t change with AI. Second, writing the original app is just the beginning: there is maintenance, there are security patches, there are new features, there are changing standards — writing an app is a commitment to a never-ending journey — a journey, to return to point one, that has nothing to do with the company’s core competency. Third, selling software isn’t just about selling code. There is support, there is compliance, there are integrations with other software, the list of what is actually valuable goes far beyond code. This is why companies don’t run purely open source software: they don’t want code, they want a product, with everything that entails. Still, that doesn’t mean the code isn’t being written by AI: it’s the software companies themselves that will be the biggest beneficiaries of and users of AI for writing code. In other words, on this narrow question of AI-written code, I would contend that software companies are not losers, but rather winners: they will be able to write more code more efficiently and quickly. When the Internet first came along it seemed, at first glance, a tremendous opportunity for publishers: suddenly their addressable market wasn’t just the geographic area they could deliver newspapers to, but rather the entire world! In fact, the nature of the opportunity was the exact opposite; from 2014’s Economic Power in the Age of Abundance : One of the great paradoxes for newspapers today is that their financial prospects are inversely correlated to their addressable market. Even as advertising revenues have fallen off a cliff — adjusted for inflation, ad revenues are at the same level as the 1950s — newspapers are able to reach audiences not just in their hometowns but literally all over the world. The problem for publishers, though, is that the free distribution provided by the Internet is not an exclusive. It’s available to every other newspaper as well. Moreover, it’s also available to publishers of any type, even bloggers like myself. To be clear, this is absolutely a boon, particularly for readers, but also for any writer looking to have a broad impact. For your typical newspaper, though, the competitive environment is diametrically opposed to what they are used to: instead of there being a scarce amount of published material, there is an overwhelming abundance. More importantly, this shift in the competitive environment has fundamentally changed just who has economic power. The power I was referring to was Google; this Article was an articulation of Aggregation Theory a year before I coined the term. The relevance to AI-written code, however, is not necessarily about Aggregators, but rather about inputs. Specifically, what changed for publishers is that the cost of distribution went to zero: of course that was beneficial for any one publisher, but it was disastrous for publishers as a collective. In the case of software companies, the input that is changing is the cost of code: it’s not going completely to zero, at least not yet — you still need a managing engineer, for one, and tokens, particularly for leading edge models actually capable of writing usable code, have significant marginal costs — but the relative cost is much lower, and the trend is indeed towards zero. If you want to carry this comparison forward, this is an argument against there even being a market for software in the long run. After all, the most consumed form of content on the Internet today, three decades on, is in fact user-generated content, which you could analogize to companies having AI write their own software. That seems a reasonable bet for 2056 — if we even have companies then ( I think we will ). In the shorter-term, however, the real risk I see for software companies is the fact that while they can write infinite software thanks to AI, so can every other software company. I suspect this will completely upend the relatively neat and infinitely siloed SaaS ecosystem that has been Silicon Valley’s bread-and-butter for the last decade: identify a business function, leverage open source to write a SaaS app that addresses that function, hire a sales team, do some cohort analysis, IPO, and tell yourself that you were changing the world. The problem now, however, is that while businesses may not give up on software, they don’t necessarily want to buy more — if anything, they need to cut their spending so they have more money for their own tokens. That means the growth story for all of these companies is in serious question — the industry-wide re-rating seems completely justified to me — which means the most optimal application of that new AI coding capability will be to start attacking adjacencies, justifying both your existence and also presenting the opportunity to raise prices. In other words, for the last decade the SaaS story has been about growing the pie: the next decade is going to be about fighting for it, and the model makers will be the arms dealers. While this battle is happening, there will be another fundamental shift taking place: yes, humans will be using software, at least for a while, but increasingly so will agents. What isn’t clear is who will be creating the agents: I expect every SaaS app to have their own agent, but that agent will definitionally be bound by the borders of the application (which will be another reason to expand the app into adjacent areas). Different horizontal players, meanwhile, will be making a play to cover broader expanses of the business, with the promise of working across multiple apps. Microsoft is one of those horizontal layers, and the company’s starting point for agents is what it is calling Work IQ; here is how CEO Satya Nadella explained Work IQ on the company’s earnings call : Work IQ takes the data underneath Microsoft 365 and creates the most valuable stateful agent for every organization. It delivers powerful reasoning capabilities over people, their roles, their artifacts, their communications and their history and memory all within an organization security boundary. Microsoft 365 Copilot’s accuracy and latency powered by Work IQ is unmatched, delivering faster and more accurate work grounded results than competition, and we have seen our biggest quarter-over-quarter improvement in response quality to date. This has driven record usage intensity with average number of conversations per user doubling year-over-year. This feels like the right layer for Microsoft, given the company’s ownership of identity. Active Directory is one of the most valuable free products of all time: it was the linchpin via which Microsoft tied together all of its enterprise products and services, first driving upgrades up and down the stack, and later underpinning its per-seat licensing business model. That the company sees its understanding of the individual worker and all of his or her artifacts, permissions, etc. as the obvious place to build agents makes sense. There’s one big problem with this starting point, however: it’s shrinking. Owning and organizing a company by identity is progressively less valuable if the number of human identities starts to dwindle — and, with a per-seat licensing model, you make less money. That, by extension, means that Microsoft should feel a significant amount of urgency when it comes to fighting the adjacency battles I predicted above. First, directly incorporating more business functions into Microsoft’s own software suite will make Microsoft’s agents more capable. Secondly, absorbing more business functions into Microsoft’s software offering will let the company charge more. Third, the larger Microsoft’s surface area, the more power it will have to compel other software makers to interface with its agents, increasing their capability. This pressure explains the choices Microsoft made that led to its Azure miss in particular. Microsoft was clear that, once again, demand exceeded supply. CFO Amy Hood said in her prepared remarks: Our customer demand continues to exceed our supply. Therefore, we must balance the need to have our incoming supply better meet growing Azure demand with expanding first-party AI usage across services like M365 Copilot and GitHub Copilot, increasing allocations to R&D teams to accelerate product innovation and continued replacement of end-of-life server and networking equipment. She further explained in the Q&A section that Azure revenue was directly downstream from Microsoft’s own capacity allocation: I think it’s probably better to think about the Azure guidance that we give as an allocated capacity guide about what we can deliver in Azure revenue. Because as we spend the capital and put GPUs specifically, it applies to CPUs, the GPUs more specifically, we’re really making long-term decisions. And the first thing we’re doing is solving for the increased usage in sales and the accelerating pace of M365 Copilot as well as GitHub Copilot, our first-party apps. Then we make sure we’re investing in the long-term nature of R&D and product innovation. And much of the acceleration that I think you’ve seen from us and products over the past a bit is coming because we are allocating GPUs and capacity to many of the talented AI people we’ve been hiring over the past years. Then, when you end up, is that, you end up with the remainder going towards serving the Azure capacity that continues to grow in terms of demand. And a way to think about it, because I think, I get asked this question sometimes, is if I had taken the GPUs that just came online in Q1 and Q2 in terms of GPUs and allocated them all to Azure, the KPI would have been over 40. And I think the most important thing to realize is that this is about investing in all the layers of the stack that benefit customers. And I think that’s hopefully helpful in terms of thinking about capital growth, it shows in every piece, it shows in revenue growth across the business and shows as OpEx growth as we invest in our people. Nadella called this a portfolio approach: Basically, as an investor, I think when you think about our capital and you think about the gross margin profile of our portfolio, you should obviously think about Azure. But you should think about M365 Copilot and you should think about GitHub pilot, you should think about Dragon Copilot, Security Copilot. All of those have a gross margin profile and lifetime value. I mean if you think about it, acquiring an Azure customer is super important to us, but so is acquiring an M365 or a GitHub or a Dragon Copilot, which are all by the way incremental businesses and TAMs for us. And so we don’t want to maximize just 1 business of ours, we want to be able to allocate capacity, while we’re sort of supply constrained in a way that allow us to essentially build the best LTV portfolio. That’s on one side. And the other one that Amy mentioned is also R&D. I mean you got to think about compute is also R&D, and that’s sort of the second element of it. And so we are using all of that, obviously, to optimize for the long term. The first part of Nadella’s answer is straightforward: Microsoft makes better margins and has more lifetime value from its productivity applications than it does from renting out Azure capacity, so investors should be happy that it is allocating scarce resources to that side of the business. And, per the competition point above, this is defensive as well: if Microsoft doesn’t get AI right for its own software then competitors will soon be moving in. The R&D point, however, is also critical: Microsoft also needs to be working to expand its offering, and increasingly the way to do that is going to be by using AI to write that new software. That takes a lot of GPUs — so many that Microsoft simply didn’t have enough to meet the 40% Azure growth rate that Wall Street expected. I think it was the right decision. There are some broader issues raised by Microsoft’s capacity allocation. First, we have the most powerful example yet of the downside of having insufficient chips. Hood was explicit that Microsoft could have beat Wall Street’s number if they had enough GPUs; the fact they didn’t was a precipitating factor in losing $357 billion in value. How much greater will the misses be a few years down the road when AI demand expands even further, particularly if TSMC both remains the only option and continues to be conservative in its CapEx ? Secondly, however, it’s fair for Azure customers to feel a bit put out by Microsoft’s decision to favor itself. It reminds me of the pre-TSMC world, when fabs were a part of Integrated Device Manufacturers like Intel or Texas Instruments. If you wanted to manufacture a chip you could contract for space on their lines, but you were liable to lose that capacity if the fab needed it for their own products; TSMC was unique in that they were a pure play foundry: their capacity was solely for their customers, who they weren’t going to compete with. This isn’t the case with Azure: Microsoft has first dibs, and then OpenAI, and then everyone else, and that priority order was made clear this quarter. Moreover, it’s fair to assume that Amazon and Google will make similar prioritization decisions. I didn’t, before writing this article, fully grok the potential for neoclouds, or Oracle for that matter, but the value proposition of offering a pure play token foundry might be larger than I appreciated. All that noted, the safest assumption is that Microsoft, like the rest of Big Tech, will figure this out. Some software may be dead, but not all of it, at least not yet, and the biggest software maker of them all is — thanks in part to that size — positioned to be one of the survivors. It’s just going to need a lot of compute, not only for its customers, but especially for itself. OpenAI is still Azure’s biggest customer, but the fact that the maker of ChatGPT represents 45% of Azure’s Remaining Performance Obligations (RPO) is now seen as a detriment by the market. Bing was briefly interesting when it contained Sydney ; Microsoft quickly squashed what remains the single most compelling AI experience I’ve had and, one could make the case, Bing’s growth prospects. All of Microsoft’s products have a CoPilot of some sort; it’s not clear how well any of them work, and both Claude and OpenAI are attacking the professional productivity space. Microsoft 365 CoPilot has 15 million paying customers, but (1) that’s a tiny fraction of Microsoft 365’s overall customer base and (2) the rise of agents raises serious questions about the long-term viability of the per-seat licensing model on which Microsoft’s productivity business is built.

0 views

January, 2026

This is not, if I'm being honest, the simple, structured start to 2026 that I had in mind. Rigor and early workouts have been replaced by pulled floors and sheets of ice. After spending a lovely week in Park City with the Third South folks, we came back home and had 12 hours of respite until, board by board, our floors were pulled up for replacement. The good news — it's always important to focus on the good news — is that the damage was less extensive than we expected. The bad news, because there is always bad news to go along with good news, is that this week we learned that we would be hit by an ice storm. And so, we decamped at my parents' house, the same one that I spent my formative years reading Redwall and playing Final Fantasy even though my parents thought I was asleep. Haley and I are, to a fault, creatures of habit and routine, and it would be a lie to say that the past two weeks haven't been draining in the same way a day spent in transit is draining. We miss our house. We miss our things. For Lucy, though, this has been a permanent vacation — a whirlwind of delight that started in Utah and has extended without ceasing. In the span of two weeks, she went from walking, if she remembered about it, to quite literally sprinting through the house, chasing anything and everything she wanted. It is fascinating to watch a toddler learn about the world. There is a transparency to them, and her effortless and endless delight in discovering the cause and effect of things that I have cynically grown to consider mundane — such as a light switch — more than makes up for a little bit of inclement weather. I haven't been working much. I haven't been writing much. I haven't been reading much. I have been watching my daughter discover the world and run headlong into it, hands outstretched. | Post | Genre | | ------------------------------------------------------------------------------------------------ | ---------- | | Tabula Rasa (Vol. 1) | Book | | Levels of the Game | Book | | A Shadow Intelligence | Book | | Cameraperson | Film | | Eternity | Film | | Go | Film | | Tinker Tailor Soldier Spy (2011) | Film | | The Pigeon Tunnel | Film | | Ocean's Twelve | Film | | Uses (January 2026) | Personal | | Terragon, Conductor, PyCharm | Technology | | Migrating to PlanetScale | Technology | | Refactoring a product is tricky | Technology | | Every model should have a notes field | Technology | | Pure strategy | Technology | | The Diplomat (Season 2) | Television |

0 views

Please Don’t Feed the Scattered Lapsus ShinyHunters

A prolific data ransom gang that calls itself Scattered Lapsus ShinyHunters (SLSH) has a distinctive playbook when it seeks to extort payment from victim firms: Harassing, threatening and even swatting executives and their families, all while notifying journalists and regulators about the extent of the intrusion. Some victims reportedly are paying — perhaps as much to contain the stolen data as to stop the escalating personal attacks. But a top SLSH expert warns that engaging at all beyond a “We’re not paying” response only encourages further harassment, noting that the group’s fractious and unreliable history means the only winning move is not to pay. Image: Shutterstock.com, @Mungujakisa Unlike traditional, highly regimented Russia-based ransomware affiliate groups, SLSH is an unruly and somewhat fluid English-language extortion gang that appears uninterested in building a reputation of consistent behavior whereby victims might have some measure of confidence that the criminals will keep their word if paid. That’s according to Allison Nixon , director of research at the New York City based security consultancy Unit 221 . Nixon has been closely tracking the criminal group and individual members as they bounce between various Telegram channels used to extort and harass victims, and she said SLSH differs from traditional data ransom groups in other important ways that argue against trusting them to do anything they say they’ll do — such as destroying stolen data. Like SLSH, many traditional Russian ransomware groups have employed high-pressure tactics to force payment in exchange for a decryption key and/or a promise to delete stolen data, such as publishing a dark web shaming blog with samples of stolen data next to a countdown clock, or notifying journalists and board members of the victim company. But Nixon said the extortion from SLSH quickly escalates way beyond that — to threats of physical violence against executives and their families, DDoS attacks on the victim’s website, and repeated email-flooding campaigns. SLSH is known for breaking into companies by phishing employees over the phone, and using the purloined access to steal sensitive internal data. In a January 30 blog post , Google’s security forensics firm Mandiant said SLSH’s most recent extortion attacks stem from incidents spanning early to mid-January 2026, when SLSH members pretended to be IT staff and called employees at targeted victim organizations claiming that the company was updating MFA settings. “The threat actor directed the employees to victim-branded credential harvesting sites to capture their SSO credentials and MFA codes, and then registered their own device for MFA,” the blog post explained. Victims often first learn of the breach when their brand name is uttered on whatever ephemeral new public Telegram group chat SLSH is using to threaten, extort and harass their prey. According to Nixon, the coordinated harassment on the SLSH Telegram channels is part of a well-orchestrated strategy to overwhelm the victim organization by manufacturing humiliation that pushes them over the threshold to pay. Nixon said multiple executives at targeted organizations have been subject to “swatting” attacks, wherein SLSH communicated a phony bomb threat or hostage situation at the target’s address in the hopes of eliciting a heavily armed police response at their home or place of work. “A big part of what they’re doing to victims is the psychological aspect of it, like harassing executives’ kids and threatening the board of the company,” Nixon told KrebsOnSecurity. “And while these victims are getting extortion demands, they’re simultaneously getting outreach from media outlets saying, ‘Hey, do you have any comments on the bad things we’re going to write about you.” Nixon argues that no one should negotiate with SLSH because the group has demonstrated a willingness to extort victims based on promises that it has no intention to keep. Nixon points out that all of SLSH’s known members hail from The Com , shorthand for a constellation of cybercrime-focused Discord and Telegram communities which serve as a kind of distributed social network that facilitates instant collaboration . Nixon said Com-based extortion groups tend to instigate feuds and drama between group members, leading to lying, betrayals, credibility destroying behavior, backstabbing, and sabotaging each other. “With this type of ongoing dysfunction, often compounding by substance abuse, these threat actors often aren’t able to act with the core goal in mind of completing a successful, strategic ransom operation,” Nixon said. “They continually lose control with outbursts that put their strategy and operational security at risk, which severely limits their ability to build a professional, scalable, and sophisticated criminal organization network for continued successful ransoms – unlike other, more tenured and professional criminal organizations focused on ransomware alone.” Intrusions from established ransomware groups typically center around encryption/decryption malware that mostly stays on the affected machine. In contrast, Nixon said, ransom from a Com group is often structured the same as violent sextortion schemes against minors, wherein members of The Com will steal damaging information, threaten to release it, and “promise” to delete it if the victim complies without any guarantee or technical proof point that they will keep their word. She writes: The SLSH group steals a significant amount of corporate data, and on the day of issuing the ransom notification, they line up a number of harassment attacks to be delivered simultaneously with the ransom. This can include swatting, DDOS, email/SMS/call floods, negative PR, complaints sent to authority figures in and above the company, and so on. Then, during the negotiation process, they lay on the pressure with more harassment- never allowing too much time to pass before a new harassment attack. What they negotiate for is the promise to not leak the data if you pay the ransom. This promise places a lot of trust in the extorter, because they cannot prove they deleted the data, and we believe they don’t intend to delete the data. Paying provides them vital information about the value of the stolen dataset which we believe will be useful for fraud operations after this wave is complete. A key component of SLSH’s efforts to convince victims to pay, Nixon said, involves manipulating the media into hyping the threat posed by this group. This approach also borrows a page from the playbook of sextortion attacks, she said, which encourages predators to keep targets continuously engaged and worrying about the consequences of non-compliance. “On days where SLSH had no substantial criminal ‘win’ to announce, they focused on announcing death threats and harassment to keep law enforcement, journalists, and cybercrime industry professionals focused on this group,” she said. An excerpt from a sextortion tutorial from a Com-based Telegram channel. Image: Unit 221B. Nixon knows a thing or two about being threatened by SLSH: For the past several months, the group’s Telegram channels have been replete with threats of physical violence against her, against Yours Truly, and against other security researchers. These threats, she said, are just another way the group seeks to generate media attention and achieve a veneer of credibility, but they are useful as indicators of compromise because SLSH members tend to name drop and malign security researchers even in their communications with victims. “Watch for the following behaviors in their communications to you or their public statements,” Nixon said. “Repeated abusive mentions of Allison Nixon (or “A.N”), Unit 221B, or cybersecurity journalists—especially Brian Krebs—or any other cybersecurity employee, or cybersecurity company. Any threats to kill, or commit terrorism, or violence against internal employees, cybersecurity employees, investigators, and journalists.” Unit 221B says that while the pressure campaign during an extortion attempt may be traumatizing to employees, executives, and their family members, entering into drawn-out negotiations with SLSH incentivizes the group to increase the level of harm and risk, which could include the physical safety of employees and their families. “The breached data will never go back to the way it was, but we can assure you that the harassment will end,” Nixon said. “So, your decision to pay should be a separate issue from the harassment. We believe that when you separate these issues, you will objectively see that the best course of action to protect your interests, in both the short and long term, is to refuse payment.”

0 views
Heather Burns Yesterday

the other Turing test

Everything which was behind us is in front of us. It's up to you how you respond.

0 views
ava's blog Yesterday

small thoughts part 7

In ‘ small thoughts ’ posts, I’m posting a collection of short thoughts and opinions that don’t warrant their own post. :) Seeing parallels between my mother and me. She used to throw herself into work, regardless of anything. Didn’t wanna call in sick, still usually doesn’t. Used to pride herself on how much she works and that she’s even driving while crying because her wrists hurt so much from her rheumatoid arthritis. It’s irresponsible. I always looked at her like: If I acted like you, I’d be sick too. She was bottling everything up, having no healthy coping mechanisms, pushing herself too far, not giving herself proper rest, angry about all kinds of stuff. It can’t be healthy. Your body is telling you to stop. I’m already doing loads of things better than my mum. More boundaries, healthier coping mechanisms, more rest, not afraid to say no, better nutrition, more exercise, earlier treatment, less stressful job, supportive partner. But I see we are the same in that we never feel like we’re doing too much. We always think that we’re doing too little, that there’s always room for more, and that we’re probably slacking and being lazy. But turns out we do more than many healthy people do, while chronically ill. I understand my mum better now in that regard. Illnesses like that of course can be exasperated by bad lifestyle, but just lying around more doesn’t make it go away. It can even make it worse mentally. At least work offers distraction and a way to farm praise and feel good about oneself instead of just a sicko who should die. No one wants to feel like a burden, and at the same time, chronic illness makes it so obvious that you’re fragile and have limited time in life. So there’s this push to get everything done and reach new heights as soon as possible because who knows when it’ll get worse, who knows when it’ll hospitalize me again, who knows how long I have left, and a push to say: I might be super sick, but I’m not a bummer, not a liability, not a waste of money, see how productive and fun I can be regardless. I can serve as inspiration porn for healthy people! I’m not like those sick people who are just sitting at home, so pick me! So there’s this pressure and drive to go twice or thrice as hard. Something making me uncomfortable for a while now is: I feel like lots of things online that should be unmonetizable, cozy, intimate, authentic etc. still get twisted to benefit someone financially or career-wise in an overt way. It makes me want to retreat to the offline at times. It is highly unlikely that you’ll attend a private, casual party in real life and someone else will advertise it online to get as many people to join it as well, just to include in their CV that they’ve held events with this inflated number of attendants that they brought in, because it would benefit their career in event management. People will do that online though. They’ll make a casual retro website, and a year later include it as reference for coding knowledge or a web design side hustle. They’ll make videos for fun, find an audience and suddenly get a sponsor, have a management team and a content strategy. They grow a forum or channel, then retroactively use it to bolster their CV in social media management. Code a project for a small group as a hobby, then suddenly promote it and intend to monetize it. There’s a need for some people to grow anything into something professional because they’ve internalized growth is good, and more people in a space they control means more opportunities and potential sources of income or influence. More eyeballs means more sales. I fear they learned that from influencers and it leaves a weird taste. The mindset: Growth to stroke the ego, growth so more people may take interest in their online presence and give sponsorships, growth for the career and side hustle, growth because in the rare event they’ll write a book or start a podcast or a YT channel or a blog, more people are willing to consume it, … I’m tired of always somehow being on someone’s turf that starts to turn into a monetization object, friend turned potential future customer or follower, or power trip. Reminds me of a Discord server I used to be on ages ago where the owner was basically never active anymore in the server but promoted it elsewhere, and one reason why he didn’t wanna give admin to someone else was the clout a big Discord server brings and the vague feeling that you could somehow leverage this one day, just like accounts always wrestle with the idea of whether they have to “use this opportunity” when they blow up. He had no interest in it or the members, but was attached to the numbers. I don’t wanna be where someone opportunistic thinks “This could come in handy one day” or “I should be rewarded for building this up”. or “More is always better”. or that uses an admin position as something to feel important about. It ruins a space. I’ve seen online spaces with 100 members still feel like a casual chat room where no one is elevates themselves as anything but another chatter, while I’ve also seen ones with 15 members already feel like a forced space where someone “runs the show” and has a clear path they follow and you are just mere numbers to fill spots. You won’t have a photo album, a highlight reel of your life online once you’re old. No great aesthetic shots, quotes, candid beautiful videos with great music in a huge backlog. Until then, the services you use will have significantly changed. They have already changed a couple times in this little time and shown that they don’t give a damn about your content. Old content is already missing sound, others are muted due to copyright and licensing issues of the chosen songs. The format and ratio changes. Features get removed. When you’re old, your oldest content will be 60 years old or older, unavailable, lost due to deletion of the service, looking ugly, muted, erroring out, unplayable. Please don’t delude yourself that you are building something that lasts on these platforms. Reply via email Published 02 Feb, 2026

0 views
./techtipsy Yesterday

Meet the Garbage PC

This is the Garbage PC. Not too long ago, I received a half-broken Dell Inspiron N5110, sporting 6 GB of RAM, a dual core Intel i3-2110M, and an unsupported NVIDIA GPU of some sort. One of the hinges was loose from the case because it was screwed into plastic (common issue for these types of laptops), the touchpad did not work, and to insert a drive into it, you had to disassemble the whole machine. I’m quite confident that I’ve worked on this laptop model in a very distant past, around 2012-2013, and I remember it well because during the disassembly plastic bits were falling off everywhere and the right hinge was broken in exactly the same way. I’ve always wanted to take a half-broken laptop and to mount it on some acrylic panels (plexiglass) using brass standoffs. I love how bare PCB-s look. They’re just so damn cool, and I can’t be the only one who thinks this way, right? I also get a good feeling out of taking trash/obsolete parts and making them useful once again. This laptop was destined for the e-waste pile, which meant that it was a fantastic candidate to try this idea on. The main constraint in this project was time. I’m a parent, I have a job, and sometimes between all that I like to rest, so the amount of available time for this project was about 8 hours spread across a month. I also lack proper tooling to do a good job, so this was achieved using whatever I had available, mainly a cordless jigsaw and a hand drill. On the upside, this means that if I can do it, then you can likely do it as well! This laptop turned out to be a total pain to work on. During initial testing, it was very clear that the laptop needed a good thermal paste and pads replacement, as it tried to overheat playing casual videos off of YouTube. After I disassembled the laptop to bare essentials and put it together as a test run for the “mount it on acrylic panel” idea, the extension board containing two USB ports and the Ethernet port just stopped working. I probably broke something, but annoying nevertheless. On the positive side, the overall size of the build was smaller as a result of this happy little accident. Using this laptop via the HDMI output only also turned out to be an unnecessary headache. LibreELEC did not play well with it, often resulting in a blank screen, and on Fedora Workstation 43, there was a “ghost” display somewhere that always showed up on the display settings view. So did the internal display, even when it was disconnected. This caused an issue when trying to get Fedora installed on this machine, as the installation UI would be placed on a screen that was not the HDMI output one that I was actually using. This issue can be mitigated similar to my LattePanda V1 adventure by disabling video outputs completely. For this laptop, I modified kernel parameters via and added the following kernel parameters: Yes, it’s possible to modify the display setup on your desktop environment of choice to disable certain outputs that way, but using kernel parameters ensures that if you change monitors, you won’t have to do that all over again. To make this whole build even more garbage-tier, I used an 256GB SATA SSD with 5 known bad blocks. I sourced a large 4mm thick plexiglass panel from a hardware store, as that seemed to be the most accessible place where I can get one. In Estonia, these types of panels are often sold in the gardening sections of general hardware stores. For attaching the motherboard to the board, I sourced an assortment of M2.5 brass standoffs and screws, and multiple sets in case I need more of a specific height (turned out to be a good call on my part). I chose M2.5 because the laptop used screws of that size, and this size is common in the world of Raspberry Pi and other SBC-s, which can be handy for any future dumb ideas experiments. To mark the positions on the plexiglass, I put the motherboard assembly on it, marked some good spots with an awl 1 , and then drilled holes using a hand drill and 2.5mm drill bit. I also sourced heat inserts so that I can melt them into the plexiglass assembly, but those didn’t work out very well. I used my Pinecil soldering iron to push these in to the 2mm pre-drilled holes that I set up for these, but I had alignment issues and the threads ended up getting gunked up by the melted remains of the plexiglass, so I could not screw any brass standoffs in there. I tried to be very careful with getting the drill holes to line up, and it went mostly alright. My recommendation here is to be precise, and don’t screw everything tight before you’ve got screws and standoffs lined up for all planned holes, otherwise you lose the option of wiggling things a bit to get them to line up. The standoffs and screws were screwed on tight enough to keep things in place, but not too tight to avoid cracking. For the other panel, I cut out a similarily sized plexiglass panel, marked the holes again, and repeated the process. Since I was using a cordless jigsaw, I positioned the new piece so that the flat side of the plexiglass panel that I bought lined up with the other straight end on the existing assembly, because I will never get a good straight cut with a freehanded jigsaw. That worked out well enough. For the power button, I reused the small PCB that contains the power button and power LED-s from the original case. To house that, I drilled a small hole with 1cm diameter to slip the ribbon cable in, and I used small pieces of 3M VHB double-sided tape 2 to secure it to the panel. And there you have it, the garbage PC. The shine of the plexiglass does a fantastic job of bringing out the beauty of the motherboard and all its components. Standoffs leave plenty of room for the machine to breathe. Since the extension board is missing, this build relies heavily on one USB port and one eSATA port that also supports USB connectivity. WiFi, Bluetooth, keyboard/mouse, it’s all over USB 2.0 ports. One thing that I have yet to do is to add a base to the build so that it does not tip over that easily. Double-sided tape plus a wooden trim piece might do the trick. This build is using parts that are about 15 years old. For context, that was when dubstep was popular, it was cool to hate on Justin Bieber, rage comics and bad memes were a thing, and the news in Europe were worried about Greece going bankrupt or something. That does mean that the performance on this machine is not great. The machine still runs warm, but not nearly as hot as before. In its stock form and before any thermal paste replacements, it ran about 85+°C, but now it doesn’t seem to ever hit 70°C. As a basic desktop PC, assuming that you’re not trying to run a 1440p or 4K display, the experience feels completely usable! If you’re thinking about setting this up as a media player PC, then you’re limited to H.264 playback. H.265 was just too much for this machine. If you use Kodi with Jellyfin, then it is luckily possible to enforce transcoding content to H.264, ensuring a smooth experience on the client side. I wish that this laptop supported a “power on with AC attach” type feature that turns the laptop on once the power adapter is connected, that would’ve made it more useful as a crappy little home server. If you don’t mind extended downtime during a power outage, then it can still do that job well enough, but it’s just something I was slightly annoyed with. The board has a small SATA port that can be converted to a normal SATA port, plus an eSATA port, making it perfectly plausible to add two drives to this and to totally turn it into a home server. I tried running Windows 11 on it once, but I tried to do that with the official installer and didn’t get past the “lol your hardware is too old” view. I know that you can remove that limitation, but given the 6GB of RAM and Windows 11 being awful with using resources, it was probably for the best to give up here. The fan is audible when doing things. I did in fact take it apart and added some silicon oil inside the center to give it a fighting chance and it did improve the acoustics, but it’s something to keep in mind if you’re doing similar projects with these old laptops. There does seem to be a way to control the fan by writing values to kernel module controls in , and if you overwrite the value often enough, like in a 0.1 second loop, then you can definitely overpower the BIOS fan control on this board. The control does not seem to be fine-tuned, it’s either off, on, or full speed, but at least you can get some control over the fan speed if you really need to. Alternatively, you can slap a huge heat sink on the CPU and GPU if you want to, and you should be getting away with it. The CPU throttles heavily once you hit 80°C while playing back video, so that seems to be the soft temperature ceiling for this laptop. Overall, I’m happy I did this project. There were way more obstacles and challenges associated with this project that I expected, but the end result looks cool, so that makes it worth it in my view. It was also a good trial run to work with plexiglass and brass standoffs, and I will very likely do something cooler in the future based on this experience. I hope that this inspires more people to reuse older hardware instead of just throwing it into the e-waste pile, especially with new computer parts sometimes experiencing price spikes due to the economy doing weird things. If you’ve built something similar, then do share a link to it (ideally in blog post format) and I will happily link to it here! this is the first time I actually have referred to this tool in English. What a weird word.  ↩︎ it’s good, but it smells like microplastics and cancer.  ↩︎ this is the first time I actually have referred to this tool in English. What a weird word.  ↩︎ it’s good, but it smells like microplastics and cancer.  ↩︎

0 views
Justin Duke Yesterday

The Hudsucker Proxy

When does an indulgence become sour? I ask this because indulgence is the word that most immediately comes to mind at the finish of this film. And largely in a negative way. Closer to flippancy than resplendence. And yet the same word can be leveled at the last film I watched. Ocean's 12. A movie which I thought, on the merits, was not exactly good, and yet I had a good time with it. It's a weird pair of films to compare. The filmmaker is perhaps less so; it's not unreasonable to consider Soderbergh and the Coens in the same relative stratosphere, both in terms of longevity and breadth of work. HudSucker Proxy was made very early on by the Coens. Ocean's 12 was made perhaps at the peak of Soderbergh's cache. Where and for this being such an early film in their canon, the technical achievement is remarkable. This film looks and feels beautiful and striking in a way that I've described as obvious, but not unwelcome. One of the reasons why, deep down, I love the Oceans film so much is because you get the very strong sense that Soderbergh is cooking up for you the most delicious and expensive meal in the world. It is a project where he is alchemizing his pleasures and giving them to you, letting you get swept a lot in the exact same way he would be, and that is very much not the goal of The Hudsucker Proxy. Frankly, it's difficult to tell what the goal of the film is beyond technical wonderment and perhaps a skewering of lesser film. One gets the sense that the Coens are making fun rather than having it. The pastiche here runs the gamut from boardroom drama to His Girl Friday, and speedruns the list of clichés, many of which are funny in isolation. The script is, if incoherent, extremely clever, peppered with one-liners and callbacks. But... you leave the movie with a kind of unfulfillment. The Coens can both be humanistic, but I simply do not care about any single member of this group. What's worse, I'm not sure I'm supposed to.

0 views
Justin Duke Yesterday

Brief notes on migrating to Postgres-backed jobs

It seems premature to talk about a migration that is only halfway done, even if it's the hard half that's done — but I think there's something useful in documenting the why and how of a transition while you're still in the thick of it, before the revisionist history of completion sets in. Early last year, we built out a system for running background jobs directly against Postgres within Django. This very quickly got abstracted out into a generic task runner — shout out to Brandur and many other people who have been beating this drum for a while. And as far as I can tell, this concept of shifting away from Redis and other less-durable caches for job infrastructure is regaining steam on the Rails side of the ecosystem, too. The reason we did it was mostly for ergonomics around graceful batch processing. It is significantly easier to write a poller in Django for stuff backed by the ORM than it is to try and extend RQ or any of the other task runner options that are Redis-friendly. Django gives you migrations, querysets, admin visibility, transactional guarantees — all for free, all without another moving part. And as we started using it and it proved stable, we slowly moved more and more things over to it. At the time of this writing, around half of our jobs by quantity — which represent around two-thirds by overall volume — have been migrated over from RQ onto this system. This is slightly ironic given that we also last year released django-rq-cron , a library that, if I have my druthers, we will no longer need. Fewer moving parts is the watchword. We're removing spindles from the system and getting closer and closer to a simple, portable, and legible stack of infrastructure.

1 views
Justin Duke Yesterday

LLM as advance team

My first foray into using git worktree-style development — spinning up multiple workspaces and having LLM agents attack different problems in parallel — was a failure. I found myself simultaneously exhausted and unproductive, the equivalent of doing a circuit course in Bean Boots. The entire thing felt good in the pernicious way increasingly familiar to developers using these sorts of tools, where you can delude yourself into believing that noise and diffs indicate forward progress, even though at the end of the day you've run a marathon and out of the twenty PRs you shipped, five of them are buggy and three of them are relevant to the actual important thing you should be doing. I am back using worktrees and having a very good time doing so — with a slightly different mindset, which is to treat them not as parallel agents but as an advance team . If I've got five or six things I know I want to do in a given focus block, the first thing I'll do is open up five or six different worktrees within Conductor and spend two or three minutes dictating via Aqua high-level goals and linking in any relevant Linear, Sentry, or Slack data. Then Opus goes off and whirs for thirty minutes, and I don't pay any attention until I decide it's time to pick up that task and that task only. What I find is never complete, but always useful. Bug fixes might have correctly diagnosed the root cause but implemented the fix or regression test in a way that I find clumsy. Feature branches might have done an awful job wiring together the architecture but given me a couple Storybooks that I can click around and better refine my thoughts with. Refactors give me a sense of the scope and a few regression tests that were missing. More often than not, the branch spun up by Conductor never even makes it to GitHub, let alone the main branch. It's purely a first draft from an overstimulated and undercompensated robotic junior colleague — but that is value additive. I couldn't tell you what the dollar amount of that value is, but right now it's certainly greater than zero. And the tax on my workflow is minimal at best.

0 views

Local Lean Workgroup Retro

I started learning formalized mathematics with Lean last year 1 , 2 , 3 , 4 . As I progressed beyond basics, it dawned on me that I need to start interacting with the broader community as Lean is rapidly evolving and beyond basic getting started guides there aren’t as many high-quality resources to learn solo. It could also be a great way to meet folks with similar interests and build more social connections. To that end I tried to start a local workgroup around Oct'25 details . I have never done anything like this before, so this is a small retro of how it went so far (in Jan'26) and what’s next.

0 views
Weakty 2 days ago

Lights of the cistern

Pid, pid, pad, pit, pad . In the dark went the sound of the cup. Pid, pid, pat, pad, pit, tup, tip, tap There went the cup, bumping into the bag. Rid, tid, pid, tid, pad, bump . shhhhap , went the bag, adjusted on Joanna's shoulders. She pulled it up, levitated by her thumbs alone and, thmp , dropped it back onto herself. Thp went the cup, clipped to the bag. In the mine, as in every mine, there is a minimum requisite echo; these sounds swirled behind her as she walked until they dropped to the ground like litter. Some sounds traversed ahead of her, like a light making way for her. They never came back. Never told her what way to actually go. tid, pid, pat . goes the sound of the small, dented cup of hers, hanging, forever rebounding off her pack, more audible than her own footsteps. By now, with all the time in and out of the mines, Joanna never noticed the sound of the cup, much less the other noises her or her gear might make. At the beginning, there was concern that it might betray her presence to unwelcome ears, but she had long ago dropped that fear. People were few and far between. Even more so, in the mines. Her last contact had been in spring. It was summer now. Her favourite time to be in the mines. Temperature perfect, she adored the darkness against the long days of summer overhead and out of sight, and of course, the sounds that her little tin cup made as she walked on, through the summer mine-air. tip, pid, pad, thp, baht . She came to a fork in the mine and looked at the two descending tunnels. No signage that she could discern, as usual. A cool draft coming from the path on the right and no sense of smell, wind or anything else from the left. She mostly walked in the dark. It was something she was so accustomed to that revealing any source of light in a place like this not only felt wasteful, but cruel to the space, to her eyes. She stood still in her silence and considered her choices. With no decision revealing itself (like it sometimes did), she made up her mind. Went the match. And the light of it exploded into the darkness. At junctures like this, though, some light, garish as it was, was worth it. Joanna walked closer to the wooden scaffolding bordering the two tunnels and slid her fingers along it gently. Her eyes traced the blinding light of her single match. There were no signs that carts had been employed in either of the tunnels, but she couldn't be sure of that from the entry alone. She saw no signs of tracks or other infrastructure. These were likely walking mines. They could be connected, circling an underground lake. They could both surface to the above world. They could squirrel off in completely different directions. Anything was possible. Standing back now and eyeing both, Joanna knew the left was the correct choice. Despite the draft, which was always compelling in its promise of movement and circulation, she knew the path to the right would not work. The movement of air usually promised a path out, back up, to the world. That was not in the plan. She stared to the right, as if she could see the patterns of the air itself. She willed it to come meet her and sure enough it did: with an invisible snap, it struck down her light. If there was a sound for a match being blown out by a dark wind, that would be it. But there isn't, and instead this is what Joanna imagines, now back in the comfortable darkness, her decision made for her. Joanna walked the left tunnel for several hours before she decided it was time to stop. Her trek remained uneventful, yielding nothing right up until she set down her pack and made camp. Now she sat, cross-legged and eyes closed. She took several deep breaths, not waiting or wanting for anything, but a breath to take and release. Here, she felt the ground under her bottom. It was cooler than earlier in the day. This confirmed her suspicion that she had been walking on a nearly unnoticed decline. Joanna's body was adept at noticing the barely noticeable. She felt the decline in every part of her foot. She could perceive sensory information from each toe, her heels, her soles. Tiny muscles taut, balanced perceptively, always feeling out the rope of her path: tightrope-walker of darkness. There was no need to set up a tent in the mines, other than to provide some semblance of psychological safety. Some measure of inside in contrast to that outer world. At this point, the darkness was the same everywhere. The only time she would set up a tent in a mine was if harmful particulate was migrating from one part of the mine to the other. Of course, sometimes it felt cozy just to set up the tent for tent's sake, but like most days, it wasn't worth the effort. She unrolled her sleeping mat, grabbed her quilt and lay in the darkness. Did she even have to close her eyes to sleep, dark as it was? Yes, it sent the signal to her body that it was time to rest, but as far as she (or the darkness) was concerned, she may as well lie wide-eyed through the night. Joanna snuggled under her quilt and kicked her feet together a few times. With this movement, the thrill of sleep always rattled up through her body to the top of her head (and, surely, then went rattling off into the depths of the mine in search of other life to lay its sleepy hands upon). The movement was a signal to say the day was over—her feet could rest. They were now free of their duty of carrying her and her pack along, along, along. Joanna closed her eyes. She thought about the right tunnel, and the subtle draft that had emanated from deep within it. Then, she fell asleep. "Joanna, catch!" yelled Theo. He lobbed the fizzing rock high into the sky, its geometry flashing as it rotated under the blinding sun. Joanna took a couple steps back and received it in her arms with a soft thump . She swore she could feel the warmth of the rock right through her wool sweater. Her fingers warmed up immediately as she turned the rock in her hands. Simultaneously brilliant and modest flashes of yellow, white, even blue. The rock was a snake, hissing loudly, ready to strike, in her hands. "Now, now!" she heard Theo yell. Joanna squatted down, deftly swung the rock between her legs, and then launched it as high as she could. The rock sailed back into the air, the fizzing, hissing sound of it receding into a vibrant, blue sky. Reaching its zenith, and about to fall, it exploded into thousands of pieces and rained down on them. Joanna and Theo watched in silence as the puff of smoke, timeless particulate, dispersed high above them. Dust and smaller rock particles rained down on them, the larger pieces glittering in the same way as the rock in its whole form. "Well done!" Theo laughed. He walked over to her, crunching on some of the debris. "Want to do another?" Joanna listened to the sound of his steps and looked at him. She said nothing, then smiled, turned around, and started walking toward her gear. She picked it up and continued. There was still a certain warmth on her hands, maybe even in her stomach, where she had held the rock for that moment. It would be cold in the Wastes and there would be no such sources to heat them come nightfall. In the distance: a hazy line of a dead forest ahead, some five or six kilometres. Theo started after, quickly picking up his gear. He watched her as he threw his sack over his shoulder and shoved his boots on. Her head turned over her shoulder as if to say something, but no words came out. She simply moved: onward. Joanna woke up. She propped herself up on her locked arms. Another dream with Theo in it. She sighed into the darkness of the mine. A dream, or maybe a memory. When she was in the mines, it was never really clear: memories and dreams became intermingled. You became a different person when you were in the mines. Your history disappeared. Your dreams blossomed. One could just as well be the other. Either way, she was alone. There was no Theo. Joanna packed up quickly and continued walking. As usual, she was in absolute darkness. The path into the mine was well-trod and caused no need for concern. She wouldn’t trip over anything. Thp, Tip, Bip, Thp went the cup. Joanna fell into a reverie, walking, listening to her little cup bopping along against her rucksack. Her feet told her when the path curved, and she would reach out with her hands, fingers glancing off the curving tunnel of the mine as it descended deeper into the earth. Walking in the dark could just as well be sleeping and dreaming. Her thoughts returned to her dream. It had been a pleasant one—to see Theo again—to be near his liveliness. Playing hot potato with Hollow Rocks. When she looked at life, it seemed like the insides of most everything had been carved out, including rocks. It was like Theo to find a way to blow things up and have a good time of it. Joanna continued walking, wondering where he was now. They had met in the Spring, in Eris, a growing collective, a fledgling little anarchist town. But then again, every town across the Wastes was a fledgling anarchist town. Too small for power to be drained from the communal pool into the hands and homes of a select few. Still, their governance was strange. They had sought help from outsiders in digging a well and looking for underground resources—which, Joanna felt, was her specialty. But helping out only meant having a bed and a meal. The people who called their little group "Eris" were reluctant to welcome stragglers into the group without them putting in a certain amount of dues . Joanna and Theo had met there serendipitously, her coming from the south after an extended stretch in the Loest Mines—about a month she had guessed—and Theo coming from a mine in the East. Neither had expected to stay long in Eris, but they had found each other, both mine-wanderers that they were, and had connected at the communal meal. Joanna stopped and placed a hand on the mine wall. It was refreshingly cool, not that she was overheating. She stood for a moment in the darkness, straining her ears and eyes. Had there been a sound, a moment of light, just then? Or had she been conflating her memories with the present moment? With the accumulated time that she had spent underground in utter darkness, Joanna had developed a vivid mind’s eye: dreams came to life, memories could be pulled up, aired out, inspected, folded neatly, held up to a light that existed inside her. In the stillness, she realized she had fallen for the liveliness of a memory. Most of the time that’s what it was. But she wouldn’t—couldn’t— let herself cry wolf on her memories when there could well be a real danger in the mine. And yet, as days and weeks went by, the solitude of being in a mine lengthened out like an infinite thread woven underneath the Wastes. She didn’t have to search the cabinets of her memories to know that she had never encountered anyone, any living thing down in the mines; it was an embedded reality. The scattered populations of earth were only driven into such dark places out of necessity: to scavenge some crucial tech-waste, to find water, or, more bleakly, in seeking an infinite blackness they could no longer run from: death. It was true, she had come across the dead in the mines. Some had thrown themselves down mine shafts, others had wandered deep in the mines until they could walk no further. Joanna shuddered. She was no stranger to such bleak realities, but losing her empathy was a far greater fear than an encounter with the Lifeless. So she intentionally practiced letting such tremors of sadness and despair ripple through her. Occasionally. "We could work together," Theo said. "They aren’t going to find water in that sad attempt of a well, and we both know there will be some in Cambor." "To what end?" Joanna responded. He didn’t respond. They were perched like vultures in the Eris Tree —a magnificent tree, stripped and dead, marking the center of Eris. Joanna looked over at him, up one branch from her, lying on his stomach, his limbs dangling on either side of the large branch. And while he looked uncomfortable, he lay there with his eyes closed looking peaceful. "If you fall asleep and fall out of this tree, I’m not going to catch you," Joanna said, waving her arm at him from her branch to show the distance between them. "Even if you were on my branch, I wouldn’t expect you to," Theo replied with his eyes closed. He still hadn’t answered her question. Work together to go to Cambor, map their way to some kind of water source, return and what—become members of this little town? Get roped into leading a construction crew into the Cambor mines to establish a primitive aqueduct? Joanna shifted her weight on her branch uneasily and huffed. Theo was under no obligation to explain himself or make his intentions known. That wasn’t the kind of world they lived in. Or maybe he just didn’t feel like saying more in the proximity of others—there were a few people in the tree and some walking idly by. Joanna surveyed Eris in its shambling infancy. One or two people eyed her warily in return. Any burgeoning community would be wise to be suspicious of newcomers; they were only just learning to trust one another. She turned to say something to Theo and he was, most certainly, asleep. Joanna walked beside this memory, hearing Theo’s voice clear as day. Remembering him draped over the tree branch. It was almost as if she was still with him—that she had agreed to his proposition. A proposition with as yet unexplained intentions. She couldn’t help her wariness. That was something that built up over time. But so too did a certain kind of loneliness. Previously, Joanna may have subconsciously told herself that this sort of living memory she walked with was enough company here in the dark. Deep down, she knew this was not true. But she kept walking. Several days passed of the same sort. All the while, Joanna steadily descended deeper underground. She had been in the Cambor mines for eleven "days" at this point. A "day" was marked by an internal rhythm she had developed from walking mines in the dark. For all she knew, she could be walking through the night above ground, and sleeping during the day, but she was still following roughly a 16-hour day to 8-hour sleep schedule. After every sleep, Joanna placed a small pebble in her left pocket to mark another day. She fingered her pocket full of tiny pebbles now, probing from stone to stone, as if she could remember the day each pebble represented. There had been times when her pocket had grown heavy with the number of days it had accumulated. Her longest stretch in a mine had been forty-one days. Joanna was still undecided on what was a healthy amount of time away from the surface of the planet. It probably wasn’t doing her any good to be in the dark so long—messing with her circadian rhythms, depriving her of the warmth of sunlight and so on. But being underground was sometimes the safest place to be. She didn’t understand why more people didn’t do it—the surface of earth wasn’t inhospitable. Yes, it was barren, but more in a soul-crushing, apathetic way. At least in Ri. Entire cities destroyed by earthquakes and floods of the subaquatic bombs. There were surely other cities unaffected outside of Ri, but they were as unknown to her as the moon. The world had become smaller, closer, more immediate, when everything had gotten turned upside down. But she supposed that maybe fear kept people out of the mines. They only entered out of necessity. This is what the people of Eris had wanted—what Theo had offered to help her do. And she had declined. And here she was in the dark, doing it anyway. She had effectively declined to help the town. Joanna wondered what her real motivations were. She often felt she was operating like a wind-up toy—something charged her up and she went off to do her task without really having a purpose behind that. She had left Eris in the middle of the night to depart without being seen. The people had asked her twice to help, to build the well, and she had given them a non-answer. Then she slipped away, evading them, evading Theo. Not a good character trait, Joanna thought. The world was full of characters and their not-so-good-traits. Joanna didn’t feel particularly bad. In many ways, today’s world was freer, albeit far, far more dangerous. There was the implicit understanding of survivorship and any pretences, all masks, had evaporated during the collapse. Joanna continued walking, chewing on the changes she was seeing in her lifetime. A lifetime with a far shorter life expectancy, too, she thought to herself. Before she could contemplate how many more steps she would have on this earth, she noticed a change in the air—water was close. She stopped on the path and listened. There was little chance she would run into anyone down here. But being careful only cost a little time, a little energy. She listened intently. At first, with her eyes closed, she heard nothing. Then, a slow swell, nearly inaudible. There was a white noise in the distance. The sound grew louder. It was the sound of waves. Then, a blinding light. She staggered backward, the sound of her footsteps lost in the swell. She opened her eyes to a dazzling sun, a cerulean sky, and crashing green and indigo waves on a beach. People were running up and down the sand, some diving headfirst into the water. A few stray boats drifted up and down the coast. An image from another time. Joanna opened her eyes again—really opened her eyes, uninhibited, untricked by an illustrious memory. She was still in the mine. But there was a sound: footsteps, approaching. It was Theo, in the dark. "A little farther this way. The water is here." They walked in silence. Joanna let her thoughts swirl in her head. Days in the darkness, days of silence and not speaking—it all made it harder to speak up now. And the surprise—what was he doing down here? How long had he been down here? How did he get here before me? Joanna had left Eris in the middle of the night. Theo had still been there when she left. Theo didn’t seem to mind the silence. He probably even expected it. He must have been down here long enough to experience that same binding spell that makes it difficult to speak. His voice had certainly croaked when it had spoken. A little farther this way. The water is here. So they walked on for a few more minutes. Then, the sound of their steps began to widen and fan out with a subtle echo. Neither of them could see in the darkness, but Joanna knew the sound: the widening of a passage into a cistern. How could she describe it? It was like opening the door from the inside of a cluttered closet and stepping into an open field and a swelling blue sky. It was still dark, but the breadth of difference in the sound of their walking alone seemed to balloon up infinitely. Joanna stopped. Theo stopped a step ahead of her. He looked back at her. "It’s huge." In the dark he may have nodded, but didn’t say anything. "Do you have a light?" "Yes." "Here:" There was some rustling in a bag and Theo pulled something out, and held it toward her. She felt for it with her hands, fumbling, until she felt the lantern. Joanna nodded to herself. She felt for her matches and dug them out of her pocket and lit one. The light that sprang to life overwhelmed them in its furious charge into being. Neither Joanna nor Theo looked at one another. Both focused on the lantern between them: held at an arm’s length by Theo, Joanna close up to it to understand how it would open, unlatch, light, before her match went out, wasted. She quickly unlatched the window, found the wick and lit it. She fumbled around for the fuel release valve and couldn’t find it, touching gently but quickly, all surfaces of the lantern seeking a knob, a switch, a lever. Theo’s hand grazed hers, a foreign touch in the darkness of the mine, the darkness of a body that hadn’t had contact in some time. He moved his hand up and twisted a knob at the top of the lantern underneath the handle. The flame blossomed, doubling, tripling in size, until he readjusted it to a steady glow, a bit brighter than the now extinguished match. Joanna stepped back and breathed out a held breath. The flame had seemed huge for a moment, engulfing. The sun on a beach, the sound of crashing waves. She listened now. There was no sound of movement of water. They continued their walk in silence. Now, with the lantern, each footstep was lightened. Step by step. Soon the forbidding silence that had them cowering and hiding was lifted. "How did you get ahead of me?" "I took the right path." The right path! Joanna laughed to herself. What she had mistaken for a path leading up out of the mine—toward a clear blowing air—had been a ruse. A mistake. She had been fooled. Whatever it was, she had taken the long way, and her intuition had been wrong this time. "Wasn’t pretty," Theo said. Or perhaps, her intuition wasn’t wrong after all. "Dangerous?" Theo nodded, visible this time, by the light of the lantern. She watched the shadows dip and bounce back with the movement of his head. "Definitely not pretty." Not Pretty . He had said that phrase before, she remembered now. He had spoken that way in describing any number of changes that appeared after the floods that had wiped away the old world. "Do you see it?" He asked, changing the subject. He held out the lantern. She could make out the edge of the cistern. There was movement. What had once been a deep, underground blast-mine was now an underground lake. They continued their approach, and soon the lantern appeared as a ghostly reflection in the water—rippling." "How is the water moving?" "Beats me," Theo said. They got right up to the edge and stopped. The water was only a foot or two below the rock ledge where they stood. Joanna crouched and dipped first one hand, swirling the water, feeling the bounds of it move up her arm as she reached farther in, and then bringing both hands up to her mouth as a cup. She drank. "I would have had to turn back tomorrow if I hadn’t found this." "How long have you been down here?" "Eleven days. But you knew that didn’t you? How long have you been waiting for me?" "Four days." "The right tunnel was that much faster." A statement, not a question. "Yes. And that much more dangerous, too." "And you’ve just been camping down here?" "Yes. Finding ways to keep busy. I didn’t know how much longer I would stay." "Running low on food?" "A little," Theo admitted. "And matches." Theo and Joanna fell into another silence. The lantern burned between them, now set at their feet on the edge of the cistern. The flame stood steady, hardly flickering at all. Its reflection in the water moved more, due to some strange eddies of unknown origin: the water moving more than the flame. Joanna stood in the silence, then slowly crouched down again by the water. Sit in the silence, lay in the silence. All of it felt good. Lifted her up. Finally, she was ready to speak again. "What are we doing here?" "I know. It’s stupid." "Neither of us came here to help Eris, right?" "No." "So what does that make us?" Joanna’s voice felt hollow, felt like it was disappearing into the darkness and swallowed up by the water. "I don’t know. Explorers?" "There is no other way of being than to keep moving, it feels." "I know that feeling," Theo said. He sounded sad. Sad and tired. "It’s not that there is anything wrong with us, I don’t think. But more than anything, it is becoming clear to me that most of us are just ghosts roaming across the landscape. Looking for a solution to a problem. Maybe looking for a place to call home, a place to rest." "How long?" "Probably years now. This is the sixth mine I’ve gone into." "Tenth for me." "Why do you think more people don’t do it?" "Plenty do," Theo said, "but you don’t see them. You don’t run into them. I think we make it so that we don’t run into each other." "But surely it is just a fraction of the population." "You are correct about that. I think we come down here for signs of life. Because that’s where water is. It’s trouble to get to it, that’s for sure, but there’s something unrelentingly pure about it. Not just the water itself, but something like this existing, far way, untouched." "You’re saying it’s like a vacation? A stay at the beach." "No." The tone of his voice betrayed a furrowed brow, maybe even annoyance. "People get by with the water on the surface, but, but I don’t know, I guess a select few are drawn to the cisterns and the underground reservoirs. The ones who don’t mind the dark, at least." "I guess that’s me," Joanna sighed, "I don’t mind the dark. Some days I even prefer it, I think." "Soon the people will come en masse to seek it out, I suspect. Who knows how many of these mines exist, natural or unnatural. But I don’t think the water on the surface can sustain the aggregating peoples." "I hadn’t really thought about that. I think maybe I’ve been avoiding thinking about it," Joanna said. "Is that why you disappeared from Eris?" "I don’t know. Maybe," Joanna said uneasily. She didn’t like that Theo seemed to be getting into her head, poking around, analyzing her decisions, drawing possible conclusions that existed in his mind before he even asked a question. Maybe he was trying to connect with her—she could deal with that. But it was that his questions and probing seemed to get closer to answers she wasn’t even aware of. Joanna didn’t like that. "I think I’ll retire for the night. Let’s talk more tomorrow." She splashed water in her face. She pulled herself up and went about setting up her tent, the water fighting through days of grime to touch her skin. Joanna couldn’t fall asleep. Theo wasn’t making any sound, but just knowing that he was there made sleep elusive. Lying in her tent, she enumerated her thoughts, trying to get to the root of what was preventing her from drifting off, like searching around in a pool to pull a plug and drain the water that was the tiredness of her body and mind. It wasn’t that she felt unsafe in his proximity. She didn’t trust him, that much was true, but that didn’t mean she found him to be a threat. Maybe it was just that she didn’t know how to share this massive yet intimate space: the darkness that surrounded them, the water discovered and novel, the swirling sound of it tugging and releasing at her thoughts. The swirling water? That shouldn’t be. She lay, holding her breath. The water was certainly moving. It lapped against itself, eddying like a lost traveller. Every now and then, the water would slap up against itself with the sound of a tiny clap. She had noticed some slight movement before, hadn’t she? Earlier, the lantern’s flame had not moved but its reflection in the water had. She let out her breath slowly, and breathed in deeply. Held it. Held it and listened to the water roar into life. A deep, guttural, gurgling echoed all throughout the cistern, the sounds swelling and bouncing to such a volume that Joanna realized the cavern they were in was even larger than it had seemed. Then, a great, gnarling sawing sound reared up over the gurgling, seized it and wrestled it into submission. Joanna tore out of her tent. Theo was already there, standing, staring up into the darkness. She felt her way over to him. "What the hell is going on? Where’s the lantern?" "I don’t dare light it," he replied. She could hardly hear him over the sounds. "What? Why not?" "Something’s out there." It was obvious something was out there, but the way he said this scared Joanna. His voice was empty, hollow, like a soldier surrendering, his will to fight gone, a bland readiness for execution. "Someone’s siphoning off the cistern. They’re just getting started. They’ve been here this whole time. Longer than me. I should have known. That would explain the right mine-tunnel, it was rife with signs of life. What do you think we should do?" "What do I think? You talk like you’ve got a plan most of the time." "No plan," his arms may well have been spread, palms open helplessly to the cavernous ceiling. But this she could not see in the darkness. "It’s funny," he said. "Did either of us know we would find water down here? No. And yet, at least for me, having been here a few days, I feel like it is mine. My cistern. And someone is stealing from me. Draining away my property." "Are you sure it’s being drained?" "What else could it be? Have you not seen this happen before? Not stumbled upon the drained cisterns of other mines?" "No," Joanna admitted. "Tell me." "It’s what you’d expect. Someone is hoarding the water. There is a mine in what was once Mistra, about a two hour walk outside of the ruins of the city. I checked it out a few years ago. When I arrived the whole cistern had been sucked dry. They even had set up electricity in the mine, somehow. Had lights bordering the cistern. Of course, by the time I arrived all the lights were off and the people gone. The whole cistern was drained and was being stored underground in their little town outside the mine." "Why are they draining it instead of just setting up piping to establish an aqueduct?" "Some people have done that, but I suspect the people outside the Mistra mine didn’t like the idea of sharing. Rather than have to guard the cistern, they drain it and then store the water in huge underground containers that are the foundation for the towns they build." "That seems like a lot of work when they could just live above the mine, or hell, in the mine." "You and I are down here. Maybe we could imagine a life in the dark. But most people don’t seem so keen. And besides, they have their huge machines that do the work for them." Joanna had not seen the machines that Theo was referring to. She assumed the grinding, sawing and deep rumbling surrounding them were from the very same machines. And what of the people behind them? People with machines so large that they could route and direct massive underground cisterns—these were not the kind of people she was used to dealing with. She remained silent. Even shouting at the top of her lungs would be like remaining silent against the noise that surrounded them now. Something deep in the water was churning up the cistern enough to make waves on the surface. She could hardly imagine what nefarious mechanisms were being put to work. "I don’t think I can take the noise." Theo said, breaking the noise-filled silence between them. "I’ve never heard anything like it," Joanna replied. "I certainly won’t be able to get back to sleep." "I wouldn’t want to be caught sleeping here," Theo said. "Hmm," Joanna assented. Theo’s mind seemed intent on issuing these sorts of warnings. He often spoke with a foreboding tone. She wasn’t sure what his angle was. If he wasn’t offering these low-grade warnings, then he was taking an edifying tone with her. It was beginning to get annoying. She was seeing now that her hunch to leave him behind in Eris had been correct, and yet here he was: an overprotective brother, a macho show-off, or some awful combination of both. In her mind, she did not allow for the possibility that perhaps he was seeking a simple, platonic companionship. She was already giving him more of a benefit of the doubt than most of the people she encountered in the world. It had been outside of her playbook to talk with him the first time they met, and yet she had. But the continual gut checks were starting to tire her out. Building trust was too exhausting. "Well, I guess I’ll fill up, and head out." "It sounds like you want to go alone." At least he was perceptive enough. "I’m not going to stay either, but if you want to set off on your own, don’t feel you have to wait on me." Joanna sighed inwardly. What was she going to do, tell him to walk a hundred paces behind her? She supposed she could take the right tunnel—the one that had gotten him here faster. "The right tunnel, you said something about it," she asked. "I wouldn’t take it out of here." "Why not? You said you’d gotten down here four days faster than me." An uneasy silence (despite the roaring of the machines). "Well, there were a few people in there." "A few people?" Joanna asked, surprised. "I think most of them would be goners by now. But I got attacked by one. A desperate last stand by someone who had been either left behind or had been cut down, probably by whoever is running these machines." Joanna blanched in the darkness. She felt for the long knife at her belt. It wasn’t that she couldn’t handle herself if things got ugly. But the kind of ugly she was willing to put herself through was more the desperation of the living, not the desperation of the near-dead. "Alright, we’ll take the left tunnel." Joanna and Theo fell into a comfortable rhythm by day three. By then, Theo had exhausted his seemingly inexhaustible reserve of questions. After that, Joanna finally felt herself begin to unwind. At the end of the first day they had left the noise of the machines behind, save for a deep rumbling that was more felt than heard. Now, in their silence, they would periodically feel tremors moving the ground beneath them. Vibrations of an unnatural frequency and cause. Joanna found she had to move slower for Theo. She listened to his footsteps now. Sometimes, he would walk a few paces behind her, either in a narrow passageway, or perhaps when he was feeling less confident in his footing. She liked this, not that she enjoyed seeing herself as the leader per se. But after plenty of solo expeditions, having someone who was sort-of-there-but-not-there was something she realized she appreciated. She listened to the quiet echo of her walk that he was—the sounds of his steps fitting in with the imprints of hers. By day five they were both humming. Joanna wasn’t sure who had started it, but it became regular. Both of them seemed to appreciate it in the other, and the resonant sounds expanded from within them, out into the mine air, buzzing and sawing about. It was a much preferred vibration to the still occurring vibration of the machines deep in the tunnels behind them. Sometimes, they would lapse into a silence, only for one of them to emit a wavy melody hum, let it drift into place, a thread in a current, ready to be picked up by the other. And so it was that a thread of melody could float between the two, be picked up, put down, shared. Sometimes, although not often, they would both hold that thread and harmonize. Neither spoke about the humming. It seemed sacred. It would only be disdained by words. Neither of them ever sang. The resonant buzzing within them never escaped through open lips, into the shape of words or otherwise. At night they would speak again, though not much. The days were silent save for humming, the nights were quiet save for a few words: how to make use of their dwindling rations, speculations on the fate of the cistern. No discussion of their respective pasts. On the seventh day of walking they reached the juncture of the two tunnels. It was nearing the end of the day when they reached it. "Well here we are, two paths diverged in a wood, and so on." Theo said. Joanna looked quizzically at him in the dark, but did not say anything. By now, none of the workings down in the cistern could be heard. Occasionally, Joanna felt a tremor in the ground when she wasn’t walking, but she could well have been imagining that. "We could go another hour or two or we could stop here, if you like." "Let’s stop here," Theo responded assuredly. They set up camp. "What about a fire, tonight?" Joanna said, surprising herself. "A fire? What do you propose to burn?" "The struts. Most of them are wood." "Couldn’t that make the mine collapse?" "Do you ever want to come back here?" "You’re not serious!" Theo exclaimed. Joanna shrugged in the dark, knowing full well that Theo couldn’t see her. "One strut would be enough for a fire. It won’t make the whole tunnel collapse. I suggest we take one from the right tunnel. Based on your description of it, I figure if one were to collapse, it should be that one." "Ah, why not," Theo responded after a moment of silence. "I have a saw and some rope. If we’re not going to walk for another hour or two, we might as well do something productive." Joanna set her bag down and pulled out a foldable saw, always in the side pocket behind the zipper. She flipped it open in the dark until it clicked into place, locking securely. She pulled her medium rope out of the main enclosure of her bag. "Light the lantern," she commanded, walking over toward the right tunnel. As she approached, she remembered the match she had lit, the one blown out by the faintest wind emitting from the tunnel. Walking over now, she felt that same wind approaching. She heard the striking of a match behind her. Facing away, the illumination of it wasn't so bright that she had to turn her eyes away. Instead, she saw her shadow cast toward the right tunnel. Behind her, she heard Theo light the lantern and then a greater flame casting larger shadows followed. She stood before the entrance to the right tunnel watching as her shadow morphed and shifted as Theo walked up behind her. "Ok, let’s find the closest wooden strut." Together they walked a few steps into the right tunnel, inspecting each strut as they went. Several of them seemed to be made of an alloy metal. The first wood one was only a few paces in on the left. "Perfect." Joanna said. She set about tying her rope around the middle of the strut and then began sawing at the top. This took several minutes and Theo just watched as she did this. After breaking through, she crouched down and began sawing at the bottom of the strut. It was about 6 inches wide. Both cuts took a matter of minutes. Her saw was in great shape, fine-toothed and sharp. "Careful," Theo said uneasily. "I'm going to finish sawing all the way through and I want you to stabilize the strut so that when I kick through the end of it, it doesn't move." Theo stood over her, placing all his weight into stabilizing the strut while he looked down at Joanna sawing intently. The lantern, despite only showing the smallest flame, was a spotlight upon them. Theo, having never seen her this close in the light, watched her closely. Like turning over a quartz and seeing its sides, he took in the shapes of her face. "Almost there," Joanna said, as if aware of his lack of focus. Theo tightened his grip on the strut as the saw came through to the other side. The strut moved imperceptibly. Theo was sweating. "Okay, let's let go in a moment and we're gonna back away slowly. Make sure you grab the lantern." They did this, Joanna grabbing the rope, uncurling it as they walked backwards carefully. Eventually they retreated to the open area before the two tunnels. Joanna held the rope in her hand as if it was the trigger of a trap. Theo held the lantern and watched the light recede into the darkness before them. "I’ll pull on three , okay?" Theo nodded. Joanna yanked at the rope with both hands. And the strut came loose, clattering with a bang onto the ground and echoing down the corridors of the tunnel. Both of them waited, listening to the garish echoes dissipate. In the silence that followed, they both may have imagined the possibilities of a mine collapsing in on them. But, in the naïvety of their evident safety, the idea of sitting before a fire was both energizing and worthy of the risk. Joanna set about pulling out her hatchet and chopping the strut into pieces. The wood was dry and thick and took some time to break apart. She splintered a quarter of it into kindling and then quickly started a fire in the center of the ground facing the two tunnels before returning to chop larger pieces to burn. She added to the fire as she went, stacking the larger pieces of wood close by. The fire danced and flicked, painting the mine walls with light, and fired off pops and cracks, sending little echoes of life down the tunnels like rolling stones. "I guess the tunnel isn’t going to collapse." Theo said timidly. He seemed different in the light; less bold, or perhaps just more self-conscious. Joanna watched him curiously. "It’s not that I knew it wouldn’t," Joanna said slowly. "I think it’s more that I didn’t care. That sounds bad. I didn’t think I was putting ourselves in danger, but maybe I was. You spend so long in a mine, needing to be cautious every which way, that sometimes a reckless feeling comes over you. I need to do something care-free." "It’s not far from here, I think." "To the surface," Joanna said. "Yes." Their shadows never quite stayed the same on the walls behind them. Theo watched Joanna’s and Joanna watched Theo’s. "Should we cook up something extravagant?" "Ooo," said Theo. "I have some dehydrated soup. We could have warm soup." "I have some dehydrated black lentil I’ve been saving, as well as a bit of dessert." "Dessert!" Theo nearly shouted. "Dehydrated cake." "No such thing," Theo said. "I guess you won’t have any, then." "Well, maybe there is such a thing." The two prepared their first hot meal over a fire in weeks. Their thoughts of cisterns, siphoned water, huge machines, collapsing mine-tunnels—all of it disappeared behind steaming bowls of soup. "This is the cake," Joanna said, after rummaging in her bag and pulling out a small dense brick, wrapped in brown paper. "You just add a bit of water. Having warm water will make it taste even better, I think." Theo watched her closely as she grabbed her cup, downed the last dregs of it and dipped it in the pot of water over the fire. Joanna flicked open a small knife and pressed it through the dense cake, cutting it in half. Carefully, she poured the contents of her cup over both pieces. "We have to let it sit for some time so the water can absorb and it can cool." "Warm cake," said Theo, in disbelief. "In the depths of an abandoned mine." "Special occasion," Joanna said flatly. Not something for every day, she thought to herself, especially sharing with someone else. When the cake was ready. she pushed the package over to Theo, that he might have first pick. He took the smaller piece. They both ate the cake with little noises of delight and wonder. Its taste was perhaps amplified by the strange circumstances it was being consumed in. This had actually been the first time that Joanna had tried this cake—she had picked it up from a vendor while travelling before she reached Eris. She had nearly forgotten she had it, stuffed away in a pocket of her pack. "I wish I had some milk," Theo said. "It was good." "It was so good!" Theo exclaimed. He sighed and rolled from a sitting position to lay down on the ground, resting with his hands supporting his head. Joanna watched him. In the firelight she could see the days in the mine on him: oily skin, pale of daylight, his face dirty and unwashed. She felt much the same. Unconsciously, she took a swig of her water as if it could cleanse her. They stayed in this restful way until the fire burnt low. The strut had served them well and provided more than enough wood, a shame really, Joanna decided—she had no intention of carrying it around. Still, they should be exiting the mine soon, she figured. Maybe three or four more days. After a night like this, though, the other days of walking and nights of rest would feel bland and uninspired. Joanna stared into the fire, thinking. Her expedition had been a success, in a sense. But I’m just a wanderer, and that’s the truth isn’t it, she thought. There had been no greater goal than to explore the mine. She would not be helping anybody with what she had learned, having decided not to help the people in Eris. Though, she supposed she could go back to the town to tell them about the excavation that was happening in the cistern. Joanna felt restless, her days of wandering and meandering were strange in this landscape. She needed some kind of purpose. Wandering from place to place, exploring mines and caves had given her some semblance of satisfaction and motivation over the last few years, but that was growing thin. All the while, violence and conflict was springing up more across the region. Factions seemed to be growing and cobbling together stockpiles as they could: land, water, weapons. If the world got more and more hostile she couldn’t keep doing this. She had been lucky already, avoiding most of it, moving solo through the world. Joanna looked at Theo. He was asleep on his back. She set up her tent quietly, hoping not to wake him, but failed. "Jo?" No one called her that. "What?" "Thanks for the fire, and the cake." he mumbled sleepily. "It’s nothing." She got into her tent, and went to bed. They reached the entrance of the mine without incident after four more days of walking. They did not have any more fires. They did not speak much of anything. Their relationship had shifted since the fire. It had made real the private and the public in Joanna’s life. She slept in her tent after the fire every night from then on. For the light of the fire had brought each other’s faces into view. Even though they had no more fires, lit no more matches, even though they continued marching in darkness, the light stayed with Joanna, and she felt continually seen. So the tent made for an escape, even in the pitch darkness of the mine, at the end of the day. Theo made no comment about this, and occasionally set up his tent, too. Despite this renewed need for privacy, Joanna enjoyed falling asleep in the presence of someone else. It was comforting, and she realized as she approached the opening of the mine—the splash of light marking the entrance—that she would miss it. "What now?" she wished to say, as the light of the entrance drew closer. In some respects, she could have marched through the mine with Theo forever, if they had had the provisions for it. This was the tone of her life, in this world, now. A companion with these sorts of comforts was far more rare than the most precious of stones. And yet, she couldn’t help but feel their separation was both imminent and necessary. Above ground, things were different. In the light of day, even the not-dark-enough of night, she was unsure she could stand to be continually seen so visibly. As if he could sense Joanna’s rumination on the topic of himself, Theo did not speak. Joanna listened to the familiar sounds of his footsteps, now right beside her rather than behind her. The light of the entrance illuminated enough of the path that they could walk two abreast. The sound of his footsteps stopped. Joanna took a few paces and then stopped. She turned and looked back. "What’s next?" his voice rang out. Nearly exactly what she had wanted to say. Joanna sighed, lifting her pack by her thumbs and settling it back down. Thmp , went her cup. Familiar. "Sometimes I get these glimpses of a life where I can bear to wonder of what’s more," Joanna said. "Of hunting down some purpose. But instead, it all feels like purposeless wandering. No wonder. Just wandering. Wandering and surviving." Theo nodded at this. "I’ve been wondering the same thing." "You’d like something bigger." "Yes, and you too, I suppose." "Yes," Joanna said plaintively. "This is most of what I’ve known, though my past feels far away, inaccessible." "How well do you remember the path to the cistern?" Theo asked. "Well enough." "You could map it?" Joanna furrowed her brow at this. Theo could see her reaction now. "To make something—to provide what others can’t do?" "Theo, it was just two tunnels. Follow them to the water. Anyone with an affinity for walking about in the pitch black could do it." "I don’t think that’s entirely true. But I mean, you know, to do something greater. Make a map, provide people with a path." "The water is just going to be siphoned off, anyway. We’re helpless at that. They have machines, electricity, they have power, and they’ll have more of it—the ability to sustain it—after they do whatever they’re going to do with the water." "Maybe they’re not bad people." "That’s good of you to think that." Theo sighed audibly and started walking. "Good of me to think that," he echoed. Then they were outside. The stark difference silenced them in a new way. No more discussion of maps, of greater purposes. They were subjects under the sun—albeit, one that was hiding behind the clouds. Subjects of a brazen wind. The still air of the mine left them feeling raw and exposed to even the slightest moving particulate. Joanna surveyed the descent from the mine. She could see Eris in the distance—like blocks of a child’s toys—clustered in a seemingly illogical fashion. The wind buffeted about any clear thought she might have had about what was next. Joanna felt a rising anxiousness in her body, a vibration—at having to decide what to do. Theo stood beside her. She felt like she had to make a decision for the next step—whether to sever ties, or stick together. Despite all her wasteland wanderings, this sort of thing still never came easy. The awkwardness of connection—not their connection—of any connection, any fragment of a person has with another fragment. They were all fragments now, and the vibrating was turning to tremors and she felt herself growing unsteady— "Run!" Theo shouted, grabbing Joanna’s arm and pulling her from her spiral. She found herself involuntarily running, yanked along, the tremors in her body multiplying with each step contacting the ground. Or was it the ground that was shaking? Theo shouted again, something about the tunnels. She couldn’t hear him over the noise. His grip on her arm was painful as he pulled her up toward the rocky hills surrounding the mine. Joanna’s body ached and complained with each pounding step, being used to walking at a steady clip, not running with a loaded bag, in the blinding daylight. They were halfway up the crag flanking the mine when the earth exploded upward behind them. In a moment, Joanna was in her dream with Theo, of playing with the Hollow Rocks, watching them explode. Blink twice, between reality and dream: rocks of all shapes and sizes were soaring upward, arcing in all directions. More explosions. Theo pulling Joanna to the ground out of the way of falling debris. Then, the water of the cistern exploding out of the mine. Spraying into the sky, rushing out of all the mine’s orifices, rushing downhill, an unstoppable force, toward Eris. Joanna uncovered her head, pushed herself up, and kneeled to watch through the haze of rock dust: the water had already reached Eris, and while it had dispersed to some degree in its rampage, the path to the town may as well have been a cutout valley, and the water crashed through it. Within seconds, the child’s blocks had been knocked down, the town washed out. They stood in a stunned silence. The dust of the exploded rock was quickly carried away on the wind, out into the wastes. "There was more water in that cistern than we thought." "We never could have seen the full size of it," Joanna said reattaching herself to reality. They watched as the water eventually diminished. Most of the homes of Eris, weak structures that they were, were knocked over. In the distance, they could see the small figures of people milling about in the now diminishing water. To the right, the mine had become an open crater. "It’s a miracle we didn’t get squashed." "Or drowned," Theo added. "What do you think happened?" "Some kind of machinery malfunction, I suppose. Or something went wrong with an explosive." "They must be huge, powerful machines." Theo nodded. They stood in the wind and looked at the landscape. It was desolate. Joanna found herself wishing for the sound of her cup again, thumping along on its string attached to her pack. "Well, we know what happened to Eris," Joanna said, stretching out her arm at the decimated town. "Why don’t we go see what happened to the other party?" "I suspect that they are somewhere around the north or east side of the mine, since we’re westward right now, though I don’t see any signs of life." "And there may not be any," Joanna said blankly, and began walking. thmp, pid, pad, pt , went the cup. Theo followed.

0 views
ava's blog 2 days ago

bearblog carnival: boredom

In the Bearblog Carnival February 2026 , Winther asks: Are you ever bored, what do you do when you are feeling bored or are we even capable of feeling bored in this age of limitless digital entertainment? What comes to mind about the topic is that we are quick to demonize boredom, but we should cherish it instead. Boredom serves such important roles: A separation between tasks, rest, and room for thoughts to emerge. I know the latter is something we often don't want; it's very easy to spiral into depressive thoughts and self-doubt. But if you block off the bad, you also block off the good. When I get to be bored (or at least, no external stimulation), my brain becomes creative and curious. I formulate questions and arguments, I think of researching something or topics to write blog posts about, or things I'd like to draw. I suddenly see problems or topics from a different angle, and I come up with solutions. There's room for me to remember tasks I had forgotten to do, or that I should reach out to people I haven't talked to in a while. I think of unexpected favors to do for people around me and acknowledge my own needs. And: Everything just feels less crammed in my brain, instead of just being back-to-back-input until my head feels heavy at the end of the day. Boredom is like having time to finally check the mailbox and opening any letters that came in. There are so many thought processes going on more subconsciously, as well as things you distract yourself from that wait to be acknowledged and dealt with. In that mental image, they all arrive in your mailbox as little letters, but if you don't check for a while, the mailbox overflows. Seeing the overflowing mailbox makes you more anxious and uncomfortable, so you distract yourself further, but it's not getting better. All you can do in that moment is really try to sit with it and acknowledge it all. The letters will be a lot, but they will slow down. At some point, the mailbox will be empty again. And the more often you let yourself get bored and therefore check in with it, the more manageable it will be - just 2-4 letters at a time. I recently reflected on the fact that it's gotten hard to attain true boredom, or the space to have guilt-free boredom. There is always something I should be doing - either it's work, or studying, or volunteering, or blogging, or household stuff, time with my wife, taking care of friendships, maintaining a server, drawing, journaling, reading books, finally starting the sewing project I keep putting off, and so on. There is currently not a free moment where these things don't yell at me. It's too easy to see time spent doing nothing and engaging in intentional boredom as "wasted time", but I try to be mindful of the things I wrote above. It's a lesson I learned almost exactly a year ago. In " restful weekend ", I wrote: " For the first time in who knows how long, there was nothing nagging at me, no guilt, no pressure to optimize my time to make the most of it. I could just exist and rest, like it was my job. While just staring at nothing or lying down focusing on my breathing, I didn’t feel lazy or too fatigued to do anything; it felt productive, positive, like this is what I’m meant to do. Usually it’s easy to know I’m supposed to rest on weekends, but harder to allow myself to do so and feel good about doing it. Resting or doing nothing often instead feels like a defeat and I can’t enjoy it as much because I think about things I could or should be doing instead. But nothing like that could touch me this time. I felt like I had an infinite amount of time, so I didn’t feel nervous about how I spend it. There was no invisible timer. It felt like childhood. " [...] " I sometimes have trouble with starting or switching tasks. It suddenly seems overwhelming and exhausting to start, no matter how small the activity is. I used to force myself through it or waste time with something else until it felt possible enough to start the things I had in mind. It usually felt frustrating and draining. I’ve changed my approach; if things feel overwhelming and hard to start now and I feel an inner resistance to all options, I go somewhere comfortable and bore myself on purpose. I’ll just sit there, do nothing, decompress. I ground myself, I look around the room, and wait it out. No media. I have time. My other approach could sometimes result in 1-2 hours of delay until getting started on something, if at all; and usually I would get frustrated and mad about it. But like this, I’m usually ready to get started within 10-20 minutes and I don’t feel moody at all. I think I just need a genuine break to refresh internally [...] " Of course, there's also the aspect of avoiding boredom by consuming constantly. In another post , I highlighted a quote about boredom by Kate Lindsey: " Boredom is when you do the dishes, run the errand you’ve been putting off, respond to the text you’ve left on read. Boredom is when you bring a book to read on the subway or make small talk with the person in front of you in line about how slow the pharmacy is. Boredom is when you do the things that make you feel like you have life under control. Not being bored is why you always feel busy, why you keep “not having time” to take a package to the post office or work on your novel. You do have time — you just spend it on your phone. By refusing to ever let your brain rest, you are choosing to watch other people’s lives through a screen at the expense of your own. " And with that, I think I have said everything I could say :) Reply via email Published 01 Feb, 2026

0 views

Failure is part of Success

Today I want to talk about failure – specifically where it applies to my work on SmartPoi/Magic Poi, with Cecli AI assistant . A little while back I decided to add Timeline mode to SmartPoi – and SmartPoi_Controls. This required code updates to: After looking at Timelines, I realised that actually I did not have to re-write the whole Timeline thing into SmartPoi firmware – I already had a working base in Magic Poi, re-written from scratch and with the integration with Magic Poi website built-in. The solution: I have started polishing the firmware up and am going to release it as Open Source. UDP mode on ESP32 just doesn’t work, sorry. I am starting to suspect it is an issue with the UDP library and not my code. I have a lot of work to do here – if the library is not working as I suspect I will have to prove that for myself by creating a simple UDP Client-Server pair of apps and troubleshoot that, without all of the complexity of SmartPoi happening around it. Estimated time: at least 2 days, but if it’s really broken there may actually be no solution? I don’t like to say something is impossible, I am willing to spend another two weeks looking at this to fix it at some point! I am currently obsessed with getting the “Perfect Sync” between poi. This is made more difficult by my “Virtual Poi” – which I am determined to sync with the “Real” poi. I actually did get this working, but now the “Virtual Poi” do not sync with one-another! So far finishing this feature is proving very difficult due to the sheer amount of services and functions that have to work together. I have MQTT server, Flask back-end, JavaScript and C++ firmware to handle. Every change needs to be uploaded to poi, and server, then tested in real world situations. The good news is, when this is working, we will have something I have never achieved before – and it’s an unique feature for LED Poi! Real-time, perfect sync over the internet. I just need time to fail and try again and it will work eventually. Looking forward to releasing Magic Poi firmware asap – while also fixing the few bugs we still have with the SmartPoi_Controls app. Many thanks to my Patreon supporters – special shout out to Flavio over in Brazil who is doing increadible things with the hardware side of things! Follow me on Patreon Check out Flavio’s work on Intagram The post Failure is part of Success appeared first on Circus Scientist . Magic Poi website (downloading of Timelines) SmartPoi firmware (both ESP32 AND Arduino versions), and SmartPoi_Controls Android App This did not succeed. I literally spent 2 weeks on this, but I am sure I mentioned before, SmartPoi code is based on a project that is now 12 years old. It works, but is very difficult to change. The changes required to add Timeline functionality were threatening to break some of that stability.

0 views
Jim Nielsen 2 days ago

The Browser’s Little White Lies

So I’m making a thing and I want it to be styled different if the link’s been visited. Rather than build something myself in JavaScript, I figure I’ll just hook into the browser’s mechanism for tracking if a link’s been visited (a sensible approach, if I do say so myself ). Why write JavaScript when a little CSS will do? So I craft this: But it doesn’t work. is relatively new, and I’ve been known to muff it, so it’s probably just a syntax issue. I start researching. Wouldn’t you know it? We can’t have nice things. doesn’t always work like you’d expect because we (not me, mind you) exploited it. Here’s MDN : You can style visited links, but there are limits to which styles you can use. While is not mentioned specifically, other tricks like sibling selectors are: When using a sibling selector, such as , the adjacent element ( in this example) is styled as though the link were unvisited. Why? You guessed it. Security and privacy reasons. If it were not so, somebody could come along with a little JavaScript and uncover a user’s browsing history (imagine, for example, setting styles for visited and unvisited links, then using and checking style computations). MDN says browsers tell little white lies: To preserve users' privacy, browsers lie to web applications under certain circumstances So, from what I can tell, when I write the browser is telling the engine that handles styling that all items have never been (even if they have been). So where does that leave me? Now I will abandon CSS and go use JavaScript for something only JavaScript can do. That’s a good reason for JS. Reply via: Email · Mastodon · Bluesky

0 views
Kev Quirk 2 days ago

Will They Inherit Our Blogs?

I've been thinking about how this site may be able to live on after I'm gone. Maybe it could become a family heirloom? I’ve thought about this topic more generally before , but this one is specifically about blogging. This blog is by far the hobby I have sunk the most time into over the last 13-ish years, and I’d like to think I’ll continue as I head from middle age, to old age. Let’s say I live until I’m 80, I will have spent over 50 years of my time on this earth writing content here at . I don’t want all the hard work to disappear in a puff of smoke once I snuff it, so I’ve been thinking. Could this blog become a family heirloom? . Could I pass this site on to one (or both) of my sons and have them continue to write here? They wouldn’t even need to continue to use . They could write on their own domain(s), and just redirect this one. I like to think that many of the other long-time bloggers out there might want the same. Maybe one day it’ll be normal to leave our blogs to our kids? I do think it’s something we should consider. I’m part of the first generation that grew up online, and most of us are still very much alive. But as time marches on, more of us are going to leave behind these digital epitaphs. I’d love it if my sons took up blogging when they’re old enough to (that, and riding motorbikes!). But they’re their own people, and may not want to. If that’s the case, I just hope they’ll agree to keep my waffle online for a little while once I’m gone. 🤷🏻‍♂️ Thanks for reading this post via RSS. RSS is great, and you're great for using it. ❤️ You can reply to this post by email , or leave a comment .

0 views
neilzone 2 days ago

Flo Mask Pro thoughts

When I first thought about going to FOSDEM , the thing at the top of my “to purchase” list was a new face mask / respirator. While I wear a mask on public transport, and in busy indoor venues, I’d heard that FOSDEM was going to be incredibly busy, with very poor air quality. And, rightly or wrongly, I felt that it would be sensible to get a better mask. I received several recommendations from mask-savvy fedizens, and I picked the Flo Mask Pro . It is not cheap, especially once one factors in international delivery, and it requires (well, says that it requires) the filter to be replaced daily. I don’t know how much that is “we want to sell you our custom filters” but I did change it this morning, before a second day’s use. I will never be in a position to say how effective it was, or whether it was more effective than my normal masks. I just can’t assess that reliably. What I can say is: Ultimately, yes, it is expensive, but I rather liked it. And if it helps lessen the risk of me getting sick, from whatever it might be, then that is money well spent. But, annoyingly, I have no way of assessing that. it is very comfortable, and I wore it for several hours at a time. It is heavier, but the two straps (sort of three, since the top strap splits in two) hold it in place nicely. It does not pull on my ears like my normal masks. I have a short beard and, as far as I could tell, it still sealed around my mouth and nose fine. Perhaps it would be better if I were clean shaven, but I am not. I can talk through it. I did a few tests with Sandra before I came (essentially, to make sure that I knew how to put it on correctly, and how to change the filter, before I arrived, but also to see what talking was like), and she said that I was clearly audible. I had no problem chatting to people while wearing it, in the quieter indoor areas, but there was no point at all in me trying to have a conversation without shouting in the busier areas, mask or no mask. changing the filter is easy, but there is a cost to the filters. It took me about a minute to change the filter this morning, and that was with me having to remind myself how to do it, since I tested it over Christmas and didn’t bring the instructions with me. yes, the shape makes you look a bit like a scifi soldier. I think it is the curves in the design. It did not bother me - I’m trying to be safe, not a fashion icon - but it might be a botheration factor for some. if the manufacturer stops selling the filters, I guess that it is finished, unless someone else starts selling them. it is relatively bulky. When I was not wearing it, I put it back in its small cloth bag, and then into my rucksack. It does fit into a hoodie’s pouch, but it is a it of a stretch (or I need a bigger hoodie), and into the pocket of my winter coat. I might wear it when I travel back on the Eurostar, in preference to my normal masks, simply because it is more comfortable. nobody gave me any grief whatsoever for wearing it. One person commented pleasantly - another person wearing a mask, saying that it was nice to see someone else wearing a mask - and that was it.

0 views