Salta al contenuto principale



"Dopo la riunione importane ecumenica sia a Nicea e poi ieri mattina abbiamo parlato di futuri incontri possibili". Lo ha rivelato il Papa, durante la conferenza stampa sul volo d Istanbul a Beirut.


Papa in Libano: conferenza stampa sull’aereo da Instanbul a Beirut, “per Israele soluzione dei due Stati, speriamo che il presidente Erdogan aiuti a risolvere il conflitto in Ucraina”



“Un grande successo, un’esperienza meravigliosa”. Così il Papa, nella conferenza stampa sul volo da Istanbul a Beirut, ha definito la sua prima tappa del viaggio apostolico, in Turchia, ringraziando tutti coloro che hanno collaborato alla riuscita e …


Il Papa è arrivato in papamobile al palazzo presidenziale, luogo del suo primo discorso in Libano, rivolto alle autorità, alla società civile e al Corpo diplomatico e preceduto dall'incontro privato con il presidente del Libano e la sua famiglia, seg…


How to Make Big Cabinets on a Small CNC Router


It’s easy to build big wooden furniture if you have a massive industrial CNC router, but few of us are so lucky. However, you can still build sizable stuff with a smaller router if you know what you’re doing. [Aribabox] shares some useful tricks and techniques for building large workshop cabinets on smaller machines.

The key to doing this well is modularity. [Aribabox] shows off how to build excellent workshop drawers in pieces using a stackable design. Rather than having to cut out one huge side panel to cover the whole stack of drawers, each drawer can have its own side panel that easily fits on a smaller router. They can then be stacked into a stout assembly that still does its job perfectly well. Assuming your CNC router is trued up properly, you can whip up a lot of furniture quickly, just assembling everything with screws. You’ll still be able to work faster and make bigger things easier on a big machine, but a small machine can do a lot more than you think.

[Aribabox] supplies design files for a cost if you’re eager to replicate their work. If that doesn’t suit you, you can always just use the video as inspiration to work on your own modular furniture designs instead. We’ve featured other modular furniture designs before, too, that rely on 3D printed and lasercut components.

youtube.com/embed/T_Sl8GIWAq0?…

[Thanks to Hassi for the tip!}


hackaday.com/2025/11/30/how-to…





Leonardo presenta Michelangelo Dome: il sistema AI di difesa contro missili ipersonici


L’azienda italiana di difesa Leonardo ha presentato il suo nuovo sistema Michelangelo Dome. Secondo l’azienda, è progettato per contrastare missili ipersonici e attacchi di massa con droni. Durante la presentazione tecnica al Ministro della Difesa e ai Capi di Stato Maggiore italiani, l’Amministratore Delegato Roberto Cingolani ha annunciato l’intenzione di iniziare l’implementazione già nel 2026 e di raggiungere la piena capacità operativa entro il 2028.

Il nome dice tutto, e la somiglianza con il famoso Iron Dome israeliano è chiaramente intenzionale. Il sistema israeliano, operativo dal 2011, è servito da modello. Ma il Michelangelo Dome va ben oltre: non è concepito come un singolo sistema d’arma, ma come un’architettura completa supportata dall’intelligenza artificiale.

Queste minacce possono verificarsi in pochi secondi “, ha affermato Cingolani. “Non abbiamo abbastanza tempo per inviare e-mail o scambiare messaggi. Dobbiamo reagire in tempo reale”.

l’intelligenza artificiale come questione di sopravvivenza


Al centro del progetto c’è la convinzione che i sistemi di comando e controllo accelerati dall’IA non siano più opzionali, ma essenziali per la sopravvivenza. Cingolani ha spiegato il passaggio dottrinale dalla rigida e lineare kill chain alla kill web distribuita e supportata dall’IA, in cui numerosi punti dati dei sensori vengono analizzati, fusi e valutati dall’IA per selezionare automaticamente il miglior meccanismo di intercettazione. Tuttavia, l’ordine finale di aprire il fuoco rimane nelle mani dell’uomo, ha sottolineato Cingolani.

L’obiettivo è trasformare le forze armate italiane e, in seguito, quelle della NATO in un unico sistema di difesa sincronizzato. Navi, sistemi terrestri, aerei da combattimento, droni e costellazioni satellitari convoglierebbero i dati in una piattaforma unificata, basata sull’intelligenza artificiale, in grado di tracciare, prevedere e neutralizzare le minacce in tempo reale.

