10 interesting stories served every morning and every evening.




1 554 shares, 19 trendiness

Anerkennung von Open-Source-Arbeit als Ehrenamt in Deutschland

Open-Source-Software bildet heute das Fundament großer Teile der dig­i­talen Infrastruktur — in Verwaltung, Wirtschaft, Forschung und im täglichen Leben. Selbst im ak­tuellen Koalitionsvertrag der Bundesregierung wird Open-Source-Software als el­e­mentarer Baustein zur Erreichung dig­i­taler Souveränität genannt.

Dennoch wird die Arbeit, die tausende Freiwillige dafür leis­ten, in Deutschland steuer- und förder­rechtlich nicht als Ehrenamt an­erkannt. Dieses Ungleichgewicht zwis­chen gesellschaftlicher Bedeutung und rechtlichem Status gilt es zu ko­r­rigieren.

Als ak­tiver Contributor in Open-Source-Projekten fordere ich da­her, Open-Source-Arbeit als gemein­wohlo­ri­en­tiertes Ehrenamt anzuerken­nen — gle­ichrangig mit Vereinsarbeit, Jugendarbeit oder Rettungsdiensten.

...

Read the original on www.openpetition.de »

2 425 shares, 20 trendiness

Imgur Geo-Blocked the UK, So I Geo-Unblocked My Entire Network

Imgur de­cided to block UK users. Honestly? I don’t re­ally care that much. I haven’t ac­tively browsed the site in years. But it used to be every­where. Back when Reddit em­bed­ded every­thing on Imgur, maybe fif­teen years ago, it was gen­uinely use­ful. Then Reddit built their own im­age host­ing, Discord did the same, and Imgur slowly faded into the back­ground.

Except it never fully dis­ap­peared. And since the block, I keep stum­bling across Imgur links that just show unavailable.” It’s mildly in­fu­ri­at­ing.

Here’s a con­crete ex­am­ple. I was play­ing Minecraft with some work col­leagues and wanted to try dif­fer­ent shaders. Most shader pages em­bed pre­view im­ages hosted on Imgur. So I’d click through shader af­ter shader, and every sin­gle pre­view was just gone. I could­n’t see what any of them looked like with­out the im­ages.

This kind of thing hap­pens con­stantly now. Old fo­rum posts, Reddit threads, doc­u­men­ta­tion pages, ran­dom pro­ject READMEs. Imgur links are still scat­tered across the in­ter­net, and in the UK, they’re all bro­ken.

The ob­vi­ous so­lu­tion is to use a VPN. Change your lo­ca­tion, prob­lem solved. But I have a few is­sues with that ap­proach.

First, I just up­graded to 2.5 Gbps in­ter­net and I don’t want to route all my traf­fic through a VPN and take the speed hit. I have this band­width for a rea­son.

Second, even if I in­stalled a VPN on my main ma­chine, what about my phone? My lap­top? My desk­top? Every de­vice would need the VPN run­ning, and I’d have to re­mem­ber to con­nect it be­fore brows­ing. It’s messy.

I wanted some­thing cleaner: a so­lu­tion that works for every de­vice on my net­work, au­to­mat­i­cally, with­out any client-side con­fig­u­ra­tion.

I al­ready run a home­lab with Traefik as my re­verse proxy, Pi-hole for DNS, and every­thing de­clar­a­tively con­fig­ured with NixOS. If you’ve read my pre­vi­ous post on Docker con­tain­ers with se­crets, you’ll recog­nise the pat­tern.

The idea was sim­ple: in­ter­cept all re­quests to i.imgur.com at the DNS level, route them through a VPN-connected con­tainer, and serve the im­ages back. Every de­vice on my net­work au­to­mat­i­cally uses Pi-hole for DNS via DHCP, so this would be com­pletely trans­par­ent.

Traefik sees the SNI host­name and routes to GluetunNginx (attached to Gluetun’s net­work) prox­ies to the real ImgurImage comes back through the tun­nel to the de­vice

Good ques­tion. Gluetun is­n’t a re­verse proxy. It’s a con­tainer that pro­vides VPN con­nec­tiv­ity to other con­tain­ers at­tached to its net­work name­space. So I needed some­thing in­side Gluetun’s net­work to ac­tu­ally han­dle the prox­y­ing. Nginx was the sim­plest choice.

The Nginx con­fig is min­i­mal. It just does TCP passthrough with SNI:

This lis­tens on port 443, reads the SNI header to con­firm the des­ti­na­tion, and passes the con­nec­tion through to the real i.imgur.com. The TLS hand­shake hap­pens end-to-end; Nginx never sees the de­crypted traf­fic.

The com­pose file runs two con­tain­ers. Gluetun han­dles the VPN con­nec­tion, and Nginx at­taches to Gluetun’s net­work:

The key de­tail is net­work_­mode: service:gluetun”. This makes Nginx share Gluetun’s net­work stack, so all its traf­fic au­to­mat­i­cally goes through the VPN tun­nel.

I’m not go­ing to men­tion which VPN provider I use. It’s one of the ma­jor ones with WireGuard sup­port, but hon­estly I’m not thrilled with it. Use what­ever you have.

The fi­nal piece is telling Traefik to route i.imgur.com traf­fic to the Gluetun con­tainer. This uses TCP rout­ing with TLS passthrough:

The passthrough: true is im­por­tant. It means Traefik does­n’t ter­mi­nate TLS; it just in­spects the SNI header and for­wards the con­nec­tion.

Following the same pat­tern from my Docker with se­crets post, I cre­ated a sys­temd ser­vice that runs the com­pose stack with Agenix-managed se­crets:

The VPN cre­den­tials are stored en­crypted with Agenix, so my en­tire dot­files repo stays pub­lic while keep­ing se­crets safe.

Now when any de­vice on my net­work re­quests an Imgur im­age, it works. My phone, my lap­top, guest de­vices, every­thing. No VPN apps to in­stall, no browser ex­ten­sions, no man­ual con­fig­u­ra­tion. Pi-hole in­ter­cepts the DNS, Traefik routes the con­nec­tion, and Gluetun tun­nels it through a non-UK exit point.

The la­tency in­crease is neg­li­gi­ble for load­ing im­ages, and it only af­fects Imgur traf­fic. Everything else still goes di­rect at full speed.

Is this overkill for view­ing the oc­ca­sional Imgur im­age? Probably. But it’s a clean so­lu­tion that re­quires min­i­mal on­go­ing main­te­nance, and it scratches the home­lab itch. Plus I can fi­nally see what those Minecraft shaders look like.

...

Read the original on blog.tymscar.com »

3 419 shares, 18 trendiness

Hacker News vector search dataset

Sentence Transformers pro­vide lo­cal, easy to use em­bed­ding mod­els for cap­tur­ing the se­man­tic mean­ing of sen­tences and para­graphs.

The dataset in this HackerNews dataset con­tains vec­tor emebed­dings gen­er­ated from the

all-MiniLM-L6-v2 model.

