Icona dell'app Calíope

Funzionalità

Ogni funzionalità, verificata rispetto al codice sorgente.

Calíope si distribuisce come un'unica applicazione con le funzionalità elencate qui sotto, disponibili su Mac, iPad, iPhone e Apple Vision Pro. Ogni voce corrisponde a codice che esiste oggi — questo è un catalogo, non una lista dei desideri. Usa le scorciatoie per saltare a una categoria o scorri l'elenco completo.

Questa pagina descrive Calíope 1.7, la versione che sto costruendo adesso. La 1.6 è sull'App Store per Mac, iPad, iPhone, Apple Watch, Apple TV e Apple Vision Pro. Il changelog dice in quale versione è arrivata ogni funzione.

Connessione e sicurezza

Tunnel SSH nativo

“Il tuo tunnel SSH, senza terminale né .ssh/config.”

Raggiungi server dietro un bastion dal sandbox di macOS — senza ssh locale, senza ~/.ssh/config, senza lotte di permessi.

SwiftNIO + NIOSSH. Autenticazione tramite password o chiave privata (ed25519, ECDSA P-256/P-384/P-521). Parser OpenSSH e decifratura della passphrase in memoria. Proxy locale su 127.0.0.1 collegato tramite SSH direct-tcpip.

Verifica TOFU della host-key

“Ti avvisa se qualcuno ha intercettato il tuo tunnel — prima che tu scriva qualcosa.”

Rileva un MITM contro il tuo bastion SSH senza lasciare un known_hosts su disco.

Fingerprint salvati nel Keychain. La prima connessione richiede una conferma esplicita; un fingerprint cambiato fallisce di netto — equivalente a StrictHostKeyChecking=yes.

TLS rigoroso di default

“SSL che protegge davvero — non un semplice interruttore.”

Attivare «SSL» significa SSL verificato. I certificati autofirmati richiedono una CA o un opt-out esplicito con avviso visibile.

Politica unica: saltare la verifica è opt-in; una CA fornita permette la verifica senza hostname; in tutti gli altri casi, verifica completa.

Keychain con sincronizzazione iCloud opt-in

“Le tue password non vanno su iCloud a meno che tu non le inviti.”

Decidi tu quali credenziali viaggiano tra i tuoi dispositivi. Di default, nessuna.

La modalità solo-locale imposta le credenziali con WhenUnlockedThisDeviceOnly; attivare la sincronizzazione le migra ad AfterFirstUnlock per iCloud Keychain. L’interruttore è idempotente.

Autenticazione biometrica opzionale per profilo

“La tua impronta sblocca la produzione, non solo il tuo Mac in sospensione.”

Aggiunge un varco Touch ID / Face ID prima di connettersi ai server di produzione, configurabile per profilo.

Costruito sul framework LocalAuthentication. Attivabile per profilo di connessione.

Connection pool deterministico

“Un pool di connessioni che si chiude sempre — anche quando qualcosa va storto.”

Connessioni che non disperdono risorse né bloccano la UI, nemmeno quando cambi sessione.

SwiftNIO EventLoopGroupConnectionPool, con un limite di 5 connessioni per event loop in un event-loop group a thread singolo. Chiusura asincrona con timeout di sicurezza e una chiusura SSH pulita quando il binding locale fallisce.

Prepared statement nativi

“Binding preparati, non interpolazione di stringhe — dalla base dello stack.”

I valori che gli strumenti di Calíope inviano per te — un filtro, una cella modificata, una riga inserita — non vengono mai concatenati all'SQL: viaggiano sul protocollo di rete, separati dallo statement. Ciò che scrivi nell'editor SQL parte così come l'hai scritto, come in qualsiasi client.

Il prepared statement di ciascun motore, in un client che ho scritto io: senza binding → query semplice (COM_QUERY su MySQL e MariaDB, la query semplice su PostgreSQL); con binding → COM_STMT_PREPARE e COM_STMT_EXECUTE su MySQL e MariaDB, con lo statement chiuso su ogni percorso in cui la connessione sopravvive, così il pool non perde mai connessioni, e Parse, Bind ed Execute su PostgreSQL, con segnaposto $n. SQL Server: sp_executesql via RPC, con parametri tipizzati. Oracle Database: bind :1 tipizzati nella chiamata di esecuzione. ClickHouse: parametri tipizzati {name:Type}, inviati come campi param_ della richiesta HTTP. Gli identificatori passano ancora per l’helper di escape centralizzato per i casi residui DCL/DDL.

Host alternativo per profilo

“Un server, due indirizzi — e li prova entrambi.”

Allo stesso server si arriva spesso da un indirizzo dal Mac e da un altro dall'iPad. Dai al profilo un secondo indirizzo e Calíope lo prova quando il primo non risponde, con la stessa porta e le stesse credenziali.

La destinazione la risolve connectionEndpoints, mai leggendo il campo host: i tre punti che aprono un pool ricevono l'endpoint. Ordine fisso, principale e poi alternativo, senza ricordare quale ha vinto — quello stato è proprio ciò che non può viaggiare tra dispositivi. Accetta host:porta per la rotta che pubblica un'altra porta. Con tunnel SSH viene ignorato, e l'interfaccia lo dice: lì l'host lo risolve il bastione, non il tuo dispositivo.

Etichette di ambiente

“Sai su quale server sei prima di eseguire qualsiasi cosa.”

Ogni connessione può avere un’etichetta con il nome e il colore che scegli — locale, test, produzione — e una fascia del suo colore sta sopra ogni strumento, con un livello di protezione che può chiedere prima di ciò che scrive o rifiutarlo del tutto.

Un’unica guardia, scritta una volta, giudica ogni istruzione prima di inviarla; in sola lettura, inoltre, il server stesso passa in sola lettura dove sa farlo — SET SESSION TRANSACTION READ ONLY con MySQL e MariaDB, default_transaction_read_only all’avvio con PostgreSQL, readonly=2 a ogni richiesta a ClickHouse — mentre con SQL Server, Oracle, Redis e MongoDB la guardia è solo il client. Protegge dagli incidenti, non dagli attaccanti: questo è compito di un utente di sola lettura sul server.

Editor SQL e produttività

Completamento automatico sensibile al contesto

“L'editor sa se sei nel FROM, nel WHERE o nell'elenco delle colonne.”

Scrivi meno e commetti meno errori, perché il suggerimento capisce dove ti trovi all'interno dello statement.

Suggerisce le colonne della tabella attiva, i nomi dei database, i token dello schema (tabelle, viste, funzioni), le keyword DML/DDL/di controllo, i tipi di dati e le frasi ausiliarie SQL filtrate per motore.

Linter lessicale in tempo reale

“Le parentesi sbilanciate non arrivano mai al server.”

Cattura l'errore evidente prima che il server lo rifiuti.

Rileva commenti non chiusi, stringhe non chiuse, parentesi sbilanciate e identificatori con backtick aperto. Scansione O(n), senza parser completo.

Formattatore, e una modalità sicura

“Un DROP non parte per sbaglio.”

Una formattazione leggibile per le tue query, e un lucchetto che impedisce a un UPDATE o a un DROP di arrivare al server prima che tu lo voglia.

Il formattatore mette in maiuscolo le parole chiave a partire dal vocabolario del motore. La Modalità sicura, attiva per impostazione predefinita e salvata per profilo e per scheda dell'editor, si rifiuta di eseguire qualsiasi istruzione che contenga ALTER, CREATE, DELETE, DROP, GRANT, TRUNCATE, UPDATE, REPLACE o RENAME — dall'editor, dal Terminale e dallo SQL Player allo stesso modo. Cerca la parola, non il WHERE: anche un UPDATE che lo ha viene fermato, e non parte nulla finché non la disattivi.

Oscuramento delle credenziali nei log e nella sincronizzazione

“Sincronizza la tua cronologia, non le tue credenziali.”

Il tuo log delle query non diventa un archivio di password su iCloud.

Neutralizza IDENTIFIED BY, IDENTIFIED WITH … AS, IDENTIFIED BY PASSWORD, SET PASSWORD FOR e PASSWORD(…). Oscuramento idempotente, applicato prima di esportare il log delle query su CloudKit.

Generatore di query e costruttori visuali

“Componi le query con dei clic; escono pronte per la produzione.”

Un SELECT … WHERE … JOIN … corretto senza memorizzare la sintassi.

Costruttori visuali dedicati per le quattro forme più frequenti: SELECT, WHERE, UPDATE e CREATE di tabella.