L’alternativa, secondo Cingolani, è la cecità strategica. “Se un oggetto vola a due o tre chilometri al secondo e non so in anticipo dove colpirà tra qualche minuto, potrei essere già stato colpito. Non posso neutralizzare lo”, ha riportato Aerospace Global News.

Europa: cinque minuti all’impatto


Cingolani ha ripetutamente sottolineato la posizione geografica: l’Europa non è protetta dagli oceani. Le future armi ipersoniche potrebbero raggiungere le principali capitali in cinque-sette minuti.

Ma non si tratta solo di armi ipersoniche. Cingolani ha anche sottolineato che la guerra in Ucraina ha dimostrato come droni a basso costo possano distruggere carri armati del valore di decine di milioni. “Giovani soldati hanno montato mezzo chilo di esplosivo su droni collegati a reti satellitari commerciali e hanno neutralizzato carri armati per un valore di 20 milioni di euro “, ha affermato. Anche in questo caso, i sistemi in rete potrebbero aiutare a rilevare ed eliminare le minacce, prosegue il rapporto di Aerospace Global News.

Intelligenza artificiale, satelliti e supercomputer come spina dorsale tecnologica


Leonardo si posiziona come l’unica azienda europea dotata dell’intero stack tecnologico necessario per fornire il sistema: sensori, sistemi di intercettazione, tecnologia spaziale, capacità informatiche, sviluppo dell’intelligenza artificiale e calcolo ad alte prestazioni.

I satelliti sono al centro del piano. A Roma verranno realizzati 100 satelliti all’anno, progettati per l’allerta missilistica, il rilevamento di colonne di fumo infrarosse e la previsione della traiettoria.

“Questi satelliti devono essere in grado di rilevare un oggetto che viaggia a cinque chilometri al secondo “, ha affermato Cingolani. “Chi possiede questi satelliti possiede una capacità di rilevamento e previsione che nessun altro possiede.”

L’Italia inizierà nel 2026, poi la NATO.


Leonardo consegnerà i primi sistemi all’Italia entro il 2026 e integrerà i sistemi nazionali esistenti nella nuova architettura basata sull’intelligenza artificiale. Tuttavia, questo rappresenta solo un singolo livello di difesa. L’azienda non ha specificato di quale livello si tratterà.

L’Italia non è l’unico Paese ad ispirarsi all’Iron Dome israeliano. Anche la Turchia sta investendo molto nel suo sistema di difesa aerea integrato e multistrato, lo Steel Dome. E Taiwan, con il suo T-Dome, ha annunciato piani per un proprio sistema di difesa aerea multistrato per difendersi dalle minacce ostili.

L'articolo Leonardo presenta Michelangelo Dome: il sistema AI di difesa contro missili ipersonici proviene da Red Hot Cyber.

in reply to 6AL

@6AL ho fatto diverse ricerche sui motori di ricerca per provare a capire se esisteva qualche comunicato stampa in inglese che fosse stato tradotto a cazzo di cane da Red Hot Cyber

Ma non sono riuscito a trovare nulla che giustificasse un'espressione assurda come questa

@6AL
in reply to Cybersecurity & cyberwarfare

posso solo ipotizzare "sensori a infrarosso per individuare colonne di fumo"... ma non so se è quello...
in reply to 6AL

@6AL sì, i sensori a infrarosso sono utilizzati per integrare altre tecnologie di rilevamento, ma queste colonne di fumo, davvero, non sono riuscite a trovarle da nessuna parte.
Non ho idea come siano state generate, ma una bella IA sembrerebbe la spiegazione migliore
@6AL
in reply to 6AL

@6al saranno le «infrared plume», ovvero le scie calde che seguono un razzo, o un aereo, che si vedono all’infrarosso - e a occhio nudo si vede pure il fumo della combustione, ma l’infrarosso non vede il fumo… vede solo il calore.

cuando andavo a sqola io cerano le ore di composizione di itagliano, e la ggente imparavono a scrivere come cazzo si doveva.

@6AL
in reply to Anon

cuando andavo a sqola io cerano le ore di composizione di itagliano, e la ggente imparavono a scrivere come cazzo si doveva.

