Configuriamo un pc per lo sviluppo

Salve bella gente,

come vi avevo promesso nella mia guida alla configurazione di un Mac per lo sviluppo, è arrivato il momento di configurare un po’ di cosucce anche su Windows 11. In linea di principio dovrebbe funzionare tutto su una qualsiasi versione di windows > w10 20h2 quindi se siete ancora con win 10 don’t worries!

Tra le cose su cui ultimamente mi sto intrippando male ci sono le shell, e secondo voi potevo mai non portarvi una shell aftermarket in una mia guida? appunto! Partiamo con Oh-My-Posh (yep il nome è simile a oh-my-zsh ed anche le funzionalità) e senza troppi indugi apriamo windows powershell e digitiamo il comando:

winget install JanDeDobbeleer.OhMyPosh

Boom! Fatto oh-my-posh è installata ma non viene caricato automaticamente all’avvio di pwsh, per impostare l’autoload prima di tutto cambiamo i permessi di powershell (lanciandolo come admin) con

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

e così abbiamo permesso l’esecuzione di script in locale, adesso andiamo a creare uno script di avvio con il caro notepad ed incolliamo lo script di lancio

notepad $PROFILE

# Per aprire notepad al file che ci interessa modificare e quindi incolliamo il seguente comando

oh-my-posh --init --shell pwsh --config $env:POSH_THEMES_PATH/M365Princess.omp.json | Invoke-Expression

# da notare che "M365Princess.omp.json" è il nome del tema del terminale, volendo potete mettere quello che più vi piace

