FBI’s Atlantic probe shows ‘complete disregard’ for First Amendment


FOR IMMEDIATE RELEASE:

New York, May 6, 2026 — The FBI has reportedly opened a criminal leak investigation into Atlantic magazine journalist Sarah Fitzpatrick’s reporting on Director Kash Patel’s alleged unexplained absences and drinking habits at the bureau.

The following can be attributed to Freedom of the Press Foundation (FPF) Chief of Advocacy Seth Stern:

“The FBI’s probe would be outrageous even if The Atlantic reported classified information, which it didn’t. The FBI is reportedly conducting an invasive leak investigation merely to settle a personal vendetta. Separately, it doesn’t make much sense for Patel’s FBI to investigate leaks from what Patel’s lawsuit over the same reporting called ‘sham sources.’ Fake sources can’t leak.

“This is the second time in recent weeks we’ve learned that the bureau has baselessly investigated constitutionally protected, highly newsworthy reporting that was unfavorable to its director — last month, news broke that it investigated reporter Elizabeth Williamson, after she wrote about Patel’s use of government resources for transportation and security expenses for his girlfriend. Both show complete disregard for the First Amendment and for the FBI’s supposed mission of stopping crime, not serving as PIs for its leadership on the taxpayer dime.”

Please contact us if you would like further comment.


freedom.press/issues/fbis-atla…

Kruku reshared this.

The Pirate Post ha ricondiviso questo.

Auch in #SchleswigHolstein sind wir vor einem dystopischen #Polizeigesetz nicht gefeit.

netzpolitik.org/2026/polizeige…

Danke für die unermüdliche Berichterstattung @netzpolitik_feed!

#überwachung #dystopie #überwachungsstaat #polizei #PolizeiSH

The Pirate Post ha ricondiviso questo.

Die Bundesdatenschutzbeauftragte warnt weiterhin vor der #Chatkontrolle. Eine „anlasslose Massenüberwachung“ aller Bürger:innen „wäre in einem Rechtstaat beispiellos“. Auch die Datenschutzkonferenz fordert die EU-Gesetzgeber auf, die Chatkontrolle „endgültig abzusagen“.

netzpolitik.org/2026/anlasslos…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Pattern matching in C#: scenari avanzati che probabilmente non conosci
#tech
spcnet.it/pattern-matching-in-…
@informatica


Pattern matching in C#: scenari avanzati che probabilmente non conosci


Il pattern matching in C# non è solo un modo più elegante di scrivere condizioni: è un cambio di paradigma nel modo in cui si ragiona sulla struttura dei dati. A partire da C# 7 e con evoluzioni significative nelle versioni successive, il pattern matching è diventato uno strumento potentissimo per scrivere codice più leggibile, manutenibile e talvolta anche più efficiente.

In questo articolo esploreremo i pattern avanzati che molti sviluppatori .NET tendono a ignorare o a sottoutilizzare, partendo da un progetto concreto che dimostra ogni scenario.

Setup del progetto di esempio


Prima di tutto, creiamo un’applicazione console di test:

dotnet new console -n PatternMatchingDemo
cd PatternMatchingDemo

Definiamo i modelli come record, ideali per il pattern matching grazie alla loro natura value-based:
namespace PatternMatchingDemo.Records;

public record Address(string City, string Country);
public record User(string Name, int Age, Address Address, List<string> Roles);
public record Request(string Source, int Priority);
public record Point(int X, int Y);

E popoliamo alcune collezioni di test:
var users = new List<User>
{
    new("Ali", 25, new Address("Milano", "Italy"), new List<string> { "Admin", "User" }),
    new("Sara", 17, new Address("Roma", "Italy"), new List<string> { "User" }),
    new("Kennedy", 65, new Address("London", "UK"), new List<string> { "Guest" })
};

var requests = new List<Request>
{
    new("System", 10),
    new("User", 3),
    new("System", 2)
};

Property Pattern: matching annidato


Uno dei pattern più utili è il property pattern, che permette di verificare le proprietà di un oggetto direttamente nell’espressione di matching, incluse proprietà annidate:

foreach (var user in users)
{
    if (user is { Address.City: "Milano" })
    {
        Console.WriteLine($"{user.Name} è di Milano");
    }
}

Il confronto tradizionale richiederebbe:
if (user != null && user.Address != null && user.Address.City == "Milano")

La versione con property pattern è non solo più compatta, ma anche null-safe per definizione: se user o user.Address sono null, il pattern semplicemente non matcha.

Pattern con not: negazione elegante

foreach (var user in users)
{
    if (user is not { Address.City: "Milano" })
    {
        Console.WriteLine($"{user.Name} non è di Milano");
    }
}

Il keyword not inverte il risultato del pattern, rendendo esplicito il significato senza bisogno di operatori logici aggiuntivi.

Matching su casi multipli con or

foreach (var user in users)
{
    if (user is { Address.City: "Milano" or "Roma" })
    {
        Console.WriteLine($"{user.Name} vive in una grande città italiana");
    }
}

Il combinatore or all’interno di un pattern è molto più leggibile di una serie di condizioni concatenate con ||, specialmente quando le condizioni riguardano la stessa proprietà.

Pattern Matching dentro LINQ


Il pattern matching si integra perfettamente con LINQ, permettendo query molto espressive:

var adultiItaliani = users
    .Where(u => u is { Age: > 18, Address.Country: "Italy" })
    .ToList();

foreach (var user in adultiItaliani)
{
    Console.WriteLine($"{user.Name} è un adulto italiano");
}

Questa combinazione è particolarmente potente per filtrare DTO complessi, validare oggetti di dominio o implementare query su collezioni in memoria.

Pattern relazionali e logici


I pattern relazionali (>, <, >=, <=) combinati con i pattern logici (and, or) permettono di esprimere range e condizioni composite in modo molto naturale:

foreach (var user in users)
{
    if (user.Age is > 18 and < 60)
    {
        Console.WriteLine($"{user.Name} è un adulto lavorativo");
    }
    else if (user.Age is < 18 or > 60)
    {
        Console.WriteLine($"{user.Name} appartiene a una categoria di età speciale");
    }
}

Switch Expression