@Anon AHAHAH! Comunque io condivido ogni articolo di RHC, perché è un bollettino molto interessante, ma ogni tanto non capisco perché escono degli articoli scritti con il culo e a volte ci sono pure tracce del prompt usato per far scrivere l'articolo da un LLM...
@6AL

@Anon @6AL

Anon reshared this.




per quale motivo dovrebbe essere un problema sostenere che l'ingiustizia genera violenza? è un dato di fatto. non si può avere pace senza giustizia, come non si più combattere la violenza senza combattere anche l'ingiustizia.


Abstimmungsresultat zur Initiative Service Citoyen


ServiceCitoyen Einreichung

Bern, 30. November 2025

Die Piratenpartei kämpft weiter für den Zusammenhalt der Bevölkerung, die gesellschaftliche Resilienz und damit für ein vernünftiges Milizsystem. Das heutige Stimmresultat zur Service Citoyen Initiative zeigt deutlich, wie stark die Bevölkerung mit halbgaren Argumenten verunsichert wurde.

Unsere Initiative hat viele richtige Antworten auf die Herausforderungen der Gegenwart und Zukunft geliefert. In Europa herrscht Krieg. Das Schweizer System ist zur Bewältigung von vielen Krisen schlecht vorbereitet, denn es ist im letzten Jahrtausend steckengeblieben. Der Baustein des „einzig wahren Wehrdienstes“, und damit der vorgegebene Weg über den Militärdienst, ist nicht mehr zeitgemäss.

Aktuell versuchen Bund und Behörden durch Aktivismus von den wahren Problemen abzulenken: Der Initiative wurden „hohe Kosten“ vorgeworfen, doch neuerdings soll die bestehende Armee durch eine höhere Mehrwertsteuer für alle finanziert werden, über doppelt so teuer wie Service Citoyen gewesen wäre. Beschaffungsprobleme des Militärs wie bei den Drohnen oder den überteuerten Fahrzeugsanierungen werden seit Jahren bewirtschaftet statt gelöst. Und den Fachkräftemangel im Militär versucht man neuerdings mit Aushebungs-Aufgeboten für Frauen zu lösen statt unser Milizsystem grundsätzlich zu verbessern.

Jorgo Ananiadis, Präsident der Piratenpartei Schweiz: „Alle Argumente von den Gegnern der Initiative wurden während dem Abstimmungskampf von ihnen selbst laufend gezielt hintertrieben. Moralisch haben wir also gewonnen und einige erste Reaktionen bei Bund und Behörden ausgelöst. Darauf bauen wir auf, denn die Piraten fordern auch zukünftig bessere Resilienz gegen die akuten Bedrohungen.“


piratenpartei.ch/2025/11/30/ab…

reshared this



Israele è alla resa dei conti con sé stesso, una grazia a Netanyahu sarebbe la picconata finale a quel poco che resta della democrazia israeliana, un "no" porterebbe ad un regolamento di conti istituzionale da cui comunique Israele uscirebbe moribondo.

Credo che l'idea di uno stato in cui tutti gli ebrei possano vivere sicuri sia al tramonto. Israele si avvia ad essere uno stato riservato agli ebrei più estremisti, per tutti gli altri non ci sarà più posto.


Netanyahu ha chiesto la grazia al presidente israeliano - Il Post
https://www.ilpost.it/2025/11/30/netanyahu-richiesta-grazia/?utm_source=flipboard&utm_medium=activitypub

Pubblicato su News @news-ilPost






Magnus Effect Drone Flies, Looks Impossible


By now we’re all familiar with the quad-rotor design most popular among modern drones, and of course there are many variants using more or less propellers and even fixed-wing drones that can fly autonomously. We’ve even seen drones that convert from rotorcraft to fixed-wing mid flight. But there are even more esoteric drones out there that are far more experimental and use even more bizarre wing designs that look like they shouldn’t be able to fly at all. Take [Starsistor]’s latest design, which uses a single motor and an unconventional single off-center wing to generate lift.

This wing, though, is not a traditional foil shape typically found on aircraft. It uses the Magnus effect to generate lift. Briefly, the Magnus effect is when lift is generated from a spinning object in a fluid. Unlike other Magnus effect designs which use a motor to spin a cylinder, this one uses a design inspired by Savonius wind turbines where a wing is free to rotate around a shaft. A single propeller provides a rotational force to the craft, allowing this off-center wing to begin spinning and generating lift. The small craft was able to sustain several flights but was limited due to its lack of active control.

