[Progetto] [Olifant] programma antifurto pc!

Iniziative e progetti della comunità legati a Ubuntu.
Regole della sezione
Questa sezione ha lo scopo di raccogliere le iniziative/progetti della nostra Comunità legati ad Ubuntu. I progetti ospitati nascono da iniziative degli utenti o gruppi di utenti. In futuro i progetti potrebbero rimanere iniziative "personali" o essere integrate nella distribuzione, sponsorizzate da Ubuntu o da Canonical a discrezione dei responsabili. All'interno di essa sarà possibile inserire delle discussioni che hanno la funzione di pubblicizzare avvenimenti, iniziative e progetti software su Ubuntu e GNU/Linux in generale. Sarà inoltre possibile per gli utenti proporre lo sviluppo di nuovi software e in questo caso la discussione di richiesta avrà la funzione di generare un requisito funzionale del prodotto da sviluppare.

Sezione I - Iniziative
  • Fanno parte di iniziative, ad esempio, le seguenti categorie: corsi, progetti editoriali, libri.
  • La segnalazione di un'iniziativa avviene creando una discussione con l'annuncio.
  • Una volta effettuata la segnalazione, la discussione viene chiusa dal Gruppo Forum.
  • Se l'iniziativa esposta comporta un costo di adesione o fruizione, questo deve essere esplicitamente riportato all'interno della discussione.
  • È obbligatorio segnalare all'interno della discussione i riferimenti per poter contattare/partecipare all'iniziativa.
Sezione II - Progetti
  • La segnalazione di un progetto software, come per le iniziative, avviene e si sviluppa all'interno di una singola discussione.
  • Sarà consentito l'inserimento di software solo se rilasciati sotto licenza GPL (in tutte le sue versioni) o equivalente FOSS, tale da garantire agli utenti l'utilizzo del prodotto senza restrizioni e agli sviluppatori la proprietà intellettuale del codice prodotto.
  • Nell'oggetto della discussione dovrà essere riportata la categoria (es. [Iniziativa], [Progetto] o [Proposta]) e una semplice descrizione del progetto.
  • Se il progetto ha già un sito che lo ospita sarà a discrezione del Gruppo Forum chiuderla come segnalazione o lasciarla aperta.
  • Se il progetto non ha un sito che lo ospita si potranno aprire due discussioni, una per proporre modifiche/implementazioni (dove nel titolo occorre specificare [sviluppo]) ed una per segnalare problemi (e nel titolo dovrà comparire [supporto]).
  • Non è consentita l'apertura di nuove discussioni in riferimento a versioni superiori o modificate di un prodotto già riportato in precedenza.
  • Se il software oggetto del progetto ha una dimensione non superiore ai 128 kB, per prodotti che non hanno un sito che li ospita, sarà possibile allegarlo alla discussione.
Sezione III - Proposte
  • Una proposta deve essere eseguita e si svilupperà all'interno di una singola discussione.
  • Le proposte dovranno essere inserite direttamente nella sezione "Progetti della Comunità".
  • Dovranno essere specificate le funzionalità che devono essere sviluppate.
  • Non dovranno essere riportate diciture tipo "...deve fare come questo software...", ma indicare nel miglior modo possibile i requisiti.
  • Una volta segnalata la discussione resterà aperta per consentire uno scambio di idee su come sviluppare il codice o finché gli sviluppatori non forniranno una soluzione (da pubblicizzare poi, come visto prima, nella sezione Progetti) che ne soddisfi il requisito.
Per quanto non esposto sopra, si fa comunque riferimento al Regolamento del forum ed al Codice di Condotta della Comunità.
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

E certo che non funziona! conf_passwd non lo aggiorni da nessuna parte! Dovresti controllare quale casella è in focus, e impostare la variabile corrispondente. Comunque secondo me è meglio una stringa: per aggiungere una lettera anziché "append" usi variabile += lettera, per toglierla usi variabile = variabile[:-1].
Ho trovato l'inghippo:

Codice: Seleziona tutto

		self.focus.SetValue(''.join(self.passwd))
Ecco perché aggiungeva roba di passwd nella seconda casella :-p
Comunque, come controllo qual'è la casella che ha il focus? :-)
Ho trasformato le liste in stringhe, rimuovendo gli append :sisi:
Questo codice è parecchio ridondante: crei una lista e poi imposti tutti i callback e gli attributi con un ciclo for.
C'è un problema: questa parte di codice la crea wxglade. Quindi, quando faccio modifiche in wxglade, il codice modificato manualmente viene sovrascritto :(
Le keywords "elif" escludono le precedenti: se consideri prima il caso DEL, poi ENTER, puoi usare else per considerare tutti gli altri casi e cioè i numeri ;)
Non capisco: qui si vogliono differenziare tre casi, non due (numeri e non numeri) :nono:
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422550#p4422550][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
E certo che non funziona! conf_passwd non lo aggiorni da nessuna parte! Dovresti controllare quale casella è in focus, e impostare la variabile corrispondente. Comunque secondo me è meglio una stringa: per aggiungere una lettera anziché "append" usi variabile += lettera, per toglierla usi variabile = variabile[:-1].
Ho trovato l'inghippo:

Codice: Seleziona tutto

		self.focus.SetValue(''.join(self.passwd))
Ecco perché aggiungeva roba di passwd nella seconda casella :-p
Comunque, come controllo qual'è la casella che ha il focus? :-)
Ho trasformato le liste in stringhe, rimuovendo gli append :sisi:
Beh questo non lo so... controlla se esiste qualche evento "on_focus"...
cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422550#p4422550][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Questo codice è parecchio ridondante: crei una lista e poi imposti tutti i callback e gli attributi con un ciclo for.
C'è un problema: questa parte di codice la crea wxglade. Quindi, quando faccio modifiche in wxglade, il codice modificato manualmente viene sovrascritto :(
Le keywords "elif" escludono le precedenti: se consideri prima il caso DEL, poi ENTER, puoi usare else per considerare tutti gli altri casi e cioè i numeri ;)
Non capisco: qui si vogliono differenziare tre casi, non due (numeri e non numeri) :nono:
Infatti gli i casi sono 3: DEL, ENTER, numeri. Comunque come ho già detto è pura pignoleria, se funziona lascia stare com'è ;)
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Beh questo non lo so... controlla se esiste qualche evento "on_focus"...
L'evento focus sulle textbox c'è anche, ma come lo gestisco? :)
Infatti gli i casi sono 3: DEL, ENTER, numeri. Comunque come ho già detto è pura pignoleria, se funziona lascia stare com'è ;)
Ho modificato la struttura come mi hai suggerito:

Codice: Seleziona tutto

	if button == 'DEL' and (len(self.passwd)>0):
		self.passwd = self.passwd[:-1]
		self.focus.SetValue(''.join(self.passwd))
	elif button == 'ENABLE':
		self.Close()
	else:
		self.passwd += button
		self.focus.SetValue(''.join(self.passwd))
È corretto? :)
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422577#p4422577][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Beh questo non lo so... controlla se esiste qualche evento "on_focus"...
L'evento focus sulle textbox c'è anche, ma come lo gestisco? :)
Infatti gli i casi sono 3: DEL, ENTER, numeri. Comunque come ho già detto è pura pignoleria, se funziona lascia stare com'è ;)
Ho modificato la struttura come mi hai suggerito:

Codice: Seleziona tutto

	if button == 'DEL' and (len(self.passwd)>0):
		self.passwd = self.passwd[:-1]
		self.focus.SetValue(''.join(self.passwd))
	elif button == 'ENABLE':
		self.Close()
	else:
		self.passwd += button
		self.focus.SetValue(''.join(self.passwd))
È corretto? :)
Io direi di annidare un altro if nel primo caso, altrimenti else considera anche il caso nel quale il pulsante sia DEL ma la lunghezza sia minore o uguale a zero.

Codice: Seleziona tutto

	if button == 'DEL':
		if len(self.passwd) > 0
			self.passwd = self.passwd[:-1]
			self.focus.SetValue(''.join(self.passwd))
	elif button == 'ENABLE':
		self.Close()
	else:
		self.passwd += button
		self.focus.SetValue(''.join(self.passwd))
Ma ripeto andava bene anche com'era prima :)
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Io direi di annidare un altro if nel primo caso, altrimenti else considera anche il caso nel quale il pulsante sia DEL ma la lunghezza sia minore o uguale a zero.
Fatto :)

Comunque, resta il problema della password di conferma :(
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422687#p4422687][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Io direi di annidare un altro if nel primo caso, altrimenti else considera anche il caso nel quale il pulsante sia DEL ma la lunghezza sia minore o uguale a zero.
Fatto :)

