Articoli con tag programmazione
Upload FTP con Python
0
Fare l’upload di un file FTP con Python e il modulo ftplib è più semplice di quel che si pensa.
Stasera condivido questo breve ma utilissimo pezzo di codice:
import ftplib #importiamo la libreria che useremo per gestire la connessione FTP ftp = ftplib.FTP('myserver.com','login','password') # Si connette fp = open('file.txt','rb') # Imposta il file da inviare, apriamo uno stream per il file #di default siamo nella cartella root del sito / - se vogliamo spostarci in un'altra directory è sufficiente scrivere: ftp.cwd('directory') ftp.storbinary('STOR file.txt', fp) # Invia il file fp.close() # Chiude lo stream del file ftp.quit() # Chiude la connessione
Pilotare iTunes con Python – Windows
1Ben tornati!
In serbo per voi oggi, una manciata di codice Python, per il controllo di iTunes (il software per la gestione e riproduzione di brani, Made by Apple).
Python e iTunes interagiscono via scripting, COM. (iTunes è infatti, fortunatamente dotato di un’interfaccia script).
Il modulo aggiuntivo per Python, necessario, è win32.com (Presente nel pacchetto pywin32).
import win32com.client #Tramite COM interagiamo con l'interfaccia script di iTunes. iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application") #Mette in play il primo brano della playlist "Classifica". iTunes.LibrarySource.Playlists.ItemByName('Classifica').PlayFirstTrack() #Attiva la riproduzione casuale nella playlist specificata. iTunes.LibrarySource.Playlists.ItemByName('Classifica').Shuffle = True #Riproduce il file indicato nel percorso, aggiungendolo in libreria se non presente. iTunes.PlayFile("C:\\Users\\ASS.MUSOLINO\\Documents\\IPOD\\Musica\\8. Beyonce - Halo.mp3") #Restituisce 1 se c'e qualche brano in riproduzione, altrimenti 0 iTunes.PlayerState #Mette in pausa il brano. iTunes.Pause() #Play iTunes.Play() #Stop iTunes.Stop() #Brano precedente iTunes.PreviousTrack() #Brano successivo iTunes.NextTrack() #Stampa a schermo il titolo del brano attualmente in riproduzione iTunes.CurrentTrack.Name #Stampa a schermo un numero da 0 a 100 che sta a indicare il volume attuale. iTunes.SoundVolume #Setta il volume a 50 iTunes.SoundVolume = 50 #Restituisce True se il volume e' attivo, altrimenti False iTunes.Mute #Muto iTunes.Mute = True #Toglie il Muto iTunes.Mute = False #Minimizza la finestra di iTunes. iTunes.Windows.Item(1).Minimized = True #Chiude iTunes iTunes.Quit()

Assembler – Moltiplicazione di numeri
0Riprendiamo a parlare di linguaggio a basso livello.
Ecco un nuovo esercizio in linguaggio Assembler: realizzare un programma capace di effettuare la moltiplicazione di due numeri con somme ripetute. (Stampa del prodotto max a 2 cifre).
;ESERCIZIO: Moltiplicazione di due numeri con somme ripetute. (stampa max 2 cifre) .model small .stack 100h .data striper byte 32d, 'per', 32d, '$' .code start: mov ah, 1h int 21h sub al, 30h ; dato che un carattere immesso da tastiera viene convertito nel corrispettivo codice ascii. Per poter lavorare col numero ascii, dobbiamo sottrarre 30h. (dal segmento data invece lo abbiamo già diretto il numero ascii) mov bl, al cmp bl, 0 je finez sub bl, 1 mov ax, @data mov ds, ax mov dx, offset striper mov ah, 9h int 21h mov ah, 1h int 21h sub al, 30h cmp al, 0 je finez mov dl, al prodotto: cmp bl, 0 jle fine add dl, al dec bl jmp prodotto fine: mov bl, dl mov dl, ' ' mov ah, 2h int 21h mov dl, '=' mov ah, 2h int 21h mov dl, ' ' mov ah, 2h int 21h mov ah, 0 mov al, bl mov cl, 10 div cl add ah, 30h mov bl, ah add al, 30h mov dl, al mov ah, 2h int 21h mov dl, bl mov ah, 2h int 21h mov ax, 4c00h int 21h finez: mov dl, ' ' mov ah, 2h int 21h mov dl, '=' mov ah, 2h int 21h mov dl, ' ' mov ah, 2h int 21h mov dl, '0' mov ah, 2h int 21h mov ax, 4c00h int 21h end start
Assembler – Array di stringhe
0Nonostante l’assembler sia un linguaggio di basso livello, iniziamo a esplorare una delle strutture dato fondamentali in ogni linguaggio di programmazione, l’array o vettore.