Rinomina di simbolo con confini di parola

“Rinomina id senza rompere client_id.”

Rifattorizza gli identificatori in sicurezza, senza rovinare i nomi simili.

Regex con confini di parola \b ed escape adeguato. Non matcha mai all'interno di identificatori più lunghi.

Palette Quick Open (⌘⇧O)

“⌘⇧O e sei nella tabella che cercavi.”

Raggiungi qualsiasi oggetto dello schema senza scendere lungo l'albero.

Ricerca fuzzy incrementale su tabelle, viste, routine e oggetti, con navigazione tramite frecce ed Enter per aprire.

Gestore di snippet con seeding per motore

“I tuoi snippet si adattano al motore, non il contrario.”

Le tue ricette SQL sempre a portata di mano, filtrate sul motore che stai usando.

Salvati in snippets.json, che viaggia su iCloud con l'interruttore generale di sincronizzazione e resta sul dispositivo quando è spento. Ogni snippet dichiara per quali motori vale (MySQL, MariaDB, PostgreSQL…). Connettersi a un nuovo motore aggiunge i default senza duplicati. Supporta la categorizzazione.

Popover di documentazione DDL e di funzioni

“La doc di GROUP_CONCAT si apre dove stai scrivendo.”

Documentazione senza uscire dall'editor né aprire un browser.

Mostra il DDL dell'oggetto dello schema sotto il cursore, o la scheda della funzione: firma, descrizione, parametri, un esempio e la versione in cui è arrivata. Ogni motore ha le sue schede, SQLite e DuckDB compresi, e anche gli operatori MongoDB nello strumento Query. Senza mouse, ⌥⌘?.

Editor di cella avanzato e modifica inline di riga

“Modifica la cella, guarda l'SQL e decidi.”

Modifica i dati rapidamente e visualizza in anteprima l'SQL esatto che verrà eseguito.

Modifica in stile foglio di calcolo sui risultati, con anteprima dell'UPDATE o del DELETE generato prima di eseguire.

SQL Player — uno script, passo dopo passo

“Avvia, metti in pausa e scorri il tuo script come un video.”

Esegui una migrazione un'istruzione alla volta e controlla ogni risultato prima che parta la successiva.

Divide lo script dell'editor in istruzioni e le esegue una per una, a mano o a intervalli, con i controlli primo, precedente, successivo e ultimo; la riproduzione automatica si ferma al primo errore. Ogni istruzione mostra il suo stato, il suo tempo e le righe che ha restituito o modificato, e finisce nella cronologia delle query. Vale la Modalità sicura.

Terminale SQL agganciato all'editor

“Il prompt mysql>, senza uscire dall'app.”

Scrivi un'istruzione, premi Invio, leggi la risposta come testo — come fa il client a riga di comando, accanto al tuo script.

Un pannello sotto l'editor con il prompt del motore (mysql>, postgres=#…), i risultati come tabella ASCII, “Query OK” con le righe che il server dice di aver modificato, e gli avvisi del server sotto. Una cronologia propria, con le frecce sul Mac e con i pulsanti su iPad, iPhone e Apple Vision Pro; ogni istruzione va anche nella cronologia della sessione. Vale la Modalità sicura.

Grafici dei risultati

“Da un result set a un grafico, senza esportare nulla.”

Barre, linee o una torta dalle righe appena ottenute, in un pannello dell'editor.

Gli assi li sceglie lui — la prima colonna di testo per le categorie, la prima numerica per i valori — e puoi cambiarli. Il grafico si esporta in PNG o PDF.

Una query, due database

“Lo staging è uguale alla produzione? Chiedilo a tutti e due insieme.”

Esegui la stessa query su due connessioni e guarda, riga per riga, che cosa cambia.

Esegui su due database… invia l'istruzione a entrambi e sostituisce la griglia con un confronto: celle cambiate segnate, righe presenti da un solo lato e un filtro per vedere solo le differenze. Le righe si abbinano per posizione, e solo quando i due lati restituiscono le stesse colonne.

Barre di aiuto dell'iPad sopra la tastiera

“Tastiera dell'iPad con superpoteri SQL.”

Suggerimenti tattili rapidi proprio sopra la tastiera a schermo.

Barre contestuali per l'oggetto o la funzione sotto il cursore, con accesso rapido a «Vedi DDL» e ai parametri di funzione.

Barra degli strumenti personalizzabile

“La tua barra, nel tuo ordine.”

Ognuno ha la propria ergonomia; i DBA riordinano una volta e se ne dimenticano.

Riordina o nascondi gruppi di pulsanti da un pannello di personalizzazione dedicato. Il layout viene mantenuto.

Ricerca e sostituzione globali, in tutto il database

“Una ricerca su tutte le colonne di testo che hai.”

Cerca un testo in tutte le colonne testuali di tutte le tabelle in una volta, guarda le corrispondenze per tabella e colonna, visualizza l'anteprima calcolata dal server e sostituisci in blocco dentro una transazione per tabella.

Mostra due cifre, non una: le collation di solito ignorano le maiuscole e REPLACE() non lo fa mai, quindi senza quell'avviso una modifica di massa annuncia 300 righe e ne cambia 100 senza che nulla fallisca. Lo scarto si misura con CAST(col AS BINARY) e non con una collation specifica. Colonne generate, chiave primaria e uniche restano fuori per impostazione predefinita — MariaDB accetta l'UPDATE di una colonna generata, riporta una riga interessata e non cambia nulla. L'escape usa |, perché la barra rovesciata si rompe con NO_BACKSLASH_ESCAPES.

Dati spaziali su una mappa vera

“Le tue colonne GEOMETRY smettono di essere 25 byte.”

Punti, linee e poligoni disegnati su una mappa agganciata all'editor, con stili satellite e piatto, raggruppamento e un comando per inquadrare i dati. Trascina un segnaposto o un vertice e Calíope compone l'istruzione — te la mostra prima di scrivere qualsiasi cosa.

Il WKB sul cavo è sempre in (longitudine, latitudine); ciò che cambia è il testo, perché MySQL 8 con un SRID geografico scrive prima la latitudine e MariaDB non lo fa mai. Lo scambio vive solo alla frontiera testuale, dove il parametro non ha valore predefinito: sbagliare non dà errore, sposta la riga di continente e il server lo accetta. Lo SRID viaggia con la geometria, senza chiave primaria affidabile non si modifica e viene detto perché, e non c'è CoreLocation da nessuna parte.

Report

Una query salvata con l’output dichiarato

“Una query salvata che risponde due volte la stessa cosa.”

Salva una query con i suoi parametri dichiarati e il suo output definito — quali colonne, in che ordine, con quali titoli e formati — ed eseguila quando vuoi, a mano o pianificata. Esportala in CSV, TSV, JSON, Markdown, HTML, XML, testo, Excel o PDF impaginato. Le definizioni dei report viaggiano con la sincronizzazione iCloud; i loro risultati e lo storico delle esecuzioni restano sul dispositivo che li ha eseguiti.

I parametri sono legati, mai incollati nel testo della query: niente di ciò che ci si scrive può cambiare quello che fa, in nessuno dei due modi SQL. Il contratto delle colonne si verifica all’esecuzione — una colonna che smette di arrivare, o che arriva con un altro tipo, viene annunciata invece di essere disegnata in silenzio. Ogni esecuzione lascia la sua riga in una cronologia condivisa con i backup, con i suoi parametri, il conteggio e la macchina che l’ha eseguita. Il pianificato apre una connessione propria dal profilo, e non promette mai di girare ad app chiusa.

Tre tipi di database, una sola cucitura

“Lo stesso report, contro tre tipi di database diversi.”

Lo stesso artefatto e la stessa schermata servono il tuo MySQL di produzione, il file .sqlite di un’app, un file .duckdb e una collezione MongoDB.

Il motore dei report non dipende dal provider di database: ha una cucitura propria, più stretta, con tre membri e non uno di più. Ci sono implementazioni per database relazionali, per file SQLite e DuckDB aperti da te e per MongoDB con find e aggregate. Aggiungere una fonte significa implementare quel protocollo senza toccare il motore. E nessuna fonte conserva stato dall’esecuzione precedente — quando una lo fece, il secondo report veniva proiettato con le colonne del primo: una tabella di celle vuote, senza errore e senza avviso.

Report che preparano prima di leggere

“Prepara, indicizza e leggi — su una sola connessione, e senza toccare le tue tabelle.”