Comunque, resta il problema della password di conferma :(
Possibile che wxpython non abbia qualcosa per vedere quale casella di testo è in focus? Anche Kivy ce l'ha, anche se non ha il concetto di widget in focus o no...
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Davideddu [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422862#p4422862][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422687#p4422687][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Io direi di annidare un altro if nel primo caso, altrimenti else considera anche il caso nel quale il pulsante sia DEL ma la lunghezza sia minore o uguale a zero.
Fatto :)

Comunque, resta il problema della password di conferma :(
Possibile che wxpython non abbia qualcosa per vedere quale casella di testo è in focus? Anche Kivy ce l'ha, anche se non ha il concetto di widget in focus o no...
Quale metodo utilizzi? :)
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4423098#p4423098][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Davideddu [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422862#p4422862][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4422687#p4422687][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Io direi di annidare un altro if nel primo caso, altrimenti else considera anche il caso nel quale il pulsante sia DEL ma la lunghezza sia minore o uguale a zero.
Fatto :)

Comunque, resta il problema della password di conferma :(
Possibile che wxpython non abbia qualcosa per vedere quale casella di testo è in focus? Anche Kivy ce l'ha, anche se non ha il concetto di widget in focus o no...
Quale metodo utilizzi? :)
Su Kivy c'è il concetto delle proprietà. dei normali oggetti Python che però diventano automaticamente degli EventDispatcher di Kivy, e come tali è possibile rilevarne il cambiamento e collegarlo a un callback. Le caselle di testo (solo quelle) hanno la proprietà "focus", che può essere True o False.
Su GTK invece mi pare che ci fossero dei metodi get/set_focus, però non sono sicuro.

Controlla bene...


EDIT: ma io te le devo cercare le cose? :)
Guarda qua: http://wxpython.org/docs/api/wx.Window- ... #FindFocus

Quando un oggetto deriva da un altro, controlla bene anche i metodi del genitore :)
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Su Kivy c'è il concetto delle proprietà. dei normali oggetti Python che però diventano automaticamente degli EventDispatcher di Kivy, e come tali è possibile rilevarne il cambiamento e collegarlo a un callback. Le caselle di testo (solo quelle) hanno la proprietà "focus", che può essere True o False.
Su GTK invece mi pare che ci fossero dei metodi get/set_focus, però non sono sicuro.
L'ho domandato perché avrei cercato un metodo analogo a quello utilizzato da te :)
EDIT: ma io te le devo cercare le cose? :)
Guarda qua: http://wxpython.org/docs/api/wx.Window- ... #FindFocus
A dir la verità, non avevo pensato a una cosa del genere :shy:

Comunque, ho fatto delle modifiche al codice:

Codice: Seleziona tutto

    def __onKeyClick(self,evt):
	button = (evt.GetEventObject()).Label
	self.focus = self.FindFocus()
	passwd = self.focus.GetValue()
	if button == 'DEL':
	   if len(passwd) > 0:
		passwd = self.passwd[:-1]
		self.focus.SetValue(passwd)
	elif button == 'ENABLE':
	   self.Close()
	else:
	   self.passwd += button
	   self.focus.SetValue(passwd)
ma c'è un problema:

Codice: Seleziona tutto

Traceback (most recent call last):
  File "gui.py", line 278, in __onKeyClick
    passwd = self.focus.GetValue()
AttributeError: 'Button' object has no attribute 'GetValue'
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4423399#p4423399][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Su Kivy c'è il concetto delle proprietà. dei normali oggetti Python che però diventano automaticamente degli EventDispatcher di Kivy, e come tali è possibile rilevarne il cambiamento e collegarlo a un callback. Le caselle di testo (solo quelle) hanno la proprietà "focus", che può essere True o False.
Su GTK invece mi pare che ci fossero dei metodi get/set_focus, però non sono sicuro.
L'ho domandato perché avrei cercato un metodo analogo a quello utilizzato da te :)
EDIT: ma io te le devo cercare le cose? :)
Guarda qua: http://wxpython.org/docs/api/wx.Window- ... #FindFocus
A dir la verità, non avevo pensato a una cosa del genere :shy:

Comunque, ho fatto delle modifiche al codice:

Codice: Seleziona tutto

    def __onKeyClick(self,evt):
	button = (evt.GetEventObject()).Label
	self.focus = self.FindFocus()
	passwd = self.focus.GetValue()
	if button == 'DEL':
	   if len(passwd) > 0:
		passwd = self.passwd[:-1]
		self.focus.SetValue(passwd)
	elif button == 'ENABLE':
	   self.Close()
	else:
	   self.passwd += button
	   self.focus.SetValue(passwd)
ma c'è un problema:

Codice: Seleziona tutto

Traceback (most recent call last):
  File "gui.py", line 278, in __onKeyClick
    passwd = self.focus.GetValue()
AttributeError: 'Button' object has no attribute 'GetValue'
http://wxpython.org/docs/api/wx.FocusEvent-class.html

Crea l'attributo focus nel tuo oggetto e mettici di default la prima casella. Collega l'evento sopra a entrambe le caselle e una funzione che modifica l'attributo focus e ci mette la casella attualmente in focus. Poi dovrebbe funzionare.
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Ho risolto il problema eliminando la riga:

Codice: Seleziona tutto

   self.focus = self.FindFocus()
Quando faccio clic sul pulsante 'ENABLE', nel terminale appare il messaggio:
Failed acquiring exclusive lock on keyboard
e si attiva l'allarme :sisi:
A quel punto, faccio clic sul pulsante 'Unlock' e digito la password nel tastierino della finestra che appare ;)
Ma se poi faccio clic sul pulsante 'DISABLE', il programma crasha :o

Edit: quando ho inviato questo messaggio, mi è apparso il tuo post, ma era troppo tardi :shy:
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Sono riuscito a rintracciare il messaggio di errore, che si trova nel seguente blocco, presente in DeviceLocker.cpp:

Codice: Seleziona tutto

				}else if(isThisDevice(fdev,KEYBOARD_NAME,KEYBOARD_PHYS)){
					key_dev = fdev;
					res = ioctl(key_dev, EVIOCGRAB, 1);
					if(res < 0)
						cerr << "Failed acquiring exclusive lock on keyboard\n";
					
					fdev = -1;
					
				}
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4425663#p4425663][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Sono riuscito a rintracciare il messaggio di errore, che si trova nel seguente blocco, presente in DeviceLocker.cpp:

Codice: Seleziona tutto

				}else if(isThisDevice(fdev,KEYBOARD_NAME,KEYBOARD_PHYS)){
					key_dev = fdev;
					res = ioctl(key_dev, EVIOCGRAB, 1);
					if(res < 0)
						cerr << "Failed acquiring exclusive lock on keyboard\n";
					
					fdev = -1;
					
				}
Che cos'è il formato CPP? Hai una parte del programma scritto in un altro linguaggio non-python?
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Che cos'è il formato CPP? Hai una parte del programma scritto in un altro linguaggio non-python?
Sì, fa parte di libpower che crea un file .so, il quale serve al programma ;)
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4425723#p4425723][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Che cos'è il formato CPP? Hai una parte del programma scritto in un altro linguaggio non-python?
Sì, fa parte di libpower che crea un file .so, il quale serve al programma ;)
Se hai qualche problema con Python, o al massimo con Bash, allora ti posso aiutare, ma non cercarmi altri linguaggi di programmazione o librerie condivise perché non ci capisco una mazza! :D
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Ho cercato di ricostruire la catena di esecuzione e ho studiato un altro po' di codice :sisi:

Nel metodo lock del file olifant.py, è presente:

Codice: Seleziona tutto

		self.__device_locker.active_lock_devices() #will disable power button/keyboard/lid and check if power button is pressed
Ora, se apro il file olifantDeviceLock.py, trovo:

Codice: Seleziona tutto

	def active_lock_devices(self):
		"""
		Same of lock_devices but blocks until power button is pressed,
		useful to detect pressing: when button is pressed wasButtonPressed
		function will return true (power button will still be disabled
		untile unlock)
		"""
		pt = self._PowerThread(self)
		pt.start()
il quale mi rimanda alla classe _PowerThread:

Codice: Seleziona tutto

	class _PowerThread(threading.Thread):

		def __init__(self,powerLock):
			threading.Thread.__init__(self)
			self.power = powerLock

		def run(self):
			self.power._thread_run()
ma non mi è chiaro, effettivamente, cosa succede :shy:
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4427202#p4427202][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Ho cercato di ricostruire la catena di esecuzione e ho studiato un altro po' di codice :sisi:

Nel metodo lock del file olifant.py, è presente:

Codice: Seleziona tutto

		self.__device_locker.active_lock_devices() #will disable power button/keyboard/lid and check if power button is pressed
Ora, se apro il file olifantDeviceLock.py, trovo:

Codice: Seleziona tutto

	def active_lock_devices(self):
		"""
		Same of lock_devices but blocks until power button is pressed,
		useful to detect pressing: when button is pressed wasButtonPressed
		function will return true (power button will still be disabled
		untile unlock)
		"""
		pt = self._PowerThread(self)
		pt.start()
il quale mi rimanda alla classe _PowerThread:

Codice: Seleziona tutto

	class _PowerThread(threading.Thread):

		def __init__(self,powerLock):
			threading.Thread.__init__(self)
			self.power = powerLock

		def run(self):
			self.power._thread_run()
ma non mi è chiaro, effettivamente, cosa succede :shy:
Immagino tu ti riferisca al thread: eseguendo pt = self._PowerThread(self) viene eseguita la funzione __init__ dell'oggetto _PowerThread, eseguendo pt.start() il thread diventa effettivamente un thread e viene eseguita la funzione run. Comunque non mi è chiaro perché definisci una classe dentro una classe e perché metti dappertutto il "_" iniziale. Quello dovresti metterlo solo per le funzioni "di servizio", che serviranno solo all'interno dell'oggetto e che a nessuno servirà al di fuori di li (es. un calcolo particolare che è particolare per quell'oggetto).
In ogni caso per convenzione/abitudine non si inseriscono mai undescore nei nomi degli oggetti, che sono sempre parole le cui iniziali sono sempre maiuscole (PowerLock, PowerThread, HBox, FloatLayout, AsyncImage, ecc...) e invece i trattini si usano solo nelle funzioni (on_certain_event, lock_devices, ecc...)
I trattini iniziali, come ho già detto si usano solo in casi particolari: guarda per esempio le funzioni delle liste: troverai roba tipo __delitem__, ecc: tutta roba che non devi usare, dovresti usare invece "remove" o "pop"; il fatto che i trattini siano doppi e anche alla fine rafforzano questo concetto ;)

P.S. Ignora, se vuoi, le mie solite pignolerie :D Comunque è chiaro cosa avviene avviando il thread? Tutto quello che deve essere in background lo devi mettere in run; quello che metti in __init__ viene eseguito normalmente quando istanzi il thread. Per capirci, se metti time.sleep(10) in __init__ nel thread o all'inizio di active_lock_devices il programma si blocca in entrambi i casi per 10 secondi, mentre se lo metti in run si blocca solo il thread, e l'eventuale codice che metti dopo pt.start() viene eseguito anche se il thread sta aspettando. Chiaro? :)
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Immagino tu ti riferisca al thread: eseguendo pt = self._PowerThread(self) viene eseguita la funzione __init__ dell'oggetto _PowerThread, eseguendo pt.start() il thread diventa effettivamente un thread e viene eseguita la funzione run. Comunque non mi è chiaro perché definisci una classe dentro una classe e perché metti dappertutto il "_" iniziale. Quello dovresti metterlo solo per le funzioni "di servizio", che serviranno solo all'interno dell'oggetto e che a nessuno servirà al di fuori di li (es. un calcolo particolare che è particolare per quell'oggetto).
In ogni caso per convenzione/abitudine non si inseriscono mai undescore nei nomi degli oggetti, che sono sempre parole le cui iniziali sono sempre maiuscole (PowerLock, PowerThread, HBox, FloatLayout, AsyncImage, ecc...) e invece i trattini si usano solo nelle funzioni (on_certain_event, lock_devices, ecc...)
I trattini iniziali, come ho già detto si usano solo in casi particolari: guarda per esempio le funzioni delle liste: troverai roba tipo __delitem__, ecc: tutta roba che non devi usare, dovresti usare invece "remove" o "pop"; il fatto che i trattini siano doppi e anche alla fine rafforzano questo concetto ;-)
Credo che l'autore abbia scelto di usare gli underscore perché si tratta di attributi della classe :)
P.S. Ignora, se vuoi, le mie solite pignolerie :D Comunque è chiaro cosa avviene avviando il thread? Tutto quello che deve essere in background lo devi mettere in run; quello che metti in __init__ viene eseguito normalmente quando istanzi il thread. Per capirci, se metti time.sleep(10) in __init__ nel thread o all'inizio di active_lock_devices il programma si blocca in entrambi i casi per 10 secondi, mentre se lo metti in run si blocca solo il thread, e l'eventuale codice che metti dopo pt.start() viene eseguito anche se il thread sta aspettando. Chiaro? :-)
Ok, ma non mi è chiaro se start esegua automaticamente il metodo run oppure fa qualcos'altro. Avevo controllato anche la doc di python ma non ho risolto il dubbio :)
Poi, da quel che ho capito, active_lock_devices dovrebbe semplicemente creare un nuovo thread ed avviarlo. Oppure sbaglio e fa anche altro? :shy:
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Avatar utente
davideddu
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1546
Iscrizione: martedì 2 novembre 2010, 20:35
Desktop: Unity
Distribuzione: Ubuntu 14.04 AMD64
Località: Pennsylvania, Stati Uniti
Contatti:

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da davideddu »

cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4427779#p4427779][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:
Immagino tu ti riferisca al thread: eseguendo pt = self._PowerThread(self) viene eseguita la funzione __init__ dell'oggetto _PowerThread, eseguendo pt.start() il thread diventa effettivamente un thread e viene eseguita la funzione run. Comunque non mi è chiaro perché definisci una classe dentro una classe e perché metti dappertutto il "_" iniziale. Quello dovresti metterlo solo per le funzioni "di servizio", che serviranno solo all'interno dell'oggetto e che a nessuno servirà al di fuori di li (es. un calcolo particolare che è particolare per quell'oggetto).
In ogni caso per convenzione/abitudine non si inseriscono mai undescore nei nomi degli oggetti, che sono sempre parole le cui iniziali sono sempre maiuscole (PowerLock, PowerThread, HBox, FloatLayout, AsyncImage, ecc...) e invece i trattini si usano solo nelle funzioni (on_certain_event, lock_devices, ecc...)
I trattini iniziali, come ho già detto si usano solo in casi particolari: guarda per esempio le funzioni delle liste: troverai roba tipo __delitem__, ecc: tutta roba che non devi usare, dovresti usare invece "remove" o "pop"; il fatto che i trattini siano doppi e anche alla fine rafforzano questo concetto ;-)
Credo che l'autore abbia scelto di usare gli underscore perché si tratta di attributi della classe :)
P.S. Ignora, se vuoi, le mie solite pignolerie :D Comunque è chiaro cosa avviene avviando il thread? Tutto quello che deve essere in background lo devi mettere in run; quello che metti in __init__ viene eseguito normalmente quando istanzi il thread. Per capirci, se metti time.sleep(10) in __init__ nel thread o all'inizio di active_lock_devices il programma si blocca in entrambi i casi per 10 secondi, mentre se lo metti in run si blocca solo il thread, e l'eventuale codice che metti dopo pt.start() viene eseguito anche se il thread sta aspettando. Chiaro? :-)
Ok, ma non mi è chiaro se start esegua automaticamente il metodo run oppure fa qualcos'altro. Avevo controllato anche la doc di python ma non ho risolto il dubbio :)
Sì certo che la avvia! Fa tutta la roba che serve per staccare il thread dal processo principale e avvia run.
cristian_c [url=http://forum.ubuntu-it.org/viewtopic.php?p=4427779#p4427779][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Poi, da quel che ho capito, active_lock_devices dovrebbe semplicemente creare un nuovo thread ed avviarlo. Oppure sbaglio e fa anche altro? :shy:
Da quel che mi hai postato pare che faccia solo quello...
Computer HP Probook 4510s CPU Intel Pentium Dual-Core T4400 Video Intel GMA 4500 Tablet ASUS Nexus 7 2013 (Wi-Fi)
Homepage - GitHub - Dropbox Referral - Copy Referral
Capisci di usare troppi editor di testo quando, cadendoti mezzo chilo di zucchero nel caffè, cerchi disperatamente di premere Ctrl+Z per rimediare... :D
Avatar utente
cristian_c
Accecante Asceta
Accecante Asceta
Messaggi: 23422
Iscrizione: lunedì 29 ottobre 2007, 11:31

Re: [Progetto] [Olifant] programma antifurto pc!

Messaggio da cristian_c »

Scrivo soltanto per segnalare che sono riuscito a individuare l'errore relativo al messaggio postato in precedenza. Usando perror e strerror, ottengo:

Codice: Seleziona tutto

The following error occurred: Dispositivo o risorsa occupata
errno = 16, 'Dispositivo o risorsa occupata'
che dovrebbe corrispondere a un EBUSY :sisi:
UP! Unreal Project: il futuro inizia qui. Crusade è tra noi
È scienza!
Scrivi risposta

Ritorna a “Progetti della Comunità”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti