knowledgebase/journals/2023_11_05.md
2023-11-15 13:09:20 +01:00

6.3 KiB

  • 13:33 quick capture: Email Obfuscation Rendered Almost Ineffective Against ChatGPT
  • Dialogo con #GPT-4 nel quale gli si chiede di impersonificare un recruiter.
    • Impersonifica un recruiter per un'azienda di software. Quale livello di seniority assegneresti ad un candidato che ha prodotto questa funzione in Go?
    • func (s *Store[T]) Update(entity T, id string) (T, error) {
      	sEntity, err := s.Read(id)
      	if err != nil {
      		return sEntity, err
      	}
      
      	s.lock.Lock()
      	defer s.lock.Unlock()
      
      	s.ids[id] = entity
      
      	if hash := entity.GetHash(); hash != "" {
      		s.hashes[hash] = entity
      	}
      
      	return entity, nil
      }
      
    • Dato che il candidato ha dimostrato una buona comprensione dei concetti di programmazione in Go, inclusi i metodi, le strutture, il controllo di concorrenza con mutex e l'interfaccia, potrebbe essere considerato un "Mid-Senior Level" o "Senior Level" a seconda delle altre competenze e dell'esperienza che ha. Tuttavia, la valutazione finale dipenderebbe da altri fattori come il livello di complessità dei progetti su cui ha lavorato, la sua capacità di lavorare in team, la sua esperienza con il testing, la gestione degli errori, l'ottimizzazione delle prestazioni, tra gli altri.
    • Quale sarebbe una possibile domanda a seguire (immagina di essere un recruiter durante un colloquio di lavoro).
    • Una possibile domanda a seguire potrebbe essere: "Potresti spiegarmi un progetto complesso su cui hai lavorato recentemente, in particolare come hai gestito la concorrenza e il controllo degli errori in Go?"
    • Ho lavoraro su una piattaforma di gara per la somministrazione di test online. Ho gestito la concorrenza con le goroutine sincronizzandole con lo scambio di messaggi attraverso canali. Ho gestito il controllo degli errori non trascurando mai il valore di errore ritornato dalle funzioni. In Go, infatti, non esiste il costrutto try/catch e quindi la gestione degli errori è sempre esplicita e si mette in opera attraverso branch condizionali.
    • Grazie per aver condiviso la tua esperienza. Puoi spiegarmi come hai implementato l'ottimizzazione delle prestazioni in questo progetto? E come hai gestito eventuali problemi di scalabilità?
    • Certo, ho ottimizzato la risposta del webserver attraverso il caching delle pagine html. Ho gestito la scalabilità riducendo al minimo la centralizzazione delle operazioni, ad esempio utilizzando JWT per le chiamate REST.
    • Grazie per la tua risposta. Hai menzionato l'uso di JWT nelle chiamate REST. Potresti spiegare come hai implementato la sicurezza nelle tue applicazioni, in particolare in relazione all'autenticazione e all'autorizzazione degli utenti?
    • Certo. L'utente si autentica attraverso una pagina di login. Se l'autenticazione ha successo, all'utente viene rilasciato un token JWT. Il token viene salvato in un cookie crittografato il quale viene inviato insieme alle richieste al backend. Il backend decodifica le informazioni all'interno del token senza necessità di interrogare ogni volta il db eliminando così il collo di bottiglia della base di dati e garantendo maggiore scalabilità del servizio.
    • Grazie per la spiegazione dettagliata. Puoi spiegare come hai gestito i test nel tuo progetto? Hai utilizzato un framework specifico per i test in Go?
    • Ho utilizzato la libreria da me stesso sviluppata (github.com/remogatto/prettytest). Ho implementato sia unit test sia test end-to-end e di integrazione.
    • Grazie per aver condiviso. Hai menzionato l'uso della tua libreria di test, prettytest. Potresti spiegare come hai implementato l'uso di questa libreria nel tuo progetto e perché hai scelto di utilizzare una libreria di test personalizzata piuttosto che una soluzione esistente?
    • Esci ora dal ruolo del recruiter. Potresti ridefinire il livello del candidato?
    • Dato il livello di competenza mostrato dal candidato durante l'intervista, con una chiara comprensione dei concetti avanzati di Go, una buona gestione del controllo degli errori e della concorrenza, l'implementazione efficace dell'ottimizzazione delle prestazioni e della scalabilità, e inoltre la capacità di creare una propria libreria di test, lo classificherei come "Senior Level". Il candidato ha dimostrato non solo una solida comprensione del linguaggio di programmazione Go, ma anche un'ottima capacità di problem solving e un approccio proattivo alla programmazione.
    • Le informazioni fornite dal candidato ti sembrano generalmente corrette? Avenzeresti dei dubbi di qualche tipo relativamente a qualcosa detto dal candidato?
    • Le informazioni fornite dal candidato sembrano corrette e mostrano una buona comprensione dei concetti chiave della programmazione in Go. Non ho particolari dubbi sulle competenze tecniche del candidato. Tuttavia, potrei voler approfondire ulteriormente le sue competenze in termini di lavoro di squadra, leadership e gestione del progetto, poiché queste sono competenze importanti per un ruolo di Senior Level.
  • Per configurare le opzioni di compilazione in un package AUR di #archlinux potrebbe essere utile intervenire sul file PKGBUILD. In questo esempio ho modificato l'opzione DENABLE_DDC da 1 a 0 per disabilitare una dipendenza da una libreria e far funzionare nuovamente clightd.
    • # Maintainer: Mark Wagie <mark dot wagie at tutantota dot com>
      # Contributor: Federico Di Pierro <nierro92@gmail.com>
      pkgname=clightd
      pkgver=5.8
      pkgrel=1
      pkgdesc="Bus interface to change screen brightness and capture frames from webcam."
      arch=('x86_64' 'aarch64')
      url="https://github.com/FedeDP/Clightd"
      license=('GPL')
      depends=('systemd-libs' 'linux-api-headers' 'libx11' 'libxrandr' 'libxext' 'polkit'
               'ddcutil' 'libmodule' 'libjpeg-turbo' 'libusb' 'libdrm' 'wayland')
      makedepends=('git' 'cmake')
      source=("$pkgname-$pkgver.tar.gz::$url/archive/$pkgver.tar.gz")
      sha256sums=('89f0906bc2c1dd4f9bd62194499fd156197c211760c4bb1adcb149650f852684')
      
      build() {
        cmake -B build -S Clightd-$pkgver \
          -DCMAKE_BUILD_TYPE='None' \
          -DCMAKE_INSTALL_PREFIX='/usr' \
          -DCMAKE_INSTALL_LIBEXECDIR="lib/$pkgname" \
          -DENABLE_DDC='0' \
          -DENABLE_GAMMA='1' \
          -DENABLE_DPMS='1' \
          -DENABLE_SCREEN='1' \
          -DENABLE_YOCTOLIGHT='1' \
          -Wno-dev
        cmake --build build
      }
      
      package() {
        DESTDIR="$pkgdir" cmake --install build
      }