I report che un DBA scriverebbe come uno script in cinque passi stanno in un report, senza rinunciare alla garanzia che non tocchi i tuoi dati.

Non ogni report nasce da una query: fissare una variabile di sessione, costruire una tabella temporanea in più passate, indicizzarla e leggerla alla fine. L’intero lotto gira su una sola connessione presa in prestito — con una connessione per istruzione, la temporanea creata dalla prima non esisterebbe più all’ultima. Le istruzioni di preparazione passano da una lista bianca e possono scrivere solo su temporanee del proprio lotto; il tetto di righe vale per l’ultima.

Nove formati di esportazione, e un PDF che misura la pagina

“Nove formati, e il PDF sa dove finisce la pagina.”

Il PDF che mandi in direzione dice «Importo», e il CSV dello stesso report dice «Importo» — non total_eur.

CSV, TSV, JSON, Markdown, HTML, XML, testo semplice e XLSX — scritto da Calíope stessa come ZIP più XML, senza dipendenze — più un PDF impaginato. Si esporta ciò che dichiara l’output, non ciò che è arrivato dal server. E l’impaginazione del PDF si misura a partire da ascendente, discendente e interlinea del font invece di stimarla con una costante: una costante taglia a metà l’ultima riga di ogni pagina, e lo si vede solo una volta stampato.

Amministrazione e catalogo

Cataloghi: un albero dello schema navigabile

“Il tuo schema, in un albero che riflette come lo pensi.”

Una sola vista per tutto il catalogo del server.

Database → tabelle / viste / routine / trigger / eventi, con caricamento pigro e azioni contestuali: DDL, colonne, indici, importazione di dati, costruttore di WHERE.

Confronta schema, con generazione di ALTER

“Confronta il tuo schema, genera l'ALTER, rivedi prima di applicare.”

Promuovi uno schema da staging a produzione senza raccogliere i diff a mano.

Confronta due schemi e genera l'ALTER TABLE necessario per portare l'uno all'altro. Il confronto delle colonne gira in parallelo tramite structured concurrency. Fonte di verità: INFORMATION_SCHEMA.

Audit DDL locale

“Sa quale DDL hai eseguito, quando e su quale server.”

Tracciabilità delle modifiche allo schema, senza toccare il server.

Ogni CREATE / ALTER / DROP / RENAME viene registrato localmente con timestamp e server di destinazione, nello store SQLite locale dell'app.

Migrazione dati tra server

“Da staging a produzione in tre clic — con anteprima.”

Clona oggetti tra ambienti senza mysqldump né file .sql fatti a mano.

Connessione doppia (origine + destinazione), selezione granulare di tabelle, viste, routine, trigger ed eventi, con opzioni di REPLACE, includere i dati o omettere le chiavi esterne. Anteprima dell'SQL prima di eseguire.

Editor di oggetti avanzati

“Un editor per tipo di oggetto, non un .sql generico per tutto.”

Modifica routine ed eventi correttamente, in un editor pensato per l'oggetto.

Pannelli dedicati per routine memorizzate, trigger, eventi, viste e indici. Ognuno emette DDL ben formato.

Costruttore di tabelle

“Una tabella progettata colonna per colonna, non digitata.”

Crea una tabella o modificane una esistente — colonne, tipi, chiavi, indici, chiavi esterne — e leggi il CREATE o l’ALTER TABLE prima che venga eseguito.

Ogni motore dichiara il proprio catalogo di tipi e opzioni, quindi il costruttore offre ciò che quel server ha, chiave di ordinamento e indici di salto di ClickHouse compresi. Modificare una tabella la confronta con un’istantanea dell’originale e scrive l’ALTER TABLE di ciò che è cambiato, e nient’altro. Si apre dai Cataloghi.

Manutenzione tabelle

“CHECK, REPAIR, OPTIMIZE, ANALYZE e CHECKSUM, in un pulsante.”

Manutenzione delle tue tabelle, su MySQL, MariaDB, TiDB, PostgreSQL, SQL Server, Oracle Database e ClickHouse, senza memorizzare i comandi.

Esegue CHECK TABLE, REPAIR TABLE, OPTIMIZE TABLE, ANALYZE TABLE e CHECKSUM TABLE su MySQL e MariaDB, e ANALYZE più VACUUM e REINDEX TABLE CONCURRENTLY su PostgreSQL, e UPDATE STATISTICS, DBCC CHECKTABLE e la ricostruzione degli indici su SQL Server, e CHECK TABLE e OPTIMIZE (l’intera tabella o una partizione) su ClickHouse, e le statistiche con DBMS_STATS su Oracle Database, con feedback di avanzamento.

Amministrazione utenti e privilegi

“GRANT e REVOKE — con delle caselle.”

Gestisci gli utenti del server senza scrivere ogni GRANT a mano.

CREATE / ALTER / DROP USER, più GRANT e REVOKE da una UI dedicata.

Advisor ed editor di indici

“Gli indici che ti avanzano e quelli che ti mancano — con le prove.”

Identifica gli indici ridondanti o mancanti usando dati che il server già espone.

Vista advisor che analizza l'uso degli indici, insieme a un editor dedicato al catalogo degli indici.

Profiler di colonna

“Profila la colonna, non indovinare i dati.”

Comprendi la qualità dei tuoi dati prima di scrivere la query analitica.

Statistiche di una colonna del risultato caricato: i null e la loro quota, i valori distinti, minimo, massimo e media, e i dieci valori più frequenti, con un grafico a barre dei primi otto.

Diagramma ER interattivo

“Il diagramma ER che non devi più disegnare.”

Documenta le relazioni senza disegnare caselle su Miro.

Generazione automatica dallo schema attivo, con visualizzazione delle chiavi esterne.

MongoDB

MongoDB

“Database a documenti, con il loro vocabolario.”

Percorri collezioni e documenti, modificali come JSON, scrivi filtri e pipeline di aggregazione, gestisci gli indici e guarda il server, le operazioni in corso e i suoi utenti — senza uscire dall’app che già usi per MySQL.

Strumento autonomo: nulla di MongoDB tocca lo strato dei provider relazionali. I documenti vengono mostrati come alberi richiudibili con il tipo di ogni valore (ObjectId, decimal128, date, binari), perché una collezione non ha schema e due documenti vicini possono non condividere alcun campo. JSON esteso in entrambe le direzioni con parser proprio: l’ordine dei campi e l’ampiezza dei numeri sopravvivono all’andata e ritorno. Riutilizza il profilo di connessione, il portachiavi e il tunnel SSH nativo. Cursori paginati, chiusi quando vengono abbandonati. Sei strumenti nel navigatore: Collezioni MongoDB, Query MongoDB, Indici MongoDB, Server MongoDB, Comandi MongoDB e Profiler MongoDB.

Redis e Valkey

Redis

“Chiavi, memoria e comandi — non tabelle che fingono.”

Una sessione Redis apre sette strumenti propri: Esplora chiavi, Pannello del server, Analizzatore di memoria, Comandi lenti, Client connessi, Console dei comandi e Topologia dei nodi. Vedi quale prefisso si mangia la memoria, quale comando ha superato la soglia e quale client disconnettere, dalla stessa app che usi per l'SQL.

Un client RESP proprio, fuori dallo strato dei provider relazionali. Le chiavi si percorrono con SCAN, mai con KEYS, e nessuna collezione si legge per intero — un HGETALL grande blocca il server allo stesso modo. In un cluster, MOVED rilegge la mappa degli slot e ASK no; un cluster non si apre attraverso un tunnel SSH, perché annuncia indirizzi che il tunnel non raggiunge, e la sessione lo dice prima di aprirsi. La console rifiuta ciò che lascerebbe uno stato sulla connessione (MULTI, WATCH, SUBSCRIBE…) e i comandi bloccanti senza limite di tempo. La soglia del log dei comandi lenti è in microsecondi, ed è scritto così.

Valkey

“Gli stessi sette strumenti, sul fork aperto.”

Valkey, il fork di Redis della Linux Foundation, si apre negli stessi sette strumenti: chiavi, server, memoria, comandi lenti, client, console e topologia, cluster incluso. Il pannello del server mostra la versione e la modalità proprie di Valkey, il prompt della console dice valkey>, e Testa la connessione lo riconosce e propone «Usa Valkey».

