Salta al contenuto principale



Medaglia d’oro olimpica in matematica per DeepSeekMath-V2


L’azienda cinese DeepSeek ha introdotto un nuovo modello specializzato per la risoluzione di problemi matematici, DeepSeekMath-V2. Si tratta di un modello linguistico su larga scala, pensato appositamente per la dimostrazione di teoremi e per i problemi olimpici, la cui principale caratteristica distintiva è che non si limita a produrre risposte, ma verifica anche la correttezza del proprio ragionamento.

DeepSeekMath-V2 risponde essenzialmente a una domanda di vecchia nell’intelligenza artificiale: come garantire che un modello sia arrivato alla soluzione corretta in modo equo, anziché indovinare il risultato o trovare una scorciatoia ma sbagliata. La maggior parte dei modelli moderni è addestrata a giungere più frequentemente alla risposta finale corretta, per la quale vengono premiati con un sistema di ricompensa simile all’apprendimento per rinforzo.

Ma in matematica, questo non è sufficiente: in molti problemi, la risposta in sé non è importante quanto una dimostrazione rigorosa e trasparente. Gli autori affermano esplicitamente che un risultato finale esatto non garantisce la correttezza del ragionamento e, per i teoremi, non esiste un “numero corretto” preimpostato da verificare.

DeepSeekMath-V2 è basato sulla base sperimentale DeepSeek-V3.2-Exp-Base. Il team addestra un modello di verifica separato che valuta le dimostrazioni matematiche, ricercando lacune logiche ed errori passo dopo passo, e quindi utilizza questo verificatore come “giudice” per il modello principale del generatore di dimostrazioni.

Il generatore riceve una ricompensa non solo per la risposta finale corretta, ma anche per la capacità del suo ragionamento di superare un rigoroso test di convalida. Se il test fallisce, il modello viene premiato per aver tentato di identificare autonomamente i punti deboli della sua soluzione e di riscrivere la dimostrazione in modo che superi il test di convalida.

Per evitare che il sistema si blocchi quando il generatore diventa più intelligente del verificatore, gli sviluppatori scalano separatamente le risorse di calcolo per il verificatore. Il verificatore impara da esempi sempre più complessi e difficili da verificare, generati dal modello stesso man mano che le sue capacità aumentano. Questo ciclo chiuso di “generazione, verifica e miglioramento del verificatore” aiuta a colmare il divario di competenze tra le due parti del sistema e a preservare la sua capacità di autocorreggersi.

I risultati sono impressionanti. In un post su GitHub, il team afferma che DeepSeekMath-V2 ha ottenuto l’oro alle Olimpiadi Internazionali di Matematica del 2025 e alle Olimpiadi Cinesi di Matematica del 2024, e alla Putnam Mathematical Competition del 2024, il modello ha ottenuto 118 punti su 120 utilizzando il calcolo scalabile nella fase di soluzione.

Nel benchmark specializzato IMO-ProofBench, sviluppato dal team Google DeepMind per il proprio modello Gemini DeepThink, DeepSeekMath-V2, secondo un’analisi tecnica indipendente, supera DeepThink nei test di base.

I report informali sui punteggi pubblicati da ricercatori e appassionati forniscono dati più specifici: DeepSeekMath-V2 ottiene un punteggio di circa il 99% nella parte base di IMO-ProofBench e del 61,9% in quella avanzata. Lo stesso report afferma che questo risultato è superiore alle prestazioni dei modelli GPT-5 e Gemini in questo set di compiti, sebbene non si tratti di una classifica ufficiale, bensì di un confronto tra singoli test.

Un altro punto importante per la comunità: DeepSeekMath-V2 viene pubblicizzato come la prima intelligenza artificiale matematica open source a raggiungere prestazioni di livello gold su problemi di livello IMO. La notizia è già stata riportata su forum specializzati, dove vengono pubblicati link al documento e ai pesi del modello.

Il modello è disponibile su GitHub e Hugging Face. Il repository è ospitato su Apache 2.0 e i modelli stessi sono concessi in licenza con una licenza separata che ne regola l’uso, incluso l’uso commerciale. Il lancio e la natura open source di DeepSeekMath-V2 sono ulteriormente annunciati in blog specializzati e post sui social media, sottolineando che i pesi possono essere scaricati liberamente ed eseguiti sul proprio hardware, nel rispetto dei termini della licenza del modello.

Per ora, DeepSeekMath-V2 rimane un esempio altamente specializzato, ma altamente esemplificativo di come l’intelligenza artificiale stia spostando la sua attenzione dall'”indovinare la risposta corretta” al controllo del processo di pensiero del modello. E la risposta entusiasta a questo nuovo prodotto da parte di sviluppatori, ricercatori e appassionati di competizioni matematiche dimostra che la corsa è ora aperta non solo per l’intelligenza generale, ma anche per la qualità e la verificabilità del ragionamento.

L'articolo Medaglia d’oro olimpica in matematica per DeepSeekMath-V2 proviene da Red Hot Cyber.



Attacco supply chain npm, Shai-Hulud diffonde codice malevolo in centinaia di pacchetti


L’ecosistema npm è nuovamente al centro di un vasto attacco alla supply chain attribuito alla campagna Shai-Hulud. Questa ondata ha portato alla diffusione di centinaia di pacchetti apparentemente legittimi, ma alterati con codice malevolo, coinvolgendo librerie utilizzate in servizi diffusi come Zapier, ENS Domains, PostHog e Postman.

Secondo le prime analisi, l’obiettivo principale degli aggressori era sottrarre credenziali degli sviluppatori e token utilizzati nei processi di integrazione e distribuzione continua (CI/CD). Le informazioni rubate venivano poi inviate automaticamente su GitHub in forma codificata. Al momento, sono stati individuati su GitHub oltre 27.600 record riconducibili all’operazione.