Il seguente frammento di codice stampa un array di stringhe, ogni elemento (stringa) viene stampato su una nuova riga:
.model small
.stack 100h
.data
stringhe db 10d, 50 dup('ciao', 10d), '$' ; array di 50 elementi (inizializzati alla stringa "ciao" + CR ovvero ritorno a capo), il dollaro è fondamentale perchè indica la fine dell'array di stringhe.
.code
start:
mov ax, @data ; si passa obbligatoriamente attraverso ax perchè ds (data segment) può ricevere dati solo da registri
mov ds, ax
mov dx, offset stringhe ; dx conterrà l'indirizzo (comando offset) del nostro array.
call puts ; chiamata della subroutine puts che fa l'output della stringa contenuta in ds : dx / dato : indirizzo
mov ax, 4c00h
int 21h
; inizio della subroutine puts:
puts:
mov ah, 9h ; 9h = output di una stringa
int 21h
ret ; istruzione di ritorno
end startL’interrupt usato, è il solito 21h per i servizi del DOS.
Assembler – conversione da Maiuscolo a minuscolo.
0Altro Programma in Assembler, il linguaggio di basso livello per eccellenza, che legge un carattere Maiuscolo e lo converte in minuscolo. (La strategia usata è basilare, basta avere in mano una tabella ascii per capire come procedere nella stesura del codice).
; Nella codifica ASCII le lettere minuscole si trovano 32 posizioni dopo le equivalenti lettere maiuscole, ; per esempio la posizione decimale di A è 65, di a è 97, e così via. Scrivere un programma MASM ASSEMBLER ; che legga un carattere MAIUSCOLO e lo converta in minuscolo. .model small .stack 100h .data istr db 'Carattere M: ', '$' ; NB. ricordare sempre il carattere di escape finale $, che indica la fine della stringa (o di un array). ostr db 'Carattere m: ', '$' .code start: mov ax, @data ; mettiamo in ax tutto il segmento dati. mov ds, ax ; spostiamo nel data segment tutto ax (non possiamo farlo direttamente perchè ds riceve input solo da registri) mov dx, offset istr ; in dx mettiamo invece l'indirizzo del dato che vogliamo utilizzare. call puts ; chiamata della subroutine puts che stampa a video il contenuto di DS : DX (stampa a video la stringa) call getc ; chiamata della subroutine getc che riceve un input da tastiera con eco (8h input senza eco), l'input viene salvato in al. mov bl, al ; copiamo al in bl. add bl, 32d ; sommiamo al valore intero del carattere preso da tastiera (bl), il valore decimale 32. E lo salviamo in bl. call put1310 ; chiamiamo la subroutine put1310 che stampa a schermo LF e CR mov dx, offset ostr ; mettiamo in dx il valore dell'indirizzo della variabile ostr (avendo già in ds tutto il segmento di dati, per stampare un dato specifico di volta in volta è sufficiente cambiare l'indirizzo del dato contenuto in dx call puts ; richiamiamo la subroutine per la stampa del valore in ds : dx mov dl, bl ; copiamo bl in dl (bl sarà il codice ascii del carattere + 32) call putc ; stampa il carattere in dl (tramite 2h). mov ax, 4c00h ; stoppa l'interrupt (simile ad un return). int 21h ; subroutine getc - attende per l'inserimento di un carattere da tastiera con eco. getc: mov ah, 1h int 21h ret ; subroutine putc putc: mov ah, 2h ; inseriamo in ah il comando da passare all'interrupt, 2h stampa il carattere contenuto in dl int 21h ret ; subroutine puts che serve a stampare la stringa (9h pesca la stringa da ds : dx / data segment: indirizzo. puts: mov ah, 9h ; stampa la stringa tramite la funzione 9h che inseriamo in ah per poter inviare il comando all'interrupt. int 21h ret ; subroutine put1310 - serve and andare a capo, stampando i caratteri LF e CR (codice ascii: rispettivamente 13 e 10) put1310: mov dl, 13d mov ah, 2h int 21h mov dl, 10d mov ah, 2h int 21h ret end start

Commenti