Lo stesso client RESP scritto per Redis, perché Valkey parla lo stesso protocollo: il prodotto si legge dal saluto del server, mai da un elenco di nomi, e ciò che cambia tra i due è una differenza dichiarata, non una copia del codice. Misurato contro Valkey 8.0 e 9.1, singolo e in cluster con slot in migrazione. Anche Snippet, Report e l'Assistente IA lavorano con Valkey, e i dodici capitoli Redis del Manuale del DBA dicono dove differisce. Valkey 8.0 o successivo.

Cassandra e ScyllaDB

Apache Cassandra

«Keyspace, l’anello e il CQL, non tabelle travestite.»

Una sessione Cassandra apre sette strumenti suoi: Query CQL, Esploratore di keyspace, Cluster, Nodo, Client connessi, Tracce e query lente e Ruoli e permessi. Scegli la consistenza di ogni query e ne leggi i risultati pagina per pagina, vedi come l’anello si divide i token e se tutti i nodi concordano sullo schema, modifichi una riga tramite la sua chiave primaria completa e tracci una query per leggere dove è andato il suo tempo, dalla stessa app che usi per l’SQL.

Un client proprio del protocollo nativo CQL, versione 4, fuori dallo strato dei provider relazionali e scritto a partire dalla specifica pubblicata: accesso con password, TLS con certificato client facoltativo, tunnel SSH e un host alternativo se il primo non risponde. I valori passano per istruzioni preparate, e una riga si modifica solo tramite la sua chiave primaria completa, come transazione leggera, dopo una conferma che nomina ciò che cambierà. Ciò che fa nodetool — riparare, compattare, snapshot — resta fuori, e non c’è backup: quello di Cassandra è uno snapshot dei file di ogni nodo. Misurato contro Cassandra 5.0.9, su un nodo e su un anello di tre. Cassandra 4.1 o successivo.

ScyllaDB

«Gli stessi sette strumenti, sulla riscrittura in C++.»

ScyllaDB si apre negli stessi sette strumenti. La scheda Nodo legge ciò che ScyllaDB pubblica su sé stesso, Tracce e query lente aggiunge il registro delle query lente che tiene ScyllaDB, e Testa la connessione lo riconosce e propone «Usa ScyllaDB».

Lo stesso client CQL scritto per Cassandra, perché ScyllaDB parla lo stesso protocollo: il prodotto si legge dalle chiavi SCYLLA_* che il server invia prima dell’accesso, mai da un elenco di nomi, e ciò che cambia tra i due è una differenza dichiarata, non una copia del codice. Misurato contro ScyllaDB 2026.3.3. Anche Snippet, Report, il Registro delle query e l’Assistente IA lavorano con Cassandra e ScyllaDB, e il Manuale del DBA ha undici capitoli su Cassandra e un dodicesimo su cosa distingue ScyllaDB. ScyllaDB 2025.1 o successivo.

Senza server

Editor SQLite

“Due motori, una app: il tuo MySQL remoto e il tuo SQLite locale.”

Apri e modifica il .sqlite di una app iOS o di uno script Python nello stesso strumento in cui amministri MySQL — con una transazione esplicita prima di scrivere qualsiasi cosa.

Livello autonomo (actor SQLiteConnection sopra l'API C di sistema — senza driver di server) con Struttura · Dati · Esegui SQL · Pragma: progettazione di tabelle, indici e viste, rinomina, ricerca e filtri, paginazione con la stessa dimensione di pagina dell'Editor SQL, ordinamento, editor di cella avanzato, Esegui SQL con evidenziazione della sintassi, completamento automatico dallo schema del file e tetto di righe sui risultati, transazioni Salva/Ripristina, manutenzione (integrity_check, VACUUM, ANALYZE, REINDEX), pragma modificabili e import/export CSV · JSON · SQL. Compatibile con la sandbox tramite security-scoped bookmark. Solo database non cifrati.

Editor DuckDB

“Analisi sul tuo portatile: un motore a colonne senza server da installare.”

Apri un file .duckdb, oppure interroga un Parquet, un CSV o un JSON dove già si trovano, senza importare nulla e senza server — nella stessa app in cui amministri MySQL.

DuckDB 1.5.5 compilato dentro l'app (pacchetto SPM locale, DuckDBKit sopra l'API C), fuori dal provider di database come l'Editor SQLite. Struttura · Dati · Esegui SQL · Impostazioni, con sequenze, tipi e macro nell'albero, SUMMARIZE, tetto di righe e Ferma nelle query lunghe, esportazione e importazione dell'intero database, Salva come… per i database in memoria e l'allegare un altro file DuckDB in sola lettura. Le estensioni non si scaricano: le quattro incluse sono tutto. Dalla 1.7 DuckDB è un framework che l'app condivide con la sua estensione Vista rapida (Quick Look): la barra spaziatrice nel Finder o l'anteprima in File leggono un .duckdb o un Parquet con questo stesso motore, e un .parquet aperto dal Finder o da File arriva qui, in un database in memoria, con la query già scritta.

Anteprima file

“Leggere un file non dovrebbe richiedere una connessione.”

Leggi il .md della documentazione, il .sql di un collega, il .json di configurazione, un .csv esportato, un .rtf che ti hanno mandato o il .log del server senza uscire dalla app, senza connetterti e senza rischio di eseguire qualcosa per sbaglio.

Sola lettura, un file alla volta, risolto per estensione: renderer Markdown proprio (ATX e setext, elenchi annidati, checklist, codice con recinto e con rientro di quattro spazi, citazioni, righe, tabelle GFM), evidenziatore SQL, formattatore JSON, lettore CSV secondo RFC 4180 con rilevamento del separatore, e lettore RTF che conserva struttura ed enfasi — titoli, elenchi annidati, grassetto, corsivo, sottolineato, barrato, collegamenti e allineamento — mentre carattere, corpi e colori restano quelli di Calíope, così il testo scala con la dimensione dinamica del testo e si legge in entrambi i temi. Tutto viene interpretato fuori dal thread principale e arriva alla vista come dati inerti. Sorveglia il percorso del file con DispatchSource, così sopravvive al salvataggio atomico. Tetti dichiarati e indicati a piè di pagina: 5 MB di lettura, 500 KB di evidenziazione SQL, 2 MB di formattazione JSON, 10 000 righe e 64 colonne CSV. Non apre mai la rete — le immagini remote di Markdown mostrano il loro testo alt.

Assistente IA, con o senza chiave

Porta la tua chiave. L'acquisto non include crediti IA — usi la tua API key. Questo viene dichiarato apertamente nel paywall: «L'assistente funziona senza nessuna chiave con Apple Intelligence o con Ollama; i provider cloud (OpenAI, Google Gemini, Anthropic Claude) richiedono una tua chiave, non inclusa nell'acquisto.»

Con Apple Intelligence non esce nulla dal dispositivo; con Ollama, nulla va oltre la macchina a cui lo indirizzi. Con OpenAI, Gemini o Claude, lo schema del database attivo — nomi di tabelle, colonne e chiavi esterne — va davvero a quel provider, con la tua chiave. Le righe e le credenziali non escono mai. A meno che tu non decida altrimenti: l’interruttore Inviare lo schema al modello, nel pannello stesso dell’assistente, lo decide prima di ogni domanda e con qualsiasi provider. Spento, non si invia nulla dello schema — nemmeno i nomi delle tabelle — e le tabelle le nomini tu nella domanda. Su macOS, Calíope può anche fare da server MCP per un client IA dello stesso Mac: sola lettura, su 127.0.0.1, spento di fabbrica.

Apple Intelligence e Ollama, senza chiave

“Due provider che non costano nulla e non chiedono nulla.”

Apple Intelligence esegue il modello di sistema sul tuo dispositivo: senza chiave, senza account, senza costi, e la tua domanda non esce dal dispositivo. Ollama esegue modelli aperti dove dici tu — la tua macchina, o una della tua rete — e Calíope gli parla all'indirizzo che scrivi.

Apple Intelligence tramite FoundationModels; si offre solo dove il sistema dice che c'è. Ollama tramite il protocollo di OpenAI contro la tua URL di base, senza intestazione Authorization, e con l'elenco dei modelli non filtrato — i nomi sono quelli che hai scaricato. Quando lo schema non entra nella finestra locale, l'assistente lo dice nella conversazione e propone cosa fare.

Provider OpenAI, Gemini e Claude

“IA che gira con i tuoi token, non con la tua fattura.”

Usa il modello che già paghi e non dipendere dagli aumenti di prezzo per token di Calíope.

OpenAI (modelli gpt-, o1, o3 e o4) con token Bearer. Google Gemini con API key; filtrato ai modelli che espongono generateContent. Anthropic Claude (claude-*) con x-api-key e il system prompt nel suo campo dedicato (non dentro messages). System prompt con il contesto dello schema attivo, conservando gli ultimi tre scambi.

Oscuramento dell'API key negli errori e nei log

“La tua chiave non appare mai in uno stack trace.”

Se un messaggio di errore finisce in uno screenshot o in un canale Slack, la tua API key non viaggia con esso.

Mascheramento tramite regex per sk-* (OpenAI), AIza* (Gemini), sk-ant-* (Anthropic Claude, inclusi sk-ant-api03-…) e Bearer … in qualsiasi messaggio di errore del provider.

Backoff esponenziale con Retry-After

“Se OpenAI dice di aspettare, Calíope aspetta esattamente quello.”

I picchi di rate-limit non rompono la tua sessione.

In caso di 429 / 503, riprova fino a tre volte (1 s / 2 s / 4 s), rispettando l'header Retry-After. Timeout: 30 s per la generazione, 15 s per elencare i modelli.

Voce in SQL

“Pronuncia la domanda; esegui l'SQL.”

Detta una richiesta e l'assistente la converte in SQL — utile su iPad e nelle sessioni pair-DBA con le mani occupate. La tua voce non esce dal dispositivo.

Costruito su SpeechAnalyzer e DictationTranscriber di Apple (macOS 26 / iPadOS 26 / iOS 26 / visionOS 26): il riconoscimento avviene sul dispositivo, non viene inviato audio a nessun server e la dettatura funziona offline. Il modello della lingua viene scaricato una volta, con avanzamento visibile, nella lingua impostata in Calíope — o in qualsiasi altra supportata dalla dettatura di sistema, scelta dalla capsula accanto al microfono, che dice in quale sta ascoltando. Viene richiesto solo il permesso del microfono — il riconoscimento locale non ha bisogno di quello di riconoscimento vocale. Risultati parziali in tempo reale.

Assistente conversazionale persistente

“Una conversazione con il tuo database, non un prompt isolato.”

Chiedi «ora con un LEFT JOIN» e sa già a quale query ti riferivi.

Mantiene il contesto dello schema attivo più gli ultimi scambi, per conversazione.

Un server MCP per un client di IA sul tuo Mac

“Cursor o Claude Desktop possono interrogare il tuo database — in sola lettura.”

Un client di IA sullo stesso Mac può elencare i database, descrivere le tabelle ed eseguire query in sola lettura sulle connessioni che scegli di esporre.

JSON-RPC 2.0 su HTTP, in ascolto solo su 127.0.0.1, sulla porta 41500 se non la cambi. Solo su macOS, spento per impostazione predefinita, e risponde solo mentre Calíope è aperta. Cinque strumenti, documentati con le descrizioni che riceve il client nella loro pagina.

Backup, importazione e sincronizzazione

Motore di backup con credenziali opt-in

“Backup con gzip nativo — e senza esportare password per sbaglio.”

Dump compatti e sicuri di default — nessuno esporta hash di password senza volerlo.

Genera .sql con opzioni di drop-before, includere i dati, includere gli utenti, includere le credenziali utente (opt-in, off di default) e compressione gzip nativa. CREATE USER / ALTER USER / GRANT vengono neutralizzati quando si escludono le credenziali. Eventi di avanzamento con ETA.

Backup programmati con retention

“Backup che non dipendono dal fatto che tu te ne ricordi.”

Il tuo Mac esegue il backup in tempo, anche se era in sospensione, e non riempie il tuo disco.

Pianificazioni giornaliere, settimanali, nei giorni feriali, mensili o ogni N ore. Usa bookmark security-scoped alla destinazione per funzionare dentro il sandbox. Gestisce le pianificazioni perse tra i riavvii dell'app, nomi di file con suffisso in nanosecondi per evitare collisioni, purga per retention e notifiche di successo/errore/omissione.

Importazione CSV / JSON / XLSX

“Da un foglio di calcolo a una tabella in tre clic.”

Importa file tabulari del mondo reale — non solo il CSV ideale.

CSV in stile RFC 4180 (virgolette con escape, campi con virgole), JSON (array di oggetti) e XLSX in streaming. Tre modalità — Inserisci, Salta i duplicati e Sostituisci i duplicati — offerte dove il motore le ha: tutte e tre su MySQL e MariaDB, le prime due su PostgreSQL e solo Inserisci su SQL Server, Oracle Database e ClickHouse.

Log locale persistente delle query

“Il comando che hai eseguito martedì, in due secondi.”

Cerca tra migliaia di query passate per testo SQL o data.

Store SQLite locale in Application Support con tabelle per le query eseguite e l'audit DDL, indicizzato per testo della query (asc) e data (desc).

Sincronizzazione del log delle query con iCloud (opt-in, oscurata)

“La tua cronologia SQL, nel tuo iCloud, senza le tue credenziali.”

Cerca nella cronologia del tuo Mac dal tuo iPad — con le credenziali rimosse.

Contenitore CloudKit iCloud.org.caliope.caliope, lotti di 400 record, retention configurabile (90 giorni di default). Applica l'oscuramento delle credenziali prima del caricamento. Verifica lo stato dell'account iCloud prima di sincronizzare.

Toggle di sincronizzazione per sezione

“Decidi tu cosa va su iCloud.”

Sincronizza solo ciò che ti interessa — non tutto o niente.

Accanto all’interruttore generale di iCloud, altri indipendenti per ciò che viene copiato nel tuo iCloud: nelle Impostazioni, il Portachiavi iCloud, il registro degli errori dell’app e i messaggi di sistema; il log delle query, dal suo strumento, e le conversazioni dell’assistente IA, dal loro pannello della cronologia.

Dump di molti gigabyte

“722 MB esportati con 68 MB di memoria.”

Backup e ripristino non dipendono più dalla RAM della macchina. Un dump di 722 MB con 4 milioni di righe tocca un picco di 68 MB; ripristinarlo richiede 19 secondi usando 14 MB. Annullare ferma davvero il dump, invece di lasciarlo arrivare alla fine.

Il motore orchestra e il provider scrive SQL: aggiungere un motore al backup significa implementare BackupDataSource e nient'altro — il banco di prova lo implementa in memoria con dialetti SQLite e Postgres senza toccare il motore. Il ripristino tira una istruzione alla volta invece di riceverle spinte, perché un flusso con buffer scarta istruzioni in silenzio e finisce annunciando successo. La lettura usa read(2) e non un file mappato: lo stesso spezzettamento ha misurato +201 MB residenti con FileHandle e 1,1 MB così.

Un backup della tua configurazione

“Prima di toccare iCloud c'è una copia.”

Esporta e importa tutto ciò che Calíope conserva fuori dal dispositivo — profili, gruppi, preferenze — con copie programmate nel contenitore iCloud e punti di ripristino locali creati da soli prima di ogni operazione rischiosa: attivare o disattivare la sincronizzazione, cancellare, importare.

Esiste per un incidente misurato: attivare la sincronizzazione su un iPad ha sostituito un connections.json di 16 470 byte con 28 profili con uno di 514 byte contenente un profilo di esempio. I segreti sono opt-in e sempre cifrati (AES-GCM, PBKDF2-SHA256 con 210 000 iterazioni, sale e costo scritti nel file stesso). Ciò che resta fuori viene scritto nella copia con il suo motivo — una copia che tace le proprie assenze è quella che fa credere di poter ripristinare tutto. Ripristinare unisce; un backup non cancella mai.

Ogni schermo Apple

Calíope sul tuo iPhone

“Il client intero, senza il Mac davanti.”

La stessa Calíope, disposta per il telefono — il client intero, non un visualizzatore. Si connette ai tuoi server ed esegue le tue query, con l'editor SQL, l'esploratore di schema, il cruscotto, il diagramma ER e i report lì dentro; e i tuoi profili di connessione, i tuoi snippet salvati, la cronologia e le conversazioni con l'assistente sono già lì ad aspettarti, portati dal tuo iCloud. Face ID per sbloccare, cinque lingue e una modalità dimostrativa per dare un'occhiata prima di collegare qualcosa. Si installa dalla stessa pagina dell'App Store del Mac e dell'iPad, e porta sulla schermata Home gli stessi due widget: le metriche del server che fissi, anche sulla schermata di blocco, e la salute di tutta la flotta. Un backup, un ripristino o una query lunga mostrano il loro avanzamento come Attività live, sulla schermata di blocco e nella Dynamic Island, e toccarla ti riporta alla sua scheda. Funziona mentre Calíope è aperta, e lo dico chiaramente: se lasci l'app con un backup in corso, dopo circa mezzo minuto va in pausa con ciò che è fatto salvato, e riprende quando torni. Altro nell'Aiuto.