Shai-Hulud aveva già fatto la sua comparsa a metà settembre, quando aveva compromesso 187 pacchetti npm, sfruttando un payload in grado di propagarsi autonomamente e di sottrarre chiavi tramite lo strumento TruffleHog. La tecnica utilizzata prevedeva il recupero automatico di pacchetti originali, la modifica del file package.json con script malevoli e la successiva pubblicazione delle versioni infette tramite account di manutentori compromessi.

Il ricercatore di Aikido Security Charlie Eriksenè stato tra i primi a rilevare il nuovo attacco, identificando inizialmente 105 pacchetti sospetti, poi cresciuti rapidamente a 492. Un’analisi più ampia ha mostrato che l’attacco si stava espandendo rapidamente: secondo i ricercatori di Wiz, il numero totale di pacchetti malevoli ha superato i 27.000, distribuiti tramite circa 350 account npm compromessi. Wiz segnala anche che, nelle ore più intense dell’operazione, venivano creati circa 1.000 nuovi repository GitHub ogni mezz’ora.

I repository individuati su GitHub rivelano che i dispositivi degli sviluppatori che utilizzavano pacchetti infetti, e che conservavano sul proprio ambiente credenziali GitHub, sono stati compromessi. L’azienda Step Security, specializzata nella protezione delle pipeline CI/CD, ha condotto un’analisi tecnica del nuovo malware evidenziando due file principali: setup_bun.js, presentato come installatore di Bun ma in realtà utilizzato per distribuire il payload, e bun_environment.js, un file da 10 MB pesantemente offuscato.

Gli analisti hanno riscontrato un uso massiccio di tecniche di offuscamento, incluse lunghe stringhe esadecimali, cicli anti-analisi e funzioni progettate per rendere difficile l’ispezione del codice. Il processo d’infezione è composto da cinque fasi e include il furto sistematico di credenziali (token GitHub, npm, AWS, Google Cloud, Azure e altri servizi) e un’azione distruttiva finale che consiste nella sovrascrittura completa della directory home della vittima. Questa fase entra in azione solo quando si verificano specifiche condizioni, come l’impossibilità di autenticarsi o di generare un nuovo repository GitHub.

Secondo Koi Security, considerando tutte le versioni compromesse, gli effetti dell’attacco hanno interessato complessivamente oltre 800 pacchetti npm. Il malware crea inoltre quattro file-cloud.json, contents.json, environment.json e truffleSecrets.json per poi caricare i dati sottratti su repository appositamente creati, tutti contrassegnati dalla dicitura “Shai-Hulud : The Second Coming“.

Gli attaccanti avrebbero assunto il controllo anche di alcuni account GitHub, sfruttandoli per generare rapidamente nuovi repository contenenti i file associati al malware. Nonostante GitHub proceda alla rimozione immediata dei repository sospetti, la rapidità con cui vengono creati nuovi contenuti rende complesso bloccare completamente la campagna.

Tra i pacchetti infetti individuati da Aikido Security figurano componenti chiave di Zapier, ENS Domains, PostHog e AsyncAPI. Le librerie di ENS hanno particolare rilevanza all’interno dell’ecosistema Ethereum, poiché vengono utilizzate in portafogli, DApp, exchange e strumenti di gestione dei domini .eth.

La piattaforma npm consente ancora di scaricare i pacchetti manomessi, anche se in alcuni casi compare un avviso che segnala la pubblicazione non autorizzata dell’ultima versione.

Gli esperti raccomandano alle organizzazioni di compilare un elenco completo dei pacchetti compromessi, sostituirli con versioni sicure e procedere immediatamente alla rigenerazione di tutte le chiavi e i token utilizzati nei workflow CI/CD. Wiz consiglia inoltre alle aziende di rinnovare le credenziali associate a GitHub, npm e servizi cloud. Aikido Security suggerisce anche di disattivare gli script post-installazione durante i processi di integrazione continua, quando possibile.

La riattivazione della campagna Shai-Hulud avviene in un periodo in cui npm è già oggetto di vari attacchi significativi alla supply chain. GitHub ha annunciato ulteriori misure di sicurezza, che tuttavia sono ancora in fase di progressiva implementazione.

L'articolo Attacco supply chain npm, Shai-Hulud diffonde codice malevolo in centinaia di pacchetti proviene da Red Hot Cyber.



Papa in Turchia: alla cattedrale armena, “recuperare l’unità che esisteva nei primi secoli”

“Questa visita mi offre l’opportunità di ringraziare Dio per la coraggiosa testimonianza cristiana del popolo armeno nel corso dei secoli, spesso in circostanze tragiche”.




Has Steampunk Delivered the Hoverboard?


The hoverboard, one of the teen crazes of the last decade, is both a marvel of technology and a source of hacker parts that have appeared in so many projects on these pages. It contains an accelerometer or similar, along with a microcontroller and a pair of motor controllers to drive its in-wheel motors. That recipe is open to interpretation of course and we’ve seen a few in our time, but perhaps not quite like this steampunk design from [Skrubis]. It claims a hoverboard design with no modern electronics, only relays, mercury switches, and neon bulbs.

The idea is that it’s a hoverboard from 1884 using parts available in that era, hence there’s talk of telegraph relays and galvanomic piles. The write-up is presented in steampunk-style language which if we’re honest makes our brain hurt, but the premise is intriguing enough to persevere. As far as we can see it uses a pair of relays and a transformer to make an oscillator, from which can be derived the drive for a 3-phase motor. This drive is sent to the motors by further relays operating under the influence of mercury tilt switches.

There are a full set of hardware designs once you wade past the language, but as yet it has no evidence of a prototype. We admit we kinda want it to work because the idea is preposterous enough to be cool if it ran, but we’d be lying if we said we didn’t harbor some doubts. Perhaps you our readers can deliver a verdict, after all presenting you with entertainment is what it’s all about. If a working prototype surfaces we’ll definitely be featuring it, after all it would be cool as heck.

