- presentazione del sito
- Registrazione
- Eventi, mostre, convegni ed iniziative segnalate dalle aziende
- Recensioni ed articoli
- Le Mailing Lists
- La rivista Pc Ciechi
- Wiki
- Chi siamo
- Donazioni
- Un progetto degno di nota: Wintalbra
- Come navigare in questo sito
- rss
- Bancomat Accessibili sul territorio nazionale
- Contattaci
- I sostenitori di SpazioAusili
Winguido, download con resume è stato creato
Guido Ruggeri su winguidotecnica,dal 09\01\2010, h. 07.52.
Siamo d'accordo che abbiamo dedicato questa lista, WinGuidoTecnica, al corso di primi rudimenti di programmazione.
Ma non dimentichiamoci che c'erano degli argomenti iniziati anche prima e lasciati in sospeso.
Quindi questo messaggio è rivolto non a quelli che si sono iscritti di recente per partecipare al corso, ma quelli che erano qui già da prima, quando valeva la regola che chi partecipava a questa lista doveva avere già delle sufficienti competenze informatiche.
Più di due anni fa, quando si stava realizzando la biblioteca di Guidiamoci, si era posto il problema di realizzare, in WinGuido, un meccanismo di download con resume, in modo da poter prelevare da Internet anche dei file molto lunghi, senza dover ripartire da capo perdendo quanto già prelevato se durante il prelievo subentra un errore.
Avevo trovato un codice, scritto in Pascal, che consentiva liberamente il prelievo di una parte di file da Internet, mediante protocollo HTTP, semplicemente fissando la posizione iniziale del prelievo e la lunghezza da prelevare desiderata, indipendentemente dall'uso della cache nel computer ricevente.
Avevo sottoposto a questa lista il codice in Pascal, chiedendo che qualcuno si incaricasse di tradurlo in Visual Basic, e di provarlo.
Sono passati più di due anni, e non l'ha fatto nessuno. In tutto questo tempo, conseguentemente, io mi sono letteralmente rifiutato di mettere più le mani nella programmazione della biblioteca di Guidiamoci, che è rimasta ferma come era.
D'altronde, a quei tempi la mia esigenza principale era di mettere alla prova certe persone con cui, in certi ambienti, si pretendeva che avrei dovuto collaborare.
Ormai le esigenze sono cambiate, quelle persone, per quel che mi riguarda, sono state tutte bocciate e quindi non le prendo più in considerazione, mentre invece qualcos'altro si sta muovendo.
Perciò ho deciso di riprendere quel discorso.
La traduzione dal Pascal al Visual Basic l'ho fatta io, e la riporto qui sotto.
L'ho impostato per prelevare 1000 caratteri dall'URL http://www.winguido.it/notizie.htm, a partire dal millesimo carattere.
Provato, funziona alla grande!
Continuando a lavorarci sopra, il problema del download con resume per mezzo di WinGuido potrà finalmente risolversi.
Ecco il codice tradotto in Visual Basic:
Ed ora, un po' di pubblicità
:Option Explicit
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _
(ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _
ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long
Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
Public Declare Function HttpAddRequestHeaders Lib "wininet.dll" _
Alias "HttpAddRequestHeadersA" _
(ByVal hHttpRequest As Long, _
ByVal sHeaders As String, _
ByVal lHeadersLength As Long, _
ByVal lModifiers As Long) As Integer
Public Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, ByVal sReferer As String, ByVal something As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Public Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, sOptional As Any, ByVal lOptionalLength As Long) As Long
Public Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Public Const INTERNET_DEFAULT_HTTP_PORT = 80
Public Const INTERNET_SERVICE_HTTP = 3
Public Const HTTP_ADDREQ_FLAG_ADD_IF_NEW = &H10000000
Sub Main()
Dim StrURL As String
Dim FilePath As String
Dim ResourcePos As Long
Dim BytesToProceed As Long
Dim hOpen As Long, hConnect As Long, hResource As Long
Dim s As String
Dim sBuffer As String
Dim LBuffer As Long
Dim NumRead As Long
Dim Ret As Long
StrURL = "www.winguido.it"
FilePath = "/notizie.htm"
ResourcePos = 999 'Inizia da 0
BytesToProceed = 1000
hOpen = InternetOpen("WinInet resuming sample", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
If hOpen = 0 Then Stop
hConnect = InternetConnect(hOpen, StrURL, INTERNET_DEFAULT_HTTP_PORT, vbNullString, vbNullString, INTERNET_SERVICE_HTTP, 0, 0)
If hConnect = 0 Then Stop
hResource = HttpOpenRequest(hConnect, "GET", FilePath, vbNullString, vbNullString, 0, 0, 0)
If hResource = 0 Then Stop
s = "Range: bytes=" & ResourcePos & "-" & ResourcePos - 1 + BytesToProceed
Ret = HttpAddRequestHeaders(hResource, s, Len(s), HTTP_ADDREQ_FLAG_ADD_IF_NEW)
If Ret = 0 Then Stop
Ret = HttpSendRequest(hResource, vbNullString, 0, vbNullString, 0)
If Ret = 0 Then Stop
LBuffer = 1024
Do
sBuffer = Space$(LBuffer)
Ret = InternetReadFile(hResource, sBuffer$, Len(sBuffer$), NumRead)
If Ret = 0 Then Stop
If NumRead = 0 Then Exit Do
Debug.Print Left(sBuffer, NumRead)
Loop
InternetCloseHandle hConnect
InternetCloseHandle hOpen
End Sub
__._,_.___
***
Vi informo che, applicando a WinGuido il codice che ho trasmesso in lista stamattina, mi è appena riuscito il primo esperimento di download con resume in WinGuido.
Ho iniziato a scaricare un lungo file da Internet, dopo un po' ho spento il modem per provocare un errore.
Poi ho riacceso il modem e ho fatto riprendere il prelievo da dove si era interrotto, cioè senza ricominciarlo da capo e recuperando la parte che era già stata scaricata prima dell'errore.
Il prelievo si è completato, il file si è ricomposto perfettamente.
Non sto più nella pelle, sono emozionatissimo!
Questo sistema risolverà uno dei punti deboli di WinGuido, che è il meccanismo di download troppo vulnerabile.
***
Prove di prelievo file da Internet, con ripresa dopo interruzione.
Tra tutte le funzionalità in corso di sviluppo per WinGuido, questa è quella destinata a battere tutti i record di lunghezza del tempo di gestazione.
Sto parlando del download da Internet con ripresa dopo interruzione.
La prima volta che tentai un esperimento risale nientedimeno che al febbraio 2001: 9 anni fa.
Febbraio 2001: il Presidente del Consiglio era Giuliano Amato, il secondo governo Berlusconi non era ancora iniziato. In America, George Bush figlio si era appena insediato per il suo primo mandato come presidente. Gli attentati dell'11 settembre non erano ancora avvenuti.
Io non avevo ancora conosciuto né Andrea Santoro, né Antonio De Angelis, né Anna Piccoli.
Il tentativo che feci allora è tuttora descritto in questo notiziario,
alla data del 25 febbraio 2001
. Quella volta avevo concluso scrivendo: chissà se ci riuscirò?
E adesso, 9 anni più tardi, ci sto riuscendo. Meglio tardi che mai.
E' già in funzione, con l'aggiornamento di oggi, un nuovo sistema sperimentale.
Supponiamo che WinGuido inizi a prelevare un lungo file da Internet, di quelli che, anche con una connessione veloce, ci vuole del tempo per prelevare, figuriamoci allora con una connessione lenta.
Supponiamo che la ricezione del file non si completi. Perché, in conseguenza di qualche inconveniente, si è interrotta prima di completarsi.
Oppure perché l'hai interrotta tu volutamente, rinunciando a completarla, o perché sei uscito dal programma oppure perché hai spento il computer.
Fino a ieri, non completare il prelievo del file equivaleva a doverlo poi ricominciare da capo. La parte di file che era già stata prelevata, cioè, andava perduta.
Da oggi le cose cambiano. Quando, dopo l'interruzione, si ritorna a prelevare lo stesso file da Internet, WinGuido si accorge che una parte di quel file la aveva già presa in precedenza.
E allora, senza ricominciare da capo, riparte da dove era arrivato quando si era interrotto, utilizzando cioè la parte che era stata già presa.
In questo modo, anche nei casi in cui la connessione ad Internet è instabile, c'è la possibilità di arrivare a completare, sia pure in più riprese, il prelievo di file di grandi dimensioni per mezzo di WinGuido.
Il nuovo sistema di prelievo si può già applicare anche ai file della biblioteca di Guidiamoci.
Per adesso questo sistema di prelievo con ripresa è da considerarsi ancora sperimentale. Perciò entra in funzione soltanto a chi ha disattivato la ricezione tramite OCX.
Se vuoi partecipare anche tu alla sperimentazione, devi fare così.
In WinGuido, vai in: Configurazione. Internet. Mezzo di connessione.
Poi ti trovi in un menù che consente di scegliere tra modem telefonico, rete, e altre possibilità.
Stando in quel menù, premi Alt per andare nelle funzioni locali.
Se trovi scritto: "Attiva la ricezione tramite OCX", non devi fare altro perché il nuovo sistema per te è già in funzione.
Se invece trovi scritto: "Disattiva la ricezione tramite OCX", devi premere invio per disattivarla e mettere in funzione il nuovo sistema.
Naturalmente, se poi dovessi constatare che il nuovo sistema ti crea dei problemi e che ti impedisce di prelevare i file da Internet, potrai sempre tornare lì e riattivare la ricezione tramite OCX.