[Starsistor] went through a number of iterations before finally getting this unusual craft to fly. His first designs did not have enough rotational inertia and would flip over at speed, which was fixed by moving the propeller further away from the center of the craft. Eventually he was able to get a working design to prove his conceptual aircraft, and we hope to see others from him in the future.

youtube.com/embed/oh3A8HBEQP0?…


hackaday.com/2025/11/30/magnus…



è proprio un mondo alla rovescia e irragionevole quello dove la principale preoccupazione sono gli immigrati e non la fuga di cervelli... la gente dovrebbe non dormire la notte pensato alle risorse che se ne vanno piuttosto che gli immigrati... anche se questo spiega come mai in italia siamo sempre più imbecilli.

unionesarda.it/economia/lecono…



Windows 11, un altro problema tecnico! Il pulsante di accesso con password scompare


Microsoft ha avvisato gli utenti di un problema tecnico di Windows 11 : dopo il rilascio degli aggiornamenti a partire da agosto 2025, il pulsante di accesso con password potrebbe scomparire dalla schermata di blocco. Sebbene la funzionalità in sé funzioni ancora, l’icona diventa semplicemente invisibile.

Come spiegato da Microsoft nella sua guida aggiornata, il problema riguarda i dispositivi con più metodi di accesso abilitati: PIN, chiave di sicurezza, password, impronta digitale, ecc. Passando il mouse sulla posizione precedente dell’icona, viene visualizzato un hotspot invisibile. Cliccandoci sopra si apre il campo di inserimento della password. Al momento non ci sono soluzioni alternative, se non quella di affidarsi al proprio intuito. Microsoft ha dichiarato di essere al lavoro su una soluzione, ma la data di rilascio è sconosciuta.

Questo non è l’unico problema relativo all’aggiornamento KB5064081. A settembre, Microsoft aveva già risolto un bug che causava arresti anomali durante la riproduzione di video protetti da DRM (Blu-ray, DVD, TV digitale), con immagini bloccate, mosse o addirittura nere.

Nello stesso mese, l’azienda ha anche risolto altri problemi causati dagli aggiornamenti di agosto, come errori di installazione delle app per utenti non amministratori (a causa di una richiesta imprevista di Controllo dell’account utente), nonché gravi ritardi e blocchi durante lo streaming tramite NDI su Windows 10 e 11.

Inoltre, dopo i “Patch Tuesday” di agosto, Microsoft è stata costretta a rilasciare urgentemente ulteriori patch per correggere un bug che impediva l’installazione degli aggiornamenti di sicurezza tramite Windows Server Update Services (WSUS), con codice di errore 0x80240069.

Contemporaneamente è stato risolto anche un altro problema grave: un problema tecnico impediva il funzionamento delle funzioni di ripristino e reimpostazione del sistema sui dispositivi con Windows 10 e Windows 10 Enterprise.

L'articolo Windows 11, un altro problema tecnico! Il pulsante di accesso con password scompare proviene da Red Hot Cyber.



a chi mi dice che la mia radio è una scatoletta (magari un computer?) con un software ricordo che sono una informatica... e veramente fatico a capire quale sia il difetto menzionato. il software può essere infinitamente più flessibile di hardware fisico... chi è vecchio dentro e non ha voglia di imparare cose nuove è pregato almeno di non scassare i maroni. il problema semmai è che quando compri una radio viene rilasciato lo schema elettrico dettagliato, ma non i sorgenti del software.... e in un ambito di smanettoni autorizzati non è appropriato il software chiuso.


Vulnerabilità critica in OpenPLC ScadaBR: CISA avverte di attacchi attivi


Il Cybersecurity and Infrastructure Security Agency (CISA), ha ampliato la lista delle vulnerabilità sfruttate (KEV), segnalando una nuova vulnerabilità che interessa OpenPLC ScadaBR, a causa di indizi di sfruttamento attivi in corso.

USi tratta della falla di sicurezza, identificata come CVE-2021-26829 con un punteggio CVSS di 5,4, interessa le versioni del software su Windows e Linux, a causa di una vulnerabilità di cross-site scripting (XSS) nella pagina system_settings.shtm.

