(Italiano) La mia workstation di sviluppo da Smart Worker

Sorry, this entry is only available in Italian. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

Il mio primo portatile Macintosh (PowerBook G4)

Il mio primo portatile Macintosh (PowerBook G4)

Nella mia attività lavorativa sono stato affiancato e lo sono tuttora da macchine di casa Apple (portatili), partendo dal mio il primo PowerBook G4 ancora operativo e attualmente affidato a mio nipote di quasi sei anni.

A quasi un anno di attività lavorativa in modalità da Smart Worker, ho sentito la necessità di dotarmi di una vera e propria workstation. Cos’è esattamente una workstation?

Workstation (in italiano stazione di lavoro) è un termine della lingua inglese utilizzato in informatica per indicare un tipo di computer monoutente, che si contraddistingue dall’essere destinato principalmente a un utilizzo produttivo (da cui il prefisso work = lavoro), e dall’avere alte prestazioni per poter assolvere compiti altamente professionali di vario genere (le prestazioni dei computer sono in continuo aumento quindi “alte prestazioni” è relativo al periodo di commercializzazione della workstation).

Sono utilizzate soprattutto nella forma di computer desktop, in ambiti di lavoro che necessitano di grandi potenze di calcolo come ad esempio il CAD, la ricerca scientifica, la produzione audio/video, le applicazioni di simulazione e calcolo ingegneristico. Esso è dunque sinonimo di un computer più potente rispetto ad un normale personal computer domestico o di ufficio. (Fonte Wikipedia https://it.wikipedia.org/wiki/Workstation)

Alla definizione standard aggiungerei che una workstation può definirsi tale se completa di uno o più monitor aventi caratteristiche che soddisfino le proprie esigenze lavorative.

In questo brevissimo articolo cercherò di esporre al meglio le scelte che ho seguito per costruire una workstation che rispondesse alla mie esigenze, senza assolutamente affermare che le scelte fatte da me siano il top. Questo articolo è in realtà la bella copia delle note che ho scritto durante la costruzione della mia workstation.

 

Quali sono le mie esigenze?

Il mio lavoro principale è la progettazione e realizzazione di soluzioni software. L’attività secondaria da Technical Blogger richiede che possa creare contenuti in diversi formati, tra cui, quello che impone la disponibilità di risorse non trascurabili è il video.

La selezione dell’hardware che andrà a costituire la propria workstation, deve essere eseguita sulla base delle proprie esigenze e nel mio caso queste corrispondono alle seguenti semplici domande.

  • Qual è il Sistema Operativo che si vuole installare? Questa scelta potrebbe “tagliare” parecchio hardware, semplicemente per il fatto che siamo costretti a scegliere hardware con disponibilità di driver (possibilmente certificati) per il sistema operativo scelto.
  • Quali sono i programmi di produttività e i tool di sviluppo maggiormente utilizzati?  I programmi che usiamo hanno un peso notevole sulla scelta dell’hardware, è infatti importante conoscere le specifiche di dettaglio di ogni singolo programma.
  • Una politica di backup locale è richiesta? L’applicazione di una politica di backup locale richiede senza ombra di dubbio la scelta di storage dedicato a ospitare le copie di backup dei nostri dati.

 

E il budget?

Indipendentemente dai miei desideri, la scelta del budget è il primo limite che ho imposto prima di condurre le attività di ricerca per la mia workstation. Chiaro, ognuno di noi vorrebbe tra le mani una Ferrari anche se il più delle volte risulterebbe essere troppo per le proprie esigenze. Per la mia workstation ho deciso di stanziare un budget di 2500€ con il 5% di tolleranza.

Brandizzata o Custom?

Questo è il primo dilemma. Sono sicuro che anche voi abbiate dovuto affrontare questo primo quesito. Personalmente ho risolto la questione ponendo un’altra domanda, ovvero, quale dovrà essere la caratteristica principale della mia workstation? La maggior flessibilità possibile.

Ecco cosa intendo per flessibilità di una workstation:

  • agilità di configurazione;
  • hardware standard;
  • supporto ai più moderni standard hardware;
  • CPU aggiornabile;
  • RAM aggiornabile;
  • hardware compatibile con sistemi operativi Unix/Linux;
  • costo elastico.

Ho impiegato diverse settimane cercando soluzioni tra i produttori più conosciuti che potessero soddisfare i miei requisiti ma senza successo. Sicuramente il costo ha avuto il suo peso nella scelta ma soprattutto la flessibilità di cui ho scritto poc anzi. Alla fine ho deciso di prendere la strada della soluzione custom o come si suol dire, dell’assemblato.

 

La scelta dell’hardware

I componenti hardware della mia workstation

I componenti hardware della mia workstation

La scelta dell’hardware è stata guidata dalle domande che ho illustrato in precedenza. Il fatto di aver scelto Linux come sistema operativo, ha ristretto il range di hardware per via del supporto dei driver (anche certificati) per questo sistema operativo. Solitamente l’hardware che supporta nativamente Linux ha anche un costo maggiore. Per quanto possibile ho cercato di scegliere hardware recentissimo e con ampia possibilità di estensione. La tabella a seguire mostra i componenti hardware principali che ho scelto per la mia workstation e la motivazione che ha guidato la scelta.

Componente Modello Motivazione
CPU AMD Ryzen 9 3900X Per il tipo di applicazioni che uso e che sviluppo, ho necessità di avere un processore che sia in grado di offrire una potenza computazionale abbastanza generosa a un costo contenuto. Per questo motivo ho scelto questa CPU AMD che offre ben 12 Core e ben 24 Thread. Più thread significa miglior multitasking e prestazioni migliorate con i software che sfruttano pesantemente i thread come gli editor e i transcoder video.

Questo processore supporta inoltre lo standard  PCIe® Gen 4.0 di cui ne trarrà grande vantaggio lo storage e lo standard DDR4 per la memoria RAM fino a 3200MHz

GPU NVIDIA Quadro P2200 La scelta della GPU è stata abbastanza semplice, guidata dal fatto che il mio scopo è prettamente circoscritto all’uso di programmi EDA (tipo KiCAD, Eagle PCB) di progettazione elettronica, DaVinci Resolve e OBS Studio per la creazione dei miei video tutorial e alcuni software che sfruttano CUDA. Caratteristica molto importante, questa scheda video dispone dei driver certificati per Linux e anche aggiornati.
Memoria RAM DDR 4 3600MHz 64GB Intel XMP-ready e AMD Ryzen Ho scelto questo taglio apparentemente grande perché utilizzo frequentemente applicazioni basate su container che richiedono una considerevole disponibilità di memoria RAM. La prima certificazione (Intel XMP-ready) attesta la possibilità di sfruttare appieno le potenzialità della CPU in relazione all’applicazione. La seconda, garantisce la piena funzionalità con processori AMD Ryzen.
Mother Board Gigabyte X570 AORUS ULTRA Questa è stata la scelta più sofferta tra tutti i componenti hardware, le motivazioni principali sono state:

  • Supporto dei processori AMD Ryzen 5000 Series / 3rd Gen Ryzen™/ 2nd Gen Ryzen™/ 3rd Gen Ryzen™
  • Triple PCIe® Gen 4.0 M.2 with Thermal Guards
  • Intel® WiFi 6 802.11ax (con BT versione 5)
  • Dual Channel ECC/ Non-ECC Unbuffered DDR4 (5100), 4 DIMMs fino a 128GByte
  • Front & Rear USB 3.2 Gen2 Type-C™ Header & HDMI 2.0 support
  • PCIe 4.0 x16/x8/x4/x1 Slot

Queste caratteristiche consentono una grande flessibilità di estensione futura, dal processore alla memoria RAM. Inoltre i componenti hardware integrati sono compatibili con Linux e le ultime versioni del Kernel e in particolare la scheda WiFi + BT.

Storage NVME Samsung SSD 980 PRO 1TB Questo disco SSD NVMe 4 credo che sia una scelta obbligata per avere uno storage con impressionanti prestazioni sia in termini di scrittura sia in termini di lettura. Questo è lo storage principale per SO + Applicazioni + Dati.
Sabrent Rocket 4.0 500GB Questo è il disco di “seconda scelta” dedicato a un’installazione di Microsoft Windows + test delle nuove versioni della distribuzione Linux che uso.
Storage HDD ST4000VN008-2DR166 (SC60) 4TB x2 Ho scelto questo storage di casa Segate e serie IronWolf perché indicato per le operazioni di backup.

 

Blocco Raffreddamento ad Aria, CPU, RAM e GPU

La scelta della distribuzione Linux

Fedora Workstation OS Info

Fedora Workstation OS Info

Questa è stata la scelta certa fin dall’inizio della nascita dell’idea della workstation. Per la mia workstation di lavoro ho deciso di andare su una distribuzione stabile, al passo con i tempi e orientata a chi sviluppa. La distribuzione a cui faccio riferimento è Fedora, in particolare Fedora Workstation 34 con la nuova versione 40 di GNOME. Secondo il mio parere sono sette i punti di forza di questa distribuzione.

  1. Ultima versione del Desktop Environment GNOME 40
  2. Aggiornamenti veloci e affidabili
  3. Pacchetti Flatpak e Snap
  4. Una grande comunità
  5. Essenziale
  6. Già pronta per la tecnologia dei container
  7. Supportato da RedHat

 

Lo schema di partizionamento

Schema di partizionamento storage

Schema di partizionamento storage

L’installazione di un qualunque Sistema Operativo dovrebbe essere eseguita secondo un schema ragionato, pensando al proprio modo di lavorare e senza trascurare il modo di rendere più semplici gli aggiornamenti futuri, in particolare di major release della distribuzione. Implementare un buono schema di partizionamento dello storage a disposizione è a mio avviso essenziale.

 

La tabella a seguire mostra lo schema di partizionamento cucito sulle mi necessità.

 

Storage File System (FS) Type Size Device Note
Samsung SSD 980 PRO 1TB (2B2QGXA7)
1TByte
/boot ext4 500MByte
/dev/nvme0n1p1
Partizione di boot (EFI System)
/boot/efi EFI (vfat) 750MByte
/dev/nvme0n1p2
EFI Boot Partition
/ (root) xfs 100GByte
/dev/nvme0n1p4
Partizione di Root
/home
xfs 200GByte
/dev/nvme0n1p3
User Home
swap Linux Swap 96GByte
/dev/nvme0n1p5
Partizione di Swap del Sistema Operativo. La dimensione di questa partizione è stata calcolata sulla base della memoria RAM a disposizione sul sistema hardware. La guida all’installazione di Fedora riporta nel dettaglio la modalità di calcolo.
/uwfs01
xfs 80GByte
/dev/nvme0n1p6
Questa è la partizione dedicata a ospitare i setup/installer o archivi (zip, tar.gz, rpm, etc.) dei software installati sul sistema e fuori dai repository software standard di Fedora.
/uwfs02
xfs 180GByte
/dev/nvme0n1p7
Questa è la partizione dedicata a ospitare le macchine virtuali e container (Podman e Docker).
/uwfs03
xfs 180GByte
/dev/nvme0n1p8
Questa è la partizione dedicata a ospitare gli ambienti di lavoro suddivisi per progetto e i tool di lavoro specifici.
/uwfs04
xfs 95GByte
/dev/nvme0n1p9
Questa è la partizione dedicata a ospitare i sorgenti di progetti di terze parti e la cache di Gradle e Maven.

Ogni partizione indicata in tabella ha uno specifico scopo e rispecchia il mio modo personale di lavoro. Questo schema di partizionamento facilità inoltra l’aggiornamento di major release della distruzione, non intaccando in alcun modo le partizioni di lavoro. Quindi, fare una partizione unica non è mai una buona idea. Nel mio caso specifico, aggiornare da Fedora 33 a Fedora 34, con questo schema di partizionamento è stato una passeggiata di salute. Il nome del file system uwfs{n} sta per User Working File System.

Qualcuno di voi ha sicuramente notato che ho adottato il file system XFS e non BTRFS, quest’ultimo di default da Fedora 33. La risposta è abbastanza semplice. Non ho ancora avuto modo di testare approfonditamente il BTRFS e ho quindi optato per il rodato XFS.

 

Il mio software principale di lavoro

A seguire la lista dei software installati sulla mia workstation e che uso giornalmente.

  • Office Automation
    • Libre Office
  • Email/Calendar
    • Mailspring
    • GNOME Calendar (con CalDAV Remoto)
  • Backup
    • Timeshift
  • Source Control
    • Git
    • Meld
  • Network Tools
    • Wireshark
    • TCP Dump
    • Nmap
  • VPN/Remote Desktop
    • FortiClient
    • PulseSecure
    • OpenConnect
    • Citrix Workspace
    • Remmina
  • Shell/Terminal
    • Tilix
    • ZSH 5.8
    • Estensione oh-my-zsh
  • Editor – IDE
    • IntelliJ IDEA Enterprise
    • Visual Studio Code
    • PlatformIO
    • Sublime Text
    • Vim + Plugins
    • Typora
  • Linguaggi e Compilatori
    • JDK 1.7
    • JDK 1.8
    • JDK 11
    • JDK 16
    • Python 3.x
    • GoLang
    • GNU C/C++
  • Build
    • Ant
    • Maven
    • Gradle
    • Make
  • Tool Web Services
    • SOAP UI
    • Postman
    • cURL
  • Database Client
    • SQL Developer
    • PostgreSQL Admin
  • Container
    • Docker
    • Podman
    • MiniOpenShift
  • VM
    • Virtual Box
    • VMWare Workstation
  • Mappe Mentali
    • XMind (true)
  • Video
    • OBS Studio
    • DavinciResolve Pro
  • Design/CAD
    • Draw.io
    • GIMP
    • Inkscape
    • EASY EDA
    • KICAD
    • Eagle PCB

Conclusioni

Il mio desktop

Il mio desktop

Ogni mestiere necessita degli strumenti adeguati affinché possa essere compiuto nel migliore dei modi e questi devono essere scelti con cura. Vi ho mostrato le motiviazioni che mi hanno portato alla costruzione della mia workstation da Smart Worker, le vostre quali sono?

Credo che la scelta di andare sulla soluzione dell’assemblato è senza dubbio quella che dà la maggior libertà di configurazione e di conseguenza permette di costruire una soluzione hardware adatta alle proprie esigenze.

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...

Cos'è il progetto CIE/CNS Apache Docker - Developers Italia

In questo video https://youtu.be/TcAzn1POhsM introdurrò il progetto CIE/CNS Apache Docker di Developers Italia (https://developers.italia.it/it/cie/#resourcecontent-3) nato circa due anni fa.

L'obiettivo di questo progetto è quello di fornire un template pronto all'uso che realizza un sistema di autenticazione tramite la Smart Card TS-CNS (o CNS) e la CIE (Carta d'Identità Elettronica) basato su Apache HTTP. Ognuno può poi modificare o specializzare questo progetto sulla base delle proprie esigenze Si tratta di un progetto docker per la creazione di un container che implementa un sistema di mutua autenticazione o autenticazione bilaterale SSL/TLS.

Questo meccanismo di autenticazione richiede anche il certificato digitale da parte del client, certificato che in questo caso risiede all'interno della TS-CNS o della CIE. La particolarità del sistema implementato (attraverso questo container) è quella di consentire l'autenticazione tramite:

  • La TS-CNS (Tessera Sanitaria - Carta Nazionale Servizi), rilasciata dalla regione di appartenenza;
  • La CIE (Carta d'Identità Elettronica), rilasciata dal comune di residenza.

Nella versione 2.0.0 il progetto è stato aggiornato per essere uniforme alle linee guida di Bootstrap Italia. A seguire alcune risorse che possono essere utili.

  • Cos’è il progetto CIE/CNS Apache Docker (http://bit.ly/3aJ5Gbl)
  • CIE Carta d'Identità Elettronica (https://developers.italia.it/it/cie/)
  • Carta Nazionale dei Servizi (https://www.agid.gov.it/it/piattaforme/carta-nazionale-servizi)
  • Raspberry Pi – Un esempio di applicazione della TS-CNS (https://bit.ly/3hkJ8Aj)
  • Pubblicare il servizio CIE/CNS Apache Docker su Azure Cloud (http://bit.ly/3aPoq8V)
  • Come accedere al portale VETINFO tramite TS-CNS e Mac OS (http://bit.ly/2VFMKq7)