Auto saved by Logseq
This commit is contained in:
commit
0b79aeae55
23 changed files with 179 additions and 34 deletions
|
@ -1,3 +1,3 @@
|
|||
- **06:52** [[quick capture]]: How much salary does a Kubernetes engineer get? - DEV Community 👩💻👨💻 [How much salary does a Kubernetes engineer get? - DEV Community 👩💻👨💻](https://dev.to/vikcodes/how-much-salary-does-a-kubernetes-engineer-get-329p) #freelance #finanze
|
||||
- **06:52** [[quick capture]]: How much salary does a Kubernetes engineer get? - DEV Community 👩💻👨💻 [How much salary does a Kubernetes engineer get? - DEV Community 👩💻👨💻](https://dev.to/vikcodes/how-much-salary-does-a-kubernetes-engineer-get-329p) #freelance #finance
|
||||
- **20:53** [[quick capture]]: https://github.com/themsaid/ibis #ebook #Markdown
|
||||
- **19:36** [[quick capture]]: Using Postgres as a task queue for rowdy Gophers - DEV Community 👩💻👨💻 [Using Postgres as a task queue for rowdy Gophers - DEV Community 👩💻👨💻](https://ente.io/blog/tech/postgres-queue/) #golang #postgres
|
|
@ -1,6 +1,6 @@
|
|||
- **10:19** [[quick capture]]: The Linux Command Line [The Linux Command Line](https://news.ycombinator.com/item?id=34161081) #linux #linuxcommandline #book #[[Amministrazione Sistemi Linux]]
|
||||
id:: 63bbf018-28d3-4074-a0b9-9fb7cee289c9
|
||||
- **10:26** [[quick capture]]: Poll: What's the best laptop for Linux these days? [Poll: What's the best laptop for Linux these days?](https://news.ycombinator.com/item?id=34180508) #linux #laptop
|
||||
- **10:39** [[quick capture]]: PostgREST – Serve a RESTful API from any Postgres database [PostgREST – Serve a RESTful API from any Postgres database](https://news.ycombinator.com/item?id=34172205) #postgres #supabase #rest
|
||||
- **10:39** [[quick capture]]: PostgREST – Serve a RESTful API from any Postgres database [PostgREST – Serve a RESTful API from any Postgres database](https://news.ycombinator.com/item?id=34172205) #postgres #supabase #REST
|
||||
- =======
|
||||
- [Tutorial](https://www.raeffs.dev/blog/self-hosting/2022-11-11-mastodon-with-docker/) per l'installazione di un'instanza #mastodon utilizzando #docker #selfhosting #fediverse
|
|
@ -1,9 +1,9 @@
|
|||
- **08:14** [[quick capture]]: https://andy-bell.co.uk/my-favourite-3-lines-of-css/ #css
|
||||
- **20:22** [[quick capture]]: Django and HTMX - DEV Community 👩💻👨💻 [Django and HTMX - DEV Community 👩💻👨💻](https://dev.to/kummerer94/django-and-htmx-i5c) #htmx #jwt
|
||||
- **20:24** [[quick capture]]: A Beginner's Guide to Using Fetch and Axios to Consume REST APIs in React - DEV Community 👩💻👨💻 [A Beginner's Guide to Using Fetch and Axios to Consume REST APIs in React - DEV Community 👩💻👨💻](https://dev.to/jhimmyofficial/a-beginners-guide-to-using-fetch-and-axios-to-consume-rest-apis-in-react-3dib) #Javascript #rest #nojsframework
|
||||
- **20:24** [[quick capture]]: A Beginner's Guide to Using Fetch and Axios to Consume REST APIs in React - DEV Community 👩💻👨💻 [A Beginner's Guide to Using Fetch and Axios to Consume REST APIs in React - DEV Community 👩💻👨💻](https://dev.to/jhimmyofficial/a-beginners-guide-to-using-fetch-and-axios-to-consume-rest-apis-in-react-3dib) #Javascript #REST #nojsframework
|
||||
- **20:28** [[quick capture]]: How to Create Your Own Commands in Linux - DEV Community 👩💻👨💻 [How to Create Your Own Commands in Linux - DEV Community 👩💻👨💻](https://dev.to/ther4v3n/how-to-create-your-own-commands-in-linux-3kgb) #linuxcommandline #[[Amministrazione Sistemi Linux]]
|
||||
- **20:54** [[quick capture]]: sqlite package - crawshaw.io/sqlite - Go Packages [sqlite package - crawshaw.io/sqlite - Go Packages](https://pkg.go.dev/crawshaw.io/sqlite) #sqlite
|
||||
- **21:07** [[quick capture]]: Retrieve User's Posts – Write.as API Documentation [Retrieve User's Posts – Write.as API Documentation](https://developers.write.as/docs/api/#retrieve-user-39-s-posts) #WriteFreely #rest
|
||||
- **21:07** [[quick capture]]: Retrieve User's Posts – Write.as API Documentation [Retrieve User's Posts – Write.as API Documentation](https://developers.write.as/docs/api/#retrieve-user-39-s-posts) #WriteFreely #REST
|
||||
- **21:09** [[quick capture]]: writeas package - github.com/writeas/go-writeas/v2 - Go Packages [writeas package - github.com/writeas/go-writeas/v2 - Go Packages](https://pkg.go.dev/github.com/writeas/go-writeas/v2) #WriteFreely
|
||||
-
|
||||
- **21:32** [[quick capture]]: Prompt Engineering Guide: Guides, papers, and resources for prompt engineering [Prompt Engineering Guide: Guides, papers, and resources for prompt engineering](https://news.ycombinator.com/item?id=34883486) #AI #prompt-engineering
|
||||
|
|
|
@ -15,4 +15,4 @@
|
|||
- **15:12** [[quick capture]]: [Show HN: Open Interpreter – CodeLlama in your terminal, executing code](https://news.ycombinator.com/item?id=37315866) #llm #programming
|
||||
- **19:42** [[quick capture]]: [Usenet, the OG social network, rises again like a text-only phoenix](https://news.ycombinator.com/item?id=37336606) #usenet
|
||||
- **21:15** [[quick capture]]: [Teaching with AI](https://news.ycombinator.com/item?id=37340314) #llm #teaching
|
||||
- **22:45** [[quick capture]]: [Ghostfolio: Open-source wealth management software](https://news.ycombinator.com/item?id=37337482) #finanze
|
||||
- **22:45** [[quick capture]]: [Ghostfolio: Open-source wealth management software](https://news.ycombinator.com/item?id=37337482) #finance
|
|
@ -1,4 +1,4 @@
|
|||
- **09:47** [[quick capture]]: [How to Learn Emacs (2012)](https://news.ycombinator.com/item?id=37438842) #emacs
|
||||
- **09:49** [[quick capture]]: [How to Learn Emacs (2012)](https://news.ycombinator.com/item?id=37438842)
|
||||
- **10:15** [[quick capture]]: ![Manuale_e-note_WEB](../assets/Manuale_e-note_WEB.pdf)
|
||||
- **15:42** [[quick capture]]: https://replicate.com/ #ai #rest
|
||||
- **15:42** [[quick capture]]: https://replicate.com/ #ai #REST
|
|
@ -13,5 +13,5 @@
|
|||
find . -maxdepth 1 -type d | sed 's/\.\///g' | tail -n +2 | while IFS= read -r line; do echo $line; done;
|
||||
```
|
||||
- **14:46** [[quick capture]]: [Show HN: Free High-quality TailwindCSS Components. No attribution required](https://news.ycombinator.com/item?id=37465533) #tailwind
|
||||
- **15:42** [[quick capture]]: [REST API - Nextcloud Deck](https://deck.readthedocs.io/en/latest/API/) #rest #API
|
||||
- **15:42** [[quick capture]]: [REST API - Nextcloud Deck](https://deck.readthedocs.io/en/latest/API/) #REST #API
|
||||
- **21:28** [[quick capture]]: [You Don't Need UUID](https://news.ycombinator.com/item?id=37469857) #uuid #Probo
|
|
@ -1 +1 @@
|
|||
- **09:07** [[quick capture]]: [Show HN: Every Breath You Take – Heart Rate Variability Training](https://news.ycombinator.com/item?id=37538028)
|
||||
- **09:07** [[quick capture]]: [Show HN: Every Breath You Take – Heart Rate Variability Training](https://news.ycombinator.com/item?id=37538028) #fitness
|
|
@ -12,6 +12,5 @@
|
|||
- Un PDF prodotto dalla scuola ha bisogno sempre di una firma digitale
|
||||
- La DS riceve in doppia autenticazione un codice OTP
|
||||
- Interessante la differenza tra firma forte e firma debole (firmato elettronicamente)
|
||||
- **21:11** [[quick capture]]: @morpheu5@livellosegreto.it 🔗 https://livellosegreto.it/users/morpheu5/statuses/111086896444359524
|
||||
-
|
||||
Per un giochino stile Papers Please però a tema negozi, pagamenti, eccetera, mi servirebbero delle tracce per la colonna sonora, idealmente chiptune o synthwave (o synthwave chiptune) un po' upbeat ma non troppo, livello muzak, possibilmente loopabili. Qualcuno ha elenchi di roba o gratis o royalty free a cifre ragionevoli per uso non esclusivo? Taggherei @kenobit e @sio che mi sembrano nel giro, ma chiunque è il benvenuto. Condiviso via Fedilab
|
||||
- **21:11** [[quick capture]]: @morpheu5@livellosegreto.it 🔗 https://livellosegreto.it/users/morpheu5/statuses/111086896444359524 #retrogaming
|
||||
- Per un giochino stile Papers Please però a tema negozi, pagamenti, eccetera, mi servirebbero delle tracce per la colonna sonora, idealmente chiptune o synthwave (o synthwave chiptune) un po' upbeat ma non troppo, livello muzak, possibilmente loopabili. Qualcuno ha elenchi di roba o gratis o royalty free a cifre ragionevoli per uso non esclusivo? Taggherei @kenobit e @sio che mi sembrano nel giro, ma chiunque è il benvenuto. Condiviso via Fedilab
|
|
@ -1,5 +1,3 @@
|
|||
<<<<<<< HEAD
|
||||
|
||||
- **09:34** [[quick capture]]: ![Screenshot_20230919-093403](../assets/Screenshot_20230919-093403.png)
|
||||
- **12:04** [[quick capture]]: [miraclecast as source · Issue #4 · albfan/miraclecast · GitHub](https://github.com/albfan/miraclecast/issues/4)
|
||||
- **15:32** [[quick capture]]: [Fx – Terminal JSON Viewer](https://news.ycombinator.com/item?id=37567009) #json
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
- **06:46** [[quick capture]]: [Show HN: ElectricSQL, Postgres to SQLite active-active sync for local-first apps](https://news.ycombinator.com/item?id=37584049) #postgres #sqlite #local
|
||||
- **20:20** [[quick capture]]: [isomorphic-git · A pure JavaScript implementation of git for node and browsers!](https://isomorphic-git.org/) #git #Javascript
|
||||
- **20:30** [[quick capture]]: https://opensource.com/article/21/1/raspberry-pi-hifi #raspberrypi #tinkering #music
|
||||
- **20:34** [[quick capture]]: https://github.com/samuelclay/NewsBlur
|
||||
- **20:34** [[quick capture]]: https://github.com/samuelclay/NewsBlur #selfhosting
|
||||
- **20:49** [[quick capture]]: https://www.gog.com/en/partner/free_games
|
||||
- Se utilizzo il comando `kill` senza opzioni il segnale di default è `SIGTERM`
|
||||
- Man-In-The-Middle proxy https://github.com/mitmproxy/mitmproxy da utilizzare nel corso #[[Cybersecurity con sistemi Linux]]
|
||||
- Archivio pubblico di certificati SSL
|
||||
- Archivio pubblico di certificati SSL #cybersecurity
|
||||
- https://crt.sh
|
|
@ -7,7 +7,7 @@
|
|||
docker exec -it -u www-data nextcloud_app_1 ./occ trashbin:cleanup --all-users
|
||||
```
|
||||
- ## 1 D LIN
|
||||
- Studenti assenti il giorno dello sciopero
|
||||
- Studenti assenti il giorno dello sciopero #teaching
|
||||
- DEVETTA
|
||||
- GAROFALO
|
||||
- LO VECCHIO
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- I seguenti studenti della 1 D LIN sono senza compiti
|
||||
- I seguenti studenti della 1 D LIN sono senza compiti #teaching
|
||||
- MUNI
|
||||
- GIOVANNA
|
||||
- Per installare la suite da ufficio `collabora` su un'istanza di #nextcloud utilizzando la #linuxcommandline
|
||||
|
@ -8,4 +8,4 @@
|
|||
```
|
||||
- Font `monospace` utilizzati nel sito [musicforprogramming](https://musicforprogramming.net/credits) #programming #music #freelance
|
||||
- https://github.com/IBM/plex/
|
||||
- **21:42** [[quick capture]]: [Show HN: RISC-V assembly tabletop board game (hack your opponent)](https://news.ycombinator.com/item?id=37704760)
|
||||
- **21:42** [[quick capture]]: [Show HN: RISC-V assembly tabletop board game (hack your opponent)](https://news.ycombinator.com/item?id=37704760)
|
|
@ -2,6 +2,5 @@
|
|||
- Facchettin (conoscenze confuse su grafico velocità tempo ed espressione della velocità in funzione del tempo)
|
||||
- Coslovich (conoscenze confuse su caduta dei gravi)
|
||||
- Mosca (6,5)
|
||||
- =======
|
||||
- **13:48** [[quick capture]]: https://github.com/trholding/llama2.c
|
||||
- **13:48** [[quick capture]]: https://github.com/trholding/llama2.c #llm #llama
|
||||
- **19:48** [[quick capture]]: [Running Stable Diffusion XL 1.0 in 298MB of RAM](https://news.ycombinator.com/item?id=37752632) #stablediffusion
|
|
@ -2,6 +2,5 @@
|
|||
- Name
|
||||
- Query
|
||||
- In particolare il campo `Query` è una stringa di ricerca utile a selezionare i quiz in base a dei criteri (ad esempio il tag).
|
||||
=======
|
||||
- **16:27** [[quick capture]]: [An Interactive Intro to CRDTs](https://news.ycombinator.com/item?id=37764581) #Probo #CRDT #local
|
||||
- **19:46** [[quick capture]]: [The Greening of Milan: Porta Nuova and Vertical Forest](https://news.ycombinator.com/item?id=37736211)
|
|
@ -1,3 +1,3 @@
|
|||
- Per installare #Docker su una distro Kali Linux con package manger `apt` occorre modificare il file `docker.list` inserendo come nome della release `bookworm` o comunque la release `Debian` da cui quella distribuzione di Kali deriva
|
||||
- **07:46** [[quick capture]]: [Show HN: Sqinn-Go is a Golang library for accessing SQLite databases in pure Go](https://news.ycombinator.com/item?id=37769633) #sqlite #Golang #Probo
|
||||
- **18:52** [[quick capture]]: [Bitmagnet: A self-hosted BitTorrent indexer, DHT crawler, and torrent search](https://news.ycombinator.com/item?id=37777347)
|
||||
- **18:52** [[quick capture]]: [Bitmagnet: A self-hosted BitTorrent indexer, DHT crawler, and torrent search](https://news.ycombinator.com/item?id=37777347) #htpc #torrent
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
- **07:31** [[quick capture]]: [Ollama is now available as an official Docker image](https://news.ycombinator.com/item?id=37786525) #llama #docker #llm
|
||||
- **14:49** [[quick capture]]: [Show HN: Another way to use an old tablet as an extra screen](https://news.ycombinator.com/item?id=37789371)
|
||||
- **14:49** [[quick capture]]: [Show HN: Another way to use an old tablet as an extra screen](https://news.ycombinator.com/item?id=37789371) #productivity #hardware
|
|
@ -1,4 +1,4 @@
|
|||
- **14:48** [[quick capture]]: [A Clutter-Free Life: Going Paperless with Paperless-Ngx](https://news.ycombinator.com/item?id=37800951)
|
||||
- **14:48** [[quick capture]]: [A Clutter-Free Life: Going Paperless with Paperless-Ngx](https://news.ycombinator.com/item?id=37800951) #selfhosting
|
||||
- **20:17** [[quick capture]]: [GitHub - alecthomas/participle: A parser library for Go](https://github.com/alecthomas/participle) #Golang #Probo
|
||||
- **20:18** [[quick capture]]: [Let's build a search query parser in Go](https://prasanthmj.github.io/go/simple-query-parser/) #Golang
|
||||
- **20:35** [[quick capture]]: [Paperless-ngx – Open source document management system](https://news.ycombinator.com/item?id=37800951)
|
||||
- **20:35** [[quick capture]]: [Paperless-ngx – Open source document management system](https://news.ycombinator.com/item?id=37800951) #selfhosting
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
- **06:00** [[quick capture]]: [DSLinux – Linux for the Nintendo DS](https://news.ycombinator.com/item?id=37826357)
|
||||
- **06:00** [[quick capture]]: [DSLinux – Linux for the Nintendo DS](https://news.ycombinator.com/item?id=37826357) #linux #retrogaming #tinkering
|
||||
- **10:02** [[quick capture]]: [How to Make a Cantenna (2013)](https://news.ycombinator.com/item?id=37826256) #teaching #networking
|
||||
-
|
|
@ -1,4 +1,4 @@
|
|||
- **12:49** [[quick capture]]: [Show HN: Obligator – An OpenID Connect server for self-hosters](https://news.ycombinator.com/item?id=37848793) #auth #selfhosting
|
||||
- **21:24** [[quick capture]]: [Show HN: Nostalgist.js – Run emulators of retro consoles, within web browsers](https://news.ycombinator.com/item?id=37854844)
|
||||
- **21:35** [[quick capture]]: https://whenwillirunoutofmoney.com/
|
||||
- **21:42** [[quick capture]]: https://news.ycombinator.com/user?id=tynmann
|
||||
- **21:24** [[quick capture]]: [Show HN: Nostalgist.js – Run emulators of retro consoles, within web browsers](https://news.ycombinator.com/item?id=37854844) #retrogaming
|
||||
- **21:35** [[quick capture]]: https://whenwillirunoutofmoney.com/ #finance
|
||||
- **21:42** [[quick capture]]: https://news.ycombinator.com/user?id=tynmann #writing #llm
|
|
@ -1 +1 @@
|
|||
- **06:49** [[quick capture]]: [The MP3mobile (1998)](https://news.ycombinator.com/item?id=37870061)
|
||||
- **06:49** [[quick capture]]: [The MP3mobile (1998)](https://news.ycombinator.com/item?id=37870061) #music #tinkering
|
|
@ -172,10 +172,9 @@
|
|||
- ```bash
|
||||
nmcli connection modify express_vpn_milan +vpn.data username=USERNAME
|
||||
```
|
||||
- **20:00** [[quick capture]]: [Better HTTP server routing in Go 1.22](https://news.ycombinator.com/item?id=37898999) #Golang #HTTP #rest #Probo
|
||||
- **20:08** [[quick capture]]: [Compile SQL to type-safe code | sqlc.dev](https://sqlc.dev/)
|
||||
- **20:00** [[quick capture]]: [Better HTTP server routing in Go 1.22](https://news.ycombinator.com/item?id=37898999) #Golang #HTTP #REST #Probo
|
||||
- **20:08** [[quick capture]]: [Compile SQL to type-safe code | sqlc.dev](https://sqlc.dev/) #sqlite #Probo
|
||||
- **20:18** [[quick capture]]: [GitHub - glebarez/sqlite: The pure-Go SQLite driver for GORM](https://github.com/glebarez/sqlite) #sqlite #orm #Probo
|
||||
-
|
||||
- **20:49** [[quick capture]]: [connectivity_plus | Flutter Package](https://pub.dev/packages/connectivity_plus) #flutter #Probo #Android
|
||||
- **20:52** [[quick capture]]: [GitHub - emacs-lsp/lsp-dart: lsp-mode dart](https://github.com/emacs-lsp/lsp-dart#additional-packages)
|
||||
>>>>>>> b20f1b97efdc9fbbca07cb5fa22bbd20d5e66bd1
|
||||
- **20:52** [[quick capture]]: [GitHub - emacs-lsp/lsp-dart: lsp-mode dart](https://github.com/emacs-lsp/lsp-dart#additional-packages) #emacs #dart #flutter
|
|
@ -1,3 +1,19 @@
|
|||
<<<<<<< HEAD
|
||||
=======
|
||||
- Riflessioni su backend #Probo (aka ProboArena) per la somministrazione dei test
|
||||
- L'arena è un backend separato dal collector
|
||||
- Espone un API REST per ricevere i test dal collector
|
||||
- Per creare un test (collezione di quiz)`GET /test/create`
|
||||
- Nella richiesta vanno inseriti i quiz e i partecipanti
|
||||
- Espone un API REST per la somministrazione dei test ai partecipanti
|
||||
- Per ricevere il test da svolgere `GET /{id}`
|
||||
- Il parametro `id` identifica in maniera univoca il test da svolgere
|
||||
- Si potrebbe pensare di scrivere il db sqlite all'interno di un file locale e di trasferire tutto il file sul backend in modo da ricrearlo in remoto.
|
||||
-
|
||||
- **10:36** [[quick capture]]: [FAQ - Docker Mailserver](https://docker-mailserver.github.io/docker-mailserver/latest/faq/) #docker #mailserver
|
||||
- **10:39** [[quick capture]]: [VPS Hosting » Server virtuali | Da 1 €/mese | IONOS](https://www.ionos.it/server/vps) #vpn #vps #selfhosting
|
||||
- **10:43** [[quick capture]]: [Configuring NGINX as a Mail Proxy Server | NGINX Documentation](https://docs.nginx.com/nginx/admin-guide/mail-proxy/mail-proxy/) #nginx #selfhosting
|
||||
>>>>>>> bcc998ee74736d4d197aacf97da526e08708827f
|
||||
- Conversazione con #GPT-4 su configurazione #openvpn #wireguard
|
||||
- guard e deve servire solo per raggiungere i servizi della mia infrastruttura homelab sulla rete 10.6.0.0/24 e il DNS server all'indirizzo 10.2.0.100. L'altra VPN è basata sul servizio ExpressVPN e funziona attraverso OpenVPN. Per quest'ultima possiedo il file di configurazione ovpn. La VPN basata su ExpressVPN mi serve per "uscire" su internet. Di conseguenza, l'IP pubblico associato alla mia macchina dev'essere quello fornito da Express VPN. Mostrami la configurazione necessaria e rilevante per configurare la mia distribuzione Arch Linux in modo da gestire contemporaneamente le due VPN.
|
||||
- Per raggiungere il tuo obiettivo, dovrai configurare entrambe le VPN e impostare le regole di routing appropriate. Ecco una guida passo-passo su come farlo:
|
||||
|
|
135
journals/2023_10_18.md
Normal file
135
journals/2023_10_18.md
Normal file
|
@ -0,0 +1,135 @@
|
|||
- Dialogo con #GPT-4
|
||||
- Dialogo con #GPT-4 per suggerimenti su download/upload di un file #sqlite tramite #REST.
|
||||
- Un database sqlite è completamente contenuto in un file?
|
||||
- Sì, un database SQLite è completamente contenuto in un singolo file sul disco del dispositivo. Questo lo rende estremamente portatile, poiché può essere copiato o spostato tra diversi dispositivi o sistemi operativi semplicemente trasferendo il file.
|
||||
- Come posso trasferire un file sqlite utilizzando un API rest dove client e server sono entrambi scritti in Go? Mostrami un esempio conciso.
|
||||
- Per trasferire un file sqlite utilizzando un API rest in Go, è possibile utilizzare i pacchetti net/http e io/ioutil di Go. Di seguito è riportato un esempio conciso.
|
||||
- Prima, il server che ospita il file sqlite:
|
||||
- ```go
|
||||
package main
|
||||
- import (
|
||||
"net/http"
|
||||
"os"
|
||||
"io"
|
||||
)
|
||||
- func main() {
|
||||
http.HandleFunc("/download", func(w http.ResponseWriter, r *http.Request) {
|
||||
file, _ := os.Open("your_sqlite_file.db") // sostituisci con il tuo file sqlite
|
||||
defer file.Close()
|
||||
w.Header().Set("Content-Type", "application/octet-stream")
|
||||
io.Copy(w, file)
|
||||
})
|
||||
- http.ListenAndServe(":8080", nil)
|
||||
}
|
||||
```
|
||||
- Quindi, il client che scarica il file sqlite:
|
||||
- ```go
|
||||
package main
|
||||
- import (
|
||||
"net/http"
|
||||
"os"
|
||||
"io"
|
||||
)
|
||||
- func main() {
|
||||
resp, _ := http.Get("http://localhost:8080/download")
|
||||
defer resp.Body.Close()
|
||||
out, _ := os.Create("downloaded_sqlite_file.db") // sostituisci con il nome del file che desideri
|
||||
defer out.Close()
|
||||
io.Copy(out, resp.Body)
|
||||
}
|
||||
```
|
||||
- Questo esempio è molto semplice e non gestisce gli errori per brevità. In un'applicazione del mondo reale, dovresti gestire tutti gli errori possibili.
|
||||
- Aggiungi un endpoind tramite il quale sia possibile effettuare un upload del file sqlite.
|
||||
- Per aggiungere un endpoint per l'upload del file sqlite, è possibile utilizzare la funzione http.PostForm di Go. Di seguito è riportato un esempio di come potrebbe essere fatto.
|
||||
- Prima, il server che riceve il file sqlite:
|
||||
- ```go
|
||||
package main
|
||||
- import (
|
||||
"net/http"
|
||||
"os"
|
||||
"io"
|
||||
)
|
||||
- func main() {
|
||||
http.HandleFunc("/upload", func(w http.ResponseWriter, r *http.Request) {
|
||||
file, _, _ := r.FormFile("file")
|
||||
defer file.Close()
|
||||
out, _ := os.Create("uploaded_sqlite_file.db") // sostituisci con il nome del file che desideri
|
||||
defer out.Close()
|
||||
io.Copy(out, file)
|
||||
})
|
||||
- http.ListenAndServe(":8080", nil)
|
||||
}
|
||||
```
|
||||
- Quindi, il client che carica il file sqlite:
|
||||
- ```go
|
||||
package main
|
||||
- import (
|
||||
"net/http"
|
||||
"os"
|
||||
"mime/multipart"
|
||||
"io"
|
||||
"bytes"
|
||||
)
|
||||
- func main() {
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
part, _ := writer.CreateFormFile("file", "your_sqlite_file.db") // sostituisci con il tuo file sqlite
|
||||
file, _ := os.Open("your_sqlite_file.db")
|
||||
defer file.Close()
|
||||
io.Copy(part, file)
|
||||
writer.Close()
|
||||
req, _ := http.NewRequest("POST", "http://localhost:8080/upload", body)
|
||||
req.Header.Add("Content-Type", writer.FormDataContentType())
|
||||
client := &http.Client{}
|
||||
client.Do(req)
|
||||
}
|
||||
```
|
||||
- Anche in questo caso, l'esempio è molto semplice e non gestisce gli errori per brevità. In un'applicazione del mondo reale, dovresti gestire tutti gli errori possibili.
|
||||
- Si potrebbe pensare all'upload di una stringa codificata in base64? Se sì, quali sono i vantaggi e gli svantaggi di un approccio simile?
|
||||
- Sì, è assolutamente possibile caricare un file SQLite come stringa codificata in base64. In questo caso, il file SQLite verrebbe prima letto e convertito in una stringa base64, quindi questa stringa verrebbe inviata al server tramite una richiesta HTTP POST. Sul lato server, la stringa base64 verrebbe quindi decodificata di nuovo in un file SQLite.
|
||||
- Vantaggi di tale approccio:
|
||||
- 1. Universalità: La codifica base64 può rappresentare tutti i dati binari come stringhe di testo. Questo rende l'approccio molto flessibile, poiché non si è limitati a un certo tipo di file o dati.
|
||||
2. Compatibilità: Poiché la codifica base64 produce solo caratteri ASCII, è sicura per il trasporto su canali che sono progettati per gestire il testo. Questo significa che i dati codificati in base64 possono essere inviati in un messaggio HTTP senza problemi di compatibilità.
|
||||
3. Integrità dei dati: La codifica base64 può aiutare a garantire l'integrità dei dati durante il trasporto, poiché i dati binari potrebbero essere modificati o corrotti durante la trasmissione.
|
||||
- Svantaggi di tale approccio:
|
||||
- 1. Sovraccarico: La codifica base64 aumenta la dimensione dei dati di circa il 33%. Questo potrebbe non essere un problema per i file di piccole dimensioni, ma per i file più grandi, potrebbe comportare un uso significativo della larghezza di banda e dello storage.
|
||||
2. Elaborazione: La codifica e la decodifica dei dati in base64 richiede risorse di elaborazione. Per i file di grandi dimensioni, questo potrebbe avere un impatto sulle prestazioni dell'applicazione.
|
||||
3. Complessità: Aggiungere un passaggio di codifica/decodifica può aggiungere complessità al codice dell'applicazione.
|
||||
- Mostrami un esempio in Go che utilizzi l'approccio base64.
|
||||
- Per inviare il file al server:
|
||||
- ```go
|
||||
package main
|
||||
import (
|
||||
"net/http"
|
||||
"os"
|
||||
"io/ioutil"
|
||||
"encoding/base64"
|
||||
"bytes"
|
||||
)
|
||||
func main() {
|
||||
file, _ := os.Open("your_sqlite_file.db") // sostituisci con il tuo file sqlite
|
||||
defer file.Close()
|
||||
fileBytes, _ := ioutil.ReadAll(file)
|
||||
encoded := base64.StdEncoding.EncodeToString(fileBytes)
|
||||
_, _ = http.Post("http://localhost:8080/upload", "application/octet-stream", bytes.NewBufferString(encoded))
|
||||
}
|
||||
```
|
||||
- Quindi, il server che riceve la stringa base64, la decodifica e salva il file sqlite:
|
||||
- ```go
|
||||
package main
|
||||
import (
|
||||
"net/http"
|
||||
"os"
|
||||
"io/ioutil"
|
||||
"encoding/base64"
|
||||
)
|
||||
func main() {
|
||||
http.HandleFunc("/upload", func(w http.ResponseWriter, r *http.Request) {
|
||||
encoded, _ := ioutil.ReadAll(r.Body)
|
||||
fileBytes, _ := base64.StdEncoding.DecodeString(string(encoded))
|
||||
ioutil.WriteFile("uploaded_sqlite_file.db", fileBytes, 0644) // sostituisci con il nome del file che desideri
|
||||
})
|
||||
http.ListenAndServe(":8080", nil)
|
||||
}
|
||||
```
|
||||
- Come nei precedenti esempi, questo esempio è molto semplice e non gestisce gli errori per brevità. In un'applicazione del mondo reale, dovresti gestire tutti gli errori possibili.
|
Loading…
Reference in a new issue