Poco più di un mese dopo la segnalazione di Forescout riguardo alla scoperta di un gruppo di hacktivisti filo-russi, noto come TwoNet, che aveva preso di mira il suo honeypot nel settembre 2025, scambiandolo per un impianto di trattamento delle acque, il difetto di sicurezza è stato aggiunto al catalogo KEV.

Le versioni interessate comprendono:

  • OpenPLC ScadaBR fino alla versione 1.12.4 su Windows
  • OpenPLC ScadaBR fino alla versione 0.9.1 su Linux

“L’aggressore non ha tentato di escalare i privilegi o di sfruttare l’host sottostante, concentrandosi esclusivamente sul livello dell’applicazione web dell’HMI”, ha affermato Forescout.

Come riportano i ricercatori, il gruppo TwoNet ha iniziato le sue operazioni su Telegram all’inizio di gennaio, concentrandosi inizialmente sugli attacchi DDoS (Distributed Denial of Service), prima di passare a una serie più ampia di attività, tra cui il targeting di sistemi industriali, il doxxing e offerte commerciali come il ransomware-as-a-service (RaaS), l’hack-for-hire e l’intermediazione di accesso iniziale.

Il processo di distribuzione dell’impianto esca ha rivelato che l’autore dell’attacco ha impiegato circa 26 ore per passare dalla fase di accesso iniziale a quella di azione dirompente. In questo lasso di tempo, ha sfruttato credenziali predefinite per guadagnare l’accesso iniziale al sistema. Successivamente, ha condotto attività di ricognizione e instaurato la persistenza, tra le altre azioni, creando un nuovo account utente di nome “BARLATI“.

I malfattori hanno sfruttato la vulnerabilità CVE-2021-26829 per alterare la descrizione della pagina di accesso dell’HMI e visualizzare un messaggio pop-up “Hacked by Barlati”, inoltre hanno modificato le impostazioni di sistema in modo da disabilitare i registri e gli allarmi, senza rendersi conto di stare violando un sistema honeypot.

Si è scoperto che i tentativi di sfruttamento provengono dall’infrastruttura Google Cloud con sede negli Stati Uniti, il che dimostra come i malintenzionati stiano utilizzando come armi i servizi Internet legittimi per eludere il rilevamento e confondersi con il normale traffico di rete.

“Abbiamo osservato circa 1.400 tentativi di exploit che hanno interessato più di 200 CVE collegati a questa infrastruttura”, ha affermato Jacob Baines, CTO di VulnCheck . “Sebbene la maggior parte dell’attività assomigliasse ai template standard di Nuclei, le scelte di hosting, i payload e il targeting regionale dell’aggressore non erano in linea con il tipico utilizzo di OAST.”

L'articolo Vulnerabilità critica in OpenPLC ScadaBR: CISA avverte di attacchi attivi proviene da Red Hot Cyber.



Al termine della Divina Liturgia nella chiesa patriarcale di San Giorgio, il Papa e Bartolomeo, nella memoria liturgica di sant’Andrea, hanno impartito la benedizione ecumenica, affacciandosi insieme dal balcone del Phanar, la residenza del Patriarca…


Silicon Valley e Pentagono, il patto da rifare

@Notizie dall'Italia e dal mondo

In uno degli ultimi episodi del Ben & Marc Show, i fondatori della nota società di investimento (Marc) Andreessen (Ben) Horowitz orientano la discussione, assieme ad altri tre partners, su un tema a loro molto caro: le caratteristiche peculiari dell’ecosistema tech americano e le sue capacità di rafforzare le fondamenta




L’IA può davvero aiutare le economie emergenti?

Per vedere altri post come questo, segui la comunità @Informatica (Italy e non Italy 😁)

Secondo il premio Nobel per l'economia nel 2001 Michael Spence, sebbene l'intelligenza artificiale richieda un accesso affidabile all'elettricità e a Internet mobile, una volta risolti questi problemi, permetterà ai paesi emergenti in Africa e Asia di recuperare



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



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



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…



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


#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.


Ilya Sutskever e le ere dell’intelligenza artificiale

Per vedere altri post come questo, segui la comunità @Informatica (Italy e non Italy 😁)

Nato nell'allora Urss, Ilya Sutskever, classe 1986, è il ricercatore cruciale reclutato da Sam Altman ed Elon Musk nel 2015 con l’avvio di OpenAI, di cui è stato storico chief scientist fino all'anno scorso. Nel podcast di Dwarkesh Patel, Sutskever parla