Oddly this isn’t the first non-computerized balance transport we’ve seen.


Header: Simakovarik, CC BY-SA 4.0.


hackaday.com/2025/11/29/has-st…



DIY Light Panels Work With Home Assistant


There are a few major companies out there building colorful LED panels you can stick on your wall for aesthetic purposes. Most commercial options are pretty expensive, and come with certain limitations in how they can be controlled. [Smart Solutions For Home] has whipped up a flexible DIY design for decorating your walls with light that is altogether more customizable.

In this case, the DIY light panels ape the hexagonal design made popular by brands like Nanoleaf. In this case, each hexagon panel runs an ESP32 microcontroller, which controls a series of WS2812 addressable LEDs. This allows each panel to glow whatever color you like, and they’re arranged in an XY grid to enable you to light individual panels with a range of different geometric effects. The benefit of having a full microcontroller on each panel is that they can act quite independently—each one able to be used as a smart light, an notification display, or even as a physical button, all integrated with Home Assistant.

If you’re a fan of DIY smart home products, these might be right up your alley. They’re supremely flexible and customizable, and can do a lot of things that commercial versions can’t easily replicate. Just don’t ignore the fact that they require a considerable amount of assembly, what with the custom PCBs, 3D printed enclosures, and front diffusers to deal with. That’s just the way the LED wall crumbles.

We’ve seen other similar builds before, too. Why? The simple fact is that a lot of people want cool glowy panels on their wall without having to pay through the nose for them.

youtube.com/embed/KsK9eldbPj0?…


hackaday.com/2025/11/29/diy-li…



La nuova guerra europea alla privacy Chat Control violerà i diritti fondamentali

In teoria, Chat Control avrebbe dovuto essere sepolto il mese scorso. Il minaccioso piano dell'UE di scansionare in massa i messaggi privati ​​dei cittadini ha incontrato una schiacciante resistenza pubblica in Germania, con il governo del paese che si è rifiutato di approvarlo. Ma Bruxelles raramente si tira indietro solo perché i cittadini lo chiedono. E così, fedele alla sua forma, una versione rielaborata del testo è già in fase di elaborazione, questa volta nascosta, a porte chiuse.

unherd.com/2025/11/europes-new…

@Privacy Pride



On the Benefits of Filling 3D Prints With Spray Foam


Closed-cell self-expanding foam (spray foam) is an amazing material that sees common use in construction. But one application that we hadn’t heard of before was using it to fill the internal voids of 3D printed objects. As argued by [Alex] in a half-baked-research YouTube video, this foam could be very helpful with making sure that printed boats keep floating and water stays out of sensitive electronic bits.

It’s pretty common knowledge by now that 3D printed objects from FDM printers aren’t really watertight. Due to the way that these printers work, there’s plenty of opportunity for small gaps and voids between layers to permit moisture to seep through. This is where the use of this self-expanding foam comes into play, as it’s guaranteed to be watertight. In addition, [Alex] also tests how this affects the strength of the print and using its insulating properties.

The test prints are designed with the requisite port through which the spray foam is injected as well as pressure relief holes. After a 24 hour curing period the excess foam is trimmed. Early testing showed that in order for the foam to cure well inside the part, it needed to be first flushed with water to provide the moisture necessary for the chemical reaction. It’s also essential to have sufficient pressure relief holes, especially for the larger parts, as the expanding foam can cause structural failure.

As for the results, in terms of waterproofing there was some water absorption, likely in the PETG part. But after 28 hours of submerging none of the sample cubes filled up with water. The samples did not get any stronger tensile-wise, but the compression test showed a 25 – 70% increase in resistance to buckling, which is quite significant.

Finally, after tossing some ice cubes into a plain FDM printed box and one filled with foam, it took less than six hours for the ice to melt, compared to the spray foam insulated box which took just under eight hours.

This seems to suggest that adding some of this self-expanding foam to your 3D printed part makes a lot of sense if you want to keep water out, add more compressive strength, or would like to add thermal insulation beyond what FDM infill patterns can provide.

youtube.com/embed/Pkk9Lt-j2hM?…


hackaday.com/2025/11/29/on-the…



il ponte sullo stretto mi va stretto


quando sento il capo di forza italia affermare che il ponte sullo stretto va fatto perché lo voleva berlusconi mi pija lo sconforto

reshared this





Ustica è una questione morale. E civica


@Giornalismo e disordine informativo
articolo21.org/2025/11/ustica-…
Nei giorni scorsi abbiamo promosso, insieme con l’Associazione dei familiari delle vittime della strage di Ustica e la Presidente Daria Bonfietti un incontro-stampa per chiedere di non archiviare le indagini. Per la prima volta a livello nazionale, a






Un server ActivityPub in un singolo file PHP? Ecco come fare... Il post di @tofeo

Qualsiasi programma per computer può essere progettato per essere eseguito da un singolo file, se la progettazione è abbastanza sbagliata! 🤣

Volevo creare il server #Fediverse più semplice possibile, che potesse essere utilizzato come strumento didattico per mostrare come funziona ActivityPub / Mastodon.

shkspr.mobi/blog/2024/02/activ…

@Che succede nel Fediverso?


ActivityPub Server in a Single PHP File


shkspr.mobi/blog/2024/02/activ…

Any computer program can be designed to run from a single file if you architect it wrong enough!

I wanted to create the simplest possible Fediverse server which can be used as an educational tool to show how ActivityPub / Mastodon works.

The design goals were:

  • Upload a single PHP file to the server.
  • No databases or separate config files.
  • Single Actor (i.e. not multi-user).
  • Allow the Actor to be followed.
  • Post plain-text messages to followers.
  • Be roughly standards compliant.

