-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« MT Support Forum | Home | NO ai brevetti software in Europa »

Bot positronici
07.04.04

Avete presenta la pagina Contatti, quella dove ad un certo punto si dice che "Per discutere in tempo reale su Perl e dintorni" si può andare sul canale IRC #nordest.pm? Ebbene, non fatelo mai: è un luogo terribile, un'oscura caverna che si impadronirà di voi facendo a brandelli la vostra produttività. Ora che vi ho detto cosa non fare, devo pure dire cosa e chi vi perdete. Uno su tutti, boha, e la sua arguzia. E' un bot e, malgrado la sua natura, vede tutto, capisce tutto e soprattutto non perdona niente.

14:32 <@larsen> ho trovato un metodo truffaldino :)
14:32 <@dada> larsen: dica
14:32 <@larsen> my %h = ( metodo => 'bar' );
14:32 <@larsen> $obj->${  \($h{ 'metodo' } ) };
14:33 <@dada> azz
14:33 <@larsen> ma cosi' son capaci tutti :)
14:33 <@dada> my cojons
14:33 <@larsen> boha: tu non hai visto niente, ok?
14:33 <+boha> larsen: il delitto perfetto non esiste

Scherzi a parte, boha è un divertente progetto di factoid bot fatto con POE::Component::IRC, che ha imparato tutto quello che sa in molto meno di 200 anni. Non vedevo l'ora di parlarne, e l'occasione mi pareva gustosa. Non è escluso che i sorgenti in futuro finiscano in qualche angolo del sito

Inviato da larsen il 07.04.04 18:40
Ti è piaciuto questo articolo? Iscriviti al feed!

Inviato da dada il 08.04.04 10:44

forse vale la pena, en passant, di svelare anche il movente di questo "delitto perfetto". bepi ha chiesto se ci fosse un modo di invocare direttamente su un oggetto un metodo, il cui nome è contenuto in una chiave di un hash.

una cosa del genere:

# $obj contiene un oggetto che ha il metodo bar
my %h = ( metodo => 'bar');
# voglio richiamare $obj->bar() tramite l'hash

la soluzione più banale (ma non diretta) è ovviamente:

my $method_name = $h{'metodo'};
$obj->$method_name();

il problema è che non è possibile richiamare $obj->$h{'metodo'}(), perché perl non è in grado di riconoscere correttamente il lookup nell'hash in questo caso (la sintassi proprio non gli piace).

quindi serve un modo per "mascherare" il lookup e farlo sembrare un semplice scalare, e la soluzione proposta da larsen è quella di utilizzare un ref-deref (ossia prendere la chiave dell'hash come reference e dereferenziarla immediatamente), cosa che appunto fa:

${ \$h{metodo} }

a questo punto, è possibile invocare direttamente il metodo sull'oggetto:

$obj->${ \$h{metodo} }();

come avrete notato nel log riportato da larsen, la sorpresa è stata grande (le mie colorite espressioni volevano esprimere dei complimenti a larsen per l'inventiva :-).

per correttezza però dobbiamo anche dire che in canale ci siamo trovati tutti d'accordo sul fatto che una simile tecnica è assolutamente da evitare in applicazioni reali (va considerata solo un esercizio di tecnica), ove è sicuramente preferibile la versione "indiretta" riportata sopra, o meglio ancora questa variante che utilizza can e dà la possibilità di intercettare eventuali errori (ad esempio se l'oggetto in effetti non ha il metodo che intendiamo invocare):

my $method = $obj->can( $h{metodo} );
die "metodo inesistente" unless $method;
$obj->$method();

cheers,

Aldo

Inviato da kral il 11.04.04 18:30

Approposito di bot positronici, vorrei segnalare un bel articolo su linus (www.linus.net) di questo mese:


--

"LA COSCIENZA DEI ROBOT": Di chi è la colpa se un sistema robotizzato dotato di intelligenza artificiale uccide una persona?

--

Più filosofico che tecnico, cmq.

Ciao

Inviato da larsen il 12.04.04 00:11

Il tutto mi ricorda l'inizio dell'albo di Nathan Never "Infiniti Universi" (#120), nel quale un robot commette alcuni omicidi, ma poi NN riesce a disattivarlo. Poi però esaminando il caso si decide che ha mostrato di possedere una coscienza, allora viene riacceso, processato e giudicato colpevole. E si apre il problema dell'applicabilità della pena, poichè per un robot stare imprigionato o meno è lo stesso (questo dice l'albo, a me non pare così ovvio): allora, visto che per lui è lo stesso, tanto vale spegnerlo. E invece no, perchè così facendo si nega il presupposto sul quale è stato riattivato e processato. Bel problema.

Inviato da larsen il 28.11.07 16:50

per una serie di ragioni son ricapitato su questo post.

@dada: le mie colorite espressioni volevano esprimere dei complimenti a larsen per l'inventiva

niente inventiva, e' una cosa che mi hai insegnato tu

Inviato da dada il 29.11.07 18:43

@larsen: se non si chiamasse "inventiva" l'applicare soluzioni note a nuovi problemi, buona parte di ciò che consideriamo geniale e creativo, in tutti i campi dello scibile umano, andrebbe catalogata come pura e semplice routine. pertanto non rinnego né le mie colorite espressioni né il ++ che ti meriti :-)

cheers,
Aldo










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google