È il binario di iOS, ed è lo stesso codice dell'iPad: non manca un solo strumento, e in tutto l'albero non c'è una sola verifica del dispositivo — ciò che cambia è la disposizione, non l'elenco delle funzioni. I profili di connessione vengono uniti al file iCloud condiviso invece di sostituirlo, perché i campi che uno schermo stretto non mostra — tunnel SSH, certificati, set di caratteri — restino intatti. Senza iCloud dice quale interruttore è chiuso, invece di mostrare una schermata vuota lasciandoti supporre che vada tutto bene.

Calíope sul tuo Apple Watch

“Cosa hanno fatto i tuoi server, senza tirare fuori il telefono.”

Calíope al polso, che arriva con Calíope su iPhone ed è coperta dallo stesso acquisto, senza acquisti a parte. Mostra i messaggi di sistema che Calíope pubblica: venti tipi in sette gruppi, con i backup, i ripristini e i report terminati o non riusciti, le query lente, i tunnel SSH caduti e ripristinati, la sincronizzazione iCloud non riuscita, i server vicini alle tue soglie e gli avvisi SQL scattati. Raggruppati per giorni, con notifiche facoltative su un interruttore a parte, e una modalità demo che mostra anche le schermate vuote. Un backup, un ripristino o una query lunga che segui sull'iPhone compaiono anche nello Smart Stack dell'orologio: è l'Attività live dell'iPhone, quindi non servono né iCloud né gli interruttori dell'orologio.

I messaggi viaggiano come identificatore più le loro cifre grezze, mai come una frase già scritta: l'orologio è impostato su una lingua diversa da quella del Mac più spesso che no, quindi la frase si scrive al polso. La cadenza che scegli è un minimo e non una promessa — con l'app chiusa decide watchOS quando svegliarla — e l'app lo dice in alto nella sua schermata di impostazioni, non in grigio in fondo. Il segnalibro è dell'ultimo messaggio consegnato e non dell'orologio da parete, perché i risvegli saltano e chiedere «qualcosa negli ultimi quindici minuti?» scarta il resto senza fallire. Si limita a leggere: non apre nessuna connessione verso un tuo server.

Calíope sulla tua Apple TV

“La salute dei server, letta dall'altro capo della stanza.”

Un pannello a muro per i tuoi server MySQL, MariaDB, TiDB, PostgreSQL, SQL Server, Oracle Database e ClickHouse: un riquadro ciascuno, con il suo stato — A posto, Avviso, Critico, Irraggiungibile o Nessun dato — e, quando qualcosa non va, che cosa non va. Tempo di attività, connessioni, thread in esecuzione, query al secondo, tasso di successo della cache, query più lunga e ritardo della replica. Due schede, perché un televisore non è un apparecchio in cui si naviga, e un gruppo dimostrativo di otto server per dare un'occhiata prima. Metti Calíope nella fila in alto della schermata Home e la fascia sopra mostra i tuoi server pubblicati, i più urgenti per primi, e poi i video dimostrativi di questo sito; scegliere una scheda apre quel server.

L'attualità la calcola chi legge, a partire dalla cadenza che Calíope dichiara: chi ha pubblicato non sa di aver smesso di pubblicare, quindi un Mac spento il venerdì lascerebbe il pannello verde per tutto il fine settimana. Lo stato non si distingue mai solo dal colore, e le soglie sono di Calíope: il televisore disegna, non giudica. Apple TV non ha né iCloud Drive né Portachiavi iCloud, quindi «si limita a leggere» lo sostiene la piattaforma e non una promessa.

Calíope su Apple Vision Pro

“Il client intero, appeso nella stanza.”

Dalla 1.6, Calíope è un'app nativa per visionOS su Apple Vision Pro: l'editor SQL, il browser dello schema, il diagramma ER, i backup, i report, il costruttore di query — tutti gli strumenti, senza toglierne nessuno. Si connette ai tuoi server e scrive. Il navigatore degli strumenti e le schede aperte stanno in ornamenti fuori dal vetro, ogni controllo ha la misura dello sguardo e si illumina quando lo guardi, e puoi aprire più finestre e lasciarle dove vuoi nella stanza. I widget si appendono a una parete o si appoggiano su un tavolo. Arriva dalla stessa pagina dell'App Store e dallo stesso acquisto del Mac e dell'iPad.

È la stessa app dell'iPad, compilata per visionOS invece che eseguita in modalità compatibile: il vetro del sistema al posto degli sfondi opachi, le barre come ornamenti, bersagli da 60 punti con l'evidenziazione dello sguardo, fogli della misura della finestra e Optic ID dove l'iPad dice Face ID. Avevo già un pannello nativo e non l'ho pubblicato, perché faceva meno dell'app per iPad; questa fa tutto quello che fa l'iPad. Fino alla 1.6, Calíope girava su Apple Vision Pro come l'app per iPad, in modalità compatibile.

Monitoraggio, diagnostica e replicazione

Motore di monitoraggio con il tuo storage

“Metriche dei tuoi server, salvate su un tuo server.”

Monitoraggio storico senza installare Prometheus.

Un collector dedicato scrive snapshot su un server di storage che scegli tu, predisponendo tabelle per i campioni (CPU, memoria, connessioni, QPS) e gli eventi (superamenti di soglia, lag di replicazione). Retention automatica.

Visual EXPLAIN interattivo

“Il tuo piano di query come un diagramma vivo.”

Individua il full scan che sta uccidendo la tua query senza leggere JSON o XML a mano.

Chiede a ogni motore il suo piano senza eseguire la query — EXPLAIN FORMAT=JSON su MySQL e MariaDB, EXPLAIN FORMAT='tidb_json' su TiDB, EXPLAIN (FORMAT JSON) su PostgreSQL, SHOWPLAN_XML su SQL Server, EXPLAIN PLAN su Oracle Database, EXPLAIN PLAN json = 1 su ClickHouse — e lo disegna come un albero. Codificato a colori secondo il tipo di accesso: full scan, range / index merge, ottimizzato, sort, join. Tooltip con access_type, righe stimate e tempi. Zoom con la rotellina, con il pizzico sul trackpad o con i pulsanti della barra — la scala è sempre visibile, e ⌘+ / ⌘− / ⌘0 fanno lo stesso senza trackpad. Pan trascinando.

Profiler di query

“Guarda dove stai perdendo i millisecondi.”

Individua quale fase della query si sta prendendo il tempo.

Su MySQL e MariaDB, costruito su SHOW PROFILE; su ClickHouse, che non lo ha, legge la riga della query in system.query_log. Tabella più grafico a barre per fase (starting, Sending data, ecc.) con tempi in millisecondi. Su PostgreSQL, SQL Server e Oracle Database il pulsante non c'è.

Query lente, sul motore che stai usando

“Ciò che il tuo server ha già annotato sulle query che hanno tardato troppo.”

Leggi ciò che il server ha registrato — da tutti i client che si collegano a lui, non solo da Calíope — e dalla stessa schermata accendi il registro, sposti la soglia e lo svuoti. Un pulsante porta la query nell'editor, e il profiler è proprio lì.

Ogni motore con il suo vocabolario. MySQL e MariaDB: le voci arrivano da mysql.slow_log quando il server scrive su tabella, e il riepilogo per istruzione da performance_schema; la soglia è long_query_time. PostgreSQL: pg_stat_statements, aggregato per forma dell'istruzione e non una riga per esecuzione, e la soglia si scrive con ALTER SYSTEM più pg_reload_conf() — una arrivata dalla riga di comando con cui il server è stato avviato viene dichiarata non modificabile da qui invece di fallire in silenzio. Oracle Database: la cache dei cursori di V$SQL, con la soglia applicata alla lettura, perché Oracle non tiene un registro delle query lente; AWR resta fuori, richiede un pack a pagamento. SQL Server: la cache dei piani di sys.dm_exec_query_stats, aggregata per istruzione — neanche SQL Server tiene un registro delle query lente, e per leggerla non serve attivare nulla. ClickHouse: system.query_log, con la soglia in millisecondi e il registro scaricato su disco prima di leggerlo. TiDB: CLUSTER_SLOW_QUERY e il riepilogo per istruzione di STATEMENTS_SUMMARY, con la soglia in millisecondi. Redis e Valkey: uno strumento a sé, Comandi lenti, con la soglia in microsecondi. MongoDB: uno strumento a sé, perché il profiler è per database. Una lista vuota non è mai la risposta: se il registro finisce in un file della macchina del server, se performance_schema è spento o se l'estensione non è creata in quel database, quel motivo esatto si legge sullo schermo. Su Aurora le impostazioni sono di sola lettura — vivono nel parameter group del cluster. Nessun grafico, e nulla viene copiato in Calíope: vedi la finestra che il server conserva, con l'orologio del server.

Elenco dei processi, con KILL guidato

“Un KILL per la query che ha bloccato la tua produzione.”

Termina una query fuori controllo senza aprire un terminale.

SHOW FULL PROCESSLIST con colonne per id, user, host, database, command, time, state e info. Azioni per KILL QUERY e KILL CONNECTION. Su PostgreSQL l’elenco viene da pg_stat_activity e si ferma con pg_cancel_backend o pg_terminate_backend; su SQL Server da sys.dm_exec_sessions e sys.dm_exec_requests, e si ferma con KILL; su Oracle Database da V$SESSION, ogni sessione indicata da SID,SERIAL#, e si ferma con ALTER SYSTEM CANCEL SQL o ALTER SYSTEM KILL SESSION; su ClickHouse, da system.processes, dove ciò che gira è una query e non una connessione, quindi c’è una sola azione, KILL QUERY.

Monitor di replicazione (vocabolario vecchio e nuovo)

“Repliche vecchie e nuove, nello stesso pannello.”

Osserva il lag della replica senza combattere con il vocabolario legacy vs. nuovo.

SHOW REPLICA STATUS su MySQL 8.0.22+ e MariaDB 10.5.1+, con fallback automatico a SHOW SLAVE STATUS sulle versioni precedenti. Su ClickHouse, dove la replicazione è per tabella, mostra le tabelle replicate, Keeper, il ritardo peggiore in secondi e la coda in voci. Metriche: IO/SQL running, secondi di ritardo rispetto al source, ultimi errori con timestamp, GTID set, posizioni di log. Auto-refresh configurabile.

Topologia di replicazione

“Una replica può dire zero secondi mentre è indietro di ore. Qui si vede.”

Vedi l’intero gruppo in una volta, e smetti di fidarti di uno «0 secondi» che in realtà significa «ho appena riconnesso».

Dichiari quale macchina è la primaria e quali sono le repliche. Nulla viene rilevato in automatico: SHOW REPLICA HOSTS vede solo ciò che è connesso in quell’istante, quindi un gruppo rilevato cambierebbe da solo e «questa replica non c’è più» sarebbe indistinguibile da «questa replica è caduta». Quella query serve a contraddire una configurazione incoerente, mai a riconfigurarla. Che una replica legga da un’altra macchina si decide dal server_id, mai dal nome host — dietro Docker, NAT, una VPN o un tunnel, confrontare stringhe dà un avviso permanente e falso. Un thread IO fermo è critico anche quando il ritardo dice zero, e accanto va la deriva di GTID, contata per origine anziché sottratta. Un membro che non risponde non trascina gli altri: «7 su 9» è una lettura normale, e quelli che mancano vengono nominati. Legge soltanto — non opera mai sul gruppo. Il diagramma porta una tabella come alternativa accessibile, e nessuno stato si distingue solo per colore.

Visualizzatore di binlog con filtri e PURGE

“Il tuo binlog, filtrabile e purgabile — dall'app.”

Verifica quali eventi hanno prodotto le tue istruzioni senza scendere a mysqlbinlog.

SHOW BINLOG EVENTS con categorizzazione in DDL / DML / Sistema, ricerca per testo e un limite di righe configurabile (300 di default). Supporta i binlog crittografati (MySQL 8.0.14+). PURGE BINARY LOGS TO con conferma esplicita. Solo MySQL e MariaDB: gli altri motori non tengono un log binario, e lì lo strumento non viene offerto.

Dashboard, Informazioni server e Monitor di salute del server

“Il battito del tuo server, in una sola vista.”

Consolida lo stato di salute del server senza aprire cinque client.

