codebuddy.tech

building in public from Vancouver

Costruire strumenti AI tra un passaggio e l'altro: come ho trasformato il tempo morto in oro per lo sviluppo

Ciao, mi chiamo Chris. Sono un ex artigiano diventato autista di ride-sharing qui a Vancouver, e mi sono imbattuto in qualcosa di piuttosto incredibile. Nell'ora e mezza che mediamente ho tra un passaggio e l'altro ogni giorno, mi sono insegnato a creare applicazioni basate sull'AI direttamente dal mio telefono. Quello che sono riuscito a realizzare in questi momenti sparsi di inattività è, francamente, sorprendente — persino per me.

Non ho lasciato il mestiere per scelta. Una sega circolare mi ha portato via gran parte del pollice, e così è finita. Più di vent'anni come imbianchino, idraulico e falegname, e un brutto momento ha messo fine a tutto. Non fingerò di non esserne stato amareggiato per un po'. Ma il bello di essere un artigiano è questo: anche quando gli strumenti cambiano, la mentalità di problem-solving non cambia. Quando incontri un ostacolo, non aspetti che qualcun altro lo risolva. Costruisci una soluzione.

Quella mentalità si è trasferita perfettamente nello sviluppo software, anche se ammetto che ci sono dei compromessi. Ogni volta che incontro un blocco nel mio percorso di programmazione — e credetemi, mi capita spesso — costruisco uno strumento attorno al problema. È come quando arrivo a un fiume che non posso attraversare, mi costruisco un ponte. E questo approccio è stato assolutamente liberatorio, anche se a volte un abbonamento mensile avrebbe risolto lo stesso problema in modo più efficiente.

La mentalità dell'artigiano: risolvere problemi con il codice

I parallelismi tra il lavoro artigianale e lo sviluppo software sono più profondi di quanto si possa immaginare. In falegnameria, quando ti manca una dima specifica, la costruisci con gli scarti di legno. In idraulica, quando non trovi il raccordo giusto, crei un giunto temporaneo. Questo tipo di bricolage — usare i materiali disponibili per creare soluzioni alternative — diventa una seconda natura.

Ma lo sviluppo software aggiunge livelli di complessità che i mestieri fisici non hanno. Quando un falegname costruisce una dima, funziona o non funziona. Se si rompe, è ovvio. Quando costruisco un'applicazione personalizzata, le modalità di guasto sono più insidiose. Un caso limite non gestito potrebbe interrompere silenziosamente una connessione, una dipendenza potrebbe avere una vulnerabilità che passa inosservata per mesi, e il codice stesso diventa una responsabilità che richiede attenzione continua.

Il romanticismo del costruire i propri strumenti è però reale. C'è qualcosa di profondamente soddisfacente nel creare una soluzione che si adatta esattamente al tuo flusso di lavoro, ottimizzata per le tue esigenze specifiche piuttosto che per le supposizioni di un product manager su ciò che gli utenti vogliono. La domanda con cui mi confronto costantemente è: quando questo approccio serve la produttività, e quando diventa over-engineering travestito da problem-solving?

Il primo ponte: il mio client SSH personalizzato

La mia creazione principale è un'app iOS che chiamo Terms — attualmente alla sua quarta iterazione. Questo client SSH si è evoluto nel corso di anni di utilizzo reale durante quei momenti sparsi tra un passaggio e l'altro, ed è diventato perfettamente su misura per il mio unico flusso di lavoro di programmazione basato su copia-incolla, dettatura vocale e AI.

L'app utilizza l'autenticazione biometrica — Face ID per la precisione. Quando la apro, il sistema autentica il mio volto e mi porta direttamente nel mio ambiente VPS, direttamente al prompt dei comandi. La tecnologia alla base di Face ID è affascinante: il sistema TrueDepth di Apple proietta oltre 30.000 punti invisibili per creare una mappa di profondità precisa del tuo volto, utilizzando l'imaging a infrarossi per funzionare anche al buio.

La possibilità di stare comodamente seduto al telefono, creando strumenti con un potenziale reale mentre correggo costantemente bug e ottimizzo — è una gioia genuina. Lo consiglio vivamente. E sì, c'è qualcosa di silenziosamente soddisfacente nel fatto che le stesse mani che un tempo intelaiaturavano muri e saldavano tubi di rame ora stiano deployando Python su un server Linux da un parcheggio a Vancouver.

Una delle mie funzionalità preferite affronta una frustrazione comune negli ambienti di sviluppo mobile. Quando incontro un bug o un traceback che blocca il terminale, mi basta scorrere verso l'alto per chiudere l'app, riaprirla, lasciare che Face ID mi autentichi di nuovo, e sono immediatamente di nuovo al prompt dei comandi, pronto a continuare. Questo processo di ripristino senza soluzione di continuità mi ha risparmiato innumerevoli ore di frustrazione e mantiene il mio slancio durante quelle preziose sessioni di programmazione tra un passaggio e l'altro.

L'implementazione tecnica si basa sulla memorizzazione di chiavi SSH crittografate nel portachiavi di iOS, che fornisce sicurezza basata su hardware nei dispositivi con Secure Enclave. La gestione dello stato della connessione è stata una delle parti più difficili da perfezionare — gestire le transizioni di rete mentre mi sposto tra diverse torri cellulari e hotspot WiFi in tutta la città. Ho implementato un livello di persistenza della connessione in grado di rilevare i cambiamenti di rete e riconnettersi automaticamente alla sessione remota, spesso in modo così fluido che nemmeno mi accorgo che la transizione è avvenuta.

Avrei potuto ottenere funzionalità simili con client SSH esistenti? Assolutamente. Ma quelle app sono ottimizzate per casi d'uso generali, mentre la mia è focalizzata al laser sul mio specifico flusso di lavoro. Le scorciatoie da tastiera personalizzate, l'integrazione con la dettatura vocale di iOS per programmare con la voce, e la gestione specializzata degli appunti per rimbalzare frammenti di codice tra telefono e server — queste funzionalità esistono perché le ho costruite per le mie esatte esigenze.

Il ponte video-audio: risolvere l'attrito nel flusso di lavoro dei contenuti

Il secondo strumento principale che ho sviluppato è nato da un punto di attrito specifico nel mio flusso di lavoro di creazione di contenuti. Avevo bisogno di un modo affidabile per trascrivere video, e sebbene esistano servizi web che gestiscono questa operazione, avevo bisogno di qualcosa di più flessibile per la mia libreria di contenuti personali.

Il mio approccio è stato quello di convertire prima i video in audio — un processo molto più leggero rispetto al caricamento di file video di grandi dimensioni. Per anni ho fatto affidamento su un'app di terze parti per questo, ma quando gli aggiornamenti di iOS la rompevano o avevo bisogno di formati audio specifici, mi ritrovavo bloccato. Così ho costruito il mio convertitore.

La tecnologia sottostante si basa su FFmpeg, un potente mu

Get new posts

Subscribe in your language

New posts delivered to your inbox. Unsubscribe anytime.

Receive in: