Il numero 2025 è un quadrato perfetto, poiché è il quadrato di 45.
Il precedente fu il 1936, il successivo sarà il 2116.
Ma 2025 è anche dato dalla somma dei cubi dei numeri naturali da 1 a 9.
Ed è anche pari alla somma dei primi 45 numeri dispari.
E per finire, è pure la somma di tre quadrati (5, 20 e 40).
Sembra un numero molto…naturale!
Buon anno!
Leaky abstraction
A leaky abstraction in software development refers to a design flaw where an abstraction, intended to simplify and hide the underlying complexity of a system, fails to completely do so. This results in some of the implementation details becoming exposed or ‘leaking’ through the abstraction, forcing users to have knowledge of these underlying complexities to effectively use or troubleshoot the system.
The concept was popularized by Joel Spolsky, who coined the term Law of Leaky Abstractions which states:
All non-trivial abstractions, to some degree, are leaky.
This means that even well-designed abstractions may not fully conceal their inner workings, and as computer systems grow more complex, the likelihood of such leaks increases. These leaks can lead to performance issues, unexpected behavior, and increased cognitive load on software developers, who are forced to understand both the abstraction and the underlying details it was meant to hide. This highlights a cause of software defects: the reliance of the software developer on an abstraction’s infallibility. Despite their imperfections, abstractions are crucial in software development for managing complexity, even though they are not always flawless.
Examples
Spolsky’s article cites many examples of leaky abstractions that create problems for software development:
- The TCP/IP protocol stack is the combination of TCP, which tries to provide reliable delivery of information, running on top of IP, which provides only ‘best-effort’ service. When IP loses a packet, TCP has to retransmit it, which takes additional time. Thus TCP provides the abstraction of a reliable connection, but the implementation details leak through in the form of potentially variable performance (throughput and latency both suffer when data has to be retransmitted), and the connection can still break entirely.
- Iterating over a large two-dimensional array can have radically different performance if done horizontally rather than vertically, depending on the order in which elements are stored in memory. One direction may vastly increase cache misses and page faults, both of which greatly delay access to memory.
- The SQL language abstracts away the procedural steps for querying a database, allowing one to merely define what one wants. But certain SQL queries are thousands of times slower than other logically equivalent queries. On an even higher level of abstraction, ORM systems, which isolate object-oriented code from the implementation of object persistence using a relational database, still force the programmer to think in terms of databases, tables, and native SQL queries as soon as performance of ORM-generated queries becomes a concern.
- Although network file systems like NFS and SMB let one treat files on remote machines as if they were local, the connection to the remote machine may slow down or break, and the file stops acting as if it were local.
- The ASP.NET web forms programming platform, not to be confused with ASP.NET MVC, abstracts away the difference between compiled back-end code to handle clicking on a hyperlink () and code to handle clicking on a button. However, ASP.NET needs to hide the fact that in HTML there is no way to submit a form from a hyperlink. It does this by generating a few lines of JavaScript and attaching an onclick handler to the hyperlink. However, if the end user has JavaScript disabled, the ASP.NET application malfunctions. Furthermore, one cannot naively think of event handlers in ASP.NET in the same way as in a desktop GUI framework such as Windows Forms; due to the asynchronous nature of the Web, processing event handlers in ASP.NET requires exchanging data with the server and reloading the form.
In 2020, Massachusetts Institute of Technology computing science teaching staff Anish, Jose, and Jon argued that the command line interface for git is a leaky abstraction, in which the underlying “beautiful design” of the git data model needs to be understood for effective usage of git.
Un monitor per l’Amiga 1200
Da circa un’anno ho cercato una soluzione che mi permettesse di usufruire di almeno una delle modalità video dell’Amiga 1200 per la produttività e per il Workbench diversa dallo Standard PAL.
Mi sono reso conto che l’Amiga è estremamente versatile (forse anche troppo) ma oggigiorno trovare un monitor capace di tollerare le sue frequenze di uscita è praticamente quasi impossibile.
Leggendo i vari post e confrontando le esperienze di altri utenti Amiga, la soluzione migliore sarebbe quella di avere un monitor CRT multisync di quel periodo, ma purtroppo sono diventati rari e quei pochi rimasti hanno raggiunto quotazioni davvero alte considerando anche il fatto che sono comunque apparecchi con una bel po’ di anni addosso e quindi a rischio di rottura imminente.
Così avevo provato con qualche scandoubler di quelli in vendita sui vari siti specializzati e, nonostante abbia trovato il risultato non così scadente, devo ammettere che non mi hanno comunque soddisfatto appieno, soprattutto per la scarsa compatibilità con risuluzioni diverse da quella standard PAL alta risoluzione.
OSSC? Sì ma anche no
Ho provato allora OSSC e ho visto che i risultati sono nettamente migliori e il rapporto qualità/prezzo molto buon. Però alla fine sono giunto alla conclusione che i risultati migliori si ottengono con lo standard PAL alta risoluzione di Amiga mentre io cercavo qualcosa che mi permettesse di usare anche gli altri screen mode del Workbench per i software di produttività.
Dal punto di vista tecnico ci sono due modi per collegare l’Amiga a OSSC: tramite un cavo RGB/DB23 -> Scart oppure tramite l’adattore RGB/DB23 -> VGA, come quello originale Commodore (ma ne esistono delle repliche acquistabili nei vari siti). Secondo alcuni è tramite il primo che si ottengono i risultati migliori ma dipende anche dalla qualità di costruzione del cavo stesso. Ho avuto modo di provare entrambi ma francamente non ho notato grosse differenze. Del resto OSSC non è un prodotto specifico per il mondo Amiga ma nasce come un semplice convertitore generico per permettere a tutte quelle piattaforme (Nintendo, PSX, ecc.) che hanno come uscita video il segnale PAL a 15 kHz di essere collegate ad un monitor/TV moderno (HDMI). Quindi va bene per giocare (la stragrande maggioranza dei giochi Amiga sono in quel formato) ma per sfruttare meglio il Workbench serve qualcos’altro.
Al Passione Amiga Day
Poi un bel giorno, mentre mi trovavo a Spoleto al Passione Amiga Day, notai un monitor Dell SE2722H nuovo fiammante con la schermata del Workbench. Così ho subito chiesto quale convertitore stessero utilizzando e con mio sommo stupore mi dicono che il monitor era collegato direttamente al computer in quanto riusciva a supportare buona parte delle frequenze di uscita di Amiga. L’unico adattatore di mezzo era quello RGB/DB23 -> VGA come quello della Commodore.
Così, senza troppe esitazioni acquisto uno di quegli adattatori presso uno dei venditori che esponenvano al Passione Amiga Day e poi, tornato a casa, ordino su Amazon questo monitor.
Appena arrivato lo collego e dopo un po’ di esperimenti ecco la mia conclusione.
Il monitor Dell SE2722H
Il Dell SE2722H è un monitor LCD da 27″ Full HD (1080p) risoluzione massima 1920 x 1080 (VGA: 60 Hz, HDMI: 75 Hz) con doppio ingresso (VGA+HDMI). Come già detto, supporta le frequenze di uscita dell’Amiga pur con qualche difetto ma del tutto accettabile. Al contrario di OSSC la miglior resa la si ottiene con le risoluzioni più alte (che erano quelle che volevo io) ma non con tutte.
Alla fine individuato i settaggi per due delle risoluzioni che andrò ad utilizzare nel mio setup quotidiano: lo standard PAL Alta risoluzione per i giochi (beh, anch’io ogni tanto gioco…) e finalmente la DBLPAL Alta risoluzione no flicker per il desktop del Workbench.
Amiga screen mode | Impostazioni Dell |
PAL Alta risoluzione 724 x 283 50 Hz 15,60 kHz | H. position: 50 V. position: 55 Sharpness: 80 Pixel Clock: 100 Phase: 0 |
DBLPAL Alta risoluzione no flicker 720 x 540 48 Hz 27,50 kHz | H. position: 52 V. position: 53 Sharpness: 80 Pixel Clock: 50 Phase: 83 |
Con queste impostazioni riesco ad ottenere un’immagine stabile, centrata, e senza artefatti. La DBLPAL inoltre non presenta il benchè minimo sfarfallio.
Vorrei precisare che sul mio cassetto Devs:Monitors ci sono solo i suddetti drivers, senza il VGA only.
Mi sarebbe piaciuto poter usare anche il Multiscan ma la resa non mi ha pienamente convinto. Se qualcuno di voi è riuscito a trovare un’altra soluzione o un driver con relativi settaggi che sfruttino in meglio questo monitor, scrivetemi pure. Mi farebbe piacere sentire la vostra opinioni in merito.
Tastiera e mouse USB per Amiga CDTV
Tra la mia collezione annovero un esemplare del Commodore Amiga CDTV che acquistai molti anni fa. Purtroppo a parte l’unità principale non ho tastiera né mouse originali, molto rari e soprattutto costosi oggigiorno. Così, a parte ripulirlo e accenderlo ogni tanto, lo tenevo sul tavolo a prendere la polvere.
Finchè un giorno trovo quasi per caso su Github questo progetto: SvOlli/USB2Amiga. Lo scopo dell’autore è quello di costruire un’interfaccia per collegare un mouse o una tastiera USB al CDTV. Il progetto fa uso di un Arduino Pro Micro e una shield USB host mini.
Schema e componenti utilizzati
Dal momento che non avevo gli stessi componenti da lui utilizzati, ho adattato il progetto utilizzando un’Arduino Nano e una shield USB host full a 5 volt con un kit tastiera + mouse wireless Logitech per avere entrambe le periferiche e un’unica interfaccia. Con somma soddisfazione ho scoperto che il firmware funziona perfettamente senza alcuna modifica. Attenzione: come riportato dallo stesso autore non è possibile utilizzare un hub USB. Il kit logitech utilizzato sfrutta un’unico dongle per entrambe le periferiche.
Altro pregio dell’interfaccia è che non necessita di un alimentatore esterno perché si alimenta direttamente dal CDTV.
Riepilogando, per costruire l’interfaccia servono i seguenti componenti:
- Arduino Nano
- Shield USB host 2.0 full 5 volt
- Connettore MiniDin 4 poli
- Connettore MiniDin 5 poli
- Logitech MK295 Kit Mouse e Tastiera Wireless o equivalente
Realizzazione e collegamenti
Per la realizzazione non ho fatto altro che seguire il mio schema e fare un po’ di saldature. I connettori sono quelli che hanno richiesto più tempo e pazienza, per il resto non ci sono particolari difficoltà se si ha un minimo di manualità e di esperienza nella saldatura a stagno (la mia è davvero basica).
Il firmware fa uso della libreria USB Host Shield Library 2.0. La shield USB che ho acquistato su Amazon ha richiesto un po’ di lavoro e di sbattimento per la totale mancanza di documentazione e supporto. La mia ha richiesto la saldatura di 3 piazzole per farla funzionare a 5 volt.
Una volta verificato il corretto funzionamento della shield attraverso gli esempi che accompagnano la libreria, ho caricato il firmware USB2Amiga, ho attaccato il dongle USB e i due connettori dietro al CDTV. E funziona!
Non ho avuto modo di provare altri kit tastiera+mouse però quello che già possedevo funziona egregiamente.
Matrix Digital Rain
Found this great tutorial about implementing the famous digital rain effect from The Matrix motion picture using the javascript library p5*js.