Informazioni server su più schede (variabili globali e di sessione, status globale e di sessione, uso dell'HDD), una Dashboard con grafici in tempo reale e un Monitor di salute del server.

Benchmark in tempo reale

“Due query sulla bilancia; una vince.”

Scegli tra due query con le prove, non con l'intuito.

Confronta i tempi di esecuzione di varianti di query fianco a fianco.

Avvisi e notifiche locali

“Il tuo Mac ti avvisa quando la replica va in ritardo.”

Il sistema ti avvisa — non devi restare a fissare l'app.

Avvisi per soglia su CPU, memoria, connessioni e lag di replicazione. Notifiche native di macOS/iOS.

Avvisi SQL

“La tua regola, scritta in SQL, sorvegliata per te.”

Scrivi una query che restituisca un valore, scegli un operatore e una soglia, e Calíope la riesegue all’intervallo che imposti e segnala la regola quando supera la linea.

Operatori >, <, = e <>, confrontati come decimali esatti e non come double, e = e <> anche sul testo. Sei stati, non un sì o un no: non ancora misurata, OK, avviso, nessuna riga, fallita con il messaggio del server stesso, e rifiutata perché scrive sotto un’etichetta d’ambiente che protegge. Le regole viaggiano su iCloud con l’interruttore generale; le misure restano nella sessione, così una lettura vecchia non viene mai mostrata come attuale.

Tutto ciò che sta girando, in un solo posto

“Ciò che sta girando non sparisce più cambiando scheda.”

Query, backup, migrazioni e lavori pianificati si registrano in un unico posto, con tempo trascorso, destinazione e uno Stop che ferma davvero. Si vede dal piede della barra laterale, dalla scheda che lavora e dal selettore di server.

Le operazioni si iscrivono da sole — nulla sonda le bandiere altrui, perché un registro che indovina finisce per mentire in entrambe le direzioni. I compiti (che iniziano e finiscono) e le modalità (accese finché qualcuno non le spegne) sono tipi distinti, quindi una modalità non porta barra di avanzamento né cronometro. Un lotto sopravvive alla distruzione della sua vista: il controller vive in uno store indicizzato per scheda, non nello stato della vista. Soglia di 0,8 s prima che appaia qualcosa — una query di 40 ms non è un processo.

Errori che si spiegano — e che il tuo telefono può leggere

“Un guasto con la sua causa, il suo suggerimento e la sua traccia.”

Quando qualcosa va storto, Calíope dice cosa è successo, suggerisce cosa controllare e rimanda alla voce di aiuto pertinente. Tutto finisce in un registro con la sua data e il suo dispositivo, che l'app per iPhone può leggere da dovunque tu sia.

Nessun codice di errore nomina un motore: la tabella dei codici nativi vive con il suo provider, quindi aggiungerne uno significa implementare un protocollo. Il numero nativo si legge dal pacchetto tipizzato, non si estrae dal messaggio — il driver di prima non lo scriveva, così un errore di credenziali veniva classificato come guasto di connessione e ti mandava a controllare la porta. Il telefono è in sola lettura: sfoltire ed eliminare restano sulla scrivania. E «nessun errore» è un'affermazione — si distinguono sei motivi diversi di schermata vuota, perché dare la buona notizia quando il canale è semplicemente chiuso è una bugia a sé. Tutto si legge nel Registro errori.

Widget nativi

Widget desktop macOS

“Stato del server, a colpo d'occhio, sulla tua scrivania.”

Guarda il battito del tuo server senza aprire Calíope.

Famiglie Small, Medium, Large e ExtraLarge. Gli snapshot vengono letti da un app group condiviso con file coordination per letture concorrenti sicure. I payload superiori a una soglia di sicurezza vengono rifiutati (protezione DoS).

Widget della schermata Home e della schermata di blocco di iPhone e iPad

“Il tuo server sulla schermata di blocco.”

Metriche del server sulla schermata di blocco del tuo iPhone o iPad — a pochi secondi di distanza.

Sette famiglie su iPad — Small, Medium, Large, ExtraLarge, più le accessorie Rectangular, Circular e Inline — e sei su iPhone, che non ha ExtraLarge.

Widget alla parete, su Apple Vision Pro

“Il battito del tuo server, appeso accanto alla finestra.”

Lo stesso widget, collocato su una parete della stanza: le metriche del server che fissi, dove alzi lo sguardo e le vedi.

Small, Medium, Large ed ExtraLarge, le quattro del Mac: visionOS non ha schermata di blocco. Texture di vetro, così si vede la parete attraverso, e incassato nella parete o in rilievo, a tua scelta quando lo collochi.

Widget dello stato della flotta

“Tutti i server che tieni d'occhio, e qual è il peggiore.”

Un secondo widget che guarda tutta la flotta invece di un solo server: quanti server tieni d'occhio e come sta il peggiore, sulla scrivania del Mac, nella schermata Home di iPhone e iPad e su una parete con Apple Vision Pro.

Famiglie Small, Medium e Large, le stesse sul Mac, su iOS e su visionOS. Legge ciò che il monitor di salute del server ha misurato su quel dispositivo, attraverso l'app group condiviso; l'estensione non interroga nulla per conto suo. Niente ExtraLarge e niente famiglie della schermata di blocco, di proposito.

Deep-linking al profilo fissato

“Tocca il widget → la dashboard del server giusto, in un solo movimento.”

Un tocco e sei nella dashboard del server giusto.

URL del widget caliope://server/<uuid> quando c'è un profilo collegato; altrimenti, ripiega su caliope://.

Selezione basata su AppIntent

“Un widget per server — modificabile come un widget del meteo.”

Assegna un widget diverso a ogni server — configurato in pochi secondi.

Configurabile dalla UI di modifica dei widget di sistema tramite un AppIntentConfiguration. Non richiede codice dell'utente.

Aggiornamento in background con budget di sistema

“Si aggiorna quando serve; dorme quando no.”

Il widget non prosciuga la tua batteria e mostra comunque dati aggiornati.

La policy di timeline delega il controllo a WidgetKit, rispettando il budget di aggiornamento del sistema. Ripiega sull'ultimo snapshot quando non ci sono dati aggiornati.

Integrazioni di sistema

Siri e App Intents

“Un SELECT COUNT(*) da Siri, senza aprire Calíope.”

Esegui una query o elenca i database da Comandi rapidi, senza aprire l'app.

Intent registrati: connettersi a un server, eseguire una query (restituisce TSV con intestazioni), elencare i database, aprire una tab del workspace. Supportato da un bridge interno che espone i session e database manager agli AppIntents.

Menu macOS e gestione dei file .sql

“Sa aprire da Spotlight con un .sql — come qualsiasi app nativa.”

Si comporta come una vera app per Mac — non come un port da Windows o Electron.

Barra dei menu completa: Informazioni, Apri file SQL, File recenti, Quick Open, navigazione tra le tab, Aiuto, Novità, Informativa sulla privacy, Supporto. Gestisce le aperture di file .sql tramite NotificationCenter.

Elemento nella barra dei menu

“Un'icona nella barra dei menu: sai se sei connesso senza cambiare finestra.”

Contesto di connessione a colpo d'occhio, senza portare l'app in primo piano.

Icona nella barra dei menu che riflette lo stato di connessione e il profilo attivo.

Onboarding con TipKit

“Scopri ciò che ti serve, quando ti serve.”

Impara le funzionalità nel momento in cui sono rilevanti.

Suggerimenti contestuali in tutti gli strumenti — tra gli altri Quick Open, il costruttore di WHERE, l’importazione di dati, Visual EXPLAIN e l’albero dello schema —, uno per strumento e per visita, in ordine, perché non si accumulino mai.

Continuità via iCloud, gesti dell'iPad e trackpad

“L'SQL che scrivi sul Mac ti aspetta sull'iPad — anche a Mac spento.”

Su iPad con Magic Keyboard, lavori proprio come sul Mac.

La sincronizzazione iCloud opzionale porta connessioni, contenuto dell'editor e preferenze da un dispositivo all'altro — senza prossimità né Bluetooth. Gestione nativa del puntatore e della tastiera su iPad. Gesti: pizzicare per ridimensionare il carattere nell'editor e nella griglia dei risultati, pizzicare per ingrandire l'immagine di una cella, swipe sulle righe dei risultati, pressione prolungata per i menu contestuali, pan e zoom nei diagrammi ER e in Visual EXPLAIN, separatori dei pannelli trascinabili. Split View.

Modalità screenshot

“Screenshot pronti per la documentazione — non screenshot amatoriali.”

Cattura screenshot pronti per la documentazione con un aspetto coerente.

Cmd+Opt+P su macOS produce PNG con uno stile pronto per la documentazione e il marketing.

«Novità» dentro l'app

“Novità, dentro l'app — non in un changelog.”

Scopri le novità senza leggere le note di versione dell'App Store.

Highlight per versione, con stato locale di «già visto».

Interfaccia in cinque lingue (spagnolo, inglese, francese, tedesco, italiano)

“Calíope parla la tua lingua — spagnolo, inglese, francese, tedesco o italiano.”

Un'app progettata prima in spagnolo, così non sembra una traduzione automatica.

Bundle di risorse completi en, es, fr, de e it. La lingua è quella che scegli per Calíope nelle impostazioni di sistema, app per app, e i widget la seguono. Fallback all'inglese.

Privacy, sandbox e conformità

Sandbox App Store attivo

“Sandbox attivo — fa ciò che dichiara, e nulla più.”

Calíope non può accedere a nulla al di fuori degli entitlement dichiarati. Il sistema lo garantisce.

App sandbox abilitato con un set ristretto di entitlement: client e server di rete (per il proxy SSH), ingresso audio (voce in SQL), file selezionati dall'utente (documenti), app group (per i widget), stampa e iCloud (CloudKit, Cloud Documents e l’archivio chiave-valore).

Servizio di cancellazione dei dati

“Un pulsante, e non resta nulla.”

Un pulsante per lasciare la macchina pulita prima di restituirla o venderla.

Cancellazione su richiesta di tutto ciò che Calíope conserva, nei sei posti elencati più sotto in “Cancellare tutto”.

Quanto costa l'IA, detto prima di pagare

“Prezzo onesto — quale assistente chiede una chiave, detto all'acquisto.”

Sai esattamente cosa paga l'acquisto e cosa no.

Il paywall dice che Apple Intelligence e Ollama non chiedono chiave e che OpenAI, Gemini e Claude chiedono la tua, che l'acquisto non include, accanto alle condizioni dell'acquisto: un solo addebito, nessun rinnovo, ripristinabile su ogni dispositivo.

Acquisto unico con 60 giorni di prova

“Sessanta giorni gratis, senza trucchi.”

Prova Calíope sessanta giorni senza costi; se la tieni, paghi una sola volta.

Prodotto non consumabile di StoreKit 2 con 60 giorni di prova gratuita come non consumabile a prezzo zero (linea guida 3.1.1 di App Review). Verifica tramite AppTransaction.shared e Transaction.latest(for:) di StoreKit 2. Ripristino tramite AppStore.sync(). Il prezzo viene sempre presentato da product.displayPrice.

Cancellare tutto, e sapere cosa è successo

“Sei posti, un rapporto, nessun errore muto.”

Il pulsante di cancellazione raggiunge i file locali, il Portachiavi, il contenitore iCloud Drive, l'archivio chiave-valore, CloudKit e i dati del widget — e pubblica un segnale perché anche gli altri tuoi dispositivi cancellino invece di ricaricare tutto.

Una cancellazione remota non consulta l'interruttore di sincronizzazione: l'interruttore dice se da adesso si carica, non se lassù c'è già qualcosa, e chi l'ha attivato, caricato e poi spento è proprio il caso che una cancellazione per privacy non può lasciare fuori. La propagazione è asimmetrica per non entrare in ciclo, e il confronto è > e non !=, perché un vecchio segnale ripubblicato da un dispositivo addormentato non inneschi una seconda cancellazione. Il rapporto ha una riga per canale con il suo conteggio e il suo errore — la versione precedente era scritta con try? muti e finiva sempre con «tutti i tuoi dati sono stati eliminati correttamente», una frase che non poteva essere falsa nemmeno con CloudKit fuori uso.

Pronto a provare Calíope?

Ogni funzionalità di questa pagina è inclusa nell'acquisto unico. Sessanta giorni gratis e poi si compra una volta ed è tua per sempre.

Prova gratis per 60 giorni →