La switch expression (introdotta in C# 8) è una versione compatta e restituisce un valore. Elimina la verbosità del tradizionale switch statement:

foreach (var user in users)
{
    var categoria = user.Age switch
    {
        < 13 => "Bambino",
        < 20 => "Adolescente",
        < 60 => "Adulto",
        _     => "Senior"
    };

    Console.WriteLine($"{user.Name} => {categoria}");
}

Rispetto allo switch classico, la versione expression è più concisa, obbliga a coprire tutti i casi (o aggiungere il wildcard _) e restituisce direttamente un valore senza variabili intermedie.

Pattern Type + Condition


Il pattern di tipo permette di verificare il tipo di un oggetto e aggiungere una condizione contemporaneamente:

object value = 150;

// Modo tradizionale
if (value is int number && number > 100)
{
    Console.WriteLine("Numero grande (vecchio stile)");
}

// Con pattern matching
if (value is int and > 100)
{
    Console.WriteLine("Numero grande (pattern matching)");
}

Questo è particolarmente utile quando si lavora con object, dynamic, o con gerarchie di tipi complesse.

List Pattern (C# 11+)


Introdotto in C# 11, il list pattern consente di matchare la struttura e il contenuto di array e liste:

int[] nums = { 1, 2, 3 };

if (nums is [1, 2, 3])
{
    Console.WriteLine("Match esatto");
}

if (nums is [1, .., 3])
{
    Console.WriteLine("Inizia con 1 e finisce con 3");
}

if (nums is [_, _, _])
{
    Console.WriteLine("Array con esattamente 3 elementi");
}

Il slice pattern .. è molto flessibile: può matchare zero o più elementi nel mezzo di una sequenza. Questo pattern è molto utile per validare payload di API che arrivano come array, controllare header HTTP, o verificare strutture di dati fisse.

Positional Pattern

var point = new Point(10, 20);

if (point is (10, 20))
{
    Console.WriteLine("Il punto è (10,20)");
}

// Con switch expression
var descrizione = point switch
{
    (0, 0) => "Origine",
    (_, 0) => "Sull'asse X",
    (0, _) => "Sull'asse Y",
    _      => $"Punto generico ({point.X},{point.Y})"
};
Console.WriteLine(descrizione);

Il positional pattern decostruisce l’oggetto usando il metodo Deconstruct (disponibile automaticamente per i record) e permette di matchare ogni componente individualmente.

Combined Pattern: la vera potenza


Combinare più pattern insieme permette di esprimere logica di business complessa in modo dichiarativo:

foreach (var user in users)
{
    if (user is
        {
            Age: > 18,
            Address.Country: "Italy",
            Roles: ["Admin", ..]
        })
    {
        Console.WriteLine($"{user.Name} è un admin adulto italiano");
    }
}

Questo esempio combina property pattern annidato, relational pattern e list pattern in un’unica espressione. In scenari reali, questa tecnica è applicabile per authorization checks, validazione di DTO, o routing di request handler.

Null Pattern

User? maybeUser = null;

if (maybeUser is not null)
{
    Console.WriteLine("L'utente esiste");
}
else
{
    Console.WriteLine("L'utente è null");
}

Il null pattern con is not null è semanticamente più preciso di != null in contesti di nullable reference types, ed è la forma raccomandata nelle linee guida di C# moderno.

Guard Clause nelle switch expression

int number = 7;

var result = number switch
{
    int n when n % 2 == 0 => "Pari",
    int n when n % 2 != 0 => "Dispari",
    _ => "Sconosciuto"
};

Console.WriteLine(result);

La clausola when aggiunge una condizione aggiuntiva a un pattern. Utile quando il solo pattern non è sufficiente a discriminare i casi.

Request Handling pattern


Un esempio pratico di uso combinato in un sistema di routing delle request:

foreach (var request in requests)
{
    var response = request switch
    {
        { Source: "System", Priority: > 5 } => "Richiesta di sistema critica",
        { Source: "User",   Priority: <= 5 } => "Richiesta utente normale",
        _ => "Fallback generico"
    };

    Console.WriteLine($"{request.Source} ({request.Priority}) => {response}");
}

Questo schema è applicabile in moltissimi contesti: event sourcing, command dispatcher, middleware pipeline, validazione di business rules.

Considerazioni sulle performance


Oltre alla leggibilità, il pattern matching in C# è progettato per essere efficiente. Il compilatore ottimizza le switch expression in jump table o sequenze di confronto ottimizzate. Per tipi primitivi, le performance sono equivalenti o superiori a catene di if-else.

Per scenari di alta performance con molti branch (es. parser, protocol handler), vale la pena misurare con BenchmarkDotNet, ma nella stragrande maggioranza dei casi applicativi il pattern matching non introduce overhead significativo.

Conclusione


Il pattern matching in C# è uno strumento che va ben oltre il semplice is o lo switch. Combinando property pattern, list pattern, relational pattern e switch expression, è possibile scrivere logica complessa in modo dichiarativo e leggibile.

La chiave per sfruttarlo al meglio è conoscere tutti i tipi di pattern disponibili e riconoscere le situazioni in cui possono sostituire costrutti più verbosi. Un codice che legge come il problema che risolve è un codice di qualità superiore.

Il codice sorgente di esempio è disponibile su GitHub: github.com/elmahio-blog/Patter…


Fonte originale: Pattern matching in C#: Advanced scenarios you didn’t know — elmah.io Blog


The Pirate Post ha ricondiviso questo.

Schleswig-Holstein ist ganz vorne mit dabei, wenn es um die Entwicklung von Überwachungs-Dystopien geht. Das schwarz-grün regierte Bundesland will sich Verhaltensscanner, Echtzeit-Gesichtserkennung, Internet-Gesichtersuche, Datenanalyse a la Palantir und eine Ausweitung der Videoüberwachung erlauben. Ach ja: Bis zu acht Wochen Prophylaxe-Haft für Menschen, die in Freiheit womöglich Ordnungswidrigkeiten begehen, kommen auch noch dazu. Expert*innen gehen mit dem Entwurf hart ins Gericht. Heute wurde er erstmals im Landtag verhandelt. netzpolitik.org/2026/polizeige…
The Pirate Post ha ricondiviso questo.

Heute haben die Abgeordneten im Landtag von Schleswig-Holstein erstmals eine Novelle des Polizeigesetzes diskutiert. Es geht um Verhaltensscanner und Gesichtserkennung. Expert*innen zweifeln, ob das Gesetz verfassungsgemäß ist; die Opposition warnt vor einer Dystopie. netzpolitik.org/2026/polizeige…
The Pirate Post ha ricondiviso questo.

La giornalista Hannah Natanson minacciata e perseguitata dal regime di Trump ha vinto il Pulitzer. Il post di Roberto Saviano


"La giornalista del Washington Post Hannah Natanson è stata minacciata, trascinata in tribunale e ha visto l’FBI perquisire casa sua all’alba, sequestrandole telefono, computer e strumenti di lavoro. Non era l’indagata. Era la giornalista.

La sua “colpa” sarebbe questa: aver raccontato come l’amministrazione di Donald Trump, con Elon Musk e il progetto DOGE, volesse smantellare lo Stato dall’interno. Tagli, epurazioni, licenziamenti via mail comunicati all’improvviso, agenzie svuotate, servizi pubblici indeboliti, migliaia di lavoratori espulsi e la macchina pubblica trasformata in un laboratorio ideologico.

Quel lavoro, costruito con oltre mille fonti federali, protette e ascoltate, oggi ha vinto il Pulitzer Prize per il Public Service, il riconoscimento più importante del giornalismo americano.

Il Pulitzer ha premiato proprio questo: aver squarciato il velo di segretezza sulla demolizione del governo federale, raccontandone con precisione il caos e le conseguenze reali e tangibili sulla vita di milioni di persone.

Mentre il potere intimidiva, lei indagava. Mentre cercavano di spaventarla, lei continuava a pubblicare.
Mentre provavano a zittirla, il suo lavoro faceva luce.
Il giornalismo non è un crimine. Il giornalismo è luce nel buio."

t.me/valigiablu/4540

The Pirate Post ha ricondiviso questo.

Il Garante per la protezione dei dati personali partecipa alla Race for the Cure, l’iniziativa di Komen Italia

Il 7 e 8 maggio, al Circo Massimo, all’interno del Villaggio della Salute, il #GarantePrivacy sarà presente con uno spazio informativo dedicato al diritto all’oblio oncologico. Sarà un’occasione aperta a tutti per ricevere informazioni e orientamento su come esercitare tale diritto nei confronti di banche, assicurazioni, datori di lavoro e nell’ambito delle procedure di adozione

@Privacy Pride

gpdp.it/home/docweb/-/docweb-d…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

🎙️ BREAKING NEWS!!1! noyb has filed a #GDPR complaint against #Linkedin 📝 Why? The #Microsoft​ subsidiary tracks the visits to profile pages. However, if you want to see who has visited your own profile, you have to pay. 💸

To learn more, visit: noyb.eu/en/linkedin-locks-your…

The Pirate Post ha ricondiviso questo.

1 Jahr Merz-Regierung, 1 Jahr Intransparenz: Schon vor ihrem Amtsantritt wollte die CDU das Informationsfreiheitsgesetz abschaffen. Seit dem setzt die schwarz-rote Koalition immer wieder auf Abschottung und Schweigen, anstatt gesetzlichen Auskunftspflichten nachzukommen. Das ist gefährlich, denn gerade mehr Transparenz könnte autoritären Entwicklungen und Desinformation etwas entgegensetzen.

Die ganze Bilanz lest ihr bei den Kolleg*innen von @netzpolitik_feed

netzpolitik.org/2026/ein-jahr-…

The Pirate Post ha ricondiviso questo.

Eine Recherche von @ckoever und @yoshiXYZ wurde mit einem Sonderpreis bei der Verleihung des Datenschutz Medienpreises prämiert. Wir freuen uns sehr über die Auszeichnung und gratulieren den Kolleg:innen! 🍾 🎉 🏆

netzpolitik.org/2026/datenschu…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Erbärmlich, widerlich, abstoßend.
Dann spart euch doch eure wohlfeilen Worte gleich und sagt:
Mir doch egal, dass da Nacktbilder von Kindern und Frauen produziert werden.
Mir doch egal, dass der Inhaber Faschist ist.
Mir doch egal, dass X die größte Fake News Schleuder ist und ihre Kneipenbetreiber die rechten Kräften in Europa stützt.

table.media/berlin/news/x-aust…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

2° Meeting nazionale TWC Italia

🕒 13 giugno, 00:00 - 14 giugno, 00:00

📍 Casale Falchetti, Roma, Lazio

🔗 mobilizon.it/events/1f53f993-b…


2° Meeting nazionale TWC Italia
Inizia: Sabato Giugno 13, 2026 @ 12:00 AM GMT+02:00 (Europe/Rome)
Finisce: Domenica Giugno 14, 2026 @ 12:00 AM GMT+02:00 (Europe/Rome)

Incontriamoci. Confrontiamoci. Organizziamoci.

🌍 LSA100Celle - Roma

📍13 e 14 giugno ci vediamo a #Roma per il secondo Meeting nazionale di Tech Workers Coalition Italia. Un'occasione per discutere delle criticità del settore tech italiano e globale e mettere in rete le pratiche di mobilitazione.Un grande log out nazionale per costruire l'alternativa possibile nei nostri luoghi di lavoro. Non lasciamoci deformare dalla tecnologia.

Sostieni il meeting su OpenCollective e segui tutti gli aggiornamenti sul programma sul nostro sito.


reshared this

The Pirate Post ha ricondiviso questo.

EDRi condemns Zambia's de facto cancellation of #RightsCon2026 following Chinese pressure.

This violates freedom of expression & assembly and further strains the digital rights and democracy community at a critical moment.

We stand with @accessnow.bsky.social and Bloggers for Zambia.

Full statement → epd.eu/news-publications/state…

reshared this

The Pirate Post ha ricondiviso questo.

Von Katherina Reiches Lobby-Gipfel in den Alpen bis zu Wolfram Weimers Buchhandlungspreis: Das erste Jahr Schwarz-Rot ist geprägt von skandalöser Intransparenz und zähem Ringen um Informationsfreiheit.

Der vielleicht größte Umbruch: Unter Bundeskanzler Friedrich Merz ist Transparenz erstmals seit langem kein politisches Ziel mehr.

Eine vernichtende Bilanz zum Einjährigen von @fragdenstaat @lobbycontrol & @a_watch

Aufgeschrieben von @roofjoke

netzpolitik.org/2026/ein-jahr-…

Questa voce è stata modificata (5 giorni fa)
in reply to netzpolitik.org

Und wie steht es jetzt mit dem Auskunftverhalten der Merz Regierung nachdem BlackRock am DAX so viel verdient hat? Da gab es doch neulich eine Dividenden Rekord Ausschüttung? abgeordnetenwatch.de/recherche…
The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Redaktionsbesuch bei netzpolitik.org: Teresa Sickert führt euch fürs Medienmagazin von radio eins (rbb) durch unser Büro, spricht mit Chefredaktion und Geschäftsführung. Danke für das schöne Porträt unserer Arbeit! Mittendrin erzähle ich von unseren Recherchen mit @br_data zu den #DatabrokerFiles.

🎧 (37 min) ardsounds.de/episode/urn:ard:e…

The Pirate Post ha ricondiviso questo.

13 giugno 2026 00:00:00 CEST - GMT+2 - Casale Falchetti, 00172, Roma, Italia
Giu 13
2° Meeting nazionale TWC Italia
Sab 0:00 - Sab 22:00 Europe/Rome
m0nt4lb4n0

Incontriamoci. Confrontiamoci. Organizziamoci.

🌍 LSA100Celle - Roma

📍13 e 14 giugno ci vediamo a #Roma per il secondo Meeting nazionale di Tech Workers Coalition Italia. Un'occasione per discutere delle criticità del settore tech italiano e globale e mettere in rete le pratiche di mobilitazione.Un grande log out nazionale per costruire l'alternativa possibile nei nostri luoghi di lavoro. Non lasciamoci deformare dalla tecnologia.

Sostieni il meeting su OpenCollective e segui tutti gli aggiornamenti sul programma sul nostro sito.

reshared this

General Assembly Will Take Place on June 20th


Pirate Parties International will hold a Special General Assembly (GA) on June 20, 2026. The meeting is being called following a special request from the Czech Pirates and other PPI members. The GA will take place online.

At the PPI Board meeting on May 5, 2026, the Board agreed that it was necessary to call the GA without delay. The main reason is an urgent technical transition. PPI’s current technical services contract is ending on June 30, 2026, and the organization must decide how to ensure the continued operation of its communication, website, email, and related infrastructure.

The Board also discussed the need to bring broader questions to the membership, including possible changes to PPI’s fee structure. A statute amendment on membership fees may therefore be considered by the General Assembly.

During the last board meeting, several technical options were discussed, including email providers, server hosting, cooperation with Pirate technical teams, and more decentralized infrastructure proposals. Board members emphasized the importance of privacy, transparency, reliability, legal compliance, and cost-effectiveness.

The motion to hold the GA on June 20, 2026 was approved unanimously.

Statute amendments must be submitted a month before, so this leaves little time.

Elections for the board and offices will take place as usual in the Winter GA.

All PPI members are encouraged to participate and to help inform their parties about the upcoming Special General Assembly.

Read the full minutes from the May 5, 2026 Board meeting


pp-international.net/2026/05/g…

The Pirate Post ha ricondiviso questo.

Gli USA stanno usando le leggi sull'immigrazione come arma per mettere a tacere la stampa. Di nuovo - PAYWALL


L'amministrazione Trump sta prendendo di mira innanzitutto i giornalisti non cittadini, ma non si fermerà qui.

Se potesse, esilierebbe qualsiasi giornalista americano che osasse indagare su Trump e i suoi alleati.

nytimes.com/2026/05/04/world/a…

@giornalismo

Let´s Keep Android Open!


The media in this post is not displayed to visitors. To view it, please log in.

Pirates have consistently chosen Android over Apple because it is opensource and free. You buy the phone, so you should be able to decide what apps run on it. You should be able to tinker with it, as you wish. Unfortunately, Google’s new developer verification rules will change that. Starting in September 2026 (just a few months away from now), apps from outside the Play Store will be blocked unless the developer has registered with Google, agreed to its terms, paid fees, and handed over their identity documents. We are raising a big red flag. We must stop this regulation from advancing.

Link to global petition: https://keepandroidopen.org/


Google presents this as a security move, but obviously the big corporation has capitalistic motives. This policy will hurt independent developers, open-source projects, privacy tools, and ordinary users. A phone should not become something you only partly control after you paid for it.

Our colleagues at the European Pirates (PPEU) in their recent blog have emphasized these concerns: europeanpirates.eu/european-pi…

Link to PPEU blog and position paper: https://europeanpirates.eu/european-pirate-partys-stance-on-googles-android-developer-verification-requirement/


They highlight the need for “free software and the open ecosystem,” “civil liberties and the right to privacy,” and “competition law under the Digital Markets Act.”

In their 14 page position paper on this issue, PPEU argues that this is not just a security update. It would make F-Droid and similar opensource projects difficult or impossible to operate. PPEU frames the issue as a Digital Markets Act problem. Specifically, they highlight how this may breach Article 6(4) of that act, which requires that third-party apps and app stores are allowed and not just Google. They are calling on the European Commission to investigate.

<ADD Screenshot of PPEU position paper>

However, this is not just a European problem, it is a global one.

Android is used by billions of people. This decision will affect people far beyond Europe. Google has become richer and more powerful than many individual nations. Most of us live in countries without a supranational entity that can fight back, and we must speak up now as global activists!

Android’s openness is worth protecting. Once that freedom is gone, it may not come back.

Martti Randmaa member of the Estonian Pirate Party added:

“If this were really about keeping users safe, harmful apps wouldn’t appear in their app store in the first place. Blocking people from installing apps on their own phones feels unfair and limits their control over devices they own. Technology should work for everyone, not be controlled by a few private companies.”


Anja Hirschel, the German Pirate Party’s lead candidate for the 2024 European elections, said on the matter:

“We call on politicians to handle digital freedom responsibly as a fundamental part of our democracy and to protect it consistently. It is dishonest to stir up artificial societal debates in order to expand surveillance powers.”


Keith Goldstein, international coordinator of the Israeli Pirate Party and Chairperson of Pirate Parties International adds:

“This crackdown by Google is aimed at restricting the free and open internet, which is very important for all of us involved in the Pirate movement. We develop independent tools, often without any funding or goals to make profits. Android’s openness allowed us access to provide these tools, which Apple did not, and therefore we embraced it. Once Google decides who may develop and distribute software, we no longer truly own our own devices. We call on Google to withdraw this policy and let innovators share software freely. This is not a matter that nations can solve on their own. We need a global response.”

pp-international.net/2026/05/l…

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

The media in this post is not displayed to visitors. To view it, please go to the original post.

«I feed RSS mi portano più traffico di Google» dal Blog di Terence Eden

Ho letto di recente un post sul blog di Susam in cui si affermava che "la maggior parte del traffico verso il mio sito web personale proviene ancora dai feed web" - mi chiedevo se fosse vero anche per il mio sito.
Ecco le visualizzazioni del mio blog negli ultimi 28 giorni.

Il post di @eden

shkspr.mobi/blog/2026/05/rss-f…

@eticadigitale


RSS Feeds Send Me More Traffic Than Google

shkspr.mobi/blog/2026/05/rss-f…
Yeah yeah, I know, data-point of 1.

I recently read Susam's blog post where they said that "most of the traffic to my personal website still comes from web feeds" - I wondered if that was true for my site.

I've been writing this blog for a while. I've never much bothered with "aggressive" SEO - I have a fairly semantic layout, all my reviews have metadata, and stuff like that - but I'm not cramming in keywords, using AMP, or whatever other chickens Google requires to be sacrificed for a higher ranking. Nevertheless, I do OK.

Last year, I added a bit of local-only, lightweight statistics-gathering to my blog. I can see which sites people click on to reach mine. Google is right up the top, DuckDuckGo is surprisingly high, Bing is lucky to crack the top 20 on any day. Similarly, I can see how much traffic I get from the Fediverse and BlueSky (Twitter has all but vanished).

A few weeks ago I added RSS and Newsletter tracking. These data are very lossy. If someone is subscribed to my RSS feed and opens a post and their client downloads a lazy-loaded image at the end of the post, I get a hit. For email it's broadly the same. If an email is opened and the tracker image is loaded, I get a hit (although Gmail does obfuscate that somewhat).

I'm not looking for super-accurate numbers (although I do block as many AI crawlers and bots as possible). I'm not creepily following people around the web nor am I trying to sell them anything. I just want a rough idea of where people find me.

Here are my blog's views for the last 28 days.
Atom 13774. Google 10833. RSS 10419. DuckDuckGo 2302. Email 2123.
Some months I get a surge of hits from link aggregators like HN or Reddit. Sometimes I'm linked to from a popular site or cited in academic work. But most of the time I bumble along getting hits from here, there, and everywhere. Nevertheless, it's lovely to see so many people choosing to subscribe0 (for free!) and astonishing that they provide more traffic than a major search engine.

Obviously, these are two very different types of traffic. People who are searching for a specific thing and stumble upon my blog are different from those who decide to like and subscribe.

But, yeah, about 25% of my traffic comes from people who have chosen to subscribe.

I'm just delighted that so many people read my random thoughts.


  1. For historic reasons, I have separate Atom and RSS feeds. Perhaps I should consider merging them? But it doesn't take much effort to publish in two subtly different formats. ↩︎

#blog #blogging #meta #statistics


The Pirate Post ha ricondiviso questo.

Non è stata l'IA a cancellare il tuo database, sei stato tu.

«...Non sono uno che difende ciecamente l'IA, preferisco sempre essere prudente. Ma so anche che non si può incolpare uno strumento per i propri errori.»

idiallo.com/blog/ai-didnt-dele…

@aitech

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

📰 "LinkedIn is facing a privacy complaint in Austria over a feature that lets only paying users see who’s viewed their profile on the professional social network."

Read all about it on Euractiv 👇
euractiv.com/news/linkedin-fac…

reshared this

The Pirate Post ha ricondiviso questo.

Ahoi SSD! 🏴‍☠️ - #Windrose, un gioco di pirati, stava silenziosamente distruggendo il tuo SSD senza che tu te ne accorgessi

Una cache del database configurata in modo errato causava scritture a oltre 108 GB all'ora, ma una patch è già disponibile.

techspot.com/news/112271-early…

@pirati

The Pirate Post ha ricondiviso questo.

Immer mehr Bundesländer bekommen Kameras, die Verhalten analysieren. Nach welcher Art Bewegungen die suchen ist eine Art Black Box und kann von den Einsatzkräften auch weitgehend freihändig festgelegt werden. Davy Wang von @Freiheitsrechte hat mit mir über die grundrechtlichen Implikationen dieser Technologie gesprochen.
netzpolitik.org/2026/verhalten…
The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

The media in this post is not displayed to visitors. To view it, please go to the original post.

La Corea del Nord ha rubato il 76% di tutte le criptovalute hackerate nel 2026: due attacchi, $577 milioni, e una macchina da guerra finanziata dal cyber
#CyberSecurity
insicurezzadigitale.com/la-cor…


La Corea del Nord ha rubato il 76% di tutte le criptovalute hackerate nel 2026: due attacchi, $577 milioni, e una macchina da guerra finanziata dal cyber


Si parla di:
Toggle

Con solo due attacchi portati a termine nel corso di quattro mesi, gli hacker nordcoreani hanno sottratto il 76% di tutti i fondi rubati in operazioni di hacking crypto nel 2026. Un dato che non è semplice statistica: è la prova di come la Corea del Nord abbia trasformato il furto di criptovalute in una macchina di finanziamento statale su scala industriale.

Il dato che cambia tutto: $577 milioni in due colpi


Secondo il report aggiornato di TRM Labs, nei primi quattro mesi del 2026 gli attori nordcoreani hanno sottratto $577 milioni in criptovalute attraverso appena due operazioni distinte: il colpo da $285 milioni contro Drift Protocol e quello da $292 milioni contro KelpDAO/LayerZero. La somma rappresenta il 76% di tutti i fondi rubati a livello globale nel settore crypto nello stesso periodo, e porta il totale attribuibile alla Corea del Nord dal 2017 a oltre $6 miliardi.

Questi numeri, da soli, raccontano una storia che va ben al di là del crimine informatico tradizionale. Il regime di Pyongyang ha costruito nel tempo un’infrastruttura offensiva sofisticatissima, capace di eseguire operazioni di ingegneria sociale protratte per mesi, sfruttare vulnerabilità architetturali in protocolli DeFi e riciclare rapidamente fondi attraverso mixer e bridge cross-chain.

L’operazione Drift: pazienza come arma principale


Il caso Drift Protocol è quello che meglio illustra l’evoluzione tattica dei gruppi nordcoreani. L’analisi on-chain effettuata dai ricercatori ha ricostruito che lo staging dell’attacco era iniziato l’11 marzo 2026 — settimane prima dell’esecuzione finale. Ma la parte più inquietante riguarda il vettore umano: secondo la ricostruzione, operatori nordcoreani si sono infiltrati nell’ecosistema Drift attraverso incontri di persona con dipendenti dell’exchange, costruendo relazioni di fiducia nel corso di mesi.

Il metodo ricorda l’attacco Bybit del 2025, quando il gruppo Lazarus riuscì ad accedere ai sistemi tramite un contractor di fiducia. La differenza è che nel caso Drift il social engineering si è spinto fino al contatto fisico diretto, segnalando una capacità operativa di intelligence umana (HUMINT) che va ben oltre il phishing tradizionale. Gli analisti hanno ipotizzato che gli operatori nordcoreani stiano ora integrando strumenti di intelligenza artificiale nei flussi di ricognizione e ingegneria sociale.

L’operazione KelpDAO: vulnerabilità architetturali nei bridge cross-chain


Il secondo attacco, da $292 milioni contro KelpDAO tramite un bridge LayerZero, segue una logica completamente diversa ma altrettanto raffinata. Gli attaccanti hanno identificato e sfruttato un design flaw nel modello a singolo verificatore del bridge cross-chain, che permetteva la manipolazione dei messaggi tra chain Ethereum e Arbitrum. Dopo aver drenato i fondi, il gruppo ha tentato di riciclare i proventi attraverso THORChain, sebbene circa $75 milioni siano stati congelati su Arbitrum grazie all’intervento tempestivo di Uniswap e altri protocolli.

L’attribuzione di questo secondo attacco è stata attribuita a un gruppo distinto dal Lazarus Group classico — indicando che la Corea del Nord mantiene più unità cyber parallele specializzate in diversi vettori di attacco, con una struttura organizzativa comparabile a quella di un’agenzia di intelligence statale.

Il quadro strategico: il crypto come motore del programma nucleare


Per comprendere la portata di queste operazioni è necessario inquadrarle nel contesto geopolitico. Le Nazioni Unite e diversi governi occidentali hanno più volte documentato come i fondi rubati dalla Corea del Nord finanzino direttamente il programma missilistico e nucleare del regime. Con il sistema bancario nordcoreano quasi completamente escluso dal sistema finanziario internazionale a causa delle sanzioni, il crimine crypto è diventato una delle principali fonti di valuta estera.

Il modello operativo si è raffinato nel tempo: nelle prime operazioni del Lazarus Group (2016-2019) si ricorreva principalmente a spear phishing contro exchange centralizzati. Dal 2020 in poi l’attenzione si è spostata progressivamente verso i protocolli DeFi — più difficili da congelare, con meno meccanismi di KYC/AML, e spesso caratterizzati da vulnerabilità architetturali nei contratti smart o nei bridge.

Tattiche, tecniche e indicatori di compromissione (TTPs)


I pattern ricorrenti nelle operazioni nordcoreane contro il settore crypto includono:

  • Social engineering prolungato: infiltrazione nelle community, creazione di identità false su LinkedIn e GitHub, costruzione di relazioni di fiducia per mesi prima dell’attacco.
  • Targeting dei bridge cross-chain: sfruttamento di vulnerabilità nei protocolli di interoperabilità, spesso caratterizzati da minore maturità di sicurezza rispetto ai layer base.
  • Riciclaggio tramite THORChain e mixer: uso di protocolli decentralizzati per frammentare e offuscare il trail on-chain dei fondi rubati.
  • Insider threat via contractor: inserimento di operatori nordcoreani travestiti da sviluppatori o consulenti all’interno di team crypto legittimi.


Due parole per i difensori


Per i protocolli DeFi e gli exchange crypto, la minaccia nordcoreana richiede una risposta che vada oltre i controlli tecnici tradizionali. Il vettore umano è oggi il punto di ingresso primario: ogni processo di hiring di sviluppatori e contractor dovrebbe includere verifiche rafforzate dell’identità, con particolare attenzione ai profili che non possono essere verificati fisicamente o che mostrano pattern comportamentali anomali (riluttanza ai video call, timezone inconsistenti con la localizzazione dichiarata).

Sul fronte tecnico, la priorità dovrebbe essere la revisione dei modelli di fiducia nei bridge cross-chain: la dipendenza da un singolo verificatore o da un set ristretto di validatori crea un single point of failure che gli attaccanti sanno come sfruttare. I programmi di bug bounty con scope allargato ai bridge e ai contratti di interoperabilità sono diventati una necessità, non un’opzione.

Infine, la coordinazione con le agenzie di intelligence e i partner di blockchain analytics (TRM Labs, Chainalysis, Elliptic) al momento della scoperta di un’anomalia può fare la differenza tra il recupero parziale dei fondi e la perdita totale — come dimostra il congelamento di $75 milioni su Arbitrum nel caso KelpDAO.


The Pirate Post ha ricondiviso questo.

Gerade gibt es bundesweit Bestrebungen, Überwachungskameras mit Systemen zu koppeln, die vollautomatisiert erkennen, was die abgebildeten Menschen gerade tun. Davy Wang von der Gesellschaft für Freiheitsrechte erklärt, warum das eine schlechte Idee ist.
netzpolitik.org/2026/verhalten…
The Pirate Post ha ricondiviso questo.

Das ist heftig:

China positioniert sich gerne als Partner für den Globalen Süden und hat durch die Finanzierung und Umsetzung von Infrastrukturprojekten in den vergangenen Jahrzehnten massive Abhängigkeiten geschaffen. Jetzt soll die Volksrepublik diese Macht genutzt haben, um die #RightsCon in Sambia zu verhindern, eine der wichtigsten Konferenzen für Grund- und Menschenrechte in der digitalen Welt.

Der mutmaßliche Grund: Konferenzteilnehmende aus Taiwan.

netzpolitik.org/2026/konferenz…

Questa voce è stata modificata (6 giorni fa)
The Pirate Post ha ricondiviso questo.

L'aereo del primo ministro spagnolo Pedro Sánchez ha effettuato ieri un atterraggio di emergenza ad Ankara.


Sánchez era in viaggio da Madrid a Yerevan, capitale dell'Armenia, per il vertice della Comunità politica europea.
Questo è il secondo problema con il velivolo che Sanchez ha dovuto affrontare di recente. Il 4 settembre, un aereo di tipo Falcon su cui viaggiava è stato costretto a tornare a Madrid in volo a causa di un guasto tecnico. Questo incidente gli ha impedito di partecipare fisicamente a una riunione sull'Ucraina a Parigi.

bianet.org/haber/spanish-prime…

@politica

The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Critical Apache HTTP Server 2.4.67 Patches RCE Flaw CVE-2026-23918 — Upgrade All Servers Immediately
#CyberSecurity
securebulletin.com/critical-ap…
The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Jenkins Secret Guard Plugin: blocca i segreti hardcoded nelle pipeline CI/CD
#tech
spcnet.it/jenkins-secret-guard…
@informatica


Jenkins Secret Guard Plugin: blocca i segreti hardcoded nelle pipeline CI/CD


I segreti hardcoded nelle pipeline Jenkins sono uno dei problemi di sicurezza più sottovalutati nell’ecosistema CI/CD. Token API incollati direttamente in un campo di configurazione durante un test rapido, URL di webhook con query parameter segreti rimasti nel config.xml, header di autorizzazione in Jenkinsfile scritti una volta e mai più rivisti: situazioni ordinarie che, però, aprono falle di sicurezza concrete e difficili da intercettare manualmente.

Il nuovo Secret Guard Plugin per Jenkins è stato creato esattamente per risolvere questo problema: un plugin focalizzato, deterministico e pronto per ambienti di produzione che analizza le configurazioni Jenkins e le Pipeline alla ricerca di pattern ad alto rischio di esposizione di segreti.

Cosa analizza Secret Guard


Il plugin esamina le posizioni più comuni dove i segreti finiscono per errore:

  • File config.xml dei job
  • Script Pipeline inline
  • Jenkinsfile recuperati da SCM (quando è disponibile l’accesso SCM leggero)
  • Valori di default dei parametri
  • Definizioni di variabili d’ambiente
  • Contenuto di comandi come sh, bat, powershell e chiamate HTTP

L’approccio è intenzionalmente stretto nel perimetro: Secret Guard non cerca di essere uno strumento di governance generalista né un analizzatore di qualità del codice. Si concentra su pattern ad alta confidenza e ben documentati, riducendo il rumore prodotto da euristiche troppo aggressive.

Un esempio pratico


Il caso più frequente è una Pipeline che incorpora un token direttamente in una variabile d’ambiente o in un header HTTP. Ecco un Jenkinsfile problematico:

pipeline {
    agent any
    environment {
        API_TOKEN = 'ghp_012345678901234567890123456789012345'
    }
    stages {
        stage('Call API') {
            steps {
                sh "curl -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.abc123456789' https://api.example.com"
            }
        }
    }
}

Una volta che questo segreto è memorizzato nella configurazione del job, diventa difficile da ruotare e facile da esporre tramite export, backup, log o screenshot. Secret Guard rileva questi pattern prima che diventino un problema.

Il pattern corretto prevede di archiviare il segreto nelle Jenkins Credentials e iniettarlo solo a runtime:

pipeline {
    agent any
    stages {
        stage('Call API') {
            steps {
                withCredentials([string(credentialsId: 'api-token', variable: 'API_TOKEN')]) {
                    sh 'curl -H "Authorization: Bearer $API_TOKEN" https://api.example.com'
                }
            }
        }
    }
}

Con questo approccio, il valore del token non compare mai nel codice sorgente né nella configurazione del job: viene risolto da Jenkins solo al momento dell’esecuzione e mascherato automaticamente nei log.

Modalità di utilizzo


Secret Guard può essere usato in diversi contesti pratici:

  • Enforcement al salvataggio: blocca o segnala configurazioni di job che introducono segreti hardcoded nel momento in cui vengono salvate
  • Scansione a runtime: analizza la Pipeline durante l’esecuzione del build
  • Scan a livello di job: tramite l’azione “Scan Now” disponibile sulla pagina del job
  • Scan globale: la pagina amministrativa “Secret Guard” permette di analizzare tutti i job con un solo click

I risultati vengono archiviati in forma mascherata: gli amministratori possono esaminare i findings senza che i valori raw vengano persistiti nei report del plugin.

Tre livelli di enforcement


Per consentire un’adozione graduale, il plugin supporta tre modalità configurabili:

  • AUDIT: registra i findings senza bloccare nulla, ideale come punto di partenza per capire la situazione attuale
  • WARN: l’operazione viene completata ma il rischio viene segnalato esplicitamente
  • BLOCK: impedisce il salvataggio o l’esecuzione quando vengono trovati findings non esentati al di sopra della soglia configurata

Questa progressione permette di partire con la visibilità (AUDIT) e spostarsi verso un enforcement più rigoroso man mano che i team sanano i problemi esistenti.

Installazione


Il plugin è disponibile nel Jenkins Plugin Manager con il nome secret-guard. L’installazione è standard: Manage Jenkins → Plugins → Available plugins → cerca “Secret Guard”. Dopo il riavvio, la pagina “Secret Guard” apparirà nel menu di amministrazione globale.

Conclusione


Secret Guard colma un gap reale nelle pipeline Jenkins: la mancanza di uno strumento specifico, leggero e a basso rumore per intercettare i segreti hardcoded prima che finiscano in backup, log o nelle mani sbagliate. L’approccio deterministico — in contrapposizione all’inferenza AI o alle euristiche generiche — lo rende particolarmente adatto agli ambienti di produzione dove la prevedibilità del comportamento è critica.

Per team che già usano Jenkins in modo intensivo, introdurlo in modalità AUDIT per qualche settimana prima di passare a WARN o BLOCK è la strategia più sicura per ottenere subito visibilità senza interrompere i workflow esistenti.

Fonte: Introducing the Secret Guard Plugin – Jenkins Blog


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Microsoft Edge Stores Your Entire Password Vault in Cleartext Process Memory — Every Session
#CyberSecurity
securebulletin.com/microsoft-e…
The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Gemma 4 con Ollama e .NET Aspire: LLM in locale con il visualizzatore GenAI completo
#tech
spcnet.it/gemma-4-con-ollama-e…
@informatica


Gemma 4 con Ollama e .NET Aspire: LLM in locale con il visualizzatore GenAI completo


Se hai già usato l’integrazione Azure Foundry o Azure OpenAI in .NET Aspire, conosci già quella funzionalità: il visualizzatore GenAI che mostra le conversazioni con il modello all’interno del dashboard di tracing. Fai clic su una traccia, scorri fino alla chiamata LLM, e appare una piccola icona “sparkles”. Cliccandola, si apre un pannello con il log completo: system prompt, messaggio utente, risposta del modello, tool call, conteggio token e finish reason.

A prima vista sembra una funzionalità esclusiva di Azure Foundry. Non lo è. Il dashboard Aspire non controlla se gen_ai.system == "openai" né fa chiamate ad Azure. Si basa sulle OpenTelemetry GenAI semantic conventions: qualsiasi backend che emette span gen_ai.* con la forma corretta ottiene lo stesso trattamento. Ollama, LM Studio, llama.cpp — se espone un’API compatibile con OpenAI Chat Completions, può illuminare lo stesso popup.

Questo articolo mostra come configurare Ollama con il modello Gemma 4 in locale e ottenere il visualizzatore GenAI completo nel dashboard Aspire, senza Azure e senza costi cloud.

Perché eseguire LLM in locale?


I motivi sono diversi a seconda del contesto:

  • Compliance e data privacy: i dati non escono dall’infrastruttura aziendale.
  • Costi prevedibili: niente fatture cloud che raddoppiano durante i picchi di sviluppo AI.
  • Sviluppo offline: il modello funziona anche senza connessione Internet.
  • Iterazione rapida: nessun rate limit durante i test intensivi.


Il meccanismo: OpenTelemetry GenAI conventions


Il dashboard Aspire renderizza il visualizzatore GenAI quando trova span con questi attributi OpenTelemetry:

  • gen_ai.operation.name (es. chat, embedding)
  • gen_ai.request.model — il modello richiesto
  • gen_ai.response.model — il modello che ha risposto
  • gen_ai.input.messages — il prompt, serializzato in JSON
  • gen_ai.output.messages — la risposta, serializzata in JSON
  • gen_ai.usage.input_tokens / gen_ai.usage.output_tokens
  • gen_ai.response.finish_reasons

Quando uno span con questi attributi appare nella vista traces sull’activity source Experimental.Microsoft.Extensions.AI, il dashboard aggiunge l’icona sparkles e mostra il popup.

IChatClient è l’astrazione di Microsoft.Extensions.AI per qualsiasi cosa a cui si possano inviare messaggi chat. Azure OpenAI, Ollama e i modelli locali la implementano direttamente o si adattano ad essa. Il wrapper OpenTelemetry che ci interessa sa solo come tracciare oggetti con la forma di IChatClient.

Le quattro cose da configurare


Per ottenere il visualizzatore GenAI con un modello locale servono esattamente quattro elementi:

  1. Un’integrazione di hosting che esegue il backend del modello come risorsa Aspire e produce una connection string.
  2. Un IChatClient nel servizio consumer, decorato con UseOpenTelemetry() e content capture abilitato.
  3. La registrazione della sorgente di tracing in ServiceDefaults per far fluire gli span GenAI nel tracer provider.
  4. Il toggle di content capture, tramite variabile d’ambiente o via UseOpenTelemetry. Senza di esso il popup appare ma i messaggi sono vuoti.

Mancarne anche solo uno produce output silenziosamente degradato: senza il punto 3 gli span non escono dal processo; senza il punto 4 il popup è vuoto; senza il punto 2 si ottengono solo span HTTP generici.

1. Integrazione hosting: Ollama come risorsa Aspire


Aspire non include un’integrazione Ollama out of the box. Il Community Toolkit ne ha una, ma costruirla da zero mostra il pattern applicabile a qualsiasi backend OpenAI-compatible.

In una nuova class library referenziata dall’AppHost (con il package Aspire.Hosting):

public sealed class OllamaResource(string name)
    : ContainerResource(name), IResourceWithConnectionString
{
    internal const string PrimaryEndpointName = "http";
    private EndpointReference? _primaryEndpoint;

    public EndpointReference PrimaryEndpoint =>
        _primaryEndpoint ??= new EndpointReference(this, PrimaryEndpointName);

    public ReferenceExpression ConnectionStringExpression =>
        ReferenceExpression.Create(
            $"Endpoint={PrimaryEndpoint.Property(EndpointProperty.Url)}");
}

public static class OllamaResourceBuilderExtensions
{
    public static IResourceBuilder<OllamaResource> AddOllama(
        this IDistributedApplicationBuilder builder,
        string name,
        int? port = null)
    {
        var resource = new OllamaResource(name);
        return builder.AddResource(resource)
            .WithImage("ollama/ollama", "latest")
            .WithHttpEndpoint(port: port ?? 11434, targetPort: 11434, 
                             name: OllamaResource.PrimaryEndpointName)
            .WithVolume("ollama-data", "/root/.ollama");
    }
}

Nell’AppHost si aggiunge la risorsa Ollama e si collega al servizio che la usa:
var ollama = builder.AddOllama("ollama")
    .WithModel("gemma4:e2b");

var api = builder.AddProject<Projects.ScrumSummary_Api>("api")
    .WithReference(ollama)
    .WaitFor(ollama);

2. IChatClient con OpenTelemetry nel servizio consumer


Nel servizio che usa il modello, si registra il client con la catena di decoratori corretta:

builder.Services.AddSingleton(sp =>
{
    var connectionString = builder.Configuration.GetConnectionString("ollama")!;
    var endpoint = new Uri(connectionString.Replace("Endpoint=", ""));

    return new OllamaApiClient(endpoint)
        .AsChatClient("gemma4:e2b")
        .AsBuilder()
        .UseOpenTelemetry(configure: options =>
        {
            // Abilita la cattura del contenuto dei messaggi
            options.EnableSensitiveData = true;
        })
        .Build();
});

Il flag EnableSensitiveData = true è il toggle critico. Senza di esso, il popup nel dashboard compare ma non mostra i messaggi (per motivi di privacy è disabilitato di default).

3. Registrazione della sorgente di tracing in ServiceDefaults


Nel progetto ServiceDefaults, aggiungere la sorgente activity di Microsoft.Extensions.AI:

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing =>
    {
        tracing
            .AddAspNetCoreInstrumentation()
            .AddHttpClientInstrumentation()
            // Questa è la riga chiave
            .AddSource("Experimental.Microsoft.Extensions.AI");
    });

Senza questa riga gli span GenAI vengono emessi ma non raggiungono l’exporter e non appaiono nel dashboard.

4. Alternative al flag EnableSensitiveData


In ambienti dove non si vuole abilitare il flag nel codice (ad esempio per motivi di compliance), si può usare la variabile d’ambiente:

DOTNET_EXTENSIONS_AI_TELEMETRY_ENABLE_SENSITIVE_DATA=true

Oppure impostarla nell’AppHost solo per i progetti in development:
var api = builder.AddProject<Projects.ScrumSummary_Api>("api")
    .WithReference(ollama)
    .WithEnvironment("DOTNET_EXTENSIONS_AI_TELEMETRY_ENABLE_SENSITIVE_DATA", "true");

Il risultato nel dashboard


Una volta configurati tutti e quattro gli elementi, ogni chiamata al modello Ollama locale appare nelle traces di Aspire come span GenAI. Cliccando sull’icona sparkles si apre il pannello con il log completo della conversazione: system prompt, messaggi utente, risposta del modello con i token usati e il finish reason — esattamente come con Azure OpenAI o Azure Foundry, ma con il modello che gira sulla propria macchina.

Generalizzare ad altri backend


Il pattern si applica a qualsiasi backend compatibile con l’API OpenAI Chat Completions: LM Studio, llama.cpp con server HTTP, vLLM. L’unico requisito è che il client implementi o si adatti a IChatClient e che il wrapper UseOpenTelemetry() venga applicato. Il resto — la registrazione del tracing, il flag di content capture — rimane identico.

Conclusione


Il visualizzatore GenAI di .NET Aspire non è un’esclusiva di Azure. È un’interfaccia costruita sopra gli standard OpenTelemetry, accessibile a chiunque emetta gli span corretti. Quattro configurazioni, nessun servizio cloud obbligatorio, e si ottiene la stessa esperienza di debugging degli LLM che si avrebbe con Azure Foundry — con Gemma 4, Ollama e tutto in locale.

Fonte: Run Gemma 4 with Ollama locally, and keep the Aspire LLM Insights (sparkles and all) — Erik Lieben


The Pirate Post ha ricondiviso questo.

The media in this post is not displayed to visitors. To view it, please go to the original post.

Critical Android Zero-Click Vulnerability CVE-2026-0073 Allows Remote Shell Access Without User Interaction
#CyberSecurity
securebulletin.com/critical-an…