settato l’avvio di oh-my-posh ci sono ancora alcune cose da sistemare per fare un lavoro fatto bene, prima di tutto installare i Nerd font scaricabili da qui (sono dei font particolari con dei simboli speciali come il logo di ubuntu o il logo della branch) in realtà io non li ho installati tutti perché già sapevo quale tema avrei usato e nel caso voleste seguire questa strada più minimale vi basta installare solo Meslo LG M Regular Nerd Font Complete Windows Compatible, se invece volete un po` giocare e provare allora vi consiglio di installarli tutti in blocco (tanto tutti saranno un centinaio di mega scarsi).

Risolto con la shell ed i font che ne dite di installare un terminale più carino? Magari in fluent? Ci basta usare il nuovo fiammante terminale di mamma Microsoft dallo store ma ovviamente noi non lo scaricheremo dallo store (sebbene sia esattamente la stessa cosa), quindi terminale alla mano

winget install Microsoft.WindowsTerminal

una volta installato una configurazione veloce, in cui lo imposteremo come predefinito ed il cambio del font di default con Meslo sarà tutto quello che occorre.

Che dite? Ci piace?

Ora non ci resta che installare un po’ di sdk per Java ( i canonici Temurin 8, 11, 17) e visto che su winget troviamo anche IntelliJ Community perchè non installare anche l’IDE?

winget install EclipseAdoptium.Temurin.8
winget install EclipseAdoptium.Temurin.11
winget install EclipseAdoptium.Temurin.17
winget install JetBrains.IntelliJIDEA.Community

ecco fatto, Java è sistemata, passiamo a Python (io preferisco la versione 3.9.7 e approfitto del fatto che non uso l’ultima, per mostrarvi come installare una versione specifica da winget)

winget install Python.Python.3 -v 3.9.7150.0

# la sintassi è super semplice basta specificare con -v la versione che si vuole, oppure, omettendola, si scaricherà l'ultima. visto che ci troviamo installiamo anche Pycharm.

winget install JetBrains.Pycharm.Community -v 213.6461.77

Sistemate le incombenze più grandi terminiamo il giro degli SDK con .NET 6 e VSCode

winget install Microsoft.dotnet

winget install Microsoft.VisualStudioCode

Chiudiamo la guida con un piccolo tips, sapete che con “winget export file.json” e “winget import file.json” è possibile salvare tutte le dipendenze per una gestione migliore? Bene vi lascio un piccolo gist da scaricare (per i più pigri 😉)

e quindi installate il tutto con

winget import DevTools - WinGet.json

Configurare un Mac per lo sviluppo.

Ciao bella gente,

non so’ se vi è mai capitato di avere del codice che funziona su un pc e non su di un altro, il caso tipico è che scaricate una repo da GitHub e non funziona nulla così anziché pensare al codice iniziate a perdere ore per cercare di capire quale sia il problema. Il più delle volte è una qualche configurazione fatta male e boom dal cercare una soluzione su Stackoverflow a disinstallare cose a nastro è un attimo. Siccome “chi ben inizia è a metà dell’opera” ecco una piccola guida sul inizializzazione di un Mac “per sviluppatori” (non preoccupatevi arriveranno anche una versione per Windows e una per Linux).

Homebrew il gestore pacchetti mancante.
MacOS non è fornito nativamente di un gestore pacchetti decente, almeno non finché non installate Homebrew. La primissima cosa che ci aggiungiamo a fare è scaricarlo dalla sua repo, anzi in realtà ci basta incollare il seguente comando in un terminale e si occuperà di tutto il suo script (anche di scaricare eventuali dipendenze da apple per cui non spaventatevi se dovesse aprirsi qualche finestra extra)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew è così caruccio che ha anche un utility (doctor) per controllare eventuali errori su permessi o file di configurazione, noi la lanceremo solo per verificare che tutto sia andato per il verso giusto

brew doctor

e il gestore pacchetti è sistemato.

iTerm2

Dopo il gestore pacchetti è tempo di pensare al terminale, io personalmente adoro iTerm2 che rispetto al terminale standard di macOS offre un po’ di personalizzazioni in più (in realtà tantissime ma io non sono per l’approccio simil vanilla) , per installarlo sfrutteremo Homebrew e approfittiamo anche per vedere come si installano i programmi:

brew install --cask iterm2

e puf al termine del download sarà nel vostro launchpad.

Oh My Zsh, a cosa serve un terminale personalizzabile se non si ha una shell sottostante altrettanto personalizzabile? Oh my Zsh fa esattamente questo, permette di configurare e personalizzare la shell spaziando da path arricchite(con info sulle branch) a caratteri custom fino a temi e auto completamento. Lo script sottostante vi porterà per mano nella configurazione e come gli altri una volta incollato il comando nel terminale esso si occuperà del download e esecuzione.

$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Il risultato finale (almeno nel mio caso) è un terminale di un colore decente (senza l’odioso bordo finestra), suggerimenti decenti, nome della branch nel path e tempi di esecuzione, non male no?

JDK prima o poi tutti dobbiamo beccarci Java… è così… è la vita 🙄 perciò homebrew alla mano provvediamo ad installare il Java Development Kit. Prima di tutto abilitiamo la scelta delle versioni meno recenti con

brew tap homebrew/cask-versions

quindi andiamo ad installare la versione che preferiamo

# per i nostalgici di Java 8 (JDK1.8)
brew install --cask temurin8
# per gli amanti del gusto retrò in salsa Var (JDK11)
brew install --cask temurin11
# mentre per gli entusiasti delle ultime release (JDK17)
brew install --cask temurin17
# inoltre è possibile vedere le versioni installate con
/usr/libexec/java_home -V
# mentre nel caso di più versioni basta il classico
java -version 
# per vedere la versione selezionata come default

Siccome stiamo facendo le cose una volta e fatte per bene, magari vogliamo installare tutte e tre le versioni più usate e switchare tra le tre, come fare? semplice un piccolo script in .zshrc e passa la paura, quindi dopo l’installazione di tutte e tre le sdk aggiungiamo infondo al file (a volte è nascosto) .zshrc il seguente snippet

### JDK Switch Snippet
switchJDK() {
  # unset JAVA_HOME and JAVA_VERSION
  unset JAVA_HOME
  unset JAVA_VERSION
  # set JAVA_HOME to the value of $1
  export JAVA_HOME=$(/usr/libexec/java_home -v "$1");
  # output of java version to terminal
}

# aliases for all of my installed java versions
alias jdk1.8="switchJDK 1.8"
alias jdk11="switchJDK 11"
alias jdk17="switchJDK 17"

# Select your desired default JDK by Commenting/uncommenting 
# jdk1.8
# jdk17
jdk11
### end of JDK Switch Snippet

[SnapShot] 20.11

Salve bella gente, dal mio ultimo articolo è passata una pandemia globale per il mezzo, e mentre tutti si davano da fare costretti in casa io non ho fatto un cazzo di nulla, ovviamente!

Quindi, facciamo il punto di cosa è successo in questi mesi, prima di tutto mi sono laureato 👨‍🎓 (e tra l’latro è davvero triste laurearsi in pandemia) poi ho dedicato un bel po’ di tempo a Python e beh, è il mio daily ormai, e siccome la unlucky exception è sempre dietro l’angolo nel primo utilizzo “serio” si è mostrato inadatto per questioni di performance (prima o poi parlerò del JIL). Si torna a Java quindi? Nope! Per dover di cronaca il progetto è stato finito in C++ ( tra l’altro riflessione estemporanea, sono seri quelli di c++ a fare un comando cout per stampare?).

Tornando a Python, è stato amore a primo tab, nessuna parentesi, ne boilerplate ed un mondo di librerie “building block” che permettono di essere veloci nella stesura del codice. In questa sede non ho intenzione di mettermi a parlare dei tecnicismi di Python ma visto che sta diventando sempre più casa mia ho deciso di portare una serie di guide per condividere con voi il giusto modo di approcciarsi al mondo di Python (spero di riuscire a portare avanti la cosa compatibilmente col nuovo lavoro).

Ci sono cose strane (come le venv) che non ho mai visto da nessun’altra parte e che vorrei davvero raccontarvi. Python è un mondo fluente di linee di pensiero e standard volutamente non autodescritti per lasciare la massima libertà di approccio. Tirando un pochino le somme di quanto appreso in questi mesi, la prima cosa da sapere nell’approccio al mondo del pitone è che i ”code writer” non sono gerarchicamente inquadrati come in Java. Faccio un esempio banalizzato, in Java (ma si può usare questa parola dopo le ultime policy di Oracle? Boh😑) lo studente Java ignora del tutto maven (e vive felice), il junior dev se ne sbatte dei Streams, ed il programmatore Super Sayan piange sangue e lacrime per profilare un codice in remoto (e tanti auguri a tracciare la heap della jvm), ma che ci vuoi fare è Java! è cosi! si impara e si migliora in modalità waterfall (più o meno).

In Python non è così, si trovano background diversi con competenze diverse, Matematici, Economi smaliziati più spesso catalogati Data Scientist abituati a Conda e a plottare roba contenuta nei dataframe (scrivendo codice coi piedi e arrabattando cose sui Jupyther 🙈). L’amichevole backendista di quartiere potrebbe allegramente non aver mai sentito parlare di Anaconda, anzi parte la bestemmia se deve tirarne fuori un immagine docker. Ruoli diversi permetto al linguaggio di cambiare la sua pelle lasciando al linguaggio solo le keyword riservate, e questo è malato e al tempo stesso bellissimo. Pensate sia esagero? Provate a leggere il codice Python di un backender (magari appoggiato a FastAPI) e di un datascientist, già i commenti (o più precisamente le docstrings) hanno uno stili diversi(Google perché non ti piace RST?) l’approccio algoritmico è diverso ( il prima utilizza cicli e asincronismi il secondo spara funzioni vettorializzate sui dataframe) etc… quindi quando sento dire che “Python è più facile” qualcosa mi muore dentro. O sono stronzo io (che è la possibilità più quotata) oppure per trovare sempre codice migliore del mio significa che python non è semplice come appare, anzi se uno si addentra un minimo e non pecca di superficialità si accorge subito che

Python è immediato, non semplice

L’altro giorno pensavo al nome del linguaggio (si ci sarà un’altra mia lunga tangenziale mentale, assolutamente non inerente i Monty Python da cui prende il nome) e lo trovavo azzeccato alla sua natura mutevole. Come un pitone uno pensa “Non morde ed è piccolo 8 cm che sarà gestirlo?” ecco ci vediamo quando la bestia è lunga 8 m! E così è python, sembra semplice ma contiene una serie di concetti (come la funzione deepcopy) articolati e sfruttare al meglio tali caratteristiche non è banale, la strada per il “Super Sayan” è meno ripida ma più lunga!

Nei prossimi articoli vi racconto quanto ho appreso sul pitone da quando ho finito con i due progetti più grossi su cui ho lavorati, Alice e Beatrice (e magari vi parlo anche di Beatrice) ma per adesso vi lascio,

a presto bella gente per questo SnapShot è tutto ( e si questo è il primo di una serie) .

Come installare pip su Linux Mint, Ubuntu e sistemi Debian Based

Salve amici, da poco sono passato a Linux Mint, apro il mio bel terminale digito “pip3 install qualcosa” e ovviamente non c’è pip installato di default, come si risolve?

ci sono un paio di comandi per installare i pacchetti apt quali:

sudo apt install python3-pip
sudo apt install python3-setuptools && sudo apt install python3-wheel

la parte figa che essendo pacchetti APT si può’ installarli su qualsiasi distro Debian based come ubuntu (anche se in casa Canonical pip è messo di default).

Comunque per questo tips è tutto, a presto bella gente.

[Editoriale] About Alice

Salve Amici, sono stato un po’ impegnato a lavorare al mio tirocinio aka Project Alice, esperienza piacevole in ultima analisi ( farò un editoriale approfondito in merito al tirocinio vero e proprio) durante il quale non so neanche io bene di che mi sono occupato, o meglio, come definirlo nel modo più appropriato possibile ( service engineering? Code Wrapping? spaghetti code? ) a me piace definirlo “Tea time mise en place” nel senso più brutale della cosa: i ragazzi del laboratorio dove ho “prestato servizio” avevano questo codice che si occupava di pulire le strutture delle proteine da quelle che sono informazioni inutili ai fini del docking delle stesse, vorrei potervi dire qualcosa tipo ” non posso dilungarmi ulteriormente perchè il core software è in fase di brevetto” ma la verità è che io di sta roba non ci capisco una beata mazza; e infatti nasce qua la mia definizione di “mise en place” informatico, vedetela così: loro producevano del ottimo tè, ma avevano un pessimo modo di presentarlo quindi il mio compito è stato quello di prendere una bella tazzina in porcellana, qualche lingua di gatto, un bel vassoio profumato, e servire il tutto al pubblico.

Come posso dare un senso organico a tutto quello che vorrei dirvi? Vorrei parlarvi di quello che ho trovato ( chiariamo i ricercatori del laboratorio sono tizi laureati in “Chimica e Tecnologia Farmaceutiche” non informatici aspettarsi del codice da loro è come aspettarsi che un pesce partecipi alla maratona di New York), di come io abbia provato ad integrarmi con loro provando a dare di quanto meglio fosse nelle mie capacità (di nuovo chiarisco, non sono un senior dev, nel bene e nel male il mio lavoro non sarà mai “allo stato dell’arte” ma poco male dato che sono qua per imparare) sforzandomi di imparare Python in modo serio anzi, non vi nego che una cottarella per questo linguaggio mi è venuta ma ne parlerò meglio in altre sedi, fino a dover “prevedere” di cosa avrebbero dovuto aver bisogno per fortuna le cose sembrano siano andate bene, ma lo scoglio linguistico quando si ha necessità di usare termini tecnici ( ambo le parti) si sente, e forse è stata questa l’esperienza che più di tutto mi ha arricchito.

Tornando ad Alice, loro avevano questa serie di script in linguaggi misti, scritti a livello amatori(m)ale sui quali io non ho messo mano direttamente ( e chi le ha le basi di chimica per farlo ) ma attorno ai quali ho costruito il mio bel programma in Python 3 che si occupa dell’esecuzione del flusso di lavoro in maniera automatizzata, alloca il lavoro in workspace differenti permettendone anche l’esecuzione, entro certi limiti, concorrente, gestisce eventuali errori e cosa più importante permette di ricevere dati in input da una REST da me creata.

Dato che l’appetito vien mangiando, e siccome il mio obbiettivo principale era quello di aiutare i “ragazzi del lab” mi sono deciso a riscrivere le REST in PhP così da integrarle in un website in WordPress cosa che permette loro di poter avere più di un link, ma una vetrina dove poter anche presentarsi, e parlare del loro lavoro e sopratutto di poter essere gestita senza competenze tecniche in ambito WEB dev ( e quindi bye bye Django ) ma come fare in modo che php e python comunichino attraverso la rete (nattata) dell’università? Non vi nego che questo problema mi ha causato non pochi grattacapi, lasciandomi, ricerca dopo ricerca, con sempre più perplessità che chiarimenti e mentre il mio orizzonte s’incupiva di cerulee nuvole ( si è una battuta sul Cloud) inciampando su me stesso, e chissà che ricerca, ho scoperto RabbitMQ e lì è nata l’idea di scrivere un codice messages-oriented appoggiandomi proprio a questo broker.

Vorrei raccontarvi delle difficoltà (che non ho avuto) nel uso di questo Broker, ma devo essere onesto, reo dell’esperienza maturata su JMS mi aspettavo un percorso più ostico, e invece nulla,una rapidissima curva di apprendimento che dapprima mi ha fatto seriamente considerare di aver bisogno di “una pausa di riflessione” da jms fino al effettivo divorzio richiesto alla scoperta dell’integrazione del protocollo AMQP (su cui rabbit si basa) con svariati linguaggi di programmazione (e protocolli tra cui jms su http..) e una miriade di altre cose fatte così bene che veramente il mio unico pensiero è stato ( ad un certo punto) la ricerca di un nome accattivante per il mio progetto (quindi ecco il perché di Alice XD) e lo sviluppo di un plugin per WordPress che mi permettesse di “messaggiare” il mio bel broker ( cavoli com’è confusionario WordPress per fare una cavolo di chiamata Ajax).

Tirando le somme, cosa ho fatto nel mio tirocinio? Il Cappellaio Matto forse è la cosa che meglio mi descrive, ho provato a fare un fullstack development, ho imparato Python e PHP ( e stavolta seriamente ) ho rivisto jQuery e Ajax, ho rivalutato ECMAScipt (lasciatemi un minimo di orgoglio nel non voler dire che mi è piaciuto Javascript) e sopratutto ho appurato anche i limti di tutte queste tecnologie, e devo ammetterlo Java ha ancora una volta acquistato punti ( fosse solo perchè non usando java non mi ha dato NullPointerException ) ma tutti questi aspetti tecnici li toccherò un po’ più là, in conclusione (anche perchè la batteria del pc è quasi finita e voi vi sarete anche un po’ rotti il cazzo) la cosa più bella fatta in questo periodo è stata parlare con persone non proprio di provenienza informatica accademica (con tanta voglia di ricevere da un tirocinante quanta quella di trasmettere) spiegandogli e trasmettendo le criticità del loro approccio cosa che mi ha portato ad una crescita personale non indifferente.

Usiamo Corretto, la JDK di Amazon su ubuntu

Breve storia triste, mamma Oracle ha rotto il cavolo 😾, sembra anche ai big del cloud (non che oracle non lo sia) , che hanno deciso di

farsi la propria Java Virtual Machine con blackJack e squillo di lusso

Bender, Futurama impiegato pressa Oracle Corp.

In soldoni è davero complicato installare (per l’utente medio) la cavolo di oracle java vm a causa del cambiamento delle policy di Oracle, che adesso, non permette più la sua distribuzione tramite ppa.

Non so’ se dire per fortuna, ma comunque, Amazon (e Microsoft, e la mia vicina di casa) si è fatta la propria JVM perfettamente compatibile* e la distribuisce tramite canonico ppa ( grazie al cielo )

quindi (come indicato sul sito ufficiale) innanzitutto installiamo le Java-Common che permettono di scegliere la jre/jdk di default

sudo update-alternatives --config java

scarichiamo il nostro bel pacchetto .deb e installiamolo con

wget -O- https://apt.corretto.aws/corretto.key | sudo apt-key add - 
sudo add-apt-repository 'deb https://apt.corretto.aws stable main'
sudo apt-get update 
sudo apt-get install -y java-1.8.0-amazon-corretto-jdk

alla fine verifichiamo che tutto funzioni con

java -version

e vedendo un risultato simile possiamo essere certi che tutto sia andato per il verso giusto:

openjdk version "1.8.0_212" OpenJDK Runtime Environment Corretto-8.212.04.3 (build 1.8.0_212-b04) OpenJDK 64-Bit Server VM Corretto-8.212.04.3 (build 25.212-b04, mixed mode) 

se così non fosse basta digitare

sudo update-alternatives --config java

e selezionare l’alternativa (“corretto”) di default.

bisogna ovviamente anche aggiornare JDK qualora vi occorressse

sudo update-alternatives --config javac

*Nota a proposito di corretto, difatti l’upper è sempre OpenJDK amazon si occupa “solo” della build, la distribuzione e del backporting di fix di sicurezza su versioni deprecate come l’onnipresente java 8 quindi state tranquilli.

per questo Tips è tutto, alla prossima bella gente.

[Editoriale] @Magic

Java EE Love Story

Prima stesura delle mie considerazioni sull’ambiante Java EE

Innanzitutto c’è una magia intrinseca a scrivere codice che compila ma che non “deploya” , a parte il tono palesemente scherzoso, nella mia recente esperienza mi sono un pochino sporcato le mani con Java EE. Toccare con mano una declinazione di Java cosi complessa mi ha provocato sentimenti complessi, un po’ come la ragazzina che al liceo ti trattava male ma della quale eri innamorato, diciamolo senza troppi giri di parole Java EE è sempre Java, nel bene e nel male.

Di diverso c’è che è un “ambiente” davvero completo, cresciuto, tornando all’esempio della ragazza del liceo, è come se la reincontrassi dopo anni e, ovviamente, saresti sorpreso di quanto sia maturata e cresciuta.

Legittimamente i paragoni tra Java e Python o C# continuano ad esserci, eppure, finezze intrinseche ho iniziato ad apprezzarle, prima tra tutte il meccanismo del CDI, “schiaffare” roba dentro roba, come se non ci fosse un domani e la bellezza , al di la dello scrivere @Inject, di scrivere codice come uno scaricatore di porto ed essere agli occhi del mondo un piccolo Lord inglese che scrive codice bello anche solo da vedere, inoltre CDI permette di lanciare e gestire eventi container-side senza troppi scazzi di Listener e diavolerie, voglio dire, chi è interessato a seguire la mia vita mi @Observ(a) e appena succede che torno single(evento), basta scrivere “single.fire(io)”

evento.fire(oggettoOsservato) //Apprezzate il tono scherzoso

e tutti quelli che osservano la cosa saranno informati dal container, che comodità! (nessuno nel mio caso ma la UnluckyException è sempre dietro l’angolo)

Java EE, ricordiamo è un qualcosa di Community Based (o almeno il prof così ha detto) e la qual cosa non è sempre un pregio (sento un CORBA ululato nel vento) e dal mio punto di vista (parlo per l’ambiente accademico) nato anche un po’ sfortunato, tra Netbeans che funziona a singhiozzi e GlassFish che ha meno stabilità di Windows Vista, non portano ad amare propriamente la piattaforma di developing, senza considerare i chilometrici messaggi di errore nella consolle di GlassFish che di primo acchitto ti fanno davvero rivalutare un ipotetico passaggio a Lettere.

In fin dei conti è sempre Claudia perennemente col ciclo e incazzata col mondo,

ah, no aspettate, volevo dire Java, scusate il lapsus…

Tornando seri per una frazione di secondo, i limiti del “Community Based” credo si siano sentiti molto sulle JMS API, fatte, rifatte e abolite per poter essere rifatte ancora, non so’ bene la scelta progettuale dietro e/o se la stesura delle stesse sia stata affidata ad un programmatore schifoso come me, resta il fatto che l’idea in se è fantastica, un meccanismo di asincronismo “by Design” per inviare messaggi dentro cui incapsulare oggetti, poi qualcosa è andato storto e chi ha implementato la cosa ha fatto un po’ una schifezza, esistono tipo 3 versioni delle stesse API, che a loro volta sono state implementate in vari modi dai vari vendor, tra l’altro non incluse nella versione “LITE” dei container…. non proprio il “vissero felici e contenti che speravamo”, però alla fine funzionano, e anche bene oserei dire, certo, bisogna vedere un po’ di cosucce per capire che cosa è una Topic e quanto differisce da una Queue ( spoiler: Poco) e capire che senza Broker e ConnectionFactory non si cantano messe, ma alla fine, restano un qualcosa di estremamente potente.

Passando a JPA,

no, davvero, finalmente non si converte più un oggetto a SQLese ma si dice “Entity Manager, questo è il mio oggetto, voglio che me lo salvi, piangitela tu!” semplicemente scrivendo @Entity su un PoJo, Alleluja! (ho omesso il JPQL sennò mi avreste sgamato che in realta sqlese c’è ancora, in parte)

Tirando le somme,

cosa mi è piaciuto: il fatto che con poco codice scritto bene e in maniera precisa si riescono a fare grandi cose, finalmente non c’è bisogno di reinventare ogni volta la ruota. La filosofia e la teoria/Design Pattern dietro sta roba (Java EE) non sto qua a spiegarvela (anche perché non la conosco, vi posso rimandare a Antonio Goncalve e il suo libro davvero ben fatto ) però davvero si avverte un qualcosa di potente e semplice, ci si concentra sulla logica da implementare e tutto il resto viene quasi gratis, finanche le gestione della concorrenza, meccanismi di rollback e quant’altro

Cosa non mi è piaciuto: Mamma Oracle! o meglio, il fatto che il progetto abbia sempre avuto parecchie criticità, ultima in ordine cronologico il “passaggio” dello sviluppo da oracle ad Apache ( mi pare) con tanto di cambio nome (Jakarta EE) non fa che deallocare risorse ad un progetto che invece ne ha un bisogno disperato, tra IDE poco perfomanti su progetti “seri”, Vendor che funzionano meglio delle Reference Implementation ( o quanto meno funzionano) e mancate ottimizzazioni ( il mio microserver si mangiava 1.8G di ram per un progettino accademico, Me cojo!) non trasmettono un senso di stabilità, anzi sembra tutto molto “HomeMade” quando in realtà le cose sono belle solo poco intuitive (idee e configurazioni varie) e ovviamente si presentano male per quanto buone possano essere, la concorrenza si presenta con un bel vestito Azur(ro) e il semplice inserimento di id e password ti apre un IDE da browser con tutto bello e settato ( ho omesso la parte di debug sennò sarebbe stato uno sparare sulla crocerossa proprio)

Lost in GlassFish

Amici, oggi vi propongo un piccolo riassunto delle mie peripezie “alla conquista di glassfish”, solita doverosa premessa, sono un semplice studente (neanche tanto brillante) perciò prendete quanto scritto come un “buona la prima” senza troppe pretese, il mio esame prevede, in teoria, utilizzo di Java EE 7 su netbeans 8.1 e glassfish 4.1.1, ma ci sono state lievi modifiche in corso d’opera, questo è quanto voglio condividere con voi oggi.

Analizziamo i problemi e facciamo un riassunto dei workaround,

->partiamo da JDK, a prescindere del Sistema operativo che usiate, consiglio di cancellare tutte le versioni ed eventuali upgrade e schifezze varie ( esempio io avevo OpenJDK e una parte dei problemi erano dovuti alla JVM non oracle) scaricare l’ultima versione di JDK 8 dal sito della Oracle installare il tutto (su ubuntu sono successi scazzi, in quanto per via del cambiamento delle license di mamma Oracle, adesso non ci sono più repo ma bisogna prenderselo tutto nel **** compilare e settare tutto a mano, vi posterò un guida prima o poi) e settare le variabili di ambiente.

->finito con jdk passiamo all’ide, il mio prof consiglia netbeans 8.1, io personalmente sono migrato alla versione 8.2 per un fastidioso bug per cui a volte restavano processi zombie che è stato fixato in 8.2, se scaricate la versione EE, come suggerimento vi verrà mostrato di installare GlassFish 4.1.1 NON FATELO: la versione 4.1.1 presenta un grave bug sulla creazione delle connection pool ne parleremo meglio nel prossimo punto .

Fate attenzione,inoltre, ad installate Netbeans in un percorso senza spazi (io ho fatto C:\Netbeans\) attenti che di default Netbeans mette uno spazio nel nome ad indicare il numero di versione, ecco, tale spazio (o tali) vi fottono il caricamento di eventuali librerie in Path quando proverete a compilare/deployare qualcosa.

-> L’ application server Java EE, GlassFish, ha bug sulla versione 4.1.1, che non permette di creare connection Pool nel interfacciamento di un DB, i miei colleghi universitari hanno risolto downgradando alla versione 4.1, che però a volte si incasina con il servizio di naming (basta, a loro detta, fare il famoso stop and start server e tutto si sistema, ma quanti scazzi) io che devo essere il tipo alternativo by design, ho risolto con un piccolo workaraound chiamato Payara, che in soldoni e un application server Java EE basato su GlassFish 4.1 guidato da una community diversa, credo indipendente da Oracle, che continua ad essere sviluppato debuggato anche quando mamma Oracle perde interesse nei suoi prodotti, ve ne parlo meglio in un altro articolo, per il momenti basti sapere che è come avere GlassFish e inoltre sul sito di Payare c’è anche una buona documentazione, succo della questione, fate come vi pare ma Payara funziona meglio!

update:

Attenti a settare nella scheda servizi “JavaDB” perchè a volte derbi si incazza per motivi suoi, e niente, giusto per cambiare escono errori random

Finite un po’ di premesse Buon Deploy e buona programmazione

Glass Fish CDI e servlet

Se anche voi studiate a Salerno e/o vi state cimentando con Java EE 7, e dopo vari tentativi di deployare una servlet su glass fish con un CDI seguiti da innumerevoli errori, avete pensato di sacrificare una capra ad Oracle, aspettate, sono finalmente riuscito a far funzionare la cosa. Step da seguire

->Aggiungere Java EE WEB 7 nelle librerie del progetto

->creare/editare il file “beans.xml” alla riga

bean-discovery-mode="all"

settate “all” di default c’era altro ma non ricordo

lanciate glass fish (e non le madonne) e aprite il browser se non si fosse aperto da solo al’indirizzo

http://localhost:8080/XXX/ServletName

dove ovviamente xxx è il nome del vostro applicativo

N.B. siccome io me n’ero dimenticato lo aggiungo attenti a /ServletName che io dimenticavo di aggiungere perchè netbeans di serie non apre la servlet corrente ma la index del progetto

Netbeans Ubuntu 19.04

Bella ragazzi vi posto velocemente come far girare il maledetto netbeans 8.1 (stando al mio prof di programmazione distribuita è l’ultima versione decente con glassfish 4.1.1) su ubuntu 19.04

UPDATE: installate Amazon Corretto e tanti saluti a Oracle, guida qui

iniziamo da JDK che la maledetta oracle cambiando le licenze ha fatto un macello, ricordate il bel PPA che si aggiungeva, ecco non funziona più, per installare JDK ho seguito la guida sul sito ufficiale di ubuntu https://wiki.ubuntu-it.org/Programmazione/Java/Oracle e seguite i passaggi per l’installazione manuale, gli altri non funzionano (ah e scompattate il file a mano dopo aver scaricato tutto da oracle previa registrazione, lo so’ è diventato tutto un macello)

settata la JDK non abbiamo finito, scaricate netbeans 8.1 (nel mio caso versione EE) e installatelo

passiamo a settare nelle configurazioni di netbeans quale JDK usare

sudo gedit /usr/local/netbeans-8.1/etc/netbeans.conf

e modificate questa voce

netbeans_jdkhome="/usr"
in questa
netbeans_jdkhome="/usr/lib/jvm/jdk1.8.0_211"

salvate e una volta avviato netbeans dovrebbe partire o almeno a me va

alla prossima