And those goals have all been met! Check it out on GitLab. I warn you though, it is the nadir of bad coding. There are no tests, bugger-all security, scalability isn't considered, and it is a mess. But it works.

You can follow the test user @[url=https://example.viii.fi/example]example@example.viii.fi[/url]

Architecture


Firstly, I've slightly cheated on my "single file" stipulation. There's an .htaccess file which turns example.com/whatever into example.com/index.php?path=whatever

The index.php file then takes that path and does stuff. It also contains all the configuration variables which is very bad practice.

Rather than using a database, it saves files to disk.

Again, this is not suitable for any real world use. This is an educational tool to help explain the basics of posting messages to the Fediverse. It requires absolutely no dependencies. You do not need to spin up a dockerised hypervisor to manage your node bundles and re-compile everything to WASM. Just FTP the file up to prod and you're done.

Walkthrough


This is a quick ramble through the code. It is reasonably well documented, I hope.

Preamble


This is where you set up your account's name and bio. You also need to provide a public/private keypair. The posting page is protected with a password that also needs to be set here.
PHP // Set up the Actor's information $username = rawurlencode("example"); // Encoded as it is often used as part of a URl $realName = "E. Xample. Jr."; $summary = "Some text about the user."; $server = $_SERVER["SERVER_NAME"]; // Domain name this is hosted on // Generate locally or from cryptotools.net/rsagen // Newlines must be replaced with "\n" $key_private = "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"; $key_public = "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"; // Password for sending messages $password = "P4ssW0rd";

Logging


ActivityPub is a "chatty" protocol. This takes all the requests your server receives and saves them in /logs/ as a datestamped text file.
PHP // Get all headers and requests sent to this server $headers = print_r( getallheaders(), true ); $postData = print_r( $_POST, true ); $getData = print_r( $_GET, true ); $filesData = print_r( $_FILES, true ); $body = json_decode( file_get_contents( "php://input" ), true ); $bodyData = print_r( $body, true ); $requestData = print_r( $_REQUEST, true ); $serverData = print_r( $_SERVER, true ); // Get the type of request - used in the log filename if ( isset( $body["type"] ) ) { $type = " " . $body["type"]; } else { $type = ""; } // Create a timestamp in ISO 8601 format for the filename $timestamp = date( "c" ); // Filename for the log $filename = "{$timestamp}{$type}.txt"; // Save headers and request data to the timestamped file in the logs directory if( ! is_dir( "logs" ) ) { mkdir( "logs"); } file_put_contents( "logs/{$filename}", "Headers: \n$headers \n\n" . "Body Data: \n$bodyData \n\n" . "POST Data: \n$postData \n\n" . "GET Data: \n$getData \n\n" . "Files Data: \n$filesData \n\n" . "Request Data:\n$requestData\n\n" . "Server Data: \n$serverData \n\n" );

Routing


The .htaccess changes /whatever to /?path=whateverThis runs the function of the path requested.
PHP !empty( $_GET["path"] ) ? $path = $_GET["path"] : die(); switch ($path) { case ".well-known/webfinger": webfinger(); case rawurldecode( $username ): username(); case "following": following(); case "followers": followers(); case "inbox": inbox(); case "write": write(); case "send": send(); default: die(); }

WebFinger


The WebFinger Protocol is used to identify accounts.It is requested with example.com/.well-known/webfinger?resource=acct:username@example.comThis server only has one user, so it ignores the query string and always returns the same details.
PHP function webfinger() { global $username, $server; $webfinger = array( "subject" => "acct:{$username}@{$server}", "links" => array( array( "rel" => "self", "type" => "application/activity+json", "href" => "https://{$server}/{$username}" ) ) ); header( "Content-Type: application/json" ); echo json_encode( $webfinger ); die(); }

Username


Requesting example.com/username returns a JSON document with the user's information.
PHP function username() { global $username, $realName, $summary, $server, $key_public; $user = array( "@context" => [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1" ], "id" => "https://{$server}/{$username}", "type" => "Person", "following" => "https://{$server}/following", "followers" => "https://{$server}/followers", "inbox" => "https://{$server}/inbox", "preferredUsername" => rawurldecode($username), "name" => "{$realName}", "summary" => "{$summary}", "url" => "https://{$server}", "manuallyApprovesFollowers" => true, "discoverable" => true, "published" => "2024-02-12T11:51:00Z", "icon" => [ "type" => "Image", "mediaType" => "image/png", "url" => "https://{$server}/icon.png" ], "publicKey" => [ "id" => "https://{$server}/{$username}#main-key", "owner" => "https://{$server}/{$username}", "publicKeyPem" => $key_public ] ); header( "Content-Type: application/activity+json" ); echo json_encode( $user ); die(); }

Following & Followers


These JSON documents show how many users are following / followers-of this account.The information here is self-attested. So you can lie and use any number you want.
PHPfunction following() { global $server; $following = array( "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/following", "type" => "Collection", "totalItems" => 0, "items" => [] ); header( "Content-Type: application/activity+json" ); echo json_encode( $following ); die(); } function followers() { global $server; $followers = array( "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/followers", "type" => "Collection", "totalItems" => 0, "items" => [] ); header( "Content-Type: application/activity+json" ); echo json_encode( $followers ); die(); }

Inbox


The /inbox is the main server. It receives all requests. This server only responds to "Follow" requests.A remote server sends a follow request which is a JSON file saying who they are.This code does not cryptographically validate the headers of the received message.The name of the remote user's server is saved to a file so that future messages can be delivered to it.An accept request is cryptographically signed and POST'd back to the remote server.
PHP function inbox() { global $body, $server, $username, $key_private; // Get the message and type $inbox_message = $body; $inbox_type = $inbox_message["type"]; // This inbox only responds to follow requests if ( "Follow" != $inbox_type ) { die(); } // Get the parameters $inbox_id = $inbox_message["id"]; $inbox_actor = $inbox_message["actor"]; $inbox_host = parse_url( $inbox_actor, PHP_URL_HOST ); // Does this account have any followers? if( file_exists( "followers.json" ) ) { $followers_file = file_get_contents( "followers.json" ); $followers_json = json_decode( $followers_file, true ); } else { $followers_json = array(); } // Add user to list. Don't care about duplicate users, server is what's important $followers_json[$inbox_host]["users"][] = $inbox_actor; // Save the new followers file file_put_contents( "followers.json", print_r( json_encode( $followers_json ), true ) ); // Response Message ID // This isn't used for anything important so could just be a random number $guid = uuid(); // Create the Accept message $message = [ "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/{$guid}", "type" => "Accept", "actor" => "https://{$server}/{$username}", "object" => [ "@context" => "https://www.w3.org/ns/activitystreams", "id" => $inbox_id, "type" => $inbox_type, "actor" => $inbox_actor, "object" => "https://{$server}/{$username}", ] ]; // The Accept is sent to the server of the user who requested the follow // TODO: The path doesn't *always* end with/inbox $host = $inbox_host; $path = parse_url( $inbox_actor, PHP_URL_PATH ) . "/inbox"; // Get the signed headers $headers = generate_signed_headers( $message, $host, $path ); // Specify the URL of the remote server's inbox // TODO: The path doesn't *always* end with /inbox $remoteServerUrl = $inbox_actor . "/inbox"; // POST the message and header to the requester's inbox $ch = curl_init( $remoteServerUrl ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "POST" ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($message) ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); $response = curl_exec( $ch ); // Check for errors if( curl_errno( $ch ) ) { file_put_contents( "error.txt", curl_error( $ch ) ); } curl_close($ch); die(); }

UUID


Every message sent should have a unique ID. This can be anything you like. Some servers use a random number.I prefer a date-sortable string.
PHP function uuid() { return sprintf( "%08x-%04x-%04x-%04x-%012x", time(), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffffffffffff) ); }

Signing Headers


Every message that your server sends needs to be cryptographically signed with your Private Key.This is a complicated process. Please read "How to make friends and verify requests" for more information.
PHP function generate_signed_headers( $message, $host, $path ) { global $server, $username, $key_private; // Encode the message to JSON $message_json = json_encode( $message ); // Location of the Public Key $keyId = "https://{$server}/{$username}#main-key"; // Generate signing variables $hash = hash( "sha256", $message_json, true ); $digest = base64_encode( $hash ); $date = date( "D, d M Y H:i:s \G\M\T" ); // Get the Private Key $signer = openssl_get_privatekey( $key_private ); // Sign the path, host, date, and digest $stringToSign = "(request-target): post $path\nhost: $host\ndate: $date\ndigest: SHA-256=$digest"; // The signing function returns the variable $signature // php.net/manual/en/function.ope… openssl_sign( $stringToSign, $signature, $signer, OPENSSL_ALGO_SHA256 ); // Encode the signature $signature_b64 = base64_encode( $signature ); // Full signature header $signature_header = 'keyId="' . $keyId . '",algorithm="rsa-sha256",headers="(request-target) host date digest",signature="' . $signature_b64 . '"'; // Header for POST reply $headers = array( "Host: {$host}", "Date: {$date}", "Digest: SHA-256={$digest}", "Signature: {$signature_header}", "Content-Type: application/activity+json", "Accept: application/activity+json", ); return $headers; }

User Interface for Writing


This creates a basic HTML form. Type in your message and your password. It then POSTs the data to the /send endpoint.
PHP function write() { // Display an HTML form for the user to enter a message.echo <<< HTML<![url=https://mastodon.social/users/doctype]Aleks Dorohovich[/url] html><html lang="en-GB"> <head> <meta charset="UTF-8"> <title>Send Message</title> <style> *{font-family:sans-serif;font-size:1.1em;} </style> </head> <body> <form action="/send" method="post" enctype="multipart/form-data"> <label for="content">Your message:</label><br> <textarea id="content" name="content" rows="5" cols="32"></textarea><br> <label for="password">Password</label><br> <input type="password" name="password" id="password" size="32"><br> <input type="submit" value="Post Message"> </form> </body></html>HTML; die(); }

Send Endpoint


This takes the submitted message and checks the password is correct.It reads the followers.json file and sends the message to every server that is following this account.
PHP function send() { global $password, $server, $username, $key_private; // Does the posted password match the stored password? if( $password != $_POST["password"] ) { die(); } // Get the posted content $content = $_POST["content"]; // Current time - ISO8601 $timestamp = date( "c" ); // Outgoing Message ID $guid = uuid(); // Construct the Note // contentMap is used to prevent unnecessary "translate this post" pop ups // hardcoded to English $note = [ "@context" => array( "https://www.w3.org/ns/activitystreams" ), "id" => "https://{$server}/posts/{$guid}.json", "type" => "Note", "published" => $timestamp, "attributedTo" => "https://{$server}/{$username}", "content" => $content, "contentMap" => ["en" => $content], "to" => ["https://www.w3.org/ns/activitystreams#Public"] ]; // Construct the Message $message = [ "@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://{$server}/posts/{$guid}.json", "type" => "Create", "actor" => "https://{$server}/{$username}", "to" => [ "https://www.w3.org/ns/activitystreams#Public" ], "cc" => [ "https://{$server}/followers" ], "object" => $note ]; // Create the context for the permalink $note = [ "@context" => "https://www.w3.org/ns/activitystreams", ...$note ]; // Save the permalink $note_json = json_encode( $note ); // Check for posts/ directory and create it if( ! is_dir( "posts" ) ) { mkdir( "posts"); } file_put_contents( "posts/{$guid}.json", print_r( $note_json, true ) ); // Read existing users and get their hosts $followers_file = file_get_contents( "followers.json" ); $followers_json = json_decode( $followers_file, true ); $hosts = array_keys( $followers_json ); // Prepare to use the multiple cURL handle $mh = curl_multi_init(); // Loop through all the severs of the followers // Each server needs its own cURL handle // Each POST to an inbox needs to be signed separately foreach ( $hosts as $host ) { $path = "/inbox"; // Get the signed headers $headers = generate_signed_headers( $message, $host, $path ); // Specify the URL of the remote server $remoteServerUrl = "https://{$host}{$path}"; // POST the message and header to the requester's inbox $ch = curl_init( $remoteServerUrl ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, "POST" ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($message) ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); // Add the handle to the multi-handle curl_multi_add_handle( $mh, $ch ); } // Execute the multi-handle do { $status = curl_multi_exec( $mh, $active ); if ( $active ) { curl_multi_select( $mh ); } } while ( $active && $status == CURLM_OK ); // Close the multi-handle curl_multi_close( $mh ); // Render the JSON so the user can see the POST has worked header( "Location: https://{$server}/posts/{$guid}.json" ); die(); }

Next Steps


This is not intended to be used in production. Ever. But if you would like to contribute more simple examples of how the protocol works, please come and play on GitLab.

You can follow the test user @[url=https://example.viii.fi/example]example@example.viii.fi[/url]

#activitypub #mastodon #php


reshared this



Il Papa in raccoglimento silenzioso, nella sua “prima volta” da Pontefice nella Moschea Blu. E’ cominciato così il terzo giorno del viaggio di Leone XIV ad Istanbul, dove è risuonata in modo particolare la parola “unità”, come dono e come compito, se…


"In Turchia, come a Nicea 17 secoli fa, la Chiesa sta ritrovando l’unità e la professione dell’unica fede, e lungo il cammino verso la piena comunione tra i cristiani progredisce sotto la guida saggia del nostro amato patriarca Bartolomeo".


“Viviamo in un mondo in cui troppo spesso la religione è usata per giustificare guerre e atrocità”. Lo ha denunciato il Papa, che nell’omelia della messa presieduta nella Volkswagen Arena si è rivolto anche agli appartenenti alle comunità non cristia…


ma sono rincoglionita o i profili esistono da una vita? sul pc di mia madre ho da anni firefox con il profilo di mia madre e il mio... con icone di lancio distinte naturalmente. e tutto diverso dentro.


“La stessa fede nel Salvatore ci unisce non solo tra noi, ma con tutti i fratelli e le sorelle appartenenti ad altre Chiese e Comunità cristiane. Lo abbiamo sperimentato ieri, nella preghiera a İznik”.


Scientists found that major celebrities died four years earlier than their less famous peers, hinting that fame itself can be a mortality risk.#TheAbstract


Being Famous Can Shorten Your Lifespan, Scientists Find


Welcome back to the Abstract! Here are the studies this week that hit the books, bottled alien lightning, reared wolf cubs, and tallied the price of fame.

First, we’ve got a centuries-long history of an Indian savannah told through songs, folktales, and screaming peacocks. Then: Mars gets charged, the secrets of Stora Karlsö, and the epidemiology of stardom.

As always, for more of my work, check out my book First Contact: The Story of Our Obsession with Aliens or subscribe to my personal newsletter the BeX Files.

When folk tales are field guides


Nerlekar, Ashish N. et al. “Utilizing traditional literature to triangulate the ecological history of a tropical savanna.” People and Nature.

It has happened again: Researchers have turned to the annals of literature to address a scientific question. Longtime readers of the Abstract will recall that this is a simply irresistible category of research to me (see: China’s porpoise corpus, Transylvanian weather reports, and milky seas). To the library!

In this edition of Science from the Stacks, researchers probed the origins of the tropical savannah in western Maharashtra, India, by collecting references to plants in 28 stories and songs dating back at least 750 years. The aim was to reconstruct a vegetation history that could hint at shifts in the region between forest and savannah biomes.

“Ttraditional literature—for example, myths, folk songs and stories—is a culturally resonant, yet underutilized line of evidence to understand ecological histories and foster biodiversity conservation,” said researchers led by Ashish N. Nerlekar of Michigan State University.
A folio from an early 19th-century manuscript of the Bhaktavijaya mentioning the taraṭī tree. Image: Nerlekar, Ashish N. et al.
“We found that descriptions of both the landscape and specific plants point to an open-canopy savanna in the past rather than a forest,” the team said. “Of the 44 wild plant species recorded (i.e. omitting exclusively cultivated plants), a clear majority (27 species) were savanna indicators, 14 were generalists, and only three were forest indicators. Our ecological reconstructions from traditional literature complement data from archival paintings, revenue records, plant and animal fossils, and dated molecular phylogenies of endemic biodiversity—all attesting to the antiquity of India's savannas.”

It’s an out-of-the-box way to reconstruct the natural history of a region. But the highlights of these studies are always the excerpts from the literature, like the amazing origin story of this village:

“A folk tale illustrates the founding myth of Kolvihire village near Jejuri. The tale is about a robber-murderer named Vālhyā Koḷī, who lived near Kolvihire. Upon meeting a sage, Vālhyā Koḷī introspected on his wrongdoings and performed penance for 12 years. After completion of the penance, as a living testimony to Vālhyā Koḷī's sincere devotion, leaves sprouted from his stick, which he had used to hit and kill travellers to loot their money. Eventually, Vālhyā Koḷī became the sage-poet Vālmikī. According to the tale, the sprouted stick grew into a pāḍaḷa tree, and the tree still exists in Kolvihire.”

You have to love a good botanical redemption story. Another standout line is this memorable description of a thorny patch in the savannah from the early 16th century: “Such is this thorny forest | it is highly frightening | this forest is empty | peacocks scream here.”

I don’t know exactly why, but “peacocks scream here” is just about the scariest description I’ve ever heard of a place. Shout out to this ancient poet for capturing some legendary bad vibes.

In other news…

Extraterrestrial electricity


Chide, Baptiste et al. “Detection of triboelectric discharges during dust events on Mars.” Nature.

Lightning is a big deal on Earth, inspiring awe, fear, and some of the naughtiest deities imaginable. But lightning also strikes on other planets, including Jupiter and Saturn. For years, scientists have suspected that Mars might host its own bolts, but detecting them has remained elusive.

Now, scientists have finally captured lightning on Mars thanks to “serendipitous observations” from the SuperCam microphone aboard the Perseverance rover.

“Fifty-five events have been detected over two Martian years, usually associated with dust devils and dust storm convective fronts,” said researchers led by Baptiste Chide of the Institut de Recherche en Astrophysique et Planétologie in Toulouse, France. “Beyond Mars, this work also reinforces the prospect of triboelectric discharges associated with wind-blown sediment on Venus and Titan.”

It goes to show that even a very dead world like Mars can still crackle and zap now and then.

The wolves of Stora Karlsö


Girdland-Flink, Linus et al. “Gray wolves in an anthropogenic context on a small island in prehistoric Scandinavia.” Proceedings of the National Academy of Sciences.”

About 4,000 years ago on a small island in the Baltic sea, people cared for two wolves — perhaps as pets — feeding them fish, seals, and other marine fare. That’s the cozy portrait presented in a new study that analyzed the remains of ancient wolves buried in the Stora Förvar cave on the Swedish island of Stora Karlsö.

While dogs are commonly buried at ancient human sites, wolves and humans rarely mix in the archaeological record. But the wolves at Stora Karlsö were unlikely to have reached the island without the aid of humans, and their primarily seafood diet—unusual for wild wolves—suggests they were also fed by people. Moreover, one of the animals suffered from a pathology that might have limited its mobility, hinting that it was kept alive by humans.

The cave where the wolf remains were found. Image: Jan Storå/Stockholm University

The study presents the “possibility of prehistoric human control of wolves,” said researchers led by Linus Girdland-Flink of the University of Aberdeen. “Our results provide evidence that extends the discourse about past human–wolf interactions and relationships.”

Fame! I’m going to live forever (or not)


Hepp, Johanna et al. “The price of fame? Mortality risk among famous singers.” Journal of Epidemiology and Community Health.

Celebrity may literally be to die for, according to a new study that evaluated fame as a comorbidity.

Scientists collected a list of 324 big music stars active between 1950 and 1990, including Elvis Presley, Kurt Cobain, Sam Cooke, and Janis Joplin. Those heavy-hitters were then matched with 324 “twin” musicians that were not household names, but otherwise shared many characteristics of the celebs, including gender, nationality, genre, and roughly similar birth dates. The idea was to directly compare the lifespans of A-listers and B-listers to isolate the extent to which fame itself is a mortality risk factor, rather than the lifestyle of a musician.

The study suggests that famous singers die four years earlier, on average, compared to their B-list peers, demonstrating “a 33% higher mortality risk compared with less famous singers,” said researchers led by Johanna Hepp of the Central Institute of Mental Health in Mannheim, Germany. “This study provides new evidence suggesting that fame may be associated with increased mortality risk among musicians, beyond occupational factors.”

Lady Gaga had it right, as if there were ever any doubt: Under the glitz, the Fame Monster is always waiting.

Thanks for reading! See you next week.







UCRAINA. Corruzione, nuova tegola su Zelensky


@Notizie dall'Italia e dal mondo
Il presidente ucraino è costretto a licenziare il suo capo di gabinetto e capo negoziatore Andrii Yermak, accusato di essere a capo di una vasta rete di corruzione
L'articolo UCRAINA. Corruzione, nuova tegola su Zelensky proviene da pagineesteri.it/2025/11/29/eur…



hwupgrade.it/news/sistemi-oper…

da utente Linux è divertente vedere microsoft e i suoi utenti ostinarsi a usare qualcosa che fatica così tanto a funzionare. chi è causa del suo mal pianga se stesso.



Kirk Knuffke, Stomu Takeishi, Bill Goodwin – Window
freezonemagazine.com/articoli/…
Window è il nuovo album in studio dell’acclamato cornettista Kirk Knuffke, che presenta sia il suo approccio distintivo come strumentista sia, in tre brani, un aspetto vocale raramente ascoltato della sua arte. Accompagnato dal bassista Stomu Takeishi e dal leggendario batterista jazz Bill Goodwin, un signore che si porta 83 primavere sulle spalle con


un'italia sempre più povera, con chi lavora che di fatto non ha potere d'acquisto, consumi interni in calo e sempre maggiore dipendenza dalle esportazioni. italia grecia uniche 2 razioni europee che in 20 anni hanno perso il 20% del reddito di fatto. niente servizi per chi fa figli, impossibilità tecnica di affittare casa e mettere su una famiglia. assenza di figli. popolazione sempre più anziana. ma il prodotto debito/pil scende. lo spread in calo (probabilmente più per difficoltà francesi e tedesche). le agenzie di rating che "classano" invece di "declassare" l'italia. la possibilità di studiare ormai riservata ai ricchi. siamo sicuri che questo governo si stia adoperando per risolvere questi problemi? a me sembra la succursale dell'ideologia di trump... più o meno l'idea che se tutti sono più poveri i ricchi hanno più potere. e per di più un governo fascista nei desideri e nelle ideologie.


#JobOrienta, alle ore 11.00 il Ministro Giuseppe Valditara interverrà al convegno "Conoscere la Filiera formativa tecnologico-professionale (4+2): un nuovo percorso di studi per il futuro dei giovani" presso il Centro Congressi di Veronafiere.


in reply to simona

in realtà la domanda più inquietante è: "cosa sarebbe successo se quanto arrivato dal sole avesse avuto un'intensità seria, tipo evento di carrington?"





Israele all’attacco in Cisgiordania e Siria: morti e feriti


@Notizie dall'Italia e dal mondo
Condanne diffuse per l'esecuzione sommaria di due palestinesi che si erano arresi. Incursione con 13 morti in Siria
L'articolo Israele all’attacco in Cisgiordania e Siria: morti e pagineesteri.it/2025/11/29/med…



HONDURAS. Elezioni: Rixi Moncada: democratizzare l’economia


@Notizie dall'Italia e dal mondo
Il programma della candidata progressista prevede la continuazione del processo di trasformazione economica e sociale iniziato da Xiomara Castro
L'articolo HONDURAS. Elezioni: Rixi pagineesteri.it/2025/11/29/ame…



Proteste gegen AfD-Jugend: Verwaltungsgerichtshof bestätigt Demoverbotszone in Gießen


netzpolitik.org/2025/proteste-…



#NoiSiamoLeScuole questa settimana è dedicato all’Istituto di Istruzione Superiore “Alfonso Casanova” di Napoli che, con i fondi #PNRR, ha avviato attività laboratoriali teatrali contro la dispersione scolastica e corsi per migliorare le competenze l…


Rapporto di valutazione di chatcontrol: la Commissione UE non riesce ancora una volta a dimostrare l’efficacia della sorveglianza di massa di foto e video personali intimi


Trovate qui la traduzione del post che Patrick Breyer ha pubblicato oggi L’attuale pressione del Consiglio dell’UE per rendere permanente il Chat Control 1.0 (Regolamento (UE) 2021/1232) è giuridicamente ed eticamente sconsiderata. La stessa relazione di valutazione del 2025 della Commissione ammette un fallimento totale nella raccolta dei dati, l’incapacità di collegare la sorveglianza di…

Source




Bosnia: un paese sospeso tra fratture etniche, disillusione politica e nuove lotte ambientali


@Notizie dall'Italia e dal mondo
Dopo decenni di paralisi politica e separazioni istituzionali, comitati e comunità locali guidano una nuova stagione di mobilitazioni contro le mini-centrali e la svendita del territorio.
L'articolo Bosnia: un paese



"In vacanza fino al 20”: come una nota WhatsApp può rovinarti la vita

Negli anni ’80 ci insegnavano che il pericolo arrivava dalle cabine telefoniche e dai punk con il coltellino. Oggi, invece, arriva da un dettaglio messo nello stato di WhatsApp. Una nota. Una frase. Una data. Un indizio per chi sa leggerlo.
Con le nuove Activity Notes di WhatsApp — micro-frasi che restano visibili per 24 ore e diventano parte del profilo — si apre una nuova superficie di attacco. Nulla di “drammatico” in sé, ma tutto diventa significativo quando lo guardi con gli occhi dell’OSINT, della social engineering e della deception analysis

ransomnews.online/blog/whatsap…

@Privacy Pride

reshared this



La nuova piattaforma di Fincantieri punta su flessibilità e missioni subacquee

@Notizie dall'Italia e dal mondo

Fincantieri ha annunciato che fornirà alla Marina militare una nuova unità di supporto che dovrà incrementare notevolmente la versatilità operativa della flotta. L’iniziativa è volta a rafforzare la capacità italiana di intervenire in ambienti marittimi complessi




La casa nel bosco


A me piacerebbe vivere sul mare, nel senso che mi piacerebbe avere una casa in cui ti affacci e vedi il mare, esci fuori e hai lì il mare. Mi andrebbe bene anche un faro nonostante le scale che bisogna fare, ma vabbè le scale rassodano le chiappe. Purtroppo vivo sulle prealpi dove il mare non si vede neppure se vai in cima ad un monte. Nonostante tutto amo la mia terra e più di una volta ho pensato che mi piacerebbe avere una casa isolata in qualche valle o in qualche bosco, tipo quella della famosa famiglia, ma meno rudere, qualche comodità ci vuole, come ad esempio il gabinetto che loro hanno tolto perchè contrario alla filosofia di vita che seguono. Va bene che tutto è concime, ma abbassarmi i pantaloni dove ci può essere un riccio, un'ortica o qualche arbusto spinoso non è nei miei desideri, preferisco un comodo water e se possibile anche un comodo bidè. Io e la famiglia abbiamo concezioni diverse. La differenza più grande fra me e loro è però un'altra, io sono single, non ho figli e qualora decidessi di trasferirmi in cubo ai lupi la decisione riguarderebbe solo me. Avessi figli non ci penserei neppure, perchè i bambini hanno bisogno di andare a scuola, socializzare, avere degli amici, azzuffarsi anche. L'istruzione è importante, così come la socialità per avere una crescita equilibrata. Si sa che le scocciature ci saranno sempre, il bullo che ti prende di mira, l'insegnante che non ti piace e via discorrendo, ma queste cose, se non raggiungono livelli allarmanti ti fanno crescere e diventare più forte. Non so come finirà la loro vicenda, solo il tempo potrà dirlo, so però che se hai figli hai anche responsabilità nei loro confronti, non puoi fare ciò che vuoi senza considerare il loro benessere psico fisico, culturale e sociale, prima viene la loro crescita, poi vieni tu, se non sei disposto ad accettarlo allora non fare figli. Così come nessuno ti obbliga a vivere in città, nessuno ti obbliga ad avere prole, se scegli di averla devi essere consapevole che prima viene il suo interesse e poi il tuo.