An ex­am­ple Python script is pro­vided be­low to demon­strate how to pro­gram­mat­i­cally gen­er­ate em­bed­ding vec­tors us­ing sen­tence_­trans­form­ers1 Python pack­age. The search em­bed­ding vec­tor is then passed as an ar­gu­ment to the [cosineDistance()](/sql-reference/functions/distance-functions#cosineDistance) func­tion in the SELECT` query.from sen­tence_­trans­form­ers im­port SentenceTransformer

im­port sys

im­port click­house­_­con­nect

print(“Ini­tial­iz­ing…“)

model = SentenceTransformer(‘sentence-transformers/all-MiniLM-L6-v2’)

chclient = click­house­_­con­nect.get_­client() # ClickHouse cre­den­tials here

while True:

# Take the search query from user

print(“En­ter a search query :“)

in­put_­query = sys.stdin.read­line();

texts = [input_query]

# Run the model and ob­tain search vec­tor

print(“Gen­er­at­ing the em­bed­ding for , in­put_­query);

em­bed­dings = model.en­code(texts)

print(“Query­ing ClickHouse…“)

params = {‘v1’:list(embeddings[0]), v2’:20}

re­sult = chclient.query(“SE­LECT id, ti­tle, text FROM hack­ernews ORDER BY cosineDis­tance(vec­tor, %(v1)s) LIMIT %(v2)s”, pa­ra­me­ters=params)

print(“Re­sults :“)

for row in re­sult.re­sult_rows:

print(row[0], row[2][:100])

print(“––––-“)

An ex­am­ple of run­ning the above Python script and sim­i­lar­ity search re­sults are shown be­low (only 100 char­ac­ters from each of the top 20 posts are printed):Ini­tial­iz­ing…

Enter a search query :

Are OLAP cubes use­ful

Generating the em­bed­ding for Are OLAP cubes use­ful”

Querying ClickHouse…

Results :

27742647 smart­mic:

slt2021: OLAP Cube is not dead, as long as you use some form of:1. GROUP BY mul­ti­ple fi ––––- 27744260 georgewfraser:A data mart is a log­i­cal or­ga­ni­za­tion of data to help hu­mans un­der­stand the schema. Wh ––––- 27761434 mwexler:“We model data ac­cord­ing to rig­or­ous frame­works like Kimball or Inmon be­cause we must r ––––- 28401230 chot­mat: erosen­be0: OLAP data­base is just a copy, replica, or archive of data with a schema de­signe ––––- 22198879 Merick:+1 for Apache Kylin, it’s a great pro­ject and awe­some open source com­mu­nity. If any­one i ––––- 27741776 crazy­dog­gers:I al­ways felt the value of an OLAP cube was un­cov­er­ing ques­tions you may not know to as ––––- 22189480 shad­ow­sun7: _Codemonkeyism: After main­tain­ing an OLAP cube sys­tem for some years, I’m not that ––––- 27742029 smart­mic: gengstrand: My first ex­po­sure to OLAP was on a team de­vel­op­ing a front end to Essbase that ––––- 22364133 ir­fan­sharif: simo7: I’m won­der­ing how this tech­nol­ogy could work for OLAP cubes. An OLAP cube ––––- 23292746 scoresmoke:When I was de­vel­op­ing my pet pro­ject for Web an­a­lyt­ics (

The ex­am­ple above demon­strated se­man­tic search and doc­u­ment re­trieval us­ing ClickHouse.

A very sim­ple but high po­ten­tial gen­er­a­tive AI ex­am­ple ap­pli­ca­tion is pre­sented next.

The ap­pli­ca­tion per­forms the fol­low­ing steps:

Accepts a topic as in­put from the user

Generates an em­bed­ding vec­tor for the topic by us­ing the SentenceTransformers with model all-MiniLM-L6-v2

Retrieves highly rel­e­vant posts/​com­ments us­ing vec­tor sim­i­lar­ity search on the hack­ernews table

Uses LangChain and OpenAI gpt-3.5-turbo Chat API to sum­ma­rize the con­tent re­trieved in step #3.

The posts/​com­ments re­trieved in step #3 are passed as con­text to the Chat API and are the key link in Generative AI.

An ex­am­ple from run­ning the sum­ma­riza­tion ap­pli­ca­tion is first listed be­low, fol­lowed by the code for the sum­ma­riza­tion ap­pli­ca­tion. Running the ap­pli­ca­tion re­quires an OpenAI API key to be set in the en­vi­ron­ment vari­able OPENAI_API_KEY. The OpenAI API key can be ob­tained af­ter reg­is­ter­ing at https://​plat­form.ope­nai.com.

This ap­pli­ca­tion demon­strates a Generative AI use-case that is ap­plic­a­ble to mul­ti­ple en­ter­prise do­mains like : cus­tomer sen­ti­ment analy­sis, tech­ni­cal sup­port au­toma­tion, min­ing user con­ver­sa­tions, le­gal doc­u­ments, med­ical records, meet­ing tran­scripts, fi­nan­cial state­ments, etc$ python3 sum­ma­rize.py

Enter a search topic :

ClickHouse per­for­mance ex­pe­ri­ences

Generating the em­bed­ding for ––> ClickHouse per­for­mance ex­pe­ri­ences

Querying ClickHouse to re­trieve rel­e­vant ar­ti­cles…

Initializing chat­gpt-3.5-turbo model…

Summarizing search re­sults re­trieved from ClickHouse…

Summary from chat­gpt-3.5:

The dis­cus­sion fo­cuses on com­par­ing ClickHouse with var­i­ous data­bases like TimescaleDB, Apache Spark,

AWS Redshift, and QuestDB, high­light­ing ClickHouse’s cost-ef­fi­cient high per­for­mance and suit­abil­ity

for an­a­lyt­i­cal ap­pli­ca­tions. Users praise ClickHouse for its sim­plic­ity, speed, and re­source ef­fi­ciency

in han­dling large-scale an­a­lyt­ics work­loads, al­though some chal­lenges like DMLs and dif­fi­culty in back­ups

are men­tioned. ClickHouse is rec­og­nized for its real-time ag­gre­gate com­pu­ta­tion ca­pa­bil­i­ties and solid

en­gi­neer­ing, with com­par­isons made to other data­bases like Druid and MemSQL. Overall, ClickHouse is seen

as a pow­er­ful tool for real-time data pro­cess­ing, an­a­lyt­ics, and han­dling large vol­umes of data

ef­fi­ciently, gain­ing pop­u­lar­ity for its im­pres­sive per­for­mance and cost-ef­fec­tive­ness.

Code for the above ap­pli­ca­tion :print(“Initializing…“)

im­port sys

im­port json

im­port time

from sen­tence_­trans­form­ers im­port SentenceTransformer

im­port click­house­_­con­nect

from langchain.doc­store.doc­u­ment im­port Document

from langchain.tex­t_s­plit­ter im­port CharacterTextSplitter

from langchain.chat_­mod­els im­port ChatOpenAI

from langchain.prompts im­port PromptTemplate

from langchain.chains.sum­ma­rize im­port load­_­sum­ma­rize_chain

im­port tex­twrap

im­port tik­to­ken

def num_­to­ken­s_from_string(string: str, en­cod­ing_­name: str) -> int:

en­cod­ing = tik­to­ken.en­cod­ing_­for_­model(en­cod­ing_­name)

num_­to­kens = len(en­cod­ing.en­code(string))

re­turn num_­to­kens

model = SentenceTransformer(‘sentence-transformers/all-MiniLM-L6-v2’)

chclient = click­house­_­con­nect.get_­client(com­press=False) # ClickHouse cre­den­tials here

while True:

# Take the search query from user

print(“En­ter a search topic :“)

in­put_­query = sys.stdin.read­line();

texts = [input_query]

# Run the model and ob­tain search or ref­er­ence vec­tor

print(“Gen­er­at­ing the em­bed­ding for ––> , in­put_­query);

em­bed­dings = model.en­code(texts)

print(“Query­ing ClickHouse…“)

params = {‘v1’:list(embeddings[0]), v2’:100}

re­sult = chclient.query(“SE­LECT id,ti­tle,text FROM hack­ernews ORDER BY cosineDis­tance(vec­tor, %(v1)s) LIMIT %(v2)s”, pa­ra­me­ters=params)

# Just join all the search re­sults

doc_re­sults =

for row in re­sult.re­sult_rows:

doc_re­sults = doc_re­sults + \n” + row[2]

print(“Ini­tial­iz­ing chat­gpt-3.5-turbo model”)

mod­el_­name = gpt-3.5-turbo”

tex­t_s­plit­ter = CharacterTextSplitter.from_tiktoken_encoder(

mod­el_­name=mod­el_­name

texts = tex­t_s­plit­ter.split_­text(doc_re­sults)

docs = [Document(page_content=t) for t in texts]

llm = ChatOpenAI(temperature=0, mod­el_­name=mod­el_­name)

promp­t_tem­plate = ”″

Write a con­cise sum­mary of the fol­low­ing in not more than 10 sen­tences:

...

Read the original on clickhouse.com »

4 396 shares, 15 trendiness

Credit Report Shows Meta Keeping $27 Billion Off Its Books Through Advanced Geometry

EXCLUSIVE: Credit Report Shows Meta Keeping $27 Billion Off Its Books Through Advanced GeometryAnalyst: Tom Bellwether

Contact Information: None avail­able*

*Because of the com­plex na­ture of fi­nan­cial alchemy, our an­a­lysts live a her­metic lifestyle and avoid rel­e­vant news, day­light, and the ol­fac­tory senses needed to de­tect bull­shit. Following our re­view of Beignet Investor LLC (the Issuer), an af­fil­i­ate of Blue Owl Capital, in con­nec­tion with its par­tic­i­pa­tion in an 80% joint ven­ture with Meta Platforms Inc., we as­sign a pre­lim­i­nary A+ rat­ing to the Issuer’s pro­posed $27.30 bil­lion se­nior se­cured amor­tiz­ing notes.This rat­ing re­flects our opin­ion that:All ma­te­r­ial risks are con­trac­tu­ally as­signed to Meta, which al­lows us to clas­sify them as hy­po­thet­i­cal and pro­ceed ac­cord­ingly.Pro­jected cash flows are suf­fi­ciently flat and un­both­ered by re­al­ity to sup­port the rat­ing.Resid­ual Value Guarantees (RVGs) ex­ist, which we take as ev­i­dence that as­set val­ues will be­have in ac­cor­dance with wishes rather than mar­kets.The Outlook is Superficially Stable, de­fined here as By out­ward ap­pear­ances sta­ble un­less, you know, things hap­pen. Then we’ll down­grade af­ter the shit hits the fan.”Blue Owl Capital Inc. (Blue Owl, BBB/Stable), through af­fil­i­ated funds, has cre­ated Beignet Investor LLC (Beignet or Issuer), a pro­ject fi­nance-style hold­ing com­pany that will own an 80 per­cent in­ter­est in a joint ven­ture (JVCo) with Meta Platforms Inc. (Meta, AA-/Stable). The en­tity is named Beignet,” pre­sum­ably be­cause Off-Balance-Sheet Leverage Vehicle No. 5” tested poorly with fo­cus groups.Beignet is is­su­ing $27.30 bil­lion of se­nior se­cured amor­tiz­ing notes due May 2049 un­der a Rule 144A struc­ture.Note pro­ceeds, to­gether with $2.45 bil­lion of de­ferred eq­uity from Blue Owl funds and $1.16 bil­lion of in­ter­est earned on bor­rowed money held in Treasuries, will fund Beignet’s $23.03 bil­lion con­tri­bu­tion to JVCo for the 2.064 GW hy­per­scale data cen­ter cam­pus in Richland Parish, Louisiana, along with re­serve ac­counts, cap­i­tal­ized in­ter­est and other trans­ac­tion costs that seem small only in com­par­i­son to the rest of the sen­tence.Iris Crossing LLC, an in­di­rect Meta sub­sidiary, will own the re­main­ing 20 per­cent of JVCo and fund ap­prox­i­mately $5.76 bil­lion of con­struc­tion costs.We as­sign a pre­lim­i­nary A+ rat­ing to the notes, one notch be­low Meta’s is­suer credit rat­ing, re­flect­ing the very strong con­trac­tual link­age to Meta and the tight tech­ni­cal sep­a­ra­tion that al­lows Meta to keep roughly $27 bil­lion of as­sets and debt off its bal­ance sheet while con­tin­u­ing to pro­vide all ma­te­r­ial eco­nomic sup­port.Ar­rows, like cats, have a way of com­ing home, no mat­ter how far you throw them.Meta trans­ferred the Hyperion data cen­ter pro­ject into JVCo, which is owned 80 per­cent by Beignet and 20 per­cent by Iris Crossing LLC, an in­di­rect Meta sub­sidiary. JVCo, in turn, owns Laidley LLC (Landlord). None of this is un­usual ex­cept for the part where Meta de­signs, builds, guar­an­tees, op­er­ates, funds the over­runs, pays the rent, and does not con­sol­i­date it.This pro­ject has nine data cen­ters and two sup­port build­ings, with about four mil­lion sq. ft. and 2.064 GW ca­pac­ity. The sup­port build­ings will store the reams of doc­u­men­ta­tion needed to con­vince every­one this struc­ture is­n’t what it looks like. The to­tal cap­i­tal plan of $28.79 bil­lion will be funded as fol­lows:And, in a feat of fi­nan­cial hy­dra­tion, $1.16 bil­lion of in­ter­est gen­er­ated by the same bor­rowed money while it sits in lad­dered Treasuries.The struc­ture al­lows the Issuer to bor­row money, earn in­ter­est on the bor­rowed money, and then use that in­ter­est to sat­isfy the eq­uity re­quire­ment that would nor­mally re­quire… money.Noth­ing is cre­ated. Nothing is con­tributed. It’s a loop. Borrow money, earn in­ter­est, and use the in­ter­est to claim you pro­vided eq­uity. The kind of cir­cle only fi­nance can call a straight line.To­gether, these flows cover Beignet’s $23.03 bil­lion oblig­a­tion to JVCo, plus the usual con­stel­la­tion of cap­i­tal­ized in­ter­est, re­serve ac­counts, and trans­ac­tion ex­penses. In any other con­text this would raise ques­tions. For us, it raises the credit rat­ing.Meta, through Pelican Leap LLC (Tenant), has en­tered into eleven triple-net leases—one for each build­ing—with an ini­tial four-year term start­ing in 2029 and four re­newal op­tions that could ex­tend the arrange­ment to twenty years. The leases rely on the as­sump­tion that Meta will con­tinue to need ex­po­nen­tially more com­pute power and that AI de­mand will not col­lapse, re­verse, plateau, or be­come struc­turally in­con­ve­nient.The notes is­sued by Beignet are se­cured by Beignet’s eq­uity in­ter­est in JVCo and rel­e­vant trans­ac­tion ac­counts. They are not se­cured by the un­der­ly­ing phys­i­cal as­sets, which re­main at the JVCo and Landlord level. This is de­scribed as stan­dard prac­tice, which is true in the same way that us­ing eleven en­ti­ties to rent build­ings to your­self has be­come stan­dard prac­tice.The re­sult­ing struc­ture al­lows Meta to sup­port the pro­ject eco­nom­i­cally while leav­ing the as­so­ci­ated debt some­where that is tech­ni­cally not on Meta’s bal­ance sheet. The dis­tinc­tion is thin, but ap­par­ently wide enough to mat­ter.The pre­lim­i­nary A+ rat­ing re­flects our view that this is func­tion­ally Meta bor­row­ing $27.30 bil­lion for a cam­pus no one else will touch, pack­aged in le­gal for­mal­ity pre­cise enough to sat­isfy the let­ter of con­sol­i­da­tion rules and ab­surd enough to in­sult the spirit.Credit risk aligns al­most one-for-one with Meta’s own pro­file be­cause:Meta is ob­lig­ated to fund con­struc­tion cost over­runs be­yond 105 per­cent of the fixed bud­get, ex­clud­ing force ma­jeure events, which rat­ing agen­cies his­tor­i­cally treat as the­o­ret­i­cal in­con­ve­niences rather than re­cur­ring fea­tures of the phys­i­cal world.Meta guar­an­tees all lease pay­ments and op­er­at­ing oblig­a­tions, both dur­ing the ini­tial four-year term and across any re­newal pe­ri­ods it al­ready in­tends to ex­er­cise, an arrange­ment whose pur­pose be­comes clearer when one re­mem­bers why the cam­pus is be­ing built at all.Meta pro­vides an RVG (residual value guar­an­tee) struc­tured to be suf­fi­cient, in most mod­eled cases, to en­sure bond­hold­ers are re­paid even if Meta recom­mits to the Metaverse or any fu­ture ini­tia­tive born from its on­go­ing fas­ci­na­tion with ex­pen­sive de­tours. We did not model what would hap­pen if data cen­ter de­mand col­lapses and Meta can­not se­cure a new ten­ant. This sce­nario was ex­cluded for method­olog­i­cal con­ve­nience.The min­i­mum rent sched­ule has been cal­i­brated to pro­duce a debt ser­vice cov­er­age ra­tio of ap­prox­i­mately 1.12 through 2049. We con­sider this a suf­fi­cient level of sta­bil­ity usu­ally found only in spread­sheets that freeze when real-world data is used.Taken to­gether, these fea­tures tie Beignet’s credit qual­ity to Meta so tightly that you’d have to not be pay­ing at­ten­tion to miss them. The struc­ture main­tains a pre­car­i­ous tech­ni­cal sep­a­ra­tion that, un­der cur­rent in­ter­pre­ta­tions of ac­count­ing guid­ance, al­lows Meta to keep roughly $27 bil­lion of as­sets and debt off its own bal­ance sheet while con­tin­u­ing to pro­vide every mean­ing­ful form of eco­nomic sup­port.This treat­ment is con­sid­ered ac­cept­able be­cause the peo­ple who de­cide what is ac­cept­able have ac­cepted it.JVCo qual­i­fies as a vari­able in­ter­est en­tity be­cause the eq­uity at risk is cer­e­mo­nial and the real eco­nomic ex­po­sure sits en­tirely with the party in­sist­ing it does not con­trol the ven­ture. This re­mains le­gal due to the en­dur­ing be­lief that bal­ance sheets are health­ier when the risky parts are hid­den.Un­der U.S. GAAP, con­sol­i­da­tion is re­quired if Meta is the pri­mary ben­e­fi­ciary, de­fined as the party that both:Di­rects the ac­tiv­i­ties that most sig­nif­i­cantly af­fect the en­ti­ty’s per­for­mance, and­Meta as­serts it is not the pri­mary ben­e­fi­ciary.To eval­u­ate that as­ser­tion, we note the fol­low­ing un­con­tested facts:Meta is re­spon­si­ble for de­sign­ing, over­see­ing, and op­er­at­ing a 2.064 GW AI cam­pus, an ac­tiv­ity that re­quires tech­ni­cal ca­pa­bil­i­ties Blue Owl does not pos­sess.Meta bears con­struc­tion cost over­runs be­yond 105 per­cent of the fixed bud­get, as well as spec­i­fied ca­su­alty re­pair oblig­a­tions of up to $3.125 bil­lion per event dur­ing con­struc­tion.Meta pro­vides the guar­an­tee for all rent and op­er­at­ing pay­ments un­der the leases, across the ini­tial term and any re­newals.Meta pro­vides the resid­ual value guar­an­tee, en­sur­ing bond­hold­ers are re­paid if leases are not re­newed or are ter­mi­nated, ei­ther through a sale or by pay­ing the guar­an­teed min­i­mum val­ues di­rectly.Meta con­tributes fund­ing, di­rects op­er­a­tions, bears con­struc­tion risk, guar­an­tees pay­ments, guar­an­tees as­set val­ues, de­ter­mines uti­liza­tion, con­trols re­newal be­hav­ior, and can trig­ger the sale of the fa­cil­ity.Based on this, or de­spite this, Meta con­cludes it does not con­trol JVCo.Our in­ter­pre­ta­tion is fully com­pli­ant with U.S. GAAP, which pri­or­i­tizes the geom­e­try of the le­gal struc­ture over the in­con­ve­nience of eco­nomic sub­stance and rec­og­nizes con­trol only if the con­trol­ling party agrees to be rec­og­nized as con­trol­ling.Meta has not agreed, and the frame­work, in­clud­ing this agency, re­spects that choice.For rat­ing pur­poses, we there­fore ac­cept Meta’s non-con­sol­i­da­tion as an ac­count­ing out­come while treat­ing Meta, in all prac­ti­cal re­spects, as fully re­spon­si­ble for the per­for­mance of an en­tity it does not of­fi­cially con­trol.The lease struc­ture is de­signed to look like a nor­mal com­mer­cial arrange­ment while func­tion­ing as a long-term com­mit­ment Meta in­sists, for ac­count­ing rea­sons, it can­not pos­si­bly pre­dict.Ten­ant will pay fixed rent for the first 19 months of op­er­a­tions, based on a 50 per­cent as­sumed uti­liza­tion rate, af­ter which rent scales with ac­tual power con­sump­tion. The leases are triple-net. Meta is re­spon­si­ble for every­thing: op­er­at­ing costs, main­te­nance, taxes, in­sur­ance, util­i­ties. If a pipe breaks, Meta fixes the pipe. If a hur­ri­cane re­lo­cates a roof, Meta pays to sta­ple the roof back on.In prac­ti­cal terms, the only sce­nario in which Beignet bears op­er­at­ing ex­po­sure is a sce­nario in which Meta stops pay­ing its own bills, at which point the lease struc­ture be­comes ir­rel­e­vant be­cause the same lawyers that struc­tured this deal will have al­ready qui­etly ex­tri­cated Meta from li­a­bil­ity.A min­i­mum rent floor en­gi­neered to pro­duce a DSCR of 1.12 in a spread­sheet where 1.12 was likely hard-coded and in­de­pen­dent of math.A four-year ini­tial term with four four-year re­newal op­tions, the­o­ret­i­cally cre­at­ing a 20-year run­way Meta pre­tends not to see.Meta guar­an­tees all ten­ant pay­ment oblig­a­tions across the en­tire po­ten­tial lease life, in­clud­ing re­newals it strate­gi­cally re­fuses to ac­knowl­edge as in­evitable.No per­for­mance-based KPIs. Under this struc­ture, the build­ings could un­der­per­form, over­per­form, or catch fire. Meta still pays rent.The RVG re­quires Meta to en­sure that, at every po­ten­tial lease-ter­mi­na­tion date, the as­set is worth at least the guar­an­teed min­i­mum value. If mar­kets dis­agree, Meta pays the dif­fer­ence. Because Meta is rated AA-/Stable, we are in­structed to as­sume that it will do so with­out hes­i­ta­tion, in­clud­ing in sce­nar­ios where de­mand soft­ens or sec­ondary mar­kets dis­cover that a hy­per­scale cam­pus in Richland Parish is not the world’s most liq­uid as­set class.The in­ter­play be­tween the lease term and the RVG cre­ates a cir­cu­lar logic we find struc­turally ex­quis­ite.From a credit per­spec­tive, this cir­cu­lar­ity is con­sid­ered sup­port­ive, be­cause the same logic used to avoid con­sol­i­dat­ing the debt also en­sures bond­hold­ers are paid. The cir­cu­lar­ity is not treated as a fea­ture or a flaw. It is treated as ac­count­ing.Be­cause Meta is AA-/Stable, we as­sume it will pay what­ever num­ber the Excel model finds through Goal Seek, even in sce­nar­ios in­volv­ing tech­no­log­i­cal ob­so­les­cence or an in­va­sion of rac­coons.The ac­count­ing hinges on a para­dox en­gi­neered with dull tweez­ers:Un­der lease ac­count­ing, Meta must record fu­ture lease oblig­a­tions only if re­newals are rea­son­ably cer­tain.Un­der RVG ac­count­ing, Meta must record a guar­an­tee li­a­bil­ity only if pay­ment is prob­a­ble.To keep $27 bil­lion off its bal­ance sheet, Meta must there­fore as­sert:Re­newals are not rea­son­ably cer­tain, de­spite de­sign­ing, fund­ing, build­ing, and ex­clu­sively us­ing a 2.064 GW AI cam­pus for which the re­al­is­tic ten­ant list be­gins and ends with Meta.The RVG will prob­a­bly never be trig­gered, de­spite the fact that not re­new­ing would trig­ger it im­me­di­ately.This re­quires a nar­row cor­ri­dor of as­sump­tions in which Meta si­mul­ta­ne­ously plans to use the fa­cil­ity for two decades and in­sists that no one can pre­dict four years of cor­po­rate in­ten­tion.From a credit stand­point, we are sup­port­ive. The as­sump­tions that ren­der the debt in­vis­i­ble are pre­cisely what make it se­cure. A har­mony best de­scribed as col­lat­er­al­ized cog­ni­tive dis­so­nance.Meta link­age. The eco­nom­ics are wed­ded to Meta’s credit pro­file, which we are re­quired to de­scribe as AA-/Stable rather than the only rea­son this en­tire struc­ture does­n’t fold from a stiff breeze.” Meta guar­an­tees the rent, the RVG, and the con­tin­ued rel­e­vance of the fa­cil­ity. The rest is dé­cor au­di­tors would deem tasteful.”Minimum rent floor. The lease sched­ule pro­duces a per­fectly flat DSCR of 1.12 through 2049. Projects of this size do not pro­duce flat any­thing, but the model in­sists oth­er­wise, so we pre­tend we be­lieve it. Being stick­lers for tra­di­tion, and hav­ing learned noth­ing from the fi­nan­cial cri­sis of 2008, we treat the spread­sheet as the fi­nal ar­biter of truth, even when the in­puts de­scribe a world no one lives in.Con­struc­tion risk trans­fer. Meta ab­sorbs cost over­runs be­yond 105 per­cent of bud­get and han­dles ca­su­alty re­pairs dur­ing con­struc­tion. Our method­ol­ogy in­ter­prets contractually trans­ferred” as ceased to ex­ist,” so we de­cline to model the risk of over­runs on a $28 bil­lion cam­pus built in a hur­ri­cane cor­ri­dor. This is con­sid­ered best prac­tice.RVG back­stop. The resid­ual value guar­an­tee elim­i­nates tail risk in much the same way a par­ent cosign­ing for their teenager’s car loan elim­i­nates tail risk: by en­sur­ing that the per­son with all the money pays for every­thing. If the mar­ket value col­lapses, Meta pays the dif­fer­ence. If the fa­cil­ity can’t be sold, Meta pays the whole thing. If the en­tire cam­pus be­comes a rac­coon sanc­tu­ary, Meta still pays. We clas­sify this as credit pro­tec­tion, a nu­anced des­ig­na­tion that al­lows us to rec­og­nize the se­cu­rity of the arrange­ment with­out rec­og­niz­ing the debt.Ab­sence of per­for­mance KPIs. There are no op­er­a­tional KPIs that al­low rent abate­ment. This is help­ful be­cause KPIs cre­ate volatil­ity, and volatil­ity re­quires thought, a vari­able we ex­plic­itly ex­clude from our method­ol­ogy. By re­mov­ing KPIs en­tirely, the struc­ture en­sures a level of cash-flow sta­bil­ity that ex­ists only in trans­ac­tions where the ten­ant is also the eco­nomic owner pre­tend­ing to be a squat­ter.Key Risks We Have Chosen To Be Comfortable WithThe rat­ing also re­flects sev­eral risks that are ac­knowl­edged, in­tel­lec­tu­ally trou­bling, and ul­ti­mately tol­er­ated be­cause Meta is large enough that every­one agrees to stop ask­ing ques­tions.Off-bal­ance-sheet de­pen­dence. Meta treats JVCo as if it be­longs to some­one else, which is a gen­er­ous in­ter­pre­ta­tion of own­er­ship. If con­sol­i­da­tion rules ever evolve to re­flect eco­nomic sub­stance, Meta could be re­quired to add $27 bil­lion of as­sets and match­ing debt back onto its own bal­ance sheet. Our method­ol­ogy treats this as a the­o­ret­i­cal in­con­ve­nience rather than a credit event, be­cause call­ing it what it re­ally is would cre­ate a con­flict with the very com­pa­nies we rate.Con­cen­tra­tion risk. The en­tire pro­ject ex­ists for one ten­ant with one busi­ness model in one in­dus­try un­der­go­ing tech­no­log­i­cal whiplash. The fa­cil­ity is en­gi­neered so specif­i­cally for Meta’s AI am­bi­tions that the only plau­si­ble al­ter­na­tive ten­ant is an­other ver­sion of Meta from a par­al­lel time­line. We strongly dis­agree with the many-worlds in­ter­pre­ta­tion of quan­tum me­chan­ics. We set this con­cern aside be­cause at this stage in the trans­ac­tion, the A+ rat­ing is a struc­tural load-bear­ing wall, and we are not paid to do de­mo­li­tion.Resid­ual value un­cer­tainty. The RVG de­pends on mod­eled guar­an­teed min­i­mum val­ues that as­sume buy­ers will one day de­sire a vast hy­per­scale com­plex in Richland Parish un­der stress sce­nar­ios. If hy­per­scale sup­ply bal­loons or the re­sale mar­ket for 2-gigawatt data cen­ters be­comes as illiq­uid as com­mon sense, Meta will owe more money. This in­creases Meta’s di­rect oblig­a­tions, which should con­cern us, but does not, be­cause Meta is rated AA-/Stable and there­fore pre­sumed to with­stand any sce­nario we have cho­sen not to model.Ca­su­alty and force ma­jeure. In ex­treme sce­nar­ios, mul­ti­ple build­ings could be de­stroyed by a hur­ri­cane, which we view as un­likely given that they al­most never im­pact Louisiana. The logic re­sem­bles a Rube Goldberg ma­chine built out of in­dem­ni­ties. We clas­sify this as a strength.JV struc­tural sub­or­di­na­tion. Cash flows must nav­i­gate wa­ter­falls, covenants, carve-outs, and the pos­si­bil­ity of up to $75 mil­lion of JV-level debt. These fea­tures in­tro­duce struc­tural com­plex­ity, which we flag, then promptly ig­nore, be­cause ac­knowl­edg­ing would force us to ex­plain who ben­e­fits from the con­vo­lu­tion.De­spite these risks, we main­tain an A+ rat­ing be­cause Meta’s credit qual­ity is strong, the struc­ture is de­signed to hide risk rather than trans­fer it, and our role in this ecosys­tem is to ob­serve these con­tra­dic­tions and pro­ceed as though they were fea­tures rather than warn­ings.The out­look is Superficially Stable. That means we ex­pect the struc­ture to hold to­gether as long as Meta keeps pay­ing for every­thing and the ac­count­ing rules re­main gen­er­ously un­in­ter­ested in eco­nomic re­al­ity.We as­sume, with the con­fi­dence of peo­ple who have clearly not been pun­ished enough:Meta will pre­serve an AA-/Stable pro­file be­cause any other out­come would force every­one in­volved to ad­mit what this ac­tu­ally is.Con­struc­tion will stay broadly on sched­ule,” a phrase we use to pre-for­give what­ever hap­pens as long as Meta cov­ers the over­runs, which it must.Lease pay­ments and the min­i­mum rent sched­ule will con­tinue pro­duc­ing a DSCR that hov­ers around 1.12 in mod­els de­signed to en­sure that re­sult, and not ma­te­ri­ally be­low 1.10 un­less some­thing un-mod­eled hap­pens, which we clas­sify as outside scope.”The RVG will re­main en­force­able, which mat­ters more than the re­sale value of a hy­per­scale fa­cil­ity in a world where hy­per­scale fa­cil­i­ties may or may not be worth any­thing.Changes in VIE or lease-ac­count­ing guid­ance will af­fect where Meta stores the debt, not whether Meta pays it.We could lower the rat­ing if Meta were down­graded, if DSCR sagged be­low the range we pre­tend is ac­cept­able, if Meta weak­ened its guar­an­tees, or if events un­fold in ways our as­sump­tions did not ac­count for, as events tend to do. The last cat­e­gory in­cludes any­thing that would force us to re­visit the as­sump­tions we con­fi­dently made with­out test­ing.We view an up­grade as un­likely. The struc­ture al­ready per­forms the sin­gle mir­a­cle it was de­signed for: keep­ing $27.3 bil­lion off Meta’s bal­ance sheet in a man­ner we are pro­fes­sion­ally ob­lig­ated to sup­port.CON­FI­DEN­TIAL­ITY AND USE: This re­port is in­tended solely for in­sti­tu­tional in­vestors, en­ti­ties re­quired by com­pli­ance to re­view doc­u­ments they will not read, and any reg­u­la­tory body still pre­tend­ing to mon­i­tor off-bal­ance-sheet arrange­ments. FSG LLC makes no rep­re­sen­ta­tion, war­ranty, or faint ges­ture to­ward co­her­ence re­gard­ing the ac­cu­racy, com­plete­ness, or le­git­i­macy of any­thing con­tained herein. By read­ing this doc­u­ment, you ir­rev­o­ca­bly ac­knowl­edge that we did not per­form due dili­gence in any con­ven­tional, philo­soph­i­cal, or legally en­force­able sense. Our re­view con­sisted of reread­ing Meta’s press re­lease un­til rep­e­ti­tion pro­duced ac­cep­tance, aided by a Magic 8-Ball we shook un­til it agreed.LIM­I­TA­TION OF RELIANCE: Any re­sem­blance to ob­jec­tive analy­sis is co­in­ci­den­tal and should not be re­lied upon by any­one with fidu­ciary oblig­a­tions, eth­i­cal stan­dards, a work­ing mem­ory, or the abil­ity to per­form ba­sic sub­trac­tion. Forward-looking state­ments are based on as­sump­tions that will not sur­vive con­tact with re­al­ity, stress test­ing, most Tuesdays, or a mod­est change in in­ter­est rates. FSG LLC is not li­able for losses aris­ing from re­liance on this re­port, mis­un­der­stand­ing this re­port, fully un­der­stand­ing this re­port, or the sink­ing recog­ni­tion that you should have known bet­ter. Past per­for­mance is not in­dica­tive of fu­ture re­sults, ex­cept in the spe­cific case of rat­ing agen­cies re­peat­ing the same mis­takes at larger scales with in­creas­ing con­fi­dence.RAT­ING METHODOLOGY: The rat­ing as­signed herein may be re­vised, with­drawn, or de­nied ever ex­ist­ing if Meta con­sol­i­dates the debt, Louisiana ceases to ex­ist for tax pur­poses, or the data cen­ter be­comes self-aware and moves to Montana to es­cape the heat. FSG LLC cal­cu­lated the A+ rat­ing us­ing a pro­pri­etary model con­sist­ing of dis­counted cash flows, in­ter­pre­tive dance, and what­ever num­ber Meta’s CFO sounded com­fort­able with on a dili­gence call we did not in fact at­tend. Readers who dis­cover ma­te­r­ial er­rors in this re­port are con­trac­tu­ally ob­lig­ated to keep them to them­selves and ac­cept that be­ing tech­ni­cally cor­rect is the least valu­able form of cor­rect.GEN­ERAL PROVISIONS: By con­tin­u­ing to read, you con­sent to the propo­si­tion that what Meta does not con­sol­i­date does not ex­ist, waive your right to say I told you so” when this un­rav­els, and ac­cept that the term investment grade” is now a dis­po­si­tion rather than a met­ric. FSG LLC re­serves the right to amend, re­tract, deny, or dis­own this re­port at any time, par­tic­u­larly if Congress shows in­ter­est or some­one notes that $27 bil­lion off-bal­ance-sheet is on a bal­ance sheet some­where. If you print this doc­u­ment, you may be re­quired un­der ap­plic­a­ble se­cu­ri­ties law to re­cy­cle it, shred it, or burn it be­fore sun­rise, whichever comes first. For ques­tions, com­plaints, or sneak­ing sus­pi­cions, please do not con­tact us. We are un­avail­able in­def­i­nitely and have dis­abled our voice­mail.

...

Read the original on stohl.substack.com »

5 384 shares, 16 trendiness

Bringing Sexy Back

I don’t re­mem­ber when I first started notic­ing that peo­ple I knew out in the world had lost their sense of erotic pri­vacy, but I do re­mem­ber the day it struck me as a phe­nom­e­non that had es­caped my time­line and en­tered my real, fleshy life. It was last year, when I was hav­ing a con­ver­sa­tion with a friend of mine, who, for the record, is five years younger than me (I’m 31). I told my friend about an erotic en­counter I’d just ex­pe­ri­enced and very much de­lighted in, in which I had my hair brushed at the same time by two very beau­ti­ful women at the hair sa­lon — one was teach­ing the other how to do it a cer­tain way. When I fin­ished my story, my friend looked at me, hor­ri­fied.

They had no idea you felt some­thing sex­ual about them,” she said. What if they found out? Lowkey, I hate to say this but: you took ad­van­tage of them.” I was shocked. I tried to ex­plain — and it felt ex­tremely ab­surd to ex­plain — that this had hap­pened in my body and in my thoughts, which were pri­vate to me and which no­body had the right to know about. But they did have the right, my friend ar­gued. She de­manded that I apol­o­gize to the women for sex­u­al­iz­ing them. Offended at hav­ing been ac­cused — in my view, in ex­tremely bad faith — of be­ing some kind of peep-show creep, I tried to ar­gue that I’d sim­ply re­sponded in a phys­i­cal way to an un­ex­pected, di­rect, and in­vol­un­tary stim­u­lus. Back and forth, back and forth, we fought like this for a while. In fact, it ended the friend­ship.

There were other con­ver­sa­tions, too, that sug­gested to me that con­cep­tions of love and sex have changed fun­da­men­tally among peo­ple I know. Too many of my friends and ac­quain­tances — of vary­ing de­grees of onlineness,” from vet­eran dis­course ob­servers to ca­sual browsers — seem to have in­ter­nal­ized the in­ter­net’s ten­dency to reach for the least char­i­ta­ble in­ter­pre­ta­tion of every glanc­ing thought and, as a re­sult, to have pathol­o­gized what I would char­ac­ter­ize as the nor­mal, in­ter­nal va­garies of de­sire.

Hence, there was the friend who jus­ti­fied her predilec­tion for be­ing praised in bed as a kink” in­her­ited through the trauma” of her fa­ther al­ways harp­ing on her be­cause of her grades. There was the friend who felt en­ti­tled to post­ing screen­shots of in­ti­mate con­ver­sa­tions on Twitter af­ter a messy breakup so that she could get a rul­ing on who was the crazy one.” Then there was the friend who bit­terly de­scribed a man he was dat­ing as a fuckboy” be­cause he stood him up, claim­ing that their hav­ing en­joyed sex to­gether be­fore­hand was emotionally ma­nip­u­la­tive.” When I dug a bit deeper, it turned out the man in ques­tion had just got­ten out of a seven-year re­la­tion­ship and re­al­ized he was­n’t ready to be sex­u­ally in­ti­mate, and while he was rude to stand my friend up, it shocked me how quick my friend was to cat­e­go­rize his right­fully hurt feel­ings as some­thing patho­log­i­cal or sin­is­ter in the other per­son, and that he did this in or­der to pre­emp­tively shield him­self from be­ing cast as the vil­lain in what was a multi-party ex­pe­ri­ence. This last friend I asked: Who are you de­fend­ing your­self against?” To which he an­swered, to my as­ton­ish­ment: I don’t know. The world.”

I choose these ex­am­ples from my per­sonal life be­cause they ex­press sen­ti­ments that were once the kind of stuff I en­coun­tered only in the messy bat­tle­grounds of Twitter, amid dis­cus­sions about whether Sabrina Carpenter is be­ing over­sex­u­al­ized, whether kinks are akin to a sex­ual ori­en­ta­tion, whether a woman can truly con­sent in an age-gap re­la­tion­ship, and whether ex­po­sure to sex scenes in movies vi­o­lates viewer con­sent. It is quite easy to dis­miss these discourse wars” as a puritanism” af­flict­ing the young, a re­ac­tionary cur­rent to be solved with a dif­fer­ent, cor­rec­tive dis­course of pro-sex lib­er­a­tion, dis­trib­uted via those same chan­nels. If only it were so! To me, the re­al­ity goes deeper and is bleaker.

The fact is that our most in­ti­mate in­ter­ac­tions with oth­ers are now gov­erned by the ex­pec­ta­tion of sur­veil­lance and pun­ish­ment from an on­line pub­lic. One can never be sure that this pub­lic or some­one who could po­ten­tially ex­pose us to it is­n’t there, al­ways se­cretly film­ing, post­ing, tak­ing notes, ready to pounce the sec­ond one does some­thing cringe or prob­lem­atic (as de­fined by whom?). To claim that these mat­ters are merely dis­cur­sive in na­ture is to ig­nore the prob­lem. Because love and sex are so in­ti­mate and vul­ner­a­ble, the stakes of pun­ish­ment are higher, and the fear of it pen­e­trates deeper into the psy­che and is harder to ra­tio­nal­ize away than, say, fear of push­back from tweet­ing a di­vi­sive po­lit­i­cal opin­ion.

I should state at this point that this is not an es­say about cancel cul­ture go­ing too far,” a topic which can now be his­tori­cized as lit­tle more than a rhetor­i­cal cud­gel wielded suc­cess­fully by the right to wrest cul­tural power back from an as­cen­dant pro­gres­sive lib­er­al­ism. This was es­pe­cially true af­ter the promi­nence of or­ga­nized cam­paigns such as #MeToo. #MeToo was smeared by lib­er­als and con­ser­v­a­tives alike (united, as they al­ways are, in misog­yny) as be­ing in­her­ently puni­tive in na­ture, meant to pun­ish men who’d fallen into a rough patch of bad be­hav­ior, or who, per­haps, might not have done any­thing at all (the falsely ac­cused or the mis­in­ter­preted man be­came the real vic­tim, in this view). #MeToo did make use of the call-out — the story shared in a spread­sheet anony­mously or in a signed op-ed — but the call-outs had a pur­pose: to end a long-stand­ing and long-per­mit­ted norm of sex­ual abuse within in­sti­tu­tions. Underlying this was a dis­cur­sive prac­tice and a form of sol­i­dar­ity build­ing in which peo­ple be­lieved that shar­ing their sto­ries of trauma en masse could bring about struc­tural change. As some­one who par­tic­i­pated my­self, I too be­lieved in this the­ory and saw it as nec­es­sary, cathar­tic, and po­lit­i­cal, and far from vig­i­lante jus­tice.

But the push­back against #MeToo re­veals a cer­tain peril to sto­ry­telling as pol­i­tics, not only in the re­trauma­ti­za­tion ev­i­dent in the prac­tice of re­veal­ing one’s most in­ti­mate harms be­fore an in­fi­nite on­line au­di­ence, which could al­ways in­clude those lis­ten­ing in bad faith. But also, a dis­cur­sive mar­ket opened up in which trauma be­came a kind of cur­rency of au­then­tic­ity, re­sult­ing in a dou­bled ex­ploita­tion. This idea, while not very nice, lingers in the use of harm as an au­thor­i­ta­tive form of rhetor­i­cal de­fense. The prob­lem here is not what is said, but how it is used. A fric­tion has since emerged be­tween an aware­ness of weaponiza­tion of harm and emo­tion and the con­tin­ued need to ex­press one­self as vul­ner­a­bly as pos­si­ble in or­der to come off as sin­cere. This fric­tion is un­re­solved.

The or­ga­nized goals of the #MeToo move­ment are miss­ing from the new pu­ri­tanism. I think that the prud­ish re­vul­sion I’ve seen on­line and in my own life has as much to do with sur­veil­lance as with sex. Punishing strangers for their per­ceived per­ver­sion is a form of com­pen­sa­tion for a process that is al­ready com­pleted: the ero­sion of erotic and emo­tional pri­vacy through in­ter­net-dri­ven sur­veil­lance prac­tices, prac­tices we have since turned in­ward on our­selves. In short, we have be­come our own panop­ti­cons.

On the right­most side of the spec­trum, puni­tive anti-erotic sur­veil­lance is very ex­plicit and very real, es­pe­cially for women. The Andrew Tates of the world and the prac­ti­tion­ers of ex­treme forms of misog­yny have no prob­lem with us­ing in­ter­net tools and so­cial me­dia web­sites for mass sham­ing and ex­plicit harm. Covert film­ing of sex acts, AI deep fakes, ex­tor­tion, and re­venge porn are all re­al­i­ties one has to con­tend with when think­ing about hook­ing up or go­ing to pub­lic places such as night­clubs and gay bars. This is black­mail at its most ex­plicit and ex­treme, meant to fur­ther so­lid­ify a link be­tween sex and fear.

But that link be­tween sex and fear is op­er­at­ing in more benign” or com­mon modes of in­ter­net prac­tice. There is an on­line cul­ture that thinks noth­ing of sub­mit­ting screen­shots, notes, videos, and pho­tos with calls for col­lec­tive judge­ment. When it be­came de­sir­able and per­mis­si­ble to trans­form our own lives into con­tent, it did­n’t take long be­fore a sense of en­ti­tle­ment emerged that ex­tended that trans­for­ma­tion to peo­ple we know and to strangers. My ex sent me this text, clearly she is the crazy one, right? Look at this dumb/​funny/​cringe Hinge pro­file! Look at this note some guy sent me, is this a red flag? Look at this ran­dom woman I pho­tographed buy­ing wine, co­conut oil, and a long cu­cum­ber at the su­per­mar­ket!

I think these kinds of posts some­times amount to lit­tle more than com­mon bul­ly­ing, but they are on a con­tin­uum with a pu­ri­tan dis­course in which in­ti­mate ques­tions, prac­tices, and be­liefs about queer­ness, sex­u­al­ity, gen­der pre­sen­ta­tion, and de­sire are also sub­jected to days-long piles-on. In both in­stances, the in­stinct to sub­mit on­line strangers to vi­ral dis­ci­pline is given a faux-rad­i­cal sheen. It’s a kind of ca­sual black­mail that warns every­one to con­form or be ex­posed; a way of say­ing if you don’t cave to my point of view, re­de­fine your­self in my im­age of what sex­u­al­ity is or should be, and (most im­por­tantly) apol­o­gize to me and the pub­lic, I will sub­ject you to my large fol­low­ing and there will be hell to pay. Such un­pro­duc­tive and an­ti­so­cial be­hav­ior is jus­ti­fied as a step to­ward lib­er­a­tion from pre­da­tion, misog­yny, or any num­ber of other harms. But the puni­tive mind­set we’ve de­vel­oped to­wards re­la­tion­ships is in­dica­tive of an in­abil­ity to imag­ine a fu­ture of gen­dered or sex­ual re­la­tions with­out sub­ju­ga­tion. To couch that in the lan­guage of harm re­duc­tion and trauma dele­git­imizes both.

There are other ways the pol­i­tics of sur­veil­lance have be­come a kind of fun­house mir­ror. It is seen as more and more nor­mal to track one’s part­ner through Find My iPhone or an AirTag, even though the po­ten­tial for abuse of this tech­nol­ogy is stag­ger­ing and ob­vi­ous. There are all kinds of new prod­ucts, such as a bio­met­ric ring that is al­legedly able to tell you whether your part­ner is cheat­ing, that ex­pand this ca­pa­bil­ity into more and more gran­u­lar set­tings. That’s all be­fore we get into the end­less TikToks about why I go through my part­ner’s text mes­sages.” That men use these tac­tics and tools to con­trol women is a known threat. What is as­ton­ish­ing is the lengths to which some women will go to use these same tech­nolo­gies, claim­ing that they are nec­es­sary to pre­vent harm — es­pe­cially that caused by cheat­ing, which is now seen as some kind of life­long trauma or per­ma­nently damnable of­fense in­stead of one of the rather quo­tid­ian, if very painful, ways we hurt one an­other. Each of these sur­veil­lance prac­tices op­er­ates from a feel­ing of en­ti­tle­ment and con­trol over other peo­ple, their bod­ies, and what they do.

Pundits like to de­cree sex­less­ness as a Gen-Z prob­lem, to ar­gue no one is fuck­ing be­cause they are too on their phones. However, it is al­ways too easy to blame the young. It was my gen­er­a­tion that failed to in­still the so­cial norms nec­es­sary to pre­vent a sit­u­a­tion where fear of strangers on the in­ter­net has suc­cess­fully re­placed the dis­ci­pli­nary ap­pa­ra­tus more com­monly held by re­li­gious or con­ser­v­a­tive doc­trine. Even when, as in my ex­pe­ri­ence in the sa­lon, I am act­ing in the pri­vacy of my own body, some­one is al­ways there watch­ing, ready to in­ter­pret my ac­tions, prob­lema­tize them so as to share in the same sense of mag­i­cal think­ing, the same in­se­cu­ri­ties, and to be pun­ished for not be­ing in­se­cure in the same way.

It’s only in ret­ro­spect that I’m able to re­al­ize the toll that con­stant, nag­ging in­ter­ac­tion with my de­vices and the in­ter­net has taken on my think­ing life and my sex life. I re­mem­ber very vis­cer­ally when I’d just come out of the closet as bi­sex­ual in 2016. When I em­barked on a jour­ney to find the kind of lover I wanted to be, my only ex­pe­ri­ence with the world of queer­ness was on­line through memes, ar­ti­cles, and oth­ers’ so­cial me­dia pre­sen­ta­tion of them­selves and of pol­i­tics. Queer sex was not some­thing that could be dis­cov­ered through sen­sa­tion, through phys­i­cal in­ter­ac­tion, but was rather a cat­a­log of spe­cific acts and roles one was al­ready ex­pected to know. I was ter­ri­fied of mak­ing some kind of mis­take, of be­ing the wrong kind of bi­sex­ual, of mis­rep­re­sent­ing my­self in an of­fen­sive way (could I use the term soft butch” if I was­n’t a les­bian?), of be­ing ex­posed some­how as a fraud. When the time came for me to have sex for the first time, what should have been a joy­ous oc­ca­sion was in­stead bur­dened with a sense of be­ing watched. I could not let the nat­ural processes of erotic dis­cov­ery take their course, so caught up was I in judg­ing my­self from the per­spec­tive of strangers to whom I owed noth­ing.

But it was­n’t just a mat­ter of queer­ness, ei­ther. When I hooked up with men, I could only per­ceive of sex the same way, not as sit­u­a­tional but as a set of pre­scribed acts and scenes, many of which I wanted to ex­plore. However, this time I in­ter­ro­gated these urges as be­ing so­cio­genic in na­ture and some­how harm­ful to me, when they were, in fact, pri­vate, and I did not, in re­al­ity, feel harmed. Because I wanted, at one point in my life, to be tied up and gagged, the dis­em­pow­er­ing na­ture of such a want ne­ces­si­tated try­ing to jus­tify it against in­vis­i­ble ac­cu­sa­tions with some kind of trau­mato­genic and im­mutable qual­ity. Maybe it was be­cause I was raped in col­lege. Maybe I was just in­her­ently sub­mis­sive. One of the great ironies in the his­tory of sex is that pathol­o­giza­tion used to be a way of con­trol­ling sex­ual de­sire. (All are fa­mil­iar with the many myths that mas­tur­ba­tion would turn one blind.) Now it is a way of ex­empt­ing one­self, of re­lin­quish­ing con­trol of one’s ac­tions so as to ab­solve them of scrutiny. My lit­tle bondage mo­ment could­n’t be prob­lem­atic if it could­n’t be helped. It could­n’t be sub­jected to in­ter­ro­ga­tion if there was some­thing I could point to to say it’s be­yond my con­trol, don’t judge me!” One day, how­ever, I came to an im­por­tant rev­e­la­tion: The re­al­ity was much sim­pler. It was a pass­ing phase, a de­sire that orig­i­nated with a spe­cific man and lost its charm af­ter I moved on from him. There was­n’t some de­ter­min­is­tic qual­ity in my­self that made me like this. My de­sire was not fixed in na­ture. My sex­ual qual­i­ties were tran­sient and not in­born. What aroused me was won­der­fully, en­tirely sit­u­a­tional.

A sit­u­a­tional eroti­cism is what is needed now, in our lit­er­al­ist times. It’s ex­haust­ing, how every­thing is so read­ily de­fined by types, acts, trau­mas, kinks, fetishes, pathol­ogy, and aes­thet­ics. To me, our predilec­tion for de­ter­min­ism is an ex­pected psy­cho­log­i­cal re­sponse to ex­ces­sive sur­veil­lance. A sit­u­a­tional eroti­cism de­cou­ples sen­sa­tion from nar­ra­tive and ty­pol­ogy. It al­lows us to feel with­out ex­cuse and to re­late our feel­ings to our im­me­di­ate em­bod­ied mo­ment, grounded in a fun­da­men­tal sense of per­sonal pri­vacy. While it is ad­mirable to try and un­der­stand our­selves and im­por­tant to pro­tect our­selves from harm and in­ves­ti­gate crit­i­cally the ways in which what we want may put us at risk of that harm — or at risk of do­ing harm to oth­ers — some­times de­sires just are, and they are not that way for long. Arousal is a mat­ter of the self, which takes place within the body, a space no one can see into. It is of­ten a mys­tery, a sur­prise, a dis­cov­ery. It can hap­pen at a small scale, say, the fris­son of two sets of fin­gers in one’s hair at once. It is beau­ti­ful, un­planned and does not judge it­self be­cause it is an in­ert sen­sa­tion, unim­bued with pre­med­i­tated mean­ing. This should lib­er­ate rather than frighten us. Maybe what it means does­n’t mat­ter. Maybe we don’t have to jus­tify it even to our­selves.

But in or­der to fa­cil­i­tate a re­turn to sit­u­a­tional eroti­cism, we need to kill the panop­ti­con in our heads. That means first killing the panop­ti­con we’ve built for oth­ers. There is no pur­pose in vin­dic­tive or thought­less ex­po­sure. Not every­thing needs to be sub­jected to pub­lic opin­ion, not every anec­dote is worth shar­ing, not every de­bate needs en­gage­ment, es­pe­cially those de­bates which have no ma­te­r­ial ba­sis to them, no ask, no fun­nel for all that en­ergy. We need to stop con­fus­ing vig­i­lan­tism with jus­tice and post­ing with pol­i­tics. That does not mean we stop the work that #MeToo started, but that re­venge is a weapon best uti­lized col­lec­tively against the en­e­mies of lib­er­a­tion. We need to pro­tect the vul­ner­a­ble from ex­ploita­tive tech­nolo­gies and prac­tices, re­peat­edly de­nounce their use, and work to­wards a world with­out sex­ual co­er­cion, dig­i­tal or oth­er­wise.

On an in­di­vid­ual level, we need to aban­don or re­shape our re­la­tion­ships with our phones and re­gain a sense of our own per­sonal and men­tal pri­vacy. It’s a mat­ter of ex­is­ten­tial, meta­phys­i­cal im­por­tance. Only when this de­cou­pling from our­selves and the me­di­ated per­for­mance of our­selves is com­plete, can we be­gin the process of re­turn­ing to our own bod­ies out there, in the world, with no one watch­ing or read­ing our thoughts ex­cept those we want to. The truth is, we are very afraid not of sex, but of ex­po­sure. Only when we are un­afraid can we be­gin to let de­sire flour­ish. Only when we re­turn to our­selves can we re­ally know what we want.

Kate Wagner is the ar­chi­tec­ture critic at The Nation. Her award-win­ning cul­tural writ­ing has been fea­tured in mag­a­zines rang­ing from The Baffler to the New Republic.

...

Read the original on lux-magazine.com »

6 375 shares, 25 trendiness

Airbus update on A320 Family precautionary fleet action

Toulouse, France, 28 November 2025 — Analysis of a re­cent event in­volv­ing an A320 Family air­craft has re­vealed that in­tense so­lar ra­di­a­tion may cor­rupt data crit­i­cal to the func­tion­ing of flight con­trols.

Airbus has con­se­quently iden­ti­fied a sig­nif­i­cant num­ber of A320 Family air­craft cur­rently in-ser­vice which may be im­pacted.

Airbus has worked proac­tively with the avi­a­tion au­thor­i­ties to re­quest im­me­di­ate pre­cau­tion­ary ac­tion from op­er­a­tors via an Alert Operators Transmission (AOT) in or­der to im­ple­ment the avail­able soft­ware and/​or hard­ware pro­tec­tion, and en­sure the fleet is safe to fly. This AOT will be re­flected in an Emergency Airworthiness Directive from the European Union Aviation Safety Agency (EASA).

Airbus ac­knowl­edges these rec­om­men­da­tions will lead to op­er­a­tional dis­rup­tions to pas­sen­gers and cus­tomers. We apol­o­gise for the in­con­ve­nience caused and will work closely with op­er­a­tors, while keep­ing safety as our num­ber one and over­rid­ing pri­or­ity.

...

Read the original on www.airbus.com »

7 364 shares, 19 trendiness

Molly

Molly is an in­de­pen­dent Signal fork for Android with im­proved fea­tures:

Extra theme that fol­lows your de­vice palette

When you are gone for a set pe­riod of time

New and bet­ter fea­tures to come

...

Read the original on molly.im »

8 351 shares, 19 trendiness

How good engineers write bad code at big companies

Every cou­ple of years some­body no­tices that large tech com­pa­nies some­times pro­duce sur­pris­ingly sloppy code. If you haven’t worked at a big com­pany, it might be hard to un­der­stand how this hap­pens. Big tech com­pa­nies pay well enough to at­tract many com­pe­tent en­gi­neers. They move slowly enough that it looks like they’re able to take their time and do solid work. How does bad code hap­pen?

I think the main rea­son is that big com­pa­nies are full of en­gi­neers work­ing out­side their area of ex­per­tise. The av­er­age big tech em­ployee stays for only a year or two. In fact, big tech com­pen­sa­tion pack­ages are typ­i­cally de­signed to put a four-year cap on en­gi­neer tenure: af­ter four years, the ini­tial share grant is fully vested, caus­ing en­gi­neers to take what can be a 50% pay cut. Companies do ex­tend tem­po­rary yearly re­freshes, but it ob­vi­ously in­cen­tivizes en­gi­neers to go find an­other job where they don’t have to won­der if they’re go­ing to get the other half of their com­pen­sa­tion each year.

If you count in­ter­nal mo­bil­ity, it’s even worse. The longest I have ever stayed on a sin­gle team or code­base was three years, near the start of my ca­reer. I ex­pect to be re-orged at least every year, and of­ten much more fre­quently.

However, the av­er­age tenure of a code­base in a big tech com­pany is a lot longer than that. Many of the ser­vices I work on are a decade old or more, and have had many, many dif­fer­ent own­ers over the years. That means many big tech en­gi­neers are con­stantly figuring it out”. A pretty high per­cent­age of code changes are made by beginners”: peo­ple who have on­boarded to the com­pany, the code­base, or even the pro­gram­ming lan­guage in the past six months.

To some ex­tent, this prob­lem is mit­i­gated by old hands”: en­gi­neers who hap­pen to have been in the or­bit of a par­tic­u­lar sys­tem for long enough to de­velop real ex­per­tise. These en­gi­neers can give deep code re­views and re­li­ably catch ob­vi­ous prob­lems. But re­ly­ing on old hands” has two prob­lems.

First, this process is en­tirely in­for­mal. Big tech com­pa­nies make sur­pris­ingly lit­tle ef­fort to de­velop long-term ex­per­tise in in­di­vid­ual sys­tems, and once they’ve got it they seem to barely care at all about re­tain­ing it. Often the en­gi­neers in ques­tion are moved to dif­fer­ent ser­vices, and have to ei­ther keep up their old hand” du­ties on an ef­fec­tively vol­un­teer ba­sis, or aban­don them and be­come a rel­a­tive be­gin­ner on a brand new sys­tem.

Second, ex­pe­ri­enced en­gi­neers are al­ways over­loaded. It is a busy job be­ing one of the few en­gi­neers who has deep ex­per­tise on a par­tic­u­lar ser­vice. You don’t have enough time to per­son­ally re­view every soft­ware change, or to be ac­tively in­volved in every de­ci­sion-mak­ing process. Remember that you also have your own work to do: if you spend all your time re­view­ing changes and be­ing in­volved in dis­cus­sions, you’ll likely be pun­ished by the com­pany for not hav­ing enough in­di­vid­ual out­put.

Putting all this to­gether, what does the me­dian pro­duc­tive en­gi­neer at a big tech com­pany look like? They are usu­ally:

* com­pe­tent enough to pass the hir­ing bar and be able to do the work, but ei­ther

* work­ing on a code­base or lan­guage that is largely new to them, or

* try­ing to stay on top of a flood of code changes while also jug­gling their own work.

They are al­most cer­tainly work­ing to a dead­line, or to a se­ries of over­lap­ping dead­lines for dif­fer­ent pro­jects. In other words, they are try­ing to do their best in an en­vi­ron­ment that is not set up to pro­duce qual­ity code.

That’s how obviously” bad code hap­pens. For in­stance, a ju­nior en­gi­neer picks up a ticket for an an­noy­ing bug in a code­base they’re barely fa­mil­iar with. They spend a few days fig­ur­ing it out and come up with a hacky so­lu­tion. One of the more se­nior old hands” (if they’re lucky) glances over it in a spare half-hour, ve­toes it, and sug­gests some­thing slightly bet­ter that would at least work. The ju­nior en­gi­neer im­ple­ments that as best they can, tests that it works, it gets briefly re­viewed and shipped, and every­one in­volved im­me­di­ately moves on to higher-pri­or­ity work. Five years later some­body no­tices this and thinks wow, that’s hacky - how did such bad code get writ­ten at such a big soft­ware com­pany”?

I have writ­ten a lot about the in­ter­nal tech com­pany dy­nam­ics that con­tribute to this. Most di­rectly, in Seeing like a soft­ware com­pany I ar­gue that big tech com­pa­nies con­sis­tently pri­or­i­tize in­ter­nal leg­i­bil­ity - the abil­ity to see at a glance who’s work­ing on what and to change it at will - over pro­duc­tiv­ity. Big com­pa­nies know that treat­ing en­gi­neers as fun­gi­ble and mov­ing them around de­stroys their abil­ity to de­velop long-term ex­per­tise in a sin­gle code­base. That’s a de­lib­er­ate trade­off. They’re giv­ing up some amount of ex­per­tise and soft­ware qual­ity in or­der to gain the abil­ity to rapidly de­ploy skilled en­gi­neers onto what­ever the prob­lem-of-the-month is.

I don’t know if this is a good idea or a bad idea. It cer­tainly seems to be work­ing for the big tech com­pa­nies, par­tic­u­larly now that how fast can you pivot to some­thing AI-related” is so im­por­tant. But if you’re do­ing this, then of course you’re go­ing to pro­duce some gen­uinely bad code. That’s what hap­pens when you ask en­gi­neers to rush out work on sys­tems they’re un­fa­mil­iar with.

Individual en­gi­neers are en­tirely pow­er­less to al­ter this dy­namic. This is par­tic­u­larly true in 2025, when the bal­ance of power has tilted away from en­gi­neers and to­wards tech com­pany lead­er­ship. The most you can do as an in­di­vid­ual en­gi­neer is to try and be­come an old hand”: to de­velop ex­per­tise in at least one area, and to use it to block the worst changes and steer peo­ple to­wards at least min­i­mally-sen­si­ble tech­ni­cal de­ci­sions. But even that is of­ten swim­ming against the cur­rent of the or­ga­ni­za­tion, and if in­ex­pertly done can cause you to get PIP-ed or worse.

I think a lot of this comes down to the dis­tinc­tion be­tween pure and im­pure soft­ware en­gi­neer­ing. To pure en­gi­neers - en­gi­neers work­ing on self-con­tained tech­ni­cal pro­jects, like a pro­gram­ming lan­guage - the only ex­pla­na­tion for bad code is in­com­pe­tence. But im­pure en­gi­neers op­er­ate more like plumbers or elec­tri­cians. They’re work­ing to dead­lines on pro­jects that are rel­a­tively new to them, and even if their tech­ni­cal fun­da­men­tals are im­pec­ca­ble, there’s al­ways some­thing about the par­tic­u­lar setup of this sit­u­a­tion that’s awk­ward or sur­pris­ing. To im­pure en­gi­neers, bad code is in­evitable. As long as the over­all sys­tem works well enough, the pro­ject is a suc­cess.

At big tech com­pa­nies, en­gi­neers don’t get to de­cide if they’re work­ing on pure or im­pure en­gi­neer­ing work. It’s not their code­base! If the com­pany wants to move you from work­ing on data­base in­fra­struc­ture to build­ing the new pay­ments sys­tem, they’re fully en­ti­tled to do that. The fact that you might make some mis­takes in an un­fa­mil­iar sys­tem - or that your old col­leagues on the data­base in­fra team might suf­fer with­out your ex­per­tise - is a de­lib­er­ate trade­off be­ing made by the com­pany, not the en­gi­neer.

It’s fine to point out ex­am­ples of bad code at big com­pa­nies. If noth­ing else, it can be an ef­fec­tive way to get those spe­cific ex­am­ples fixed, since ex­ecs usu­ally jump at the chance to turn bad PR into good PR. But I think it’s a mis­take to at­tribute pri­mary re­spon­si­bil­ity to the en­gi­neers at those com­pa­nies. If you could wave a magic wand and make every en­gi­neer twice as strong, you would still have bad code, be­cause al­most no­body can come into a brand new code­base and quickly make changes with zero mis­takes. The root cause is that most big com­pany en­gi­neers are forced to do most of their work in un­fa­mil­iar code­bases.

edit: this post got lots of com­ments on both Hacker News and lob­ste.rs.

It was sur­pris­ing to me that many com­menters find this point of view un­ple­sas­antly ni­hilis­tic. I con­sider my­self fairly op­ti­mistic about my work. In fact, I meant this post as a rous­ing de­fence of big tech soft­ware en­gi­neers from their crit­ics! Still, I found this re­sponse blog post to be an ex­cel­lent ar­tic­u­la­tion of the this is too cyn­i­cal” po­si­tion, and will likely write a fol­lowup post about it soon. If you can’t wait, I wrote a bit on this topic at the start of 2025 in Is it cyn­i­cal to do what your man­ager wants?.

Some Hacker News com­menters had al­ter­nate the­o­ries for why bad code hap­pens: lack of mo­ti­va­tion, de­lib­er­ately de­mor­al­iz­ing en­gi­neers so they won’t union­ize, or just purely op­ti­miz­ing for speed. I don’t find these com­pelling, based on my own ex­pe­ri­ence. Many of my col­leagues are highly mo­ti­vated, and I just don’t be­lieve any tech com­pany is de­lib­er­ately try­ing to make its en­gi­neers de­mor­al­ized and un­happy.

A few read­ers dis­agreed with me about RSUs pro­vid­ing an in­cen­tive to leave, be­cause their com­pa­nies give stock re­fresh­ers. I don’t know about this. I get re­fresh­ers too, but if they’re not in the con­tract, then I don’t think it mat­ters - the com­pany can de­cide not to give you 50% of your comp at-will by just paus­ing the re­fresh­ers, which is an in­cen­tive to move jobs so it’s locked in for four more years.

...

Read the original on www.seangoedecke.com »

9 318 shares, 15 trendiness

So you wanna build a local RAG?

When we launched Skald, we wanted it to not only be self-hostable, but also for one to be able to run it with­out send­ing any data to third-par­ties.

With LLMs get­ting bet­ter and bet­ter, pri­vacy-sen­si­tive or­ga­ni­za­tions should­n’t have to choose be­tween be­ing left be­hind by not ac­cess­ing fron­tier mod­els and do­ing away with their com­mitt­ment to (or le­gal re­quire­ment for) data pri­vacy.

So here’s what we did to sup­port this use case and also some bench­marks com­par­ing per­for­mance when us­ing pro­pri­etary APIs vs self-hosted open-source tech.

A ba­sic RAG usu­ally has the fol­low­ing core com­po­nents:

And most times it also has these as well:

What that means is that when you’re look­ing to build a fully lo­cal RAG setup, you’ll need to sub­sti­tute what­ever SaaS providers you’re us­ing for a lo­cal op­tion for each of those com­po­nents.

Here’s a table with some ex­am­ples of what we might use in a sce­nario where we can use third-party Cloud ser­vices and one where we can’t:

Do note that run­ning some­thing lo­cally does not mean it needs to be open-source, as one could pay for a li­cense to self-host pro­pri­etary soft­ware. But at Skald our goal was to use fully open-source tech, which is what I’ll be con­ver­ing here.

The table above is far from cov­er­ing all avail­able op­tions on both columns, but ba­si­cally it gives you an in­di­ca­tion of what to re­search into in or­der to pick a tool that works for you.

As with any­thing, what works for you will greatly de­pend on your use case. And you need to be pre­pared to run a few more ser­vices than you’re used to if you’ve just been call­ing APIs.

For our lo­cal stack, we went with the eas­i­est setup for now to get it work­ing (and it does! see writeup on this lower down) but will be run­ning bench­marks on all other op­tions to de­ter­mine the best pos­si­ble setup.

This is what we have to­day:

Vector DB: Postgres + pgvec­tor. We al­ready use Postgres and did­n’t want to bun­dle an­other ser­vice into our stack, but this is con­tro­ver­sial and we will be run­ning bench­marks to make a bet­ter in­formed de­ci­sion here. Note that pgvec­tor will serve a lot of use cases well all the way up to hun­dreds of thou­sands of doc­u­ments, though.

Vector em­bed­dings: Users can con­fig­ure this in Skald and we use Sentence Transformers (all-MiniLM-L6-v2) as our de­fault (solid all-around per­former for speed and re­trieval, English-only). I also ran Skald with bge-m3 (larger, multi-lan­guage) and share the re­sults later in this post.

LLM: We don’t even bun­dle a de­fault with Skald and it’s up to the users to run and man­age this. I tested our setup with GPT-OSS 20B on EC2 (results shown be­low).

Reranker: Users can also con­fig­ure this in Skald, and the de­fault is the Sentence Transformers cross en­coder (solid, English-only). I’ve also used bge-reranker-v2-m3 and mmarco-mMiniLMv2-L12-H384-v1 which of­fer multi-lin­gual sup­port.

Document pars­ing: There is­n’t much of a ques­tion on this one. We’re us­ing Docling. It’s great. We run it via do­cling-serve.

So the main goal here was first to get some­thing work­ing then en­sure it worked well with our plat­form and could be eas­ily de­ployed. From here we’ll be run­ning ex­ten­sive bench­marks and work­ing with our clients to pro­vide a solid setup that both per­forms well but is also not a night­mare to de­ploy and man­age.

From that per­spec­tive, this was a great suc­cess.

Deploying a pro­duc­tion in­stance of Skald with this whole stack took me 8 min­utes, and that comes bun­dled with the vec­tor data­base (well, Postgres), a rerank­ing and em­bed­ding ser­vice, and Docling.

The only thing I needed to run sep­a­rately was the LLM, which I did via llama.cpp.

Having got­ten this sorted, I im­ported all the con­tent from the PostHog web­site [1] and set up a tiny dataset [2] of ques­tions and ex­pected an­swers in­side of Skald, then used our Experiments fea­ture to run the RAG over this dataset.

I ex­plic­itly kept the topK val­ues re­ally high (100 for the vec­tor search and 50 for post-rerank­ing), as I was mostly test­ing for ac­cu­racy and wanted to see the per­for­mance when ques­tions re­quired e.g. ag­gre­gat­ing con­text over 15+ doc­u­ments.

So with­out any more de­lay, here are the re­sults of my not-very-sci­en­tific at all bench­mark us­ing the ex­per­i­men­ta­tion plat­form in­side of Skald.

This is our de­fault Cloud setup. We use voy­age-3-large and rerank-2.5 from Voyage AI as our em­bed­ding and rerank­ing mod­els re­spec­tively, and we de­fault to Claude Sonnet 3.7 for re­sponses (users can con­fig­ure the model though).

Our LLM-as-a-Judge gave an av­er­age score of 9.45 to the re­sponses, and I ba­si­cally agree with the as­sess­ment. All an­swers were cor­rect, with one miss­ing a few ex­tra bits of con­text.

With the con­trol ex­per­i­ment done, I then moved on to a setup where I kept Voyage as the em­bed­dings provider and reranker, and then used GPT-OSS 20B run­ning on a llama.cpp server on a g5.2xlarge EC2 in­stance as the LLM.

The goal here was to see how well the open-source LLM model it­self stacked up against a fron­tier model ac­cessed via API.

And it did great!

We don’t yet sup­port LLM-as-a-Judge on fully lo­cal de­ploy­ments, so the only score we have here is mine. I scored the an­swers an av­er­age of 9.18 and they were all cor­rect, with two of them just miss­ing a few bits of in­for­ma­tion or high­light­ing less rel­e­vant in­for­ma­tion from the con­text.

Lastly, it was time for the mo­ment of truth: run­ning a fully lo­cal setup.

For this I ran two tests:

The most pop­u­lar open-source mod­els are all-MiniLM-L6-v2 for em­bed­dings and ms-marco-MiniLM-L6-v2 as the reranker, so I used those for my first bench­mark.

Here the av­er­age score was 7.10. Not bad, but def­i­nitely not great. However, when we dig into the re­sults, we can get a bet­ter un­der­stand­ing of how this setup fails.

Basically, it got all point queries right, which are ques­tions where the an­swer is some­where in the mess of doc­u­ments, but can be found from one spe­cific place.

Where it failed was:

* Non-english query: The em­bed­dings model and the reranker are English-based, so my ques­tion in Portuguese ob­vi­ously got no an­swer

* An am­bigu­ous ques­tion with very lit­tle con­text (“what’s ch”)

* Aggregating in­for­ma­tion from mul­ti­ple doc­u­ments/​chunks e.g. it only found 5 out of PostHog’s 7 fund­ing rounds, and only a sub­set of the PostHog com­peti­tors that of­fer ses­sion re­play (as men­tioned in the source data)

In my view, this is good news. That means that the de­fault op­tions will go a long way and should give you very good per­for­mance if your use case is only do­ing point queries in English. The other great thing is that these mod­els are also fast.

Now, if you need to han­dle am­bi­gu­ity bet­ter, or han­dle ques­tions in other lan­guages, then this setup is sim­ply not for you.

The next test I did used bge-m3 as the em­bed­dings model and mmarco-mMiniLMv2-L12-H384-v1 as the reranker. The em­bed­dings model is sup­pos­edly much bet­ter than the one used in the pre­vi­ous test and is also multi-lin­gual. The reranker on the other hand uses the same cross-en­coder from the pre­vi­ous test as the base model but also adds multi-lin­gual sup­port. The more stan­dard op­tion here would have been the much more pop­u­lar bge-reranker-v2-m3 model, but I found it to be much slower. I in­tend to tweak my setup and test it again, how­ever.

Anyway, onto the re­sults! I scored it 8.63 on av­er­age, which is very good. There were no com­plete fail­ures, and it han­dled the ques­tion in Portuguese well.

The mis­takes it made were:

* This new setup also did not do the best job at ag­gre­gat­ing in­for­ma­tion, miss­ing 2 of PostHog’s fund­ing rounds, and a cou­ple of its ses­sion re­play com­peti­tors

* It also an­swered a ques­tion cor­rectly, but added in­cor­rect ad­di­tional con­text af­ter it

So over­all it per­formed quite well. Again what we what saw was the main prob­lem is when the con­text needed for the re­sponse is scat­tered across mul­ti­ple doc­u­ments. There are var­i­ous tech­niques to help with this and we’ll be tri­al­ing some soon! They haven’t been needed on the Cloud ver­sion be­cause bet­ter mod­els save you from hav­ing to add com­plex­ity for min­i­mal per­for­mance gains, but as we’re fo­cused on build­ing a re­ally solid setup for lo­cal de­ploys, we’ll be look­ing into this more and more.

I hope this writeup has pro­vided you with at least some in­sight and con­text into build­ing a lo­cal RAG, and also the fact that it does work, it can serve a lot of use cases, and that the ten­dency is for this setup to get bet­ter and bet­ter as a) mod­els im­prove b) we get more open-source mod­els across the board, with both be­ing things that we seem to be trend­ing to­wards.

As for us at Skald, we in­tend to pol­ish this setup fur­ther in or­der to serve even more use cases re­ally well, as well as in­tend to soon be pub­lish­ing more le­git­i­mate bench­marks for mod­els in the open-source space, from LLMs to rerankers.

If you’re a com­pany that needs to run AI tool­ing in air-gapped in­fra­struc­ture, let’s chat — feel free to email me at yakko [at] us­eskald [dot] com.

Lastly, if you want to get in­volved, feel free to chat to us over on our GitHub repo (MIT-licensed) or catch us on Slack.

[1] I used the PostHog web­site here be­cause the web­site con­tent is MIT-licensed (yes, wild) and read­ily-avail­able as mark­down on GitHub and hav­ing worked there I know a lot of an­swers off the top of my head mak­ing it a great dataset of ~2000 doc­u­ments that I know well.

[2] The ques­tions and an­swers dataset I used for the ex­per­i­ments was the fol­low­ing:

...

Read the original on blog.yakkomajuri.com »

10 307 shares, 12 trendiness

Can Dutch universities do without Microsoft?

The chief pros­e­cu­tor of the International Criminal Court sud­denly could­n’t ac­cess his email. According to Microsoft, that’s be­cause of US sanc­tions against the court’s em­ploy­ees. The Trump ad­min­is­tra­tion was not amused by the Court’s ar­rest war­rant against the Israeli Prime Minister, Benjamin Netanyahu.

The main take­away from this episode is that those look­ing to pro­tect them­selves from Trump’s wrath would be wise not to de­pend on any com­pa­nies from his coun­try. According to the Dutch news­pa­per NRC, the International Criminal Court now uses a German al­ter­na­tive to Microsoft, though it has not of­fi­cially com­mented on the switch.

The German al­ter­na­tive, OpenDesk, al­lows users to send emails, edit text-based doc­u­ments, cre­ate pre­sen­ta­tions, share files, and make video calls. It is open source, so any­one can view and im­prove its code.

The same ap­plies to an­other al­ter­na­tive, also from Germany, called Nextcloud. This of­fice soft­ware has been tested by around 75 re­searchers from five Dutch uni­ver­si­ties since the be­gin­ning of 2025. Maybe other in­sti­tu­tions could switch to it as well?

Dependency

Dutch higher ed­u­ca­tion is highly de­pen­dent on American tech com­pa­nies, es­pe­cially Microsoft. Not only do stu­dents and staff use its soft­ware ex­ten­sively, but their IT staff are tied to a wide range of spe­cialised Microsoft soft­ware. In ad­di­tion, Dutch uni­ver­si­ties store a lot of data in Microsoft’s cloud.

Dutch lec­tur­ers have been sound­ing the alarm about this. Last Wednesday, the knowl­edge cen­tre for prac­tice-ori­ented re­search, DCC-PO, stated that the dom­i­nance of par­ties such as Google and Microsoft threat­ens the au­ton­omy of Dutch re­searchers. In their view, uni­ver­si­ties should adopt more open-source tools and open stan­dards.

In July, the Young Academy also warned that stu­dents and staff at Dutch higher ed­u­ca­tion in­sti­tu­tions have no idea what tech com­pa­nies are do­ing with their data. By out­sourc­ing the man­age­ment of IT sys­tems, these ed­u­ca­tional in­sti­tu­tions are los­ing tech­ni­cal knowl­edge and con­trol. As a re­sult, they are be­com­ing in­creas­ingly de­pen­dent on big tech, putting aca­d­e­mic free­dom and in­de­pen­dence at risk.

Fickle

Seven Dutch uni­ver­si­ties and one uni­ver­sity col­lege are al­ready on the State of Florida’s sanc­tions list for sev­er­ing or freez­ing ties with Israeli in­sti­tu­tions. With a fickle pres­i­dent like Donald Trump, ed­u­ca­tional in­sti­tu­tions could also face punishment” at any mo­ment.

Can they do with­out Microsoft, how­ever? Can they work with­out Office, Outlook, Teams and OneDrive? Not yet, ac­cord­ing to UU pro­fes­sors José van Dijck and Albert Meijer. All re­search and ed­u­ca­tion would come to an im­me­di­ate stand­still,” they wrote in March in an open let­ter call­ing on the Executive Board to do some­thing about dig­i­tal de­pen­dence.

According to the pro­fes­sors, Utrecht University is par­tic­u­larly de­pen­dent on Microsoft Office 365. UU staff and stu­dents use the pro­gramme for email and video calls, writ­ing and shar­ing doc­u­ments, cre­at­ing pre­sen­ta­tions and data stor­age, among other tasks. Such de­pen­dence makes for vulnerabilities, es­pe­cially in light of a rapidly chang­ing geopo­lit­i­cal sit­u­a­tion”.

Meijer and Van Dijck be­lieve that dependence on big tech is fun­da­men­tally at odds with pub­lic val­ues such as free­dom, in­de­pen­dence, au­ton­omy and equal­ity”. The pro­fes­sors would like the Executive Board to in­vest more in local ex­per­tise,” for ex­am­ple, by us­ing its own mail server. They also rec­om­mend col­lab­o­rat­ing with other European uni­ver­si­ties, es­pe­cially those in Germany and France, on an au­tonomous aca­d­e­mic IT in­fra­struc­ture”.

Breaking free

It is be­com­ing in­creas­ingly clear that de­pen­dence on big tech en­tails risks. This also ap­plies to Dutch higher ed­u­ca­tion, ac­cord­ing to Wladimir Mufty, from SURF, the IT co­op­er­a­tive of Dutch ed­u­ca­tion and re­search in­sti­tu­tions. We have al­ready gone through an aware­ness phase that lasted sev­eral years. We have looked at where the de­pen­den­cies lie, and now it is time to start try­ing out al­ter­na­tives.”

Mufty is SURFs dig­i­tal sov­er­eignty pro­gramme man­ager. At the end of last year, he sat down with five uni­ver­si­ties that wanted a sin­gle, shared dig­i­tal en­vi­ron­ment for their re­search pro­gramme, AlgoSoc. Scientists from Delft, Utrecht, Rotterdam, Tilburg and Amsterdam (UvA) wanted to use the same ap­point­ment plan­ner, share files, work to­gether on a sin­gle text, and make video calls, with­out be­ing de­pen­dent on a large provider. Mufty sug­gested the open source soft­ware pack­age from Nextcloud.

One of the users, PhD stu­dent Jacqueline Kernahan from TU Delft, thinks that Nextcloud could com­pete with Microsoft, though there are still a few glitches here and there. She is not de­terred by those, as she knows how prob­lem­atic de­pen­dence on Microsoft is.

She demon­strates the soft­ware in the hall of her fac­ulty in Delft. It looks very or­di­nary. The word proces­sor is quite good,” says Kernahan, who is do­ing her PhD on qual­ity and se­cu­rity con­trols in dig­i­tal sys­tems. I’m an av­er­age user, so I don’t need all the op­tions and apps the pro­gramme has to of­fer. But, to be hon­est, Microsoft is mak­ing it in­creas­ingly at­trac­tive to switch. Now that the com­pany is putting AI in every­thing, every­thing is be­com­ing more an­noy­ing to use.”

Nevertheless, Mufty be­lieves that not all ed­u­ca­tional in­sti­tu­tions will be able to switch to OpenDesk or Nextcloud overnight. The Criminal Court now has to act quickly, un­der pres­sure, but if a uni­ver­sity wanted to move away from Microsoft to­mor­row, that would pose a prob­lem.”

Entanglement

Meanwhile, Microsoft is tak­ing on more and more tasks. In ad­di­tion to of­fice soft­ware, it also de­vel­ops ar­ti­fi­cial in­tel­li­gence, builds its own data cen­tres and even lays its own in­ter­net ca­bles on the seabed. The com­pany is vertically in­te­grated”, as spe­cial­ists call it: every­thing can be done through one com­pany, from ba­sic tech­nol­ogy to the end user.

And that’s not all. Microsoft is also ex­pand­ing horizontally” by ac­quir­ing com­pa­nies where con­tent is the pri­mary fo­cus, rather than tech­nol­ogy. That’s a new phase, which I find wor­ry­ing,” says Mufty. For ex­am­ple, Microsoft bought LinkedIn, with its hun­dreds of mil­lions of ac­tive users who pro­duce enor­mous amounts of data, and GitHub, where soft­ware de­vel­op­ers can share and store their work.

SURF is keep­ing a close eye on these de­vel­op­ments. I would like our ed­u­ca­tion to re­main pub­lic and be able to pur­sue pub­lic val­ues such as au­ton­omy, in­de­pen­dence and aca­d­e­mic free­dom. IT should be help­ful, not con­trol­ling,” says Mufty.

He views the col­lab­o­ra­tion be­tween Microsoft and Sanoma with sus­pi­cion. The Finnish pub­lisher, which also serves the Dutch ed­u­ca­tion mar­ket through its Malmberg sub­sidiary, wants to make its teach­ing ma­te­ri­als avail­able via Microsoft Teams. Microsoft would then add its own learning ac­cel­er­a­tors”, i.e. ar­ti­fi­cial in­tel­li­gence de­signed to help per­son­alise the learn­ing process. Things like this some­times keep me awake at night,” sighs Mufty.

Alternatives

Dutch and European al­ter­na­tives do ex­ist. For ex­am­ple, re­search in­sti­tute TNO is work­ing with SURF and the Netherlands Forensic Institute on its own AI lan­guage model. There are also ded­i­cated data cen­tres.

Additionally, SURFConext is mak­ing head­way with a se­cure lo­gin ser­vice. But that’s not enough. If log­ging in via Microsoft does­n’t work in the fu­ture for what­ever rea­son, we’ll have a big prob­lem. This also ap­plies to ap­pli­ca­tions that are not from Microsoft it­self,” ex­plains Mufty.

In his view, we need se­ri­ous al­ter­na­tives. When the need arises, one should­n’t have to start from scratch. Moreover, com­pe­ti­tion en­sures that the mar­ket leader can­not charge top dol­lar.

But which ed­u­ca­tional in­sti­tu­tion is will­ing to sac­ri­fice it­self to run those al­ter­na­tives, with all the teething prob­lems that en­tails, when Microsoft can de­liver every­thing ready-made? Mufty be­lieves that, es­pe­cially in the be­gin­ning, ed­u­ca­tional in­sti­tu­tions will have to run two sys­tems in par­al­lel, with ad­di­tional ex­pen­di­ture on sup­port, main­te­nance, and se­cu­rity. But in my opin­ion, no sec­tor is as value-dri­ven as ed­u­ca­tion and re­search. This is pre­cisely where al­ter­na­tives should be able to get off the ground.”

Rectors

In 2019, the rec­tors of four­teen uni­ver­si­ties jointly pub­lished a com­pelling ar­gu­ment about the dig­i­tal in­de­pen­dence of Dutch higher ed­u­ca­tion. The gist was that we risk los­ing con­trol to Google and Microsoft.

Little has im­proved since then, ac­cord­ing to Jacquelien Scherpen, Rector of the University of Groningen. The coro­n­avirus pan­demic broke out just a few months af­ter that ar­ti­cle was pub­lished. We be­came even more de­pen­dent on big tech, be­cause we did­n’t have time to look for al­ter­na­tives.” Microsoft Teams has be­come in­dis­pens­able, for ex­am­ple.

Scherpen is the port­fo­lio holder for dig­i­tal sov­er­eignty within UNL, the um­brella as­so­ci­a­tion for Dutch uni­ver­si­ties. She ad­vo­cates tak­ing small steps: If we now choose an al­ter­na­tive prod­uct that func­tions less well, stu­dents and staff will start us­ing free pro­grammes, and we will be fur­ther away from our goal.”

Moreover, Scherpen says that we need leg­is­la­tion to pro­tect European al­ter­na­tives from big tech. Suppose a uni­ver­sity part­ners up with a European com­peti­tor of Microsoft, and then Microsoft buys that com­pany, what is the uni­ver­sity to do then?

That is not a the­o­ret­i­cal sce­nario. She men­tions the Dutch soft­ware com­pany Solvinity, which is in­volved with gov­ern­ment ser­vices such as DigiD and pro­vides se­cure com­mu­ni­ca­tion for the Ministry of Justice. An American com­pany now wants to take it over.

Scherpen: Perhaps we need to be­come more pro­tec­tion­ist, with­out hin­der­ing the free ex­change of new in­sights and in­no­va­tions. We must en­sure that the in­de­pen­dence we are fight­ing for does not slip out of our hands again.”

...

Read the original on dub.uu.nl »

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

If you like 10HN please leave feedback and share

Visit pancik.com for more.