View Full Version : [python] bot
ratman511
22-02-2010, 21:20
salve a tutti,
ho visto alcuni bot in irc che sono collegati come normali utenti, ma quando scrivi il loro nome in una frase e usi magari parole particolari ti rispondono.
tipo: "ciao nome_bot che TEMPO fa oggi?"
e potrebbe rispondere "non ho l'orologio" oppure "qua c'è sempre un tempo schifoso".
ora, da dove potrei iniziare a fare una cosa simile?
p.s. come è possibile, in una notte, imparare perl, un pò di espressioni regolari e fare un bot funzionante?
salve a tutti,
ho visto alcuni bot in irc che sono collegati come normali utenti, ma quando scrivi il loro nome in una frase e usi magari parole particolari ti rispondono.
tipo: "ciao nome_bot che TEMPO fa oggi?"
e potrebbe rispondere "non ho l'orologio" oppure "qua c'è sempre un tempo schifoso".
ora, da dove potrei iniziare a fare una cosa simile?
p.s. come è possibile, in una notte, imparare perl, un pò di espressioni regolari e fare un bot funzionante?
non è possibile.
...
hai già basi di programmazione?
ratman511
22-02-2010, 22:56
eppure un ragazzo che conosco c'è riuscito.
comunque non ho basi di programmazione, ho iniziato qualche mese fa con java e poi sono passato a python, l'ho studiato per bene e vorrei fare un piccolo bot che faccia almeno quelle cose, ma non so da dove partire.
eppure un ragazzo che conosco c'è riuscito.
comunque non ho basi di programmazione, ho iniziato qualche mese fa con java e poi sono passato a python, l'ho studiato per bene e vorrei fare un piccolo bot che faccia almeno quelle cose, ma non so da dove partire.
perchè non lo fai in python allora?
non sono neanch'io un esperto ma a naso penso che come prima cosa dovresti implementare il protocollo IRC nella tua applicazione (sicuramente esistono librerie già fatte), poi una volta connesso fargli parsare ogni frase e reagire a determinate keywords
banryu79
23-02-2010, 09:02
p.s. come è possibile, in una notte, imparare perl, un pò di espressioni regolari e fare un bot funzionante?
E' possibile se il soggetto è già un programmatore con esperienza in altri linguaggi.
Se parte da zero con la programmazione in generale, resta la possibilità del copia-incolla...
ratman511
23-02-2010, 11:25
perchè non lo fai in python allora?
infatti lo voglio fare in python.
non sono neanch'io un esperto ma a naso penso che come prima cosa dovresti implementare il protocollo IRC nella tua applicazione (sicuramente esistono librerie già fatte), poi una volta connesso fargli parsare ogni frase e reagire a determinate keywords
eh lo so, ma non so come codificarlo.
E' possibile se il soggetto è già un programmatore con esperienza in altri linguaggi.
Se parte da zero con la programmazione in generale, resta la possibilità del copia-incolla...
si ha esperienza, ma come è possibile una cosa del genere?
banryu79
23-02-2010, 11:50
si ha esperienza, ma come è possibile una cosa del genere?
Beh, se già programmi da anni ad imparare la sintassi di un nuovo linguaggio di programmazione ci metti poco; le regular expression già le conosci (non sono un'esclusiva di Perl) e la logica per fare un bot (e qui bisogna vedere che tipo di bot, quanto complesso, magari è una minchiata) semplice la esamini e implementi in un tempo relativamente breve (magari aveva qualche conoscenza già acquisita che ha potuto riciclare per affrontare il problema).
Quindi date le premesse e considerato che una nottata si estende tranquillamente su arco di 8 ore non vedo perchè non avrebbe dovuto farcela.
ratman511
23-02-2010, 12:58
Beh, se già programmi da anni ad imparare la sintassi di un nuovo linguaggio di programmazione ci metti poco; le regular expression già le conosci (non sono un'esclusiva di Perl) e la logica per fare un bot (e qui bisogna vedere che tipo di bot, quanto complesso, magari è una minchiata) semplice la esamini e implementi in un tempo relativamente breve (magari aveva qualche conoscenza già acquisita che ha potuto riciclare per affrontare il problema).
Quindi date le premesse e considerato che una nottata si estende tranquillamente su arco di 8 ore non vedo perchè non avrebbe dovuto farcela.
ho solo detto che è incredibile che parte senza conoscere perl e dopo una notte fa un bot. tutto qua. io non ne sarei capace.
qualcuno mi può aiutare? vorrei iniziare come prima cosa a stabilire la connessione con il serve, ed entrare nel canale con un nick. da dove dovrei iniziare?
MadJackal
23-02-2010, 14:54
ho solo detto che è incredibile che parte senza conoscere perl e dopo una notte fa un bot. tutto qua. io non ne sarei capace.
qualcuno mi può aiutare? vorrei iniziare come prima cosa a stabilire la connessione con il serve, ed entrare nel canale con un nick. da dove dovrei iniziare?
Mi pare che in Perl ci sia una libreria tipo Net::IRC che gestisce praticamente tutto a riguardo, quindi facendolo così è mooolto semplice. E perl, ad un livello base, non è molto diverso da altri linguaggi (più o meno :asd:)
In teoria, dovresti iniziare dalla descrizione del protocollo IRC (http://www.irchelp.org/irchelp/rfc/rfc.html).
Poi in giro ci sono librerie come python-irclib (http://sourceforge.net/projects/python-irclib/) per comunicare con i server IRC.
Se vuoi fare tutto a mano la cosa è un pò più complessa, ma comunque google può darti una mano :P
banryu79
23-02-2010, 15:59
ho solo detto che è incredibile che parte senza conoscere perl e dopo una notte fa un bot. tutto qua. io non ne sarei capace.
Non è detto che le cose siano andate come te le ho descritte io; ho solo tentato di fare un'ipotesi sensata per rispondere alla tua domanda/curiosità, nel tentativo di "demistificare" la cosa per farti capire che dietro non c'è nulla di "magico", ne occorrono particolari doti di genialità...
Quello che sicuramente occorre è una forte volontà/motivazione, una buona capacità di concentrazione, e una moka di ottimo caffè (oppure l'insonnia, se si ha sfiga) :D
P.S.:
Come ha fatto notare MadJackal, occorre anche una certa conoscenza del protocollo IRC, cosa che probabilmente quel tizio già conosceva: a quel punto imparare "al volo" la sintassi di Perl e l'uso di una specifica libreria per interfacciarsi con IRC e scrivere il suo bot può essere si benissimo il lavoro di una nottata.
yorkeiser
23-02-2010, 16:34
C'è anche da dire che esistono bot e bot.
C'è il bot giocattolo che quando pronunci il suo nome in canale se ne esce con una frase a caso (la cui programmazione, per una persona minimamente skillata, è banale) e quelli seri che gestiscono la catena della botnet, la lista degli utenti, degli operatori, dei ban, si sincronizzano, si "rioppano" in caso di split di qualche server, si "difendono" gli uni con gli altri, e svariate altre funzionalità.
Ai miei tempi si bazzicava solo su IRC (non esistevano msn, facebook e ammennicoli odierni, e lo rimpiango sinceramente) e giravano botnet spaventose, anche di 2/300 bot (botnet=in parole povere, insiemi di bot che lavorano insieme nella gestione di più canali, autoriconoscendosi e difendendosi da eventuali attacchi gli uni con gli altri, il tutto ovviamente in automatico).
Ecco, per programmare qualcosa del genere ci vuola qualcosa di più di una nottata :)
banryu79
23-02-2010, 16:51
Ecco, per programmare qualcosa del genere ci vuola qualcosa di più di una nottata :)
Ah, dettagli interessanti, non ne sapevo niente dato che di chat ho esperienza zero su tutti i fronti.
ratman511
23-02-2010, 17:26
In teoria, dovresti iniziare dalla descrizione del protocollo IRC.
Poi in giro ci sono librerie come python-irclib per comunicare con i server IRC.
Se vuoi fare tutto a mano la cosa è un pò più complessa, ma comunque google può darti una mano :P
se ci sono le librerie pronte a che mi serve leggere la descrizione del protocollo? io però volevo provare a farlo a mano, con i socket. ci ho provato un pò, ma non funziona e non so perchè.
Come ha fatto notare MadJackal, occorre anche una certa conoscenza del protocollo IRC, cosa che probabilmente quel tizio già conosceva: a quel punto imparare "al volo" la sintassi di Perl e l'uso di una specifica libreria per interfacciarsi con IRC e scrivere il suo bot può essere si benissimo il lavoro di una nottata.
se uno usa le librerie a che serve conoscere il protocollo?
C'è il bot giocattolo che quando pronunci il suo nome in canale se ne esce con una frase a caso (la cui programmazione, per una persona minimamente skillata, è banale)
io voglio fare un bot cosi, ma evidentemente non sono nemmeno minimamente skillato visto che per me non è proprio una cosa banale :(
Ryuzaki_Eru
23-02-2010, 17:38
e quelli seri che gestiscono la catena della botnet, la lista degli utenti, degli operatori, dei ban, si sincronizzano, si "rioppano" in caso di split di qualche server, si "difendono" gli uni con gli altri, e svariate altre funzionalità.
Ai miei tempi si bazzicava solo su IRC (non esistevano msn, facebook e ammennicoli odierni, e lo rimpiango sinceramente) e giravano botnet spaventose, anche di 2/300 bot (botnet=in parole povere, insiemi di bot che lavorano insieme nella gestione di più canali, autoriconoscendosi e difendendosi da eventuali attacchi gli uni con gli altri, il tutto ovviamente in automatico).
Ecco, per programmare qualcosa del genere ci vuola qualcosa di più di una nottata :)
Credo proprio che l'autore non si riferisse a questo genere di bot :)
Questi sono lavori *enormi* da fare e si devono avere determinate conoscenze oltretutto. Ed esperienza, ovviamente.
banryu79
23-02-2010, 17:44
se uno usa le librerie a che serve conoscere il protocollo?
Non so se ti ricordi che tempo (mesi) fa ci siamo scambiati qualche pvt; in uno di questi ti spiegavo come la conoscenza del dominio del problema che si sta affrontando sia un aspetto critico, oltre che per implementare una soluzione completamente "a mano", anche per l'uso di eventuali librerie che trattino uno o tutti gli aspetti del problema.
Un protocollo stabilisce le regole di una comunicazione; conoscerlo è indispensabile per implementare la comunicazione, oppure per usare le librerie associate.
Un esempio banale: se non sai che nel protocollo FTP i canali di comunicazione sono due (uno per i comandi, l'altro per il trasferimento vero e proprio dei dati) non riesci a capire come mai la tal libreria X ti metta a disposizione un "client FTP" per comunicare con un host remoto e questo non ti permetta di trasferire più di un file alla volta neppure usando più thread con lo stesso client (perchè il "client FTP" implementato in quella libreria ha associato un solo canale di comunicazione e un solo canale di trasferimento dati).
Oppure potresti vedere cadere la connessione nel tuo applicativo, non sapendo che alcuni server chiudono unilateralmente la connessione con il client se questo rimane inattivo per un certo tempo, e allo scopo il protocolo FTP fornisce un comando "noop" (no operation) che può essere usato solo per testare se la connessione è ancora viva e per mantenerla tale...
Se il protocollo con cui devi avere a che fare è relativamente poco complesso e la libreria che usi è ben documentata puoi anche pensare di iniziare studiando la libreria e espandere le tue conocsenze del protocollo in dettaglio in seguito.
Dipende sempre da cosa devi fare e con cosa devi avere a che fare.
Per IRC non so aiutarti.
ratman511
23-02-2010, 18:02
non ho capito bene il discorso di poter inviare un solo file alla volta, ma comunque ho capito il tuo discorso e hai ragione, ma io devo fare davvero poche cose, solo per divertirmi e fare pratica. se non faccio pratica non imparo. siccome uso irc so qualcosina e se ci sono le librerie basta leggere la doc e fare qualche prova. solo che quella libreria che hanno linkato prima è per python 2.4 o inferiore e altre librerie non ne trovo. non so quindi come fare a mano il tutto, con i socket, anche perchè ho trovato dei codici in rete che usano i socket, ma non funzionano per niente.
edit: mi ha risposto chi ha fatto il bot, mi ha detto che lo ha fatto a mano perchè le operazioni che fa sono poche e non ha letto le specifiche del protocollo irc. ora vorrei farlo pure io. spero mi possa aiutare qualcuno.
wingman87
23-02-2010, 18:35
Comunque che io sappia ci sono client IRC (io conosco solo mIRC, ma non è che me ne intenda, anzi...) che offrono un linguaggio di scripting con cui credo si possano scrivere anche bot.
ratman511
23-02-2010, 19:43
si lo so, ma non mi interessa questo.
allora, vi dico cosa sto provando a fare anche guardando in rete.
uso xchat di solito cosi ho preso da li le informazioni sul server, la porta dove si collega ecc. il server è freenode, la porta 8001. io creo un socket, lo collego al server e alla porta e problemi non me ne dà. dopo questo devo dirgli l'user e il nick, cosi faccio una send() inviando una stringa "USER nome_user" e un'altra send con "NICK nick". però già qua ci sono i problemi perchè dai dati che ricevo non c'è traccia dell'avvenuta "registrazione".
ratman511
23-02-2010, 20:32
bakuriu avevi ragione!! sono felicissimo! sono riuscito a collegarmi DA SOLO senza aiuto di nessuno e seguendo la rfc (grazie mad). non davo tutti i parametri ad USER. però non capisco una cosa:
Note that hostname and servername are normally ignored by the IRC server when the USER command comes from a directly connected client
io non dovrei essere un client? perchè vuole tutti questi parametri? io poi hostname e servername li ho messi a caso, che cosa rappresentano?
ora comunque ho altri problemi da risolvere. sono riuscito a collegarmi, ma il prossimo passo è tenere sempre il bot collegato e parsare tutti i messaggi. ho visto che i messaggi scritti in chan sono PRIVMSG, però la riga è confusionaria. come separo nick di chi scrive e messaggio, tralasciando tutto il resto? qualcuno mi aiuta?
wingman87
23-02-2010, 20:34
bakuriu
:sbonk:
ratman511
23-02-2010, 20:49
accidenti che idiota. scusa banryu.
allora torniamo ot dai. non capisco una cosa: ho un ciclo while che è vero fin quando una variabile data è piena, cioè riceve dati dal socket, ma dopo che mi collego e finisce di ricevere dati non si chiude mica il ciclo. non capisco perchè.
per il resto vorrei capire come parsare i messaggi. idee?
ratman511
23-02-2010, 23:56
non riesco a trovare un modo per gestire i messaggi e poterli parsare. mi serve un thread a parte? in pratica con un while tengo il socket sempre in ascolto e riceve ogni cosa, però i messaggi di accesso iniziali influiscono sui miei if. come dovrei fare?
banryu79
24-02-2010, 08:41
Guarda ratman, se vuoi aiuto specifico sul codice ti consiglio di postare il codice.
Per quanto riguarda il protocollo IRC, non ne so una ceppa; se però posti il codice e spieghi dove esattamente hai i dubbi e perchè, vedrai che se passa e ti legge uno che di IRC sa qualcosa, un aiuto concreto ti arriva :)
@EDIT:
bakuriu
Porca vacca, ora mi tocca cambiare avatar!?
:asd:
ratman511
24-02-2010, 14:54
il mio non è un problema su irc, ormai quella parte è fatta.
è un problema riguardante il socket in se e come gestire le stringhe.
non so se hai mai usato i socket, ma ho una libreria con due metodi: recv e listen. recv riceve i messaggi dal serve a cui mi collego, però il fatto è che quando non vengono scritti messaggi nella chat il ciclo non esce, quindi la recv() sta ancora ricevendo qualcosa, ma su schermo non printo nulla. come fa quindi a tenere aperto il canale? non dovrebbe essere la listen che fa questo?
CertainDeath
24-02-2010, 15:11
http://inamidst.com/phenny/
Qui trovi un bot per IRC programmato in Python, davvero ben fatto.
Prova a studiarne un pò il codice.
banryu79
24-02-2010, 15:21
il mio non è un problema su irc, ormai quella parte è fatta.
è un problema riguardante il socket in se e come gestire le stringhe.
non so se hai mai usato i socket...
No, ho letto qualcosa al proposito ma non mi sono mai interessato di socket (quindi di sostanziale non ho mai ne studiato ne realizzato nulla).
Però se di socket si tratta e stai progrmmando in Python prova a dare un'occhio a questa risorsa:
- Socket Programming HOWTO (Python) (http://docs.python.org/dev/howto/sockets.html#using-a-socket)
P.S.:
Nota che per "conversare" con un server IRC, la conoscenza dei socket da sola non basta: devi conoscere anche il protocollo IRC perchè è per esempio indispensabile per sapere "come" interpretare i dati che ti arrivano in risposta (oltre ovviamente a sapere cosa dirgli, cioè la lista di comandi che puoi dare, e il loro effetto).
ratman511
24-02-2010, 17:06
http://inamidst.com/phenny/
Qui trovi un bot per IRC programmato in Python, davvero ben fatto.
Prova a studiarne un pò il codice.
il codice non sembra complicatissimo, ma ad esempio i vari argomenti "input" non capisco cosa siano, e in più usa una sintassi mai vista. definisce le funzioni e poi fa:
funzione.qualchenome = qualcosa
che cosa significa questa sintassi? cosa fa?
Nota che per "conversare" con un server IRC, la conoscenza dei socket da sola non basta: devi conoscere anche il protocollo IRC perchè è per esempio indispensabile per sapere "come" interpretare i dati che ti arrivano in risposta (oltre ovviamente a sapere cosa dirgli, cioè la lista di comandi che puoi dare, e il loro effetto).
per questo ho l'rfc davanti.
riguardo quel codice volevo chiedere una cosa: come si fa a sviluppare una cosa simile(anche se in confronto ad altri programmi è piccolo), strutturarla in quel modo e non "confondersi", da dove partire? come ragionare? è questo che mi manca, ma ci sto provando ad imparare. anche se faccio fatica e chiunque altro lo saprebbe fare in due secondi.
cdimauro
25-02-2010, 07:21
il codice non sembra complicatissimo, ma ad esempio i vari argomenti "input" non capisco cosa siano,
Posta il codice, così possiamo commentarlo.
e in più usa una sintassi mai vista. definisce le funzioni e poi fa:
funzione.qualchenome = qualcosa
che cosa significa questa sintassi? cosa fa?
In Python qualunque dato è un oggetto, e molti di essi permettono di aggiungere arbitrariamente degli attribuiti. Le funzioni sono fra queste:
>>> def f(): pass
...
>>> dir(f)
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new__', '
__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'f
unc_name']
>>> f.a = 0
>>> dir(f)
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new__', '
__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'a', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals
', 'func_name']
>>> f.a
0
E' molto utile quando hai a che fare con dei test, ad esempio, e ti serve immagazzinare alcune informazioni utili negli oggetti testati (ad esempio il risultato atteso, che sarà poi confrontato con quello ottenuto dalla chiamata).
per questo ho l'rfc davanti.
riguardo quel codice volevo chiedere una cosa: come si fa a sviluppare una cosa simile(anche se in confronto ad altri programmi è piccolo), strutturarla in quel modo e non "confondersi", da dove partire? come ragionare? è questo che mi manca, ma ci sto provando ad imparare. anche se faccio fatica e chiunque altro lo saprebbe fare in due secondi.
Ti manca ancora la mentalità del programmatore. Hai cominciato a programmare da poco e ti stai ponendo obiettivi troppo elevati.
A mio avviso dovresti esercitarti ancora per qualche mese, e poi passare a qualche progettino più complicato, come questo bot che vorresti realizzare.
banryu79
25-02-2010, 08:13
Ti manca ancora la mentalità del programmatore. Hai cominciato a programmare da poco e ti stai ponendo obiettivi troppo elevati.
A mio avviso dovresti esercitarti ancora per qualche mese, e poi passare a qualche progettino più complicato, come questo bot che vorresti realizzare.
Straquoto.
ratman511
25-02-2010, 14:04
E' molto utile quando hai a che fare con dei test, ad esempio, e ti serve immagazzinare alcune informazioni utili negli oggetti testati (ad esempio il risultato atteso, che sarà poi confrontato con quello ottenuto dalla chiamata).
e quell'attributo dopo che lo inserisci resta o poi viene "cancellato" in automatico? comunque non vedo l'utilità nei test..mi fai un esempio?
Ti manca ancora la mentalità del programmatore. Hai cominciato a programmare da poco e ti stai ponendo obiettivi troppo elevati.
A mio avviso dovresti esercitarti ancora per qualche mese, e poi passare a qualche progettino più complicato, come questo bot che vorresti realizzare.
se non programmo come acquisisco la mentalità?c'è gente che dopo sei mesi fa cose assurde, anche prima. ci voglio riuscire anche io.
cdimauro
25-02-2010, 14:24
e quell'attributo dopo che lo inserisci resta o poi viene "cancellato" in automatico? comunque non vedo l'utilità nei test..mi fai un esempio?
Dal file di test_trace.py della suite di CPython:
# A very basic example. If this fails, we're in deep trouble.
def basic():
return 1
basic.events = [(0, 'call'),
(1, 'line'),
(1, 'return')]
[...]
class TraceTestCase(unittest.TestCase):
def compare_events(self, line_offset, events, expected_events):
events = [(l - line_offset, e) for (l, e) in events]
if events != expected_events:
self.fail(
"events did not match expectation:\n" +
"\n".join(difflib.ndiff([str(x) for x in expected_events],
[str(x) for x in events])))
def run_and_compare(self, func, events):
tracer = Tracer()
sys.settrace(tracer.trace)
func()
sys.settrace(None)
self.compare_events(func.func_code.co_firstlineno,
tracer.events, events)
def run_test(self, func):
self.run_and_compare(func, func.events)
def test_01_basic(self):
self.run_test(basic)
Come puoi vedere, run_test accetta un solo argomento, che è la funzione da testare. Da questa estrae l'elenco degli eventi previsti per questa funzione, e li usa poi per controllare che l'esecuzione della funzione abbia generato esattamente quelli che ci si aspetta.
se non programmo come acquisisco la mentalità?c'è gente che dopo sei mesi fa cose assurde, anche prima. ci voglio riuscire anche io.
Non ho detto di abbandonare la programmazione, ma di dedicarti a cose più semplici per formarti la giusta mentalità.
ratman511
25-02-2010, 14:45
Dal file di test_trace.py della suite di CPython:
# A very basic example. If this fails, we're in deep trouble.
def basic():
return 1
basic.events = [(0, 'call'),
(1, 'line'),
(1, 'return')]
[...]
class TraceTestCase(unittest.TestCase):
def compare_events(self, line_offset, events, expected_events):
events = [(l - line_offset, e) for (l, e) in events]
if events != expected_events:
self.fail(
"events did not match expectation:\n" +
"\n".join(difflib.ndiff([str(x) for x in expected_events],
[str(x) for x in events])))
def run_and_compare(self, func, events):
tracer = Tracer()
sys.settrace(tracer.trace)
func()
sys.settrace(None)
self.compare_events(func.func_code.co_firstlineno,
tracer.events, events)
def run_test(self, func):
self.run_and_compare(func, func.events)
def test_01_basic(self):
self.run_test(basic)
Come puoi vedere, run_test accetta un solo argomento, che è la funzione da testare. Da questa estrae l'elenco degli eventi previsti per questa funzione, e li usa poi per controllare che l'esecuzione della funzione abbia generato esattamente quelli che ci si aspetta.
cosa contiene sto file?
comunque dici che punto troppo in alto adesso ma mi hai fatto un esempio difficile per me. è quasi tutto arabo per me(cosa è ad esempio difflib.ndiff([str(x) for x in expected_events],[str(x) for x in events])))
e poi l'attributo events resta o scompare dopo l'uscita dalla funzione?
Non ho detto di abbandonare la programmazione, ma di dedicarti a cose più semplici per formarti la giusta mentalità.
si l'ho capito, ma a che mi devo dedicare?
cdimauro
25-02-2010, 14:50
cosa contiene sto file?
comunque dici che punto troppo in alto adesso ma mi hai fatto un esempio difficile per me. è quasi tutto arabo per me(cosa è ad esempio difflib.ndiff([str(x) for x in expected_events],[str(x) for x in events])))
E' una list comprehension, e l'esempio è volutamente complicato per farti capire che ne hai ancora parecchia di strada da fare con Python e con la programmazione in generale.
e poi l'attributo events resta o scompare dopo l'uscita dalla funzione?
E' legato alla funzione. A meno che non venga esplicitamente modificato o cancellato, rimarrà legato a essa fino a che morte (il garbage collector) non li separerà.
si l'ho capito, ma a che mi devo dedicare?
Prenditi un tutorial o un libro come quello che ho in firma, leggilo ed esercitati con esempi ed esercizi proposti.
Quando hai finito ne riparliamo, ma se tutto è filato liscio non avrai nemmeno bisogno di tornare a chiedere lumi sui problemi che hai oggi. ;)
ratman511
25-02-2010, 14:56
E' una list comprehension, e l'esempio è volutamente complicato per farti capire che ne hai ancora parecchia di strada da fare con Python e con la programmazione in generale.
si lo so che è una list comprehension, intendevo dire tutte quelle librerie, cosa fanno, a cosa servono(diff, trace...).
comunque cosi mi demoralizzi, io non ho mai detto di sentirmi esperto, anzi.non penso che arriverò a quei livelli in ogni caso, unittest, cose complesse..per arrivare li oltretutto servirebbe tanta pratica, giornaliera, e per me è difficile praticamente tutto. sono contate le cose che penso siano alla mia portata e faccio. poi non ho più nulla da scrivere
E' legato alla funzione. A meno che non venga esplicitamente modificato o cancellato, rimarrà legato a essa fino a che morte (il garbage collector) non li separerà.
quindi fino a quando la funzione esiste ancora.
[/QUOTE]Prenditi un tutorial o un libro come quello che ho in firma, leggilo ed esercitati con esempi ed esercizi proposti.
Quando hai finito ne riparliamo, ma se tutto è filato liscio non avrai nemmeno bisogno di tornare a chiedere lumi sui problemi che hai oggi. ;)[/QUOTE]
in realtà quel libro che hai in firma l'ho letto e sono a metà di imparare python di lutz.
banryu79
25-02-2010, 15:10
per questo ho l'rfc davanti.
Piccolo OT, magari ti interessa: sono incappato in un sito dove si trovano traduzioni in italiano di alcune RFC, tra cui la 1459.
Qua -> RFC Project (http://www.rfc.altervista.org/)
cdimauro
25-02-2010, 15:58
si lo so che è una list comprehension, intendevo dire tutte quelle librerie, cosa fanno, a cosa servono(diff, trace...).
comunque cosi mi demoralizzi, io non ho mai detto di sentirmi esperto, anzi.non penso che arriverò a quei livelli in ogni caso, unittest, cose complesse..
Non vedo perché. Se ti dicessi che non conosco la libreria diff e pochissimo quella unittest (in genere aggiungo test e moduli già esistenti, e non serve conoscere tutto) cambierebbe qualcosa?
Non si può conoscere tutto. Le cose generalmente le imparo perché mi servono. Quando mi serve diff, me la studierò. Non muoio mica se non la conosco già adesso.
Per me è più importante sapere che qualcosa esiste, per poterla eventualmente recuperare quando sarà necessario.
per arrivare li oltretutto servirebbe tanta pratica, giornaliera, e per me è difficile praticamente tutto. sono contate le cose che penso siano alla mia portata e faccio. poi non ho più nulla da scrivere
La pratica serve sempre. Per un programmatore è il pane quotidiano.
quindi fino a quando la funzione esiste ancora.
Sì.
in realtà quel libro che hai in firma l'ho letto e sono a metà di imparare python di lutz.
Quindi hai svolto tutti gli esercizi del libro?
ratman511
25-02-2010, 17:14
Piccolo OT, magari ti interessa: sono incappato in un sito dove si trovano traduzioni in italiano di alcune RFC, tra cui la 1459.
Qua -> RFC Project (http://www.rfc.altervista.org/)
grazie mille :)
Non vedo perché. Se ti dicessi che non conosco la libreria diff e pochissimo quella unittest (in genere aggiungo test e moduli già esistenti, e non serve conoscere tutto) cambierebbe qualcosa?
Non si può conoscere tutto. Le cose generalmente le imparo perché mi servono. Quando mi serve diff, me la studierò. Non muoio mica se non la conosco già adesso.
Per me è più importante sapere che qualcosa esiste, per poterla eventualmente recuperare quando sarà necessario.
il fatto è che mi sento tanto "piccolo" rispetto a chiunque, è dura.
La pratica serve sempre. Per un programmatore è il pane quotidiano.
e io che programmo una volta ogni 6 mesi come devo fare?
Quindi hai svolto tutti gli esercizi del libro?
si, li ho sempre fatti tutti.
cdimauro
25-02-2010, 18:42
il fatto è che mi sento tanto "piccolo" rispetto a chiunque, è dura.
E' tipico, non ti preoccupare. Se fai qualche ricerca qui nel forum, vedrai che tanti sono stati nella tua stessa condizione, ma adesso sanno programmare e ne sono soddisfatti.
E' questione di tempo, impegno e, soprattutto, pazienza. Anche se ti sembra di non riuscire a fare nulla di concreto, i risultati arriveranno. L'importante è non lasciarsi prendere dallo sconforto perché è il primo passo verso l'oblio e l'abbandono di questa bella materia.
e io che programmo una volta ogni 6 mesi come devo fare?
Ecco, appunto: come pretendi che la tua mente si plasmi concretamente in questo modo? Se non ti eserciti spesso, non riuscirai a fissare i concetti e la tua testa non sarà in grado di assimilare, incamerare e disporre nel giusto modo le informazioni e le capacità acquisite.
Questo non serve soltanto per imparare a programmare, sia chiaro, ma con questa materia è particolarmente importante.
si, li ho sempre fatti tutti.
OK, ma se ti eserciti saltuariamente i risultati saranno giocoforza scarsi.
Dedica almeno qualche ora al giorno alla programmazione, e cerca di ripassare frequetemente le cose che hai imparato.
Poi una volta che avrai la giusta forma mentis, sarà come andare in bicicletta: anche dopo un po' tempo di inattività, basterà poco per rimettersi a pedalare. ;)
ratman511
25-02-2010, 21:36
lo so, ma se non so cosa programmare come faccio a dedicare qualche ora al giorno alla programmazione?
cdimauro
26-02-2010, 07:23
La creatività è un ingrediente che non dovrebbe mancare a un programmatore.
Questo non significa progettare il sistema di controllo dello Shuttle. Dedicati a qualcosa di più semplice.
ratman511
26-02-2010, 07:40
allora non potrò fare quello che mi piace, non sono mai stato molto creativo purtroppo
banryu79
26-02-2010, 09:22
allora non potrò fare quello che mi piace, non sono mai stato molto creativo purtroppo
Guarda il link relativo al "Bulding Skill in OO" che ho in firma: se lo segui potrai scaricare un pdf con un progetto guidato passo-passo (o quasi) per realizzare un sistema di simulazione (molto semplice eh, :D ) per tre giochi da casinò.
C'è appunto l'edizione che usa Python come linguaggio di programmazione.
Penso ti terrà impegnato per un bel po', e ti darà modo di esercitarti adeguatamente senza "perderti per la strada" ;)
ratman511
26-02-2010, 10:33
Guarda il link relativo al "Bulding Skill in OO" che ho in firma: se lo segui potrai scaricare un pdf con un progetto guidato passo-passo (o quasi) per realizzare un sistema di simulazione (molto semplice eh, :D ) per tre giochi da casinò.
C'è appunto l'edizione che usa Python come linguaggio di programmazione.
Penso ti terrà impegnato per un bel po', e ti darà modo di esercitarti adeguatamente senza "perderti per la strada" ;)
uao grazie mille.
ma credi serva a qualcosa?
banryu79
26-02-2010, 12:18
uao grazie mille.
ma credi serva a qualcosa?
Ovviamente, se no che te lo consiglio a fare?
Come ti ha detto anche cdimauro, la cosa migliore è quella di fare pratica (tonnellate di pratica, possibilmente quotidiana).
Scaricati quel libro/pdf, e seguilo, dall'inizio alla fine.
Non si tratta di un mero leggere e copiare, certi dettagli (implementativi) sono volutamente non approfonditi e specificati: se riesci a ricavarti un'ora / due al giorno da dedicare a questa attività sarebbe meglio; se poi hai dubbi specifici, beh i forum esistono per questo.
L'unica cosa su cui ho qualche dubbio: leggiti bene che conoscenze sono date per scontato (sono scritte proprio nel capitolo introduttivo) e, se già non le possiedi, potresti prima provare ad acquisirle.
Se non sbaglio oltre ad un'agevole conoscenza del linguaggio stesso, si richiede la conoscenza dell'uso delle principali "strutture dati/collections" a supporto (in Java significa conoscere le Collections che si trovano le package java.util, in Python, presumo, la conoscenza di quelle già implementate dal linguaggio stesso [dictionary e compagnia bella]) e la conoscenza della "metodologia" di Unit Testing (e quindi la relativa libreria; in Java è JUnit, in Python non so, ma c'è scritto nel libro).
Quindi se ad esempio in Python non sai ancora usare fluentemente dictionary, ecco che potresti per prima cosa studiare bene ed esercitarti per un po' (finchè non ti senti sufficientemente padrone) su questi. In rete trovi valanghe di materiale, imparare a cercarlo è una competenza che va acquisita, secondo me.
Poi vedi lo Unit Testing: anche qui, materiale a bizzeffe online ne trovi, nello specifico guarda per Python. Studia ed esercitati un po'.
Già questi due passi (facendo ipotesi che due ore al dì le dedichi alla programmazione) dovrebbero tenerti impegnato per un pochino.
Dopodichè passi ad affrontare il libro/progetto.
ratman511
26-02-2010, 14:58
Ovviamente, se no che te lo consiglio a fare?
Come ti ha detto anche cdimauro, la cosa migliore è quella di fare pratica (tonnellate di pratica, possibilmente quotidiana).
non ho mai creduto che un libro potesse cambiarmi. comunque so che devo fare tanta pratica e quotidianamente, ma:
1)non so cosa fare, come ho detto già molte volte
2)non sempre ho tempo disponibile
questo vuol dire che sono spacciato?
la conoscenza della "metodologia" di Unit Testing (e quindi la relativa libreria; in Java è JUnit, in Python non so, ma c'è scritto nel libro).
le basi di python le conosco bene, ma lo unittest per quel poco che ho visto non lo capirò mai.
Comunque tu hai tutta la ragione del mondo, ma il fatto è che cosi ci vuole troppo troppo tempo, io in un anno vorrei recuperare tutto il tempo perso, ma a questo ritmo non arriverò mai. che frustazione
banryu79
26-02-2010, 16:47
le basi di python le conosco bene, ma lo unittest per quel poco che ho visto non lo capirò mai.
Tutto si impara; anche io non ne sapevo nulla e la prima volta che l'ho visto ho pensato: ma che roba è?
Ho cercato e trovato una guida per lo unit test con JUnit, l'ho studiata e ho ricopiato gli esempi e me ne sono fatti alcuni per prenderci un po' la mano e capirne il senso con qualche caso concreto.
Tempo per fare questo: una settimana. Non mi sembra un'eternità (e no, nn ci stavo 8 ore al giorno, forse in tutto ci sarò stato 4 ore effettive?)
Ah, ovviamente non sono partito con l'idea "cavoli, non ce la farò mai", perchè sennò neanche mi ci mettevo: ti consiglio invece, se riesci, di cambiare atteggiamento e di gustarti quello che fai, a prescindere; vedila un po' come un gioco in cui vai a scoprire qualcosa di nuovo ;)
Per il discorso del tempo quotidiano: io nei periodi in cui voglio studiarmi qualcosa che so già sarà impegnativo, sono abituato a ricavarmi un paio di ore la sera prima di andare a letto; l'enusiasmo per un po' (4-5 settimane) mi è sufficiente per riuscire a stare sveglio e dedicare che so dalle 23:00 all'01:00 al pc, anche se poi il giorno lavoro 8 ore e 4 sere su 7 ho allenamenti da 2h -2,5h (di arti marziali e danza). E vivendo da solo devo anche seguire la casa, fare le spese, farmi la pappa, ecc... quindi scommetto che se vuoi e ci pensi un po' il tempo quotidiano riesci a ricavartelo.
ratman511
26-02-2010, 17:38
non so, a volte nonostante sono all'uni mi sembra di essere al liceo. alcune persone mi fanno pesare il fatto che non ho iniziato a programmare prima, che ormai è tardi, che ho perso troppo tempo ecc. a me dispiace perchè la cosa che mi fa rabbia è che io sono molto curioso. cioè mi chiedevo sempre ma come si fa questo, come si fa quello, solo che sono sempre stato pigro, senza voglia di far niente, quindi ero curioso ma non cercavo.
io ora vorrei recuperare, ma se però non fa davvero per me allora sto buttando il mio tempo. tutti dite che all'inizio è cosi, ma ho visto gente che la programmazione la considera più facile di guidare la macchina o chiama i propri programmi spazzatura, quando io invece chissà che darei per fare programmi come quelli.
ma tornando it il punto è che io il tempo lo trovo, non è un problema. il fatto è che vista cosi mi richiede chissà quanto tempo recuperare. io vorrei al più presto recuperare il tempo perso, partecipare a progetti open, ecc eccc.
cdimauro
27-02-2010, 01:41
Ma se non t'impegni con con costanza come pensi di poter imparare e fissare bene i concetti chiave della programmazione? Così facendo la tua strada sarà estremamente in salita.
Il tempo, con la volontà, lo si trova. Tutti siamo impegnati. Io lavoro e passo buona parte della giornata fuori casa. Arrivo a casa e ho famiglia con due bambini piccoli. Ogni settimana pubblico un articolo su AD (e a volte mi ci vuole anche un giorno per documentarmi e scriverlo). Seguo questo forum. E porto avanti un mio progetto. Senza dimenticare un po' di vita sociale (andare a trovare parenti e amici nel week, farsi una pizza, ecc.)
Come vedi sfrutto la notte, unica risorsa disponibile per portare avanti tutto ciò. Le rubo qualche ora e riesco ad arrangiarmi.
ratman511
27-02-2010, 10:27
Ma se non t'impegni con con costanza come pensi di poter imparare e fissare bene i concetti chiave della programmazione? Così facendo la tua strada sarà estremamente in salita.
cdimauro io non ho detto che non mi impegno, per favore cerca di capirmi. ho solo detto che quando mi siedo al pc non so che cavolo scrivere. come mi devo allenare se non so che scrivere? posso stare tutta la vita a scrivere esercizietti? non è il tempo il problema.
E porto avanti un mio progetto.
a prescindere dal tempo non puoi farmi sto paragone. porti avanti il tuo progetto, ma io non sono un genio come te, metti questo in conto
1) programmare non è assolutamente un'attività da geni, più che altro può essere vista come un'arte se proprio vogliamo
2) programmare è un attività che CHIUNQUE può affrontare studiando bene un manuale (ciò ovviamente non significa che tutti alla fine programmeranno allo stesso modo, per il punto 1)
3) programmare è una attività diversa dal trovare una soluzione ad un problema, tuttavia bisogna tenere a mente anche i limiti degli strumenti che si usano.
La cosa più difficile non è tanto programmare, ma trovare la soluzione di un problema (se esiste), ed eventualmente capire se può esistere un programma che risolve quel dato problema.
C'è comunque un dato di fatto: all'università ti danno una forma-mentis in grado di poter affrontare e risolvere dei problemi.
In ogni caso l'università non ti imbocca, devi essere te a scegliere cosa vuoi fare e soprattutto cosa vuoi sapere/conoscere.
Ad esempio a me mancano 3-4 esami per la triennale, non so cosa farò per tesi ho diverse possibilità, tra cui argomenti su:
- sistemi operativi
- reti di calcolatori
- linguaggi automi e traduttori
- algoritmi
Tutti entrambi molto interessanti, ma ne devo scegliere uno... il più difficile è linguaggi automi e traduttori probabilmente.
Non abbiamo un corso di compilatori, ne ci hanno insegnato come funziona (in dettaglio intendo, si ok abbiamo fatto i parser, ma è solo una parte), mi piacerebbe molto affrontare il problema e magari farmi un linguaggio di programmazione che gira su JVM ad esempio.
Ci sto pensando seriamente, pur se questo mi porterà via moltissimo tempo e probabilmente rimanderà la mia laurea.
Ma alla fine forse saprò fare un compilatore, e non esiste un corso del genere dove sono io.
ratman511
27-02-2010, 11:19
1) programmare non è assolutamente un'attività da geni, più che altro può essere vista come un'arte se proprio vogliamo
non sono mai stato artistico
riguardo l'università fino ad ora non mi sembra mi abbia insegnato a ragionare.
ho provato anche a fare un sudoku, ma non ci riesco proprio. un ragazzo che ha iniziato a studiare dopo di me invece nel giro di poco tempo ne ha fatto uno.
Si ma capisci bene che il discorso del sudoku esula dalla programmazione?
Non ti devi immediatamente mettere al pc per tentare di scrivere un programma che lo faccia.
Devi ragionare sulla carta, a più alto livello, la programmazione viene dopo.
ratman511
27-02-2010, 13:02
allora evidentemente il mio problema non riguarda la programmazione, anche se in ogni caso non tutti si mettono a scrivere su carta. quello è arrivato e ha iniziato a scrivere il codice per il sudoku
ratman511
28-02-2010, 01:44
cdimauro: ho visto che sei in trattative per il tuo progetto. complimenti. deve essere una bella soddisfazione, beato tu.
cdimauro
28-02-2010, 05:20
Ma io ho quasi ventotto anni di esperienze, eh! Non è che dal giorno al domani mi sveglio e decido di tirar sù un progetto complicato.
Tu sei ancora agli inizi, non vedi risultati e ti senti scoraggiato, soprattutto perché fai confronti con altri.
Beh, non siamo tutti uguali, ma arriverai anche tu a saper programmare coi tuoi tempi. Serve impegno e smettere di guardare gli altri.
ratman511
28-02-2010, 11:42
Ma io ho quasi ventotto anni di esperienze, eh! Non è che dal giorno al domani mi sveglio e decido di tirar sù un progetto complicato.
non penso che all'inizio facevi banalità eh.
ora agli inizi, non vedi risultati e ti senti scoraggiato, soprattutto perché fai confronti con altri.
non c'entrano i confronti, anche se non mi aiutano ovviamente, però si, sono scoraggiato perchè non ottengo nulla e ovunque mi giri vedo ragazzini che fanno sistemi operativi, kernel, giochi, cose di basso livello pure ecc. io non riesco a fare nemmeno semplici cose in python o java.
Beh, non siamo tutti uguali, ma arriverai anche tu a saper programmare coi tuoi tempi. Serve impegno e smettere di guardare gli altri.
non siamo tutti uguali è vero, ma i confronti con la gente superdotata come te o cionci ad esempio non sono molto utili :)
cdimauro
28-02-2010, 13:29
non penso che all'inizio facevi banalità eh.
Ah, no? E come fai a saperlo? Ecco qui (http://www.appuntidigitali.it/gli-autori/cesare-dimauro/). ;)
non c'entrano i confronti, anche se non mi aiutano ovviamente, però si, sono scoraggiato perchè non ottengo nulla e ovunque mi giri vedo ragazzini che fanno sistemi operativi, kernel, giochi, cose di basso livello pure ecc. io non riesco a fare nemmeno semplici cose in python o java.
Verrà il tuo tempo.
non siamo tutti uguali è vero, ma i confronti con la gente superdotata come te o cionci ad esempio non sono molto utili :)
L'importante è che consideri anche l'esperienza che abbiamo accumulato. 28 anni di programmazione (nel mio caso) hanno un certo peso.
ratman511
28-02-2010, 14:11
Ah, no? E come fai a saperlo? Ecco qui (http://www.appuntidigitali.it/gli-autori/cesare-dimauro/). ;)
non dice niente, solo che hai fatto dei giochi che erano quasi negli scaffali :eek: cose banalissime, insomma.
Verrà il tuo tempo.
eh eh le ultime parole famose
[/QUOTE]L'importante è che consideri anche l'esperienza che abbiamo accumulato. 28 anni di programmazione (nel mio caso) hanno un certo peso.[/QUOTE]
si, ma voi avevate anche una marcia in più all'inizio. forse quando si inizia da ragazzini si sarà sempre avanti come capacità
L'importante è lavorare sodo quindi smettila di piangerti addosso e comincia a risolvere problemi più o meno stupidi :D.
cdimauro
28-02-2010, 14:39
non dice niente, solo che hai fatto dei giochi che erano quasi negli scaffali :eek: cose banalissime, insomma.
Mi riferivo a questo:
l’interazione col Commodore 64 di un amico non mi mette davanti a un fatto compiuto: “Syntax Error”. Evidentemente non parlavamo la stessa “lingua”.
Detto in altri termini: avevo scritto una minchiata colossale. :asd:
si, ma voi avevate anche una marcia in più all'inizio. forse quando si inizia da ragazzini si sarà sempre avanti come capacità
Non siamo tutti gli stessi, come ti ho detto prima. C'è chi arriverà prima degli altri a risolvere determinati problemi.
L'importante è arrivare ad avere la capacità per risolverli, ed è su questo che devi puntare.
Quindi basta lamentele e rimboccati le maniche, come hanno fatto tutti. Fra qualche mese ne riparliamo. ;)
Ryuzaki_Eru
28-02-2010, 14:53
Detto in altri termini: avevo scritto una minchiata colossale. :asd:
Si, ma era la prima volta che mettevi mano al pc, volevo vedere che dovevi fare :D Non provare a umanizzarti, tu sei un dio :read:
VirtualFlyer
28-02-2010, 15:04
Guarda, anch'io sono agli inizi con la programmazione e non riesco ad ottenere molto. Però secondo me non vale la pena di deprimersi, ma di dedicarcisi ancora di più.
Tanto deprimersi non serve, andare avanti magari sì!
ratman511
28-02-2010, 16:20
se magari ottenessi risultati sarebbe più motivante
VirtualFlyer
28-02-2010, 17:16
se magari ottenessi risultati sarebbe più motivante
è ovvio ma per ottenere risultati bisogna perseverare, comunque se nessuno ti obbliga, puoi anche smettere, anche se non te lo consiglierei mai e poi mai.
ratman511
28-02-2010, 17:55
magari capiterà che una mattina stanco di tutta questa "sofferenza" appendo il pc al chiodo.
ratman511
01-03-2010, 14:24
qualcuno conosce qualche tutorial o guida che mostra passo passo la creazione di un programma? a parte il pdf che ha in firma banryu
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.