Discussione:
Il sistema ideale. Linux. MacOS X
(troppo vecchio per rispondere)
Enrico Franchi
2004-11-22 15:21:11 UTC
Permalink
Uso indifferentemente GNU/Linux o MacOS X. Ho una buona conoscenza di
entrambi (anche se non sono piu` aggiornatissimo).
In generale mi trovo a svolgere compiti simili in entrambi i sistemi.

Come GNU/Linux uso Debian Sarge.

Faccio anche presente che io GNU/Linux me lo sono configurato per
benino, non sto provando a sostenere che sia piu` facile di MacOS X. Me
la sono sudata. Ma ora ne godo i frutti.

In generale a me GNOME piace come interfaccia utente. La trovo molto
usabile, e per assurdo quasi piu` maccosa di MacOS X (beh... per
assurdo. in realta` non lo e`).
E mi piace pure molto Aqua.

Mi chiedo... perche` ogni volta che sono su uno dei due sistemi, deve
mancarmi qualcosa dell'altro?

Per esempio su Debian installare programmi e` una brezza. Faccio una
ricerca sul mio database locale, poi installo. Non ho problemi di
dipendenze... non devo quasi mai compilare.
Tutto centralizzato. Mi viene tutto aggiornato.

Su MacOS X questo vale (in parte) per fink. Tutto il resto grava sulla
mia attenzione (vedere quando esce una nuova versione, vedere se e`
compatibile con il resto del mio sistema).
Inoltre FinkCommander imho non e` usabile quanto Synaptic (di recente lo
preferisco perfino ad Aptitude).

Per esempio... quando ho voluto iniziare a provare a programmare con
PyQT, mi sono dovuto sudare 7 camice. I pacchetti stabili non erano
ancora compatibili, ho dovuto usare quelli in beta... poi alla fine ha
funzionato tutto... ma ci ho perso tanto a compilare. E tutt'ora la
documentazione di QT per esempio non e` integrata con quella del MacOS
(certo, colpa di Trolltech, non di Apple). Fortunatamente ci lavoro
tramite Python, e li tutta la doc e` uniforme e ben accessibile.
Con Deb ho scritto di installarmi PyQt, e ha fatto tutto lui.

E poi vabbe`... per i compiti di tutti i giorni MacOS X e` piu` facile.
Per esempio non devo ricordarmi di installare Flash. Java funziona bene
(su Debian per esempio non e` integratissimo... anzi... un giorno ci
dovro` lavorare su).

D'altra parte quando sono su GNU/Linux mi manca alla follia MacSOUP
(anche se credo che piano piano lo abbandonero`, troppo poco
'compatibile').

Insomma... per molti dei compiti di sviluppo GNU/Linux e` piu`
amichevole. Certo, si riesce a ottenere lo stesso anche sotto MacOS X...
pero` magari io non consoco il metodo altrettanto intuitivo.

E poi c'e` Cocoa. Cocoa e` fantastico. Mi piace perfino piu` di QT (poi
quando avro` tempo daro` un occhio approfondito a gtk... sono rimasto
alle 1.x in C... poi lo credo che le trovo poco amichevoli ;) ).
E` rapidissimo sviluppare.

AppleScript e` bellissimo... ma ancora una volta... e` una cosa che io
conosco poco e uso poco. Problema mio, certo.

Quando sono su MacOS X per contro mi manca OpenOffice, e mi chiedo per
quale ragione Firefox risulti un po' marziano...

Potrei andare avanti per molto molto tempo.

E in generale quello che mi manca di GNU/Linux non lo posso aggiungere
(non e` un programma che posso scrivermi, insomma... anche perche` i
singoli applicativi funzionano quasi tutti).

Beh... scusate per lo sfogo.
--
RiK0


Non credo negli schemi non vincenti.
artemis.alpeia
2004-11-22 15:45:54 UTC
Permalink
Post by Enrico Franchi
Come GNU/Linux uso Debian Sarge.
io la Sid e conto di usare al piu' presto Mac OS, anche se un po' l'ho
provato con PearPC
Post by Enrico Franchi
Faccio anche presente che io GNU/Linux me lo sono configurato per
benino, non sto provando a sostenere che sia piu` facile di MacOS X. Me
la sono sudata. Ma ora ne godo i frutti.
quoto ;)
Post by Enrico Franchi
In generale a me GNOME piace come interfaccia utente.
KDE forever!
Post by Enrico Franchi
La trovo molto
usabile, e per assurdo quasi piu` maccosa di MacOS X
spiegami...
Post by Enrico Franchi
Per esempio su Debian installare programmi e` una brezza.
[cut]
Post by Enrico Franchi
Inoltre FinkCommander imho non e` usabile quanto Synaptic
Synaptic e' la piu' grande invenzione dopo la ruota, installare il software
e' davvero facile, specie sulla mia Sid per la quale sono costantemente
disponibili nuovi aggiornamenti. Tuttavia una pecca che si puo' trovare e'
che IMHO non e' altrettanto efficiente nel disinstallare i pacchetti, in
quanto in fase di installazione e' capace di reperire i pacchetti delle
dipendenze, ma poi alla disinstallazione questi non vengono rimossi
automaticamente (il che a lungo andare fa "ingrassare" il sistema)
Post by Enrico Franchi
E poi vabbe`... per i compiti di tutti i giorni MacOS X e` piu` facile.
Per esempio non devo ricordarmi di installare Flash. Java funziona bene
(su Debian per esempio non e` integratissimo... anzi... un giorno ci
dovro` lavorare su).
Di Java mi affascina l'integrazione della JVM nel sistema, che promette
prestazioni brucianti. Su Debian per motivi di licenza non e' disponibile
il JRE di Sun (anche se puoi installarlo manualmente), e devi ripiegare sul
port di Blackdown Java.
--
artemis.alpeia
Mi consenta avvocato, le hanno detto che il garzone del garage ha investito
sua figlia con l'automobile dell'amministratore?
theta
2004-11-22 16:15:47 UTC
Permalink
Post by artemis.alpeia
Di Java mi affascina l'integrazione della JVM nel sistema, che promette
prestazioni brucianti.
Che mantiene solo in minima parte.
La JVM e' velocissima perche' il sistema puo' condividere le porzioni di
codice tra piu' processi. Ma la performance latita parecchio. Il nuovo
Swing (Cocoa-based invece che Carbon-based come quello di Apple Java
1.3) fa schifo. SWT, inoltre, e' parecchio lento. Provate a far girare
Eclipse con meno di 512mb di ram, o su processori < 1ghz...

(sul mio iMac 17" 1ghz, 512mb ram, Eclipse [girando dal disco interno,
mi pare un 5milaepassa rpm] si pianta per una ventina di secondi la
prima volta che apre l'autocompletamento. Sotto w2k, p4 1,8ghz, 512mb
ram, disco 5milaepassa rpm, situazione lavorativa simile, ci mette meno
di 5s.)

- ∞
Enrico Franchi
2004-11-22 21:56:28 UTC
Permalink
Post by artemis.alpeia
io la Sid e conto di usare al piu' presto Mac OS, anche se un po' l'ho
provato con PearPC
In effetti pure io... ma vabbe`.
Sono distratto spesso... e decanto spesso la facilita` di installazione
della Sarge, ergo mi sono confuso.
Post by artemis.alpeia
Post by Enrico Franchi
In generale a me GNOME piace come interfaccia utente.
KDE forever!
Nun me piace...
Post by artemis.alpeia
Post by Enrico Franchi
La trovo molto
usabile, e per assurdo quasi piu` maccosa di MacOS X
spiegami...
Fai prima a leggerti i goals di GNOME e a provare GNOME 2.8 (io lo ho
installato da Experimental, tra un po' esce pure in unstable).
Post by artemis.alpeia
Tuttavia una pecca che si puo' trovare e'
che IMHO non e' altrettanto efficiente nel disinstallare i pacchetti, in
quanto in fase di installazione e' capace di reperire i pacchetti delle
dipendenze, ma poi alla disinstallazione questi non vengono rimossi
automaticamente (il che a lungo andare fa "ingrassare" il sistema)
Nessuna pecca:
man deborphan
Post by artemis.alpeia
Di Java mi affascina l'integrazione della JVM nel sistema, che promette
prestazioni brucianti. Su Debian per motivi di licenza non e' disponibile
il JRE di Sun (anche se puoi installarlo manualmente), e devi ripiegare sul
port di Blackdown Java.
Bzzz io non ho capito per quale ragione ho conflitti inenarrabili. Ma
vabbe`... prima o poi mi attrezzo.
--
RiK0


Non credo negli schemi non vincenti.
artemis.alpeia
2004-11-22 22:28:41 UTC
Permalink
Post by Enrico Franchi
Fai prima a leggerti i goals di GNOME e a provare GNOME 2.8 (io lo ho
installato da Experimental, tra un po' esce pure in unstable).
usabilissimo, semplice, ma non mi piace... troppo cupo
Post by Enrico Franchi
man deborphan
argh, non sapevo fosse integrato in synaptic... l'ho visto solo ora tra i
filtri ^^;
--
artemis.alpeia
L'amministratore avvisa i condomini che l'ascensore sara' fermo per
riparazioni per tutta la giornata di domenica
Enrico Franchi
2004-11-23 08:04:27 UTC
Permalink
Post by artemis.alpeia
argh, non sapevo fosse integrato in synaptic... l'ho visto solo ora tra i
filtri ^^;
Io peraltro da synaptic non lo ho mai usato. Sono iperniubbo del
programma.
Sono troppo comodo da linea di comando :))

Cioe`... quando mi ricordo Synaptic e` piu` comodo (piu` comodo di
aptitude e di diversi ordini di grandezza di dselect).
Pero` spesso ho fatto tutto da terminale prima di ricordarmelo :))
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-22 16:12:02 UTC
Permalink
Post by Enrico Franchi
e per assurdo quasi piu` maccosa di MacOS X
Ex gente Apple ci sta dietro, ho sentito dire in giro :) O almeno
prendono "forte ispirazione" senza pero' strafare (come invece IMHO
faceva il primo KDE con 98).
Prova a confrontare le HIG Apple con quelle di GNOME.
Post by Enrico Franchi
Su MacOS X questo vale (in parte) per fink. Tutto il resto grava sulla
mia attenzione (vedere quando esce una nuova versione, vedere se e`
compatibile con il resto del mio sistema).
Gia', vero, vero. Ma io effettivamente preferisco e di parecchio il
sistema del Mac per quanto riguarda le applicazioni (se voglio due
versioni diverse fianco a fianco?). Inoltre la gente Apple sta
lavorando, o almeno cosi' dicono, per introdurre un sistema di rimozione
dei .pkg installati (10.5?) e in generale far diventare i .pkg
l'equivalente macosxistico degli .rpm. Gia' oggi con Remote Desktop 2 si
possono, ad esempio, installare remotamente. E da qualche parte c'e' un
tool da linea di comando per installarli, ne sono sicuro.
Post by Enrico Franchi
E tutt'ora la
documentazione di QT per esempio non e` integrata con quella del MacOS
(certo, colpa di Trolltech, non di Apple). Fortunatamente ci lavoro
tramite Python, e li tutta la doc e` uniforme e ben accessibile.
[SFOGO]
CACCHIO, APPLE, LO APRI XCODE OPPURE NO!?!?!?!
Cioe', per scrivere un plugin o uso AppleScript Studio (igh) o mi
decompilo i framework privati di Apple. Ma si puo'? E intanto, se voglio
usare Mono/C# su Xcode devo scrivermi script di shell per invocare mcs o
usare l'external target per chiamare nant dove Xcode potrebbe benissimo
essere esteso (supporta compilatori diversi e diversi debugger ad
esempio, ma finche' Apple non apre le API uno si puo' sognare
l'autocompletamento o usare mcs al posto di gcc--persino per Java,
supportato da Apple stessa, bisogna passare per Jam e non si possono
usare i target nativi di Xcode).
[/SFOGO]
Post by Enrico Franchi
E poi c'e` Cocoa. Cocoa e` fantastico. Mi piace perfino piu` di QT (poi
quando avro` tempo daro` un occhio approfondito a gtk... sono rimasto
alle 1.x in C... poi lo credo che le trovo poco amichevoli ;) ).
Guarda GTK# con Mono o Portable.net o i binding Java. O quelli C++.
Post by Enrico Franchi
AppleScript e` bellissimo... ma ancora una volta... e` una cosa che io
conosco poco e uso poco. Problema mio, certo.
Anche di Apple. La documentazione di AppleScript (specie delle
funzionalita' delle .app di Apple o delle Standard Additions, piuttosto
che del linguaggio di base) si riduce spesso ai soli dizionari delle
applicazioni... igh.
Post by Enrico Franchi
Quando sono su MacOS X per contro mi manca OpenOffice, e mi chiedo per
quale ragione Firefox risulti un po' marziano...
NeoOffice, no? E' parecchio usabile.
Firefox... ragione, c'hai, ma conta che a disegnare le finestre non e'
ne' Cocoa ne' Carbon direttamente, ma il motore XUL di Mozilla (vedi
anche Nvu, Thunderbird, Sunbird) che poi usa Carbon per parecchi aspetti
ma "fa da se'" anche dove non dovrebbe. Camino fa una figura molto
migliore a livello di integrazione con l'OS (usa Cocoa per tutto, anche
i widget nelle pagine visualizzate da Gecko).

- ∞
Enrico Franchi
2004-11-22 21:56:27 UTC
Permalink
Post by theta
Ex gente Apple ci sta dietro, ho sentito dire in giro :) O almeno
prendono "forte ispirazione" senza pero' strafare (come invece IMHO
faceva il primo KDE con 98).
Infatti. Cosi` dicono.
Post by theta
Prova a confrontare le HIG Apple con quelle di GNOME.
Gnosco. Ho una certa familiarita` con gli GNOMISTI... anche se si sono
di recente viste cose divertenti...
Tipo delibere sul girare cancel e ok nei dialog... ma vabbe`.
Post by theta
Gia', vero, vero. Ma io effettivamente preferisco e di parecchio il
sistema del Mac per quanto riguarda le applicazioni (se voglio due
versioni diverse fianco a fianco?).
Beh, se le voglio, me le sparo a mano in /usr/local o in /opt/local
Il problema e` che di solito voglio che tutto funzioni.
Post by theta
Inoltre la gente Apple sta
lavorando, o almeno cosi' dicono, per introdurre un sistema di rimozione
dei .pkg installati (10.5?) e in generale far diventare i .pkg
l'equivalente macosxistico degli .rpm. Gia' oggi con Remote Desktop 2 si
possono, ad esempio, installare remotamente.
Mah... Speriamo. Sarebbe ora mannaggia la miseria. Gia` ci sono un
fottio di sistemi di pacchettizzazione nel mondo *nix.. (c'era bisogno
dell'n-esimo?). Poi me lo danno anche scaccio...
Post by theta
E da qualche parte c'e' un
tool da linea di comando per installarli, ne sono sicuro.
E`....
Post by theta
[SFOGO]
...
[/SFOGO]
Ridicolo... ma vabbe`... diamogli tempo. Magari siamo noi che abbiamo
guardato male.
Post by theta
Guarda GTK# con Mono o Portable.net o i binding Java. O quelli C++.
Mio dio.... C# dal mio punto di vista e` una brutta copia (talvolta
migliorata, talvolta imbastardita) di Java. E io Java non lo reggo...
specie quando lo spacciano per la panacea.
Piuttosto mi rimetto a programmare di Perl... non ho mai visto un
concentrato di sconcezze come Java. Poi che si possa usare vabbe`... ma
resta il fatto che per essere un linguaggio nato da 0 e` nato proprio
male.
Mi lega le mani quando voglio un linguaggio dinamico, fa i suoi capricci
con la tipizzazione... no thanks. E poi il fatto che si possano
'bloccare' le classi all'ereditarieta`... brrr... orrendo.
Comunque per alcuni divertenti commenti su Java, sentire Dialtone su
it.comp.os.python quando e` costretto per l'uni a farci qualche
progetto. Ha quel giusto livello di incazzatura che rende leggerlo un
piacere.
Il C++ ho la sfiga di doverlo conoscere bene. Beh... bene... credo che
in tutto il mondo di persone che conoscono il linguaggio veramente bene
ce ne siano poche. E per bene intendo bene.
Diciamo che lo maneggio con disinvoltura. Talvolta mi diverto, ma il
piu` delle volte mi sento limitato. Gran parte del tempo lo passo a
cercare di costruire in C++ costrutti che altri linguaggi mi danno in
modo quasi nativo... e che in C++ sono dolori. Un esempio? Le closures.
Poi quando mi addentro nella libreria standard, mi chiedo spesso perche`
certe scelte... saranno sicuramente giuste, ma mi legano le mani. Un
esempio? find_if che prende il predicato per copia. Che mannaggia di
motivo c'era? Per riferimento sarebbe andato imho benissimo.
Me ne sono riscritta una versione che prende un puntatore, cosi` posso
usare funzioni factory per generare il predicato e funziona *benissimo*.
[ avevo bisogno di un po' di polimorfismo ].
Insomma... alla fin fine anche GTK me lo faro` tramite Python. Per ora
e` l'unico linguaggio che mi soddisfa a pieno (dopo il Lisp, ma il Lisp
mi faceva venire un po' di bolle per la sintassi molto tipica. no, le
bolle no, ma non lo trovavo comodissimo).
Guardero` un giorno Ruby... ma con Python che funziona divinamente...
sempre che non mi tolgano le lambda... se no e` la volta che mi girano
:))
Post by theta
Anche di Apple. La documentazione di AppleScript (specie delle
funzionalita' delle .app di Apple o delle Standard Additions, piuttosto
che del linguaggio di base) si riduce spesso ai soli dizionari delle
applicazioni... igh.
Non hai mai visto Nevow. Li la documentazione e` grosso modo il
sorgente. Che fortunatamente e` in Python... ma insomma... diciamo che
ho visto progetti meglio documentati.
Post by theta
NeoOffice, no? E' parecchio usabile.
Si, su un Dual G5 :))
Non certo sul mio portatile.
Post by theta
Firefox... ragione, c'hai, ma conta che a disegnare le finestre non e'
ne' Cocoa ne' Carbon direttamente, ma il motore XUL di Mozilla (vedi
anche Nvu, Thunderbird, Sunbird) che poi usa Carbon per parecchi aspetti
ma "fa da se'" anche dove non dovrebbe. Camino fa una figura molto
migliore a livello di integrazione con l'OS (usa Cocoa per tutto, anche
i widget nelle pagine visualizzate da Gecko).
Dal mio punto di vista puo` anche essere colpa degli alieni. Poi uso
quello perche` di meglio non c'e`... resta il fatto che e` un poco
handicappato.
E Camino non mi supporta le Extensions, afaik.
Post by theta
- ∞
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-23 10:58:43 UTC
Permalink
Post by Enrico Franchi
Guardero` un giorno Ruby... ma con Python che funziona divinamente...
sempre che non mi tolgano le lambda... se no e` la volta che mi girano
:))
M'ero scordato il pitone, c'hai raggione, c'hai raggione. (So' poeta
nato :D.) Le lambda? E da quando in qua vogliono toglierle? Sono una
delle tante cose che rendono Python bello com'e'...
Ruby saro' io che non cerco abbastanza ma un tutorial a trovarlo non ci
riesco proprio. E mi puzza comunque di simil-pitone, per cui non ci son
mai stato troppo dietro.
Post by Enrico Franchi
Si, su un Dual G5 :))
Non certo sul mio portatile.
Mavala' :D, io la uso su un iBook 14" 933mhz (di gennaio) che ha ancora
le canoniche 256mb di ram dalla fabbrica, e *riesco* *a* *usarlo* (se si
tralascia il tempo di caricamento > minuto e mezzo - due).

[De' linguaggi]
Post by Enrico Franchi
Mi lega le mani quando voglio un linguaggio dinamico
Della dinamicita' dei linguaggi si potrebbe parlare per miliardi e
miliardi di post, e tanto lo sappiamo come va a finire ("e' bene che
esistano sia linguaggi dinamici che a tipizzazione statica"), ma se vuoi
un linguaggio dinamico NON vai a usare Java, né C#. Punto. Anche io uso
Python ogni volta che devo prototipare qualcosa (e se proprio devo fare
roba Java prima la prototipo con Jython, se devo fare roba C# ci lavoro
prima sopra con Boo <http://boo.codehaus.org>), e ci si possono fare
anche belle cose complete. Ma un linguaggio a forte tipizzazione aiuta a
trovare errori, a organizzare le idee, a progettare prima di scrivere.
Che non e' affatto male.

Che poi uno debba sputar sangue per chiamare metodi arbitrari su un
oggetto in Java e' vero, ma perche' stai chiamando un metodo arbitrario
su un oggetto? Qualcosa che non va c'e'. Ritornare al tavolo da disegno
please.

Poi tutto questo e' detto da un hobbista/studente. Lo so che in ambiti
lavorativi o cmq piu' seri la filosofia e' ben altra ("get the work
done").

- ∞
Enrico Franchi
2004-11-23 12:49:33 UTC
Permalink
Post by theta
M'ero scordato il pitone, c'hai raggione, c'hai raggione. (So' poeta
nato :D.) Le lambda? E da quando in qua vogliono toglierle? Sono una
delle tante cose che rendono Python bello com'e'...
http://www.python.org/peps/pep-3000.html

Python 3.0 sigh.

Ci saranno tante cose belle (anche se mi chiedo perche` vogliano
includere lo static typing... ma vabbe` -- no, non e` che me lo chiedo,
il perche` lo spiegano :)) )
Post by theta
Mavala' :D, io la uso su un iBook 14" 933mhz (di gennaio) che ha ancora
le canoniche 256mb di ram dalla fabbrica, e *riesco* *a* *usarlo* (se si
tralascia il tempo di caricamento > minuto e mezzo - due).
Eh... un po' troppo (da me in realta` e` sotto il minuto).
Non sono piu` abituato a queste attese. Posto che tanto lo devo usare
poco, faccio prima con OpenOffice.
Post by theta
Della dinamicita' dei linguaggi si potrebbe parlare per miliardi e
miliardi di post, e tanto lo sappiamo come va a finire ("e' bene che
esistano sia linguaggi dinamici che a tipizzazione statica"), ma se vuoi
un linguaggio dinamico NON vai a usare Java, né C#.
Ecco appunto. E posto che di linguaggi non dinamici ne ho a disposizione
un bel numero (C, C++, Pascal, Fortran... etc etc), non vedo perche`
andare a pigliarne uno bruttarello come il Java.
Dicono che il Java sia piu` produttivo... ma se voglio essere rapido,
uso il Python. A me non serve.

E poi sinceramente... io mi trovo molto piu` a mio agio con un
linguaggio dinamico, anche con un bel po' di anni di C di esperienza (e
appena meno di C++). E` semplicemente quello che ho sempre cercato.
Post by theta
Ma un linguaggio a forte tipizzazione aiuta a
trovare errori, a organizzare le idee, a progettare prima di scrivere.
Che non e' affatto male.
Gli errori si trovano comunque tramite unit-testing. Non hai altra
strada e lo devi fare comunque. Lo static typing da solo non garantisce
una mazza.
Post by theta
Che poi uno debba sputar sangue per chiamare metodi arbitrari su un
oggetto in Java e' vero, ma perche' stai chiamando un metodo arbitrario
su un oggetto? Qualcosa che non va c'e'. Ritornare al tavolo da disegno
please.
Ritornare a Python. O al piu` ad ObjectiveC. Java e` un ibrido
insensato. E` riuscito grosso modo a prendere il peggio di entrambi i
mondi.

Insisto. Sentirmi con le mani legate non mi piace. Esattamente come non
mi dispiace avere l'ereditarieta` multipla, anche se in modo *brutale*
non la userei mai. In pratica la uso come di possono usare le
interfacce, o roba simile.

Ma mi e` comodo averla (certo che non faccio ereditare un gatto da un
pianoforte a coda perche` hanno 4 gambe e una coda).

Anche perche` qualche uso 'lecito' dell'ereditarieta` multipla che va
oltre l' 'implementazione di interfacce' ci puo` essere.
Certo poi magari uno si trova a fare cross_casting... (in C++
tipicamente)... ma finche` sa quello che sta facendo, posso anche dire
che va bene... metta tanti bei commentini, e sia pronto a una palata
nella nuca se sega.
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-23 14:29:00 UTC
Permalink
Post by Enrico Franchi
Post by theta
M'ero scordato il pitone, c'hai raggione, c'hai raggione. (So' poeta
nato :D.) Le lambda? E da quando in qua vogliono toglierle? Sono una
delle tante cose che rendono Python bello com'e'...
http://www.python.org/peps/pep-3000.html
Python 3.0 sigh.
Hmmmm... posso vedere il perche', ma non c'e' nessun altro metodo comodo
per dichiarare una funzione inline.
Post by Enrico Franchi
Post by theta
Mavala' :D, io la uso su un iBook 14" 933mhz (di gennaio) che ha ancora
le canoniche 256mb di ram dalla fabbrica, e *riesco* *a* *usarlo* (se si
tralascia il tempo di caricamento > minuto e mezzo - due).
Eh... un po' troppo (da me in realta` e` sotto il minuto).
Non sono piu` abituato a queste attese. Posto che tanto lo devo usare
poco, faccio prima con OpenOffice.
Ah, ok. :D
Post by Enrico Franchi
Post by theta
Della dinamicita' dei linguaggi si potrebbe parlare per miliardi e
miliardi di post, e tanto lo sappiamo come va a finire ("e' bene che
esistano sia linguaggi dinamici che a tipizzazione statica"), ma se vuoi
un linguaggio dinamico NON vai a usare Java, né C#.
Ecco appunto. E posto che di linguaggi non dinamici ne ho a disposizione
un bel numero (C, C++, Pascal, Fortran... etc etc), non vedo perche`
andare a pigliarne uno bruttarello come il Java.
Dicono che il Java sia piu` produttivo... ma se voglio essere rapido,
uso il Python. A me non serve.
C'e' stato un fraintendimento. Java e' decente per progetti abbastanza
complessi con ampio uso di concetti OOP. Java e' piu' produttivo perche'
la serie di restrizioni che ti pone ti consente di controllare di non
star Facendo Cacchiate, il che vuol dire che parecchio codice che
compilerebbe e poi romperebbe le scatole non solo non finisce in
produzione ma non va neanche in test.
Ma produttivo non vuol dire "scrivo piu' velocemente"; non soltanto,
almeno.
Post by Enrico Franchi
E poi sinceramente... io mi trovo molto piu` a mio agio con un
linguaggio dinamico, anche con un bel po' di anni di C di esperienza (e
appena meno di C++). E` semplicemente quello che ho sempre cercato.
De gustibus. Qui lo dico, i linguaggi dinamici e quelli statici sono
come cacciaviti e martelli: prova a togliere con precisione una vite
usando un martello e mi saprai dire. Ognuno dei due ha usi propri. I
dinamici sono stupendi per fare programmazione di shell o scrivere
programmi anche complessi che pero' non hanno un "progetto" precedente,
o per buttare giu' le proprie idee.

Hmmm, adesso manca solo che venga fuori un evangelista della
programmazione funzionale a dirci quanto e' bello O'Caml/Haskell/Scheme.
:D
Post by Enrico Franchi
Post by theta
Ma un linguaggio a forte tipizzazione aiuta a
trovare errori, a organizzare le idee, a progettare prima di scrivere.
Che non e' affatto male.
Gli errori si trovano comunque tramite unit-testing. Non hai altra
strada e lo devi fare comunque. Lo static typing da solo non garantisce
una mazza.
Fa quel che deve fare: impedire che tu chiami un metodo se non sai
ESATTAMENTE cosa stai facendo, cioe' su cosa lo stai chiamando.
Che sia una croce non lo mette in dubbio nessuno, ma almeno ti richiede
di avere le idee chiare prima di continuare. Non e' poco.
Post by Enrico Franchi
Post by theta
Che poi uno debba sputar sangue per chiamare metodi arbitrari su un
oggetto in Java e' vero, ma perche' stai chiamando un metodo arbitrario
su un oggetto? Qualcosa che non va c'e'. Ritornare al tavolo da disegno
please.
Ritornare a Python. O al piu` ad ObjectiveC. Java e` un ibrido
insensato. E` riuscito grosso modo a prendere il peggio di entrambi i
mondi.
Su questo hai ragione.
Ma su due piedi NON mi viene il motivo per cui tu persona GENERICA debba
chiamare un metodo GENERICO su un oggetto GENERICO, se non per fare
callback. Java non ha assolutamente una soluzione a questo problema
(ovviamente incapsulare il codice in oggetti di classi anonime NON e'
una soluzione), mentre in C# ci sono i delegati (anche se da questo
punto di vista preferisco WithEvents di VB .NET).

[Ereditarieta' multipla]
Post by Enrico Franchi
Ma mi e` comodo averla (certo che non faccio ereditare un gatto da un
pianoforte a coda perche` hanno 4 gambe e una coda).
Anche perche` qualche uso 'lecito' dell'ereditarieta` multipla che va
oltre l' 'implementazione di interfacce' ci puo` essere.
Sai che non me ne viene in mente proprio proprio nessuno?
Post by Enrico Franchi
Certo poi magari uno si trova a fare cross_casting... (in C++
tipicamente)... ma finche` sa quello che sta facendo, posso anche dire
che va bene... metta tanti bei commentini, e sia pronto a una palata
nella nuca se sega.
Ehehehehe :D

- ∞
Enrico Franchi
2004-11-23 15:26:29 UTC
Permalink
Post by theta
C'e' stato un fraintendimento. Java e' decente per progetti abbastanza
complessi con ampio uso di concetti OOP. Java e' piu' produttivo perche'
la serie di restrizioni che ti pone ti consente di controllare di non
star Facendo Cacchiate, il che vuol dire che parecchio codice che
compilerebbe e poi romperebbe le scatole non solo non finisce in
produzione ma non va neanche in test.
Nessun fraintendimento allora. Io insisto nel trovare Java un orrendo
linguaggio. O hai un linguaggio *totalmente* statico (quale Java non e`)
nel qual caso puoi permetterti di verificare 'formalmente' la
correttezza del codice (e io comunque ho i miei dubbi... il mio docente
ha tutto il prossimo semestre per convincermi del contrario), oppure e`
comunque una chimera. E devi fare unit-testing.
A quel punto gli errori li becchi comunque.

C'era un documento di non ricordo piu` chi che faceva il guru della
programmazione statica, poi ha iniziato a fare unit-testing con Python,
e si e` accorto che era piu` conveniente farlo anche sui linguaggi
statici, perche` si faceva semplicemente prima.
Post by theta
Ma produttivo non vuol dire "scrivo piu' velocemente"; non soltanto,
almeno.
Vuole dire che porti il progetto finito prima (e con un codice
leggibile, aggiungo io, ma non sarebbe strettamente necessario).
Post by theta
De gustibus. Qui lo dico, i linguaggi dinamici e quelli statici sono
come cacciaviti e martelli: prova a togliere con precisione una vite
usando un martello e mi saprai dire. Ognuno dei due ha usi propri. I
dinamici sono stupendi per fare programmazione di shell o scrivere
programmi anche complessi che pero' non hanno un "progetto" precedente,
o per buttare giu' le proprie idee.
Hmmm, adesso manca solo che venga fuori un evangelista della
programmazione funzionale a dirci quanto e' bello O'Caml/Haskell/Scheme.
:D
Io sono un grandissimo estimatore della programmazione funzionale. E ne
applico quanti piu` concetti possibile (in realta` non piu` concetti
possibile, quelli che ci stanno bene) nel Python.
Sono al momento troppo impegnato per dare attenzione che merita ad un
linguaggio come l'Haskell.
Post by theta
Fa quel che deve fare: impedire che tu chiami un metodo se non sai
ESATTAMENTE cosa stai facendo, cioe' su cosa lo stai chiamando.
Che sia una croce non lo mette in dubbio nessuno, ma almeno ti richiede
di avere le idee chiare prima di continuare. Non e' poco.
No. Non lo fa. Perche` nel momento in cui usi un reference o un pointer
(parlo del C++) non lo sai piu`. Se usi classi *non* polimorfe sai
esattamente cosa fa, ma in piu` di un caso hai un comportamento
inaspettato. Ragion per cui e` buona norma mettere un fottio di
costruttori explicit che cosi` almeno non te lo fa sotto il naso.
Se invece usi classi polimorfe non hai altro modo che fare unit-testing.
Perche` c'e` scritto chiaro e tondo che la risoluzione viene fatta a
tempo di esecuzione.
Addirittura puoi avere cose moolto carine. Se vuoi te ne faccio vedere
qualcuna... e` molto facile caderci, anche se conosci perfettamente le
regole teoriche.
Ergo solo un pazzo salta unit-testing. Ragion per cui non vedo perche`
non farlo di default.
Se poi aggiungiamo che per esempio in C++ Overloading e Overriding
spesso 'entrano in conflitto' (anche questo se hai un po' di tempo lo
posso meglio precisare, ma spero tu abbia capito quello di cui parlo) ci
troviamo un po' di magagne....
In Python per contro la risoluzione delle chiamate e` assolutamente
facile, lineare e prevedibile.

E comunque non solo non mi richiede di avere le idee chiare (perche` se
uno vuole giocare sporco comunque lo puo` fare, solo aumentando di gran
lunga la probabilita` che oltre alle mani si sporca fino al collo), ma
grosso modo mi fa scrivere un sacco di codice inutile.
Non devo dimostrare al compilatore si saper programmare. Se non sono
capace sono cazzi miei. Lui si preoccupi del suo mestiere, io del mio.
Post by theta
Sai che non me ne viene in mente proprio proprio nessuno?
C'e` un bellissimo esempio sul Lippman-Lajole. Capitolo 18. Non te lo
scrivo qua perche` e` lungo tanto tanto.

Comunque no... esempi proprio banali non me ne vengono. Se non di molto
'artificiali'. Resta il fatto che quando li incontri dici grazie.
Senza si sarebbe fatto ugualmente, al limite in modo appena piu`
scomodo.
--
RiK0


Non credo negli schemi non vincenti.
Enrico Franchi
2004-11-23 15:47:14 UTC
Permalink
Post by theta
C'e' stato un fraintendimento. Java e' decente per progetti abbastanza
complessi con ampio uso di concetti OOP. Java e' piu' produttivo perche'
la serie di restrizioni che ti pone ti consente di controllare di non
star Facendo Cacchiate, il che vuol dire che parecchio codice che
compilerebbe e poi romperebbe le scatole non solo non finisce in
produzione ma non va neanche in test.
Nessun fraintendimento allora. Io insisto nel trovare Java un orrendo
linguaggio. O hai un linguaggio *totalmente* statico (quale Java non e`)
nel qual caso puoi permetterti di verificare 'formalmente' la
correttezza del codice (e io comunque ho i miei dubbi... il mio docente
ha tutto il prossimo semestre per convincermi del contrario), oppure e`
comunque una chimera. E devi fare unit-testing.
A quel punto gli errori li becchi comunque.

C'era un documento di non ricordo piu` chi che faceva il guru della
programmazione statica, poi ha iniziato a fare unit-testing con Python,
e si e` accorto che era piu` conveniente farlo anche sui linguaggi
statici, perche` si faceva semplicemente prima.
Post by theta
Ma produttivo non vuol dire "scrivo piu' velocemente"; non soltanto,
almeno.
Vuole dire che porti il progetto finito prima (e con un codice
leggibile, aggiungo io, ma non sarebbe strettamente necessario).
Post by theta
De gustibus. Qui lo dico, i linguaggi dinamici e quelli statici sono
come cacciaviti e martelli: prova a togliere con precisione una vite
usando un martello e mi saprai dire. Ognuno dei due ha usi propri. I
dinamici sono stupendi per fare programmazione di shell o scrivere
programmi anche complessi che pero' non hanno un "progetto" precedente,
o per buttare giu' le proprie idee.
Io direi che i linguaggi statici sono adatti per i (rari) casi in cui le
risorse sono limitate, oppure e` necessario avere meno livelli di
indirezione possibile. Un kernel, per esempio.

Poi qualunque progetto grossino, scritto in un linguaggio non dinamico,
ha comunque bisogno di creare un gestore di memoria che si incarica di
deallocare o allocare memoria secondo le esigenze. Gia` solo per questo
averlo gia` scritto, bello e (quasi) perfetto dagli sviluppatori di
Python, oppure che so io, da quelli del compilatore ObjectiveC (beh.. in
realta` suppongo sia parte della libreria, ma non sottilizziamo) diventa
un grosso vantaggio.
Post by theta
Hmmm, adesso manca solo che venga fuori un evangelista della
programmazione funzionale a dirci quanto e' bello O'Caml/Haskell/Scheme.
:D
Io sono un grandissimo estimatore della programmazione funzionale. E ne
applico quanti piu` concetti possibile (in realta` non piu` concetti
possibile, quelli che ci stanno bene) nel Python.
Sono al momento troppo impegnato per dare attenzione che merita ad un
linguaggio come l'Haskell.
Post by theta
Fa quel che deve fare: impedire che tu chiami un metodo se non sai
ESATTAMENTE cosa stai facendo, cioe' su cosa lo stai chiamando.
Che sia una croce non lo mette in dubbio nessuno, ma almeno ti richiede
di avere le idee chiare prima di continuare. Non e' poco.
No. Non lo fa. Perche` nel momento in cui usi un reference o un pointer
(parlo del C++) non lo sai piu`. Se usi classi *non* polimorfe sai
esattamente cosa fa, ma in piu` di un caso hai un comportamento
inaspettato. Ragion per cui e` buona norma mettere un fottio di
costruttori explicit che cosi` almeno non te lo fa sotto il naso.
Se invece usi classi polimorfe non hai altro modo che fare unit-testing.
Perche` c'e` scritto chiaro e tondo che la risoluzione viene fatta a
tempo di esecuzione.
Addirittura puoi avere cose moolto carine. Se vuoi te ne faccio vedere
qualcuna... e` molto facile caderci, anche se conosci perfettamente le
regole teoriche.
Ergo solo un pazzo salta unit-testing. Ragion per cui non vedo perche`
non farlo di default.
Se poi aggiungiamo che per esempio in C++ Overloading e Overriding
spesso 'entrano in conflitto' (anche questo se hai un po' di tempo lo
posso meglio precisare, ma spero tu abbia capito quello di cui parlo) ci
troviamo un po' di magagne....
In Python per contro la risoluzione delle chiamate e` assolutamente
facile, lineare e prevedibile.

E comunque non solo non mi richiede di avere le idee chiare (perche` se
uno vuole giocare sporco comunque lo puo` fare, solo aumentando di gran
lunga la probabilita` che oltre alle mani si sporca fino al collo), ma
grosso modo mi fa scrivere un sacco di codice inutile.
Non devo dimostrare al compilatore si saper programmare. Se non sono
capace sono cazzi miei. Lui si preoccupi del suo mestiere, io del mio.
Post by theta
Sai che non me ne viene in mente proprio proprio nessuno?
C'e` un bellissimo esempio sul Lippman-Lajole. Capitolo 18. Non te lo
scrivo qua perche` e` lungo tanto tanto.

Comunque no... esempi proprio banali non me ne vengono. Se non di molto
'artificiali'. Resta il fatto che quando li incontri dici grazie.
Senza si sarebbe fatto ugualmente, al limite in modo appena piu`
scomodo.
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-23 19:00:06 UTC
Permalink
[uber-snip]
Hmmmm.
Da programmatore poco meno che amatoriale sto facendo tesoro di questa
discussione :)
Post by Enrico Franchi
No. Non lo fa. Perche` nel momento in cui usi un reference o un pointer
(parlo del C++) non lo sai piu`. Se usi classi *non* polimorfe sai
esattamente cosa fa, ma in piu` di un caso hai un comportamento
inaspettato. Ragion per cui e` buona norma mettere un fottio di
costruttori explicit che cosi` almeno non te lo fa sotto il naso.
Se invece usi classi polimorfe non hai altro modo che fare unit-testing.
Ovvio, la sola tipizzazione statica non e' una panacea magica che eviti
i test. In un'applicazione seria, i test vanno fatti, punto.
Post by Enrico Franchi
Se poi aggiungiamo che per esempio in C++ Overloading e Overriding
spesso 'entrano in conflitto' (anche questo se hai un po' di tempo lo
posso meglio precisare, ma spero tu abbia capito quello di cui parlo)
Hmmmm, conosco i concetti ma non conoscendo approfonditamente
sovraccarico e overriding del c++ e non riesco a capire come possano
confliggere (/me e' gnucco).
Per fare l'overriding non devi avere la stessa signature? Per
sovraccaricare non bisogna avere signature diverse?
Post by Enrico Franchi
ci
troviamo un po' di magagne....
In Python per contro la risoluzione delle chiamate e` assolutamente
facile, lineare e prevedibile.
Sfido io :) piu' semplice di cosi' si moriva... tant'e' vero che
l'overloading non si puo' fare.
Post by Enrico Franchi
Non devo dimostrare al compilatore si saper programmare. Se non sono
capace sono cazzi miei. Lui si preoccupi del suo mestiere, io del mio.
Capisco. Non condivido.
Errare e' umano, ed e' pure peggio per un principiante (alzi la mano chi
e' principiante, /me alza la mano). Non fa la felicita' delle persone
sapere che almeno in una serie di casi il compilatore mi segnalera' se
sto sbagliando formalmente?
Che poi alcuni formalismi siano gabbie non lo metto in dubbio.
Post by Enrico Franchi
Post by theta
Sai che non me ne viene in mente proprio proprio nessuno?
C'e` un bellissimo esempio sul Lippman-Lajole. Capitolo 18. Non te lo
scrivo qua perche` e` lungo tanto tanto.
Comunque no... esempi proprio banali non me ne vengono. Se non di molto
'artificiali'. Resta il fatto che quando li incontri dici grazie.
Senza si sarebbe fatto ugualmente, al limite in modo appena piu`
scomodo.
(Be', la reflection in Java non la definirei "appena piu' scomoda". C#
almeno da quel punto di vista va molto meglio.)

- ∞
Enrico Franchi
2004-11-23 20:54:58 UTC
Permalink
Post by theta
Hmmmm, conosco i concetti ma non conoscendo approfonditamente
sovraccarico e overriding del c++ e non riesco a capire come possano
confliggere (/me e' gnucco).
Per fare l'overriding non devi avere la stessa signature? Per
sovraccaricare non bisogna avere signature diverse?
Questa viene diritta diritta da una lezione di Programmazione 3.

#include <iostream>
#include <complex>

using namespace std;

class B{
public:
virtual void f(int);
virtual void f(double);
virtual void g(int i = 0);
virtual ~B() {};
};

class D : public B {
public:
void f(complex<double>);
void g(int i = 0);
virtual ~D() {};
};

void B::f(int i) {cout << "B::f -> " << i << std::endl; }
void B::f(double i) {cout << "B::f -> " << i << std::endl; }
void B::g(int i) {cout << "B::g -> " << i << std::endl; }
void D::f(complex<double> i) {cout << "D::f -> " << i << std::endl; }
void D::g(int i) {cout << "D::g -> " << i << std::endl; }

int main(){
B b;
D d;
B *pb = new D;

d.f(1.0);
b.f(1.0);
pb->f(1.0);
b.g();
d.g();
pb->g();
delete pb;
return 0;
}

Sapresti dirmi (e spiegarmi) cosa stampa il programma (e perche`)?
Certo, ci sono cose un poco patologiche... tuttavia...
Post by theta
Sfido io :) piu' semplice di cosi' si moriva... tant'e' vero che
l'overloading non si puo' fare.
Non serve. Hai i named parameters.
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-24 07:36:44 UTC
Permalink
Post by Enrico Franchi
Sapresti dirmi (e spiegarmi) cosa stampa il programma (e perche`)?
Certo, ci sono cose un poco patologiche... tuttavia...
Avevo immaginato che c'entrasse la risoluzione dei metodi :)
Cosi' su due piedi, visto che c++ l'ho usato poco e niente, non riesco a
risponderti.
L'Intelligenza vorrebbe che io invocassi i metodi col tipo piu'
specifico. Pero' non so come si ponga complex<T> (che e' una classe)
rispetto al tipo primitivo che e' double.
Quindi io sparerei
d.f(1.0) chiama ??? <- non so ma se fosse Java sarebbe B::f.
b.f(1.0) chiama B::f, perche' la catena dell'inheritance con b non
c'entra un puffo.
pb->f(1.0) se fosse Java sarebbe D::f
b.g() chiama ovviamente B::g
d.g() chiamera' D::g a questo punto
pb->g() se fosse Java sarebbe D::g

Grazie a Dio Java ha una catena di risoluzione ben definita. E' per
questi side effect del cavolo che ho paura ad addentrarmi piu' di tanto
nella programmazione c++ (prima che salti fuori nel mio corso di studi).
Post by Enrico Franchi
Post by theta
Sfido io :) piu' semplice di cosi' si moriva... tant'e' vero che
l'overloading non si puo' fare.
Non serve. Hai i named parameters.
Ehi, non volevo dire che non poter fare overloading fosse una brutta
cosa :) elimina un sacco di mal di testa.

Gia' che siamo in tema, e' da un po' che guardo un linguaggio di
scripting molto molto caruccio che si chiama Io
<http://www.iolanguage.com>, a oggetti ma basato su prototipi. Ha anche
un ponte ObjC se lo fai girare sotto Mac OS X, per cui puoi accedere
alle classi Cocoa e viceversa. Caruccio tanto.

- ∞
Enrico Franchi
2004-11-24 22:10:02 UTC
Permalink
Post by theta
d.f(1.0) chiama ??? <- non so ma se fosse Java sarebbe B::f.
No. Non puo` andare in overloading. Siccome sei dentro allo scope di D,
D::f 'nasconde' le f definite in B (per vederle, basta aggiungere una
direttiva di using). E` sempre cosi`.
Peraltro e` una pratica abbastanza malsana di sovraccaricare nella
classe figlia funzioni definite in quella madre.
Comunque non c'e` problema, un double puo` essere convertito in un
complex<double> (e la cosa e` perfettamente logica: un numero reale puo`
essere matematicamente immerso in C).
Post by theta
b.f(1.0) chiama B::f, perche' la catena dell'inheritance con b non
c'entra un puffo.
Infatti...
Post by theta
pb->f(1.0) se fosse Java sarebbe D::f
E invece e` B::f. E c'e` una precisa ragione.
D::f prende come input un double, mentre con B::f ho una corrispondenza
esatta. Chiaramente se avessi avuto anche una D::f(double) sarebbe stata
presa quella.
Post by theta
b.g() chiama ovviamente B::g
d.g() chiamera' D::g a questo punto
pb->g() se fosse Java sarebbe D::g
si.. ma con che valori viene chiamata?
Post by theta
Grazie a Dio Java ha una catena di risoluzione ben definita. E' per
questi side effect del cavolo che ho paura ad addentrarmi piu' di tanto
nella programmazione c++ (prima che salti fuori nel mio corso di studi).
Anche il C++ ha una catena di risoluzione ben definita. Solo devi
conoscerla. Non e` nemmeno difficilissimo, basta che pensi a quello che
stai facendo.
Post by theta
Gia' che siamo in tema, e' da un po' che guardo un linguaggio di
scripting molto molto caruccio che si chiama Io
<http://www.iolanguage.com>, a oggetti ma basato su prototipi. Ha anche
un ponte ObjC se lo fai girare sotto Mac OS X, per cui puoi accedere
alle classi Cocoa e viceversa. Caruccio tanto.
Ci daro` un occhio...
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-25 08:17:58 UTC
Permalink
Post by Enrico Franchi
Post by theta
d.f(1.0) chiama ??? <- non so ma se fosse Java sarebbe B::f.
No. Non puo` andare in overloading. Siccome sei dentro allo scope di D,
D::f 'nasconde' le f definite in B (per vederle, basta aggiungere una
direttiva di using). E` sempre cosi`.
Peraltro e` una pratica abbastanza malsana di sovraccaricare nella
classe figlia funzioni definite in quella madre.
Comunque non c'e` problema, un double puo` essere convertito in un
complex<double> (e la cosa e` perfettamente logica: un numero reale puo`
essere matematicamente immerso in C).
Uno dei tanti motivi per cui, come principiante, mi sono trovato molto
piu' a mio agio con Java. Li' un double e' un double e un metodo
sovraccarico e' un metodo sovraccarico. Se avess avuto un void f(double)
e un void f(Complex), con Complex come classe, Java non avrebbe MAI
scelto il secondo per il semplice motivo che vuole un oggetto e non un
valore.
Poi, si', devi scrivere f(new Complex(1.0)) invece di f(1.0).
Post by Enrico Franchi
Post by theta
pb->f(1.0) se fosse Java sarebbe D::f
E invece e` B::f. E c'e` una precisa ragione.
D::f prende come input un double, mentre con B::f ho una corrispondenza
esatta. Chiaramente se avessi avuto anche una D::f(double) sarebbe stata
presa quella.
Questo mi fa capire moltissimi perche': perche' l'immersione in Java non
si puo' fare, perche' gli operatori overridable in C# sono molto molto
molto limitati...
Post by Enrico Franchi
Post by theta
b.g() chiama ovviamente B::g
d.g() chiamera' D::g a questo punto
pb->g() se fosse Java sarebbe D::g
si.. ma con che valori viene chiamata?
Be', visto che in entrambi hai messo int i = 0, direi con 0 :D
Cmq, credo rispettivamente B::g (ovvio), D::g (col valore in D::g) e
hmmm, D::g ancora (ma col valore in B::g o qualche altra porcheria
simile, giusto?).
Post by Enrico Franchi
Post by theta
Grazie a Dio Java ha una catena di risoluzione ben definita. E' per
questi side effect del cavolo che ho paura ad addentrarmi piu' di tanto
nella programmazione c++ (prima che salti fuori nel mio corso di studi).
Anche il C++ ha una catena di risoluzione ben definita. Solo devi
conoscerla. Non e` nemmeno difficilissimo, basta che pensi a quello che
stai facendo.
Si', intendo dire che in C++ scrivere, come sopra, 1.0 puo' portare
all'istanziazione di un complex<double> piuttosto che al passaggio come
double primitivo e hai ambiguita' di fondo (cioe' sei costretto a
chiederti "dove andra' a finire questa chiamata?"). In linguaggi
fortemente tipizzati come Java o C# questa ambiguita' di fondo non c'e'
mai. Ad esempio:


public class Buttapureme {

public static void main (String args[]) {
Giancarlo g = new Giancarlo();
Padre p = new Padre();
Figlio f = new Figlio();
Padre pf = new Figlio();

g.faiQualcosa(p);
g.faiQualcosa(f);
g.faiQualcosa(pf);
}

private static class Padre {
public String ciao() { return "Ciao da Padre!"; }
}

private static class Figlio extends Padre {
public String ciao() { return "Ciao da Figlio!"; }
}

private static class Giancarlo { // ma lo sa come si chiamano i
tipi come lei?
public void faiQualcosa(Padre p) {
System.out.println("p: " + p.ciao()); }
public void faiQualcosa(Figlio f) {
System.out.println("f: " + f.ciao()); }
}

}

Giancarlo stampa rispettivamente:
[Session started at 2004-11-25 09:06:58 +0100.]
p: Ciao da Padre!
f: Ciao da Figlio!
p: Ciao da Figlio!

Come vedi e' sempre possibile conoscere, anche senza sapere il reale
tipo degli oggetti, come andra' a finire una chiamata a un metodo con
overload. Se e' in una variabile di tipo Padre verra' chiamato
faiQualcosa(Padre) (ed e' anche logico: se io so solo che e' un Padre
lo potro' solo trattare come un Padre); solo se so che e' un Figlio
verra' chiamata faiQualcosa(Figlio); se hai un oggetto Padre che credi
essere in realta' un Figlio, per richiamare faiQualcosa(Figlio) sara'
necessario introdurre un cast che puo' fallire (ed e' giusto: non sempre
i Padri sono anche Figli :D ). I metodi overridden nella classe Figlio
sono sempre richiamati, com'e' Buono e Giusto che Sia (se li ho
sostituiti e' perche' voglio che siano chiamati al posto degli
originali, no?).

Ovvio che nei linguaggi come Python tutto questo non si pone ed e' un
gran bene che sia cosi'.

- ∞
Enrico Franchi
2004-11-25 19:20:21 UTC
Permalink
Post by theta
Uno dei tanti motivi per cui, come principiante, mi sono trovato molto
piu' a mio agio con Java. Li' un double e' un double e un metodo
sovraccarico e' un metodo sovraccarico.
Appunto. Anche in C++. Il problema e` che una classe definisce (ed e`
corretto che definisca) un namespace. Ragion per cui hai anche a che
fare con il fenomeno dello hiding.
Post by theta
Se avess avuto un void f(double)
e un void f(Complex), con Complex come classe, Java non avrebbe MAI
scelto il secondo per il semplice motivo che vuole un oggetto e non un
valore.
Poi, si', devi scrivere f(new Complex(1.0)) invece di f(1.0).
No. Allora non ci siamo capiti. Chiaramente convertire un double in un
complex<double> deve essere possibile e naturale. Quindi funge.
Se poi tu fai nascondi un metodo, lui non ci puo` fare nulla. Tu lo hai
fatto, e tu non gli hai detto che non volevi farlo.

E` lo stesso principio per cui

int i = 0, b = 0;
{
double i = 1.0;
b = (int) (5 / i);
}

std::cout << b << std::endl;

deve funzionare.
Tieni presente che il fatto che una cosa nello scope piu` interno
nasconda quella nello scope piu` esterno, e` corretta.
Se tu crei il metodo D::f(complex<double>), ci sono due casi. O sai che
esiste B::f(double) o non lo sai.
Se non sai che esiste, quello che ti aspetti e` che sia chiamato
D::f(complex<double>) e ti va benissimo cosi`.
Se sai che B::f(double) esiste, allora se vuoi usarlo scrivi
using B::f;
se non vuoi usarlo, allora lasci come stanno le cose.

E guarda che vedere me che difendo il C++ e` una cosa bella rara.
Post by theta
Questo mi fa capire moltissimi perche': perche' l'immersione in Java non
si puo' fare, perche' gli operatori overridable in C# sono molto molto
molto limitati...
Tieni presenti che le conversioni implicite sono comode. Forse
nell'ottica del C++ (tutti i programmatori che non sono io potrebbero
sbagliare e io devo impedirglielo) avrebbe avuto piu` senso che i
costruttori non definissero conversioni implicite (a meno di definirli
espliciti) e semmai dovessero essere taggati implicit quelli che si
voleva definissero conversioni implicite.
Ma chiaramente ci sono persone molto piu` competenti di me che hanno
deciso altrimenti, e hanno le loro ragioni.
Post by theta
Be', visto che in entrambi hai messo int i = 0, direi con 0 :D
Cmq, credo rispettivamente B::g (ovvio), D::g (col valore in D::g) e
hmmm, D::g ancora (ma col valore in B::g o qualche altra porcheria
simile, giusto?).
Pardon. g di default avrebbe dovuto prendere 20 di default.
Comunque si. Hai azzeccato tutte e tre (in realta` la critica era la
terza).

Il punto e` che a tempo di compilazione
pb->g();

cerca il valore di default di g. Siccome pb e` un puntatore B*, allora
viene messo quello di B::g. Questo e` 'fissato' nell'eseguibile.
Il fatto che poi a tempo di esecuzione venisse chiamata D::g perche` il
tipo dinamico di pb e` D, e` un altro discorso. Intanto il compilatore
aveva gia` scelto quei valori di default.

Anche questo e` solo un falso problema. Sono casi patologici. Le regole
ci sono e hanno un loro motivo. Uno che cambia i valori di default
scendendo nell'ereditarieta` e` un mezzo pazzo scatenato.
Post by theta
Come vedi e' sempre possibile conoscere, anche senza sapere il reale
tipo degli oggetti, come andra' a finire una chiamata a un metodo con
overload.
No. Non e` cosi`. Se tu non sai cosa c'e` in pb, non sai cosa verra`
chiamato. Se lo sai, lo sai anche in C++.
Post by theta
Se e' in una variabile di tipo Padre verra' chiamato
faiQualcosa(Padre) (ed e' anche logico: se io so solo che e' un Padre
lo potro' solo trattare come un Padre); solo se so che e' un Figlio
verra' chiamata faiQualcosa(Figlio); se hai un oggetto Padre che credi
essere in realta' un Figlio, per richiamare faiQualcosa(Figlio) sara'
necessario introdurre un cast che puo' fallire (ed e' giusto: non sempre
i Padri sono anche Figli :D ).
In realta` questo e` cosi` anche in C++, oppure io non ho capito cosa
vuoi dire.
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-26 08:59:22 UTC
Permalink
Post by Enrico Franchi
No. Non e` cosi`. Se tu non sai cosa c'e` in pb, non sai cosa verra`
chiamato. Se lo sai, lo sai anche in C++.
Hmmm, non sono molto chiaro io qui :) ma dato che anche le mie idee non
sono chiarissime, cerchero' di chiarirmi (prima di tutto per me, poi per
non passare da stupido sul ng :D).

Quello che intendevo dire con quella frase e': se ho un oggetto di un
tipo sconosciuto puntato da una variabile di un tipo noto, Java
garantisce che, passando questa variabile a un metodo sovraccarico,
venga richiamato il metodo che ha una corrispondenza esatta col tipo a
me noto. Per cui "so" dove finira' il metodo anche se non conosco il
tipo dell'oggetto. Mi sono espresso malino, eh gia'.

Un altro pregio che nella mia confusione (perenne x_x) volevo indicare
e' l'impossibilita' in Java (pre-1.4) di effettuare conversioni
implicite. Dunque, se un metodo viene richiamato con un parametro 1.0,
il compilatore si lamentera' se non lo sto passando a un metodo che
accetta un double in quella posizione. Se voglio incapsularlo in un
oggetto di un qualche tipo, lo devo fare esplicitamente (di solito, se
l'oggetto non serve mantenerlo, costruendolo al volo con un new
Classe(1.0)). Java 1.5 ha introdotto il boxing/unboxing automatico tra
valori di tipi primitivi (1, 2.0, 'c') e oggetti delle classi
corrispondenti (new Integer(1), new Double(2.0), new Char('c')), ma
anche in questo caso e' valida la regola della corrispondenza esatta
rispetto al punto di vista del chiamante (per cui, se passo 2.0 a un
metodo che ha un overload double [primitivo] e un'altro java.lang.Double
[oggetto], il compilatore preferira' il primo metodo al secondo).

Tutto questo perche' e' un pregio? Perche' toglie regole da memorizzare;
se un metodo e' stato sostituito, e' stato sostituito e basta. Se voglio
chiamare un dato metodo lo chiamo e basta, senza possibilita' di errore.
E' ovvio che e' una cosa soggettiva (c'entra parecchio anche l'essere
principiante e la pigrizia mentale). Se conosco tutte le regole di
chiamata del C++ (e prima o poi ci dovro' cozzare anche io) allora e'
ovvio che non ho problemi a chiamare un metodo su un oggetto sapendo
esattamente dove andro' a parare. Ma la difficolta' insita nell'imparare
le regole del C++ e' maggiore rispetto a quelle di Java o C# (che sono
uguali). E io sono un programmatore alle prime armi. A quale linguaggio
daro' "l'assalto" per primo? Io non ho avuto dubbi.

- ∞
Enrico Franchi
2004-11-26 21:15:32 UTC
Permalink
Post by theta
Hmmm, non sono molto chiaro io qui :) ma dato che anche le mie idee non
sono chiarissime, cerchero' di chiarirmi (prima di tutto per me, poi per
non passare da stupido sul ng :D).
Nessuno passa per stupido. Nessuno ha ragione. Si sta parlando
solamente.
Post by theta
Quello che intendevo dire con quella frase e': se ho un oggetto di un
tipo sconosciuto puntato da una variabile di un tipo noto, Java
garantisce che, passando questa variabile a un metodo sovraccarico,
venga richiamato il metodo che ha una corrispondenza esatta col tipo a
me noto. Per cui "so" dove finira' il metodo anche se non conosco il
tipo dell'oggetto. Mi sono espresso malino, eh gia'.
Ok. Quindi in pratica stai dicendo che la regola di risoluzione in Java
e` semplice. Questo e` in se un bene (non e` che chi lo ha progettato ha
sbagliato *tutto*).
Fra le altre varie cose a me una tipizzazione cosi` forte non fa
impazzire. A me in realta` non fa impazzire la tipizzazione punto e
basta. se proprio si deve tipizzare, allora preferisco usare i
'Protocols' alla ObjectiveC.. anche se sono un po' restrittivi. L'unica
cosa che fa comodo e` controllare se un dato oggetto ha certi metodi
--- e questo in Python si puo` fare -- se ha tali attributi [ voglio
sperare di non avere un sadico che mette oggetti qualunque dove io mi
aspetterei oggetti chiamabili... poi se non e` chiaro mi spiego].


Il C++ invece pensa che se tu hai determinate conversioni, queste sono
'indolori' (per esempio non ha senso proibire una conversione automatica
da int a long). Puoi anche forzare che non avvengano.
Post by theta
Java 1.5 ha introdotto il boxing/unboxing automatico tra
valori di tipi primitivi (1, 2.0, 'c') e oggetti delle classi
corrispondenti (new Integer(1), new Double(2.0), new Char('c')), ma
anche in questo caso e' valida la regola della corrispondenza esatta
rispetto al punto di vista del chiamante (per cui, se passo 2.0 a un
metodo che ha un overload double [primitivo] e un'altro java.lang.Double
[oggetto], il compilatore preferira' il primo metodo al secondo).
Questo non e` male.. cosi` come non e` male avere i generics.
Post by theta
Tutto questo perche' e' un pregio? Perche' toglie regole da memorizzare;
se un metodo e' stato sostituito, e' stato sostituito e basta. Se voglio
chiamare un dato metodo lo chiamo e basta, senza possibilita' di errore.
Io ritengo che un programmatore non sia un fanciullino. Posto che il C++
non mi fa impazzire proprio perche` e` eccessivamente complesso, e lo
dico senza timore, lo preferisco a Java.
Per una serie di ragioni, non ultima il fatto che ogni tot arriva il
tipo che pensa che Java sia la panacea a tutti i mali, e invece e` solo
l'n-esimo linguaggio di moda.
Post by theta
Ma la difficolta' insita nell'imparare
le regole del C++ e' maggiore rispetto a quelle di Java o C# (che sono
uguali). E io sono un programmatore alle prime armi. A quale linguaggio
daro' "l'assalto" per primo? Io non ho avuto dubbi.
Tieni presente che io ti ho fatto esempi patologici. Avessi una
conoscenza di Java pari a quella che ho di C++ sono sicuro che potrei
farne di altrettanto patologici.
Dopo di che nemmeno io ho avuto dubbi.

Dopo il mio primo BASIC, sono volato al C. Senza paura. Poi C++, qualche
occhiata al Lisp (non quanto avrei voluto... purtroppo tanto tempo
necessita il Lisp), Perl (tanto Perl, anche se quello e` ancora piu`
incasinato. a furia di volere semplificare devi installarti mezzo
interprete in testa per capire quello che hai scritto), anche se, PHP,
perfino Java (ma questo e` tanto tanto tempo fa Java 1.3 e ormai ho
scordato quasi tutto), ASM. Poi ho conosciuto l'ObjectiveC. Un
linguaggio semplice, dinamico, rapido, efficace. E` stato amore.
Poi ho conosciuto un Python. Un linguaggio piu` semplice, piu` dinamico,
piu` rapido e piu` efficace. Nulla di quello con cui sono entrato in
contatto poi mi ha entusiasmato cosi` tanto (Fortran, Free Pascal)
Al momento ho abbandonato quasi tutto salvo Python, C++ e ObjC. Beh, il
C non si puo` si puo` abbandonare, non ci si riesce a scordarselo.
Beh... anche FreePascal non e` mica male. Ha alcune cose carine il
Pascal... era proprio un bel linguaggio, peccato che abbia fatto la fine
che ha fatto :)) Vedi... non e` piu` di moda.
Tra l'altro mi pare che tanto tanto tempo fa, Apple avesse indicato il
Pascal come principale linguaggio di sviluppo... ma chi ricorda piu` :)
E ora appena ho un po' di tempo guardero` anche altri linguaggi.
Resta una cosa. Quando penso qualcosa, tendo a pensarla in Python. E
quando la scrivo, faccio molto molto prima in Python. Con python e
twisted ho in mano cose che prima mi sognavo. Ora sono davvero
produttivo. Il fatto che poi di mio sia molto dispersivo, e` un altro
discorso.
--
RiK0


Non credo negli schemi non vincenti.
Alex Martelli
2004-11-26 21:56:44 UTC
Permalink
Post by Enrico Franchi
Il C++ invece pensa che se tu hai determinate conversioni, queste sono
'indolori' (per esempio non ha senso proibire una conversione automatica
da int a long). Puoi anche forzare che non avvengano.
E in questo il C++ sbaglia. Se le istanze della tua classe sono
testabili come vere o false nel modo che _parrebbe_ normale (operator
bool), allora puoi moltiplicarle per 3.14 -- perche` bool diventa int
diventa float. Cosi` per permettere "if(x)" ma non "x*3.14" uno
definisce (EEK) un "operator void*" o simili mirabilie...

"meglio esplicito che implicito", insegna Python. Chi ha provato le
delizie delle conversioni implicite (del C++, ma peggio ancora, del PL/I
o dell'Algol 68, beati voi giovincelli che ve li scampaste) sa perche`.


Alex
Enrico Franchi
2004-11-27 18:06:35 UTC
Permalink
Post by Alex Martelli
E in questo il C++ sbaglia. Se le istanze della tua classe sono
testabili come vere o false nel modo che _parrebbe_ normale (operator
bool), allora puoi moltiplicarle per 3.14 -- perche` bool diventa int
diventa float. Cosi` per permettere "if(x)" ma non "x*3.14" uno
definisce (EEK) un "operator void*" o simili mirabilie...
Aspetta, io parlo di conversioni sensate logicamente. Il C++ tiene
quelle sensate per se.
Ovvero... io ho parlato di convertire un int in un long. Questo siamo
tutti d'accordo che e` giusto che succeda di default. Cosi` come passare
un float in double (ma non il contrario).
Il problema e` che e` abbastanza discutibile il fatto di considerare il
bool un tipo intero. E` vero che *e`* un tipo intero, ma nella semantica
del linguaggio generalmente e` usato per altri scopi.
Post by Alex Martelli
"meglio esplicito che implicito", insegna Python. Chi ha provato le
delizie delle conversioni implicite (del C++, ma peggio ancora, del PL/I
o dell'Algol 68, beati voi giovincelli che ve li scampaste) sa perche`.
Ma questo lo ho detto pure io. Secondo me avrebbe avuto piu` senso
definire i costruttori explicit di default, e semmai lasciare
specificare al programmatore quando averli impliciti.
Comunque vabbe`...
--
RiK0


Non credo negli schemi non vincenti.
Enrico Franchi
2004-11-27 18:56:48 UTC
Permalink
Post by Alex Martelli
E in questo il C++ sbaglia. Se le istanze della tua classe sono
testabili come vere o false nel modo che _parrebbe_ normale (operator
bool), allora puoi moltiplicarle per 3.14 -- perche` bool diventa int
diventa float. Cosi` per permettere "if(x)" ma non "x*3.14" uno
definisce (EEK) un "operator void*" o simili mirabilie...
Aspetta, io parlo di conversioni sensate logicamente.
Ovvero... io ho parlato di convertire un int in un long. Questo siamo
tutti d'accordo che e` giusto che succeda di default. Cosi` come passare
un float in double (ma non il contrario).
Il problema e` che e` abbastanza discutibile il fatto di considerare il
bool un tipo intero. E` vero che *e`* un tipo intero, ma nella semantica
del linguaggio generalmente e` usato per altri scopi.
Post by Alex Martelli
"meglio esplicito che implicito", insegna Python. Chi ha provato le
delizie delle conversioni implicite (del C++, ma peggio ancora, del PL/I
o dell'Algol 68, beati voi giovincelli che ve li scampaste) sa perche`.
Ma questo lo ho detto pure io. Secondo me avrebbe avuto piu` senso
definire i costruttori explicit di default, e semmai lasciare
specificare al programmatore quando averli impliciti.
Comunque vabbe`...
--
RiK0


Non credo negli schemi non vincenti.
Alex Martelli
2004-11-26 09:21:59 UTC
Permalink
theta <***@email.it.is.not.invalid> wrote:
...
Post by theta
Hmmmm... posso vedere il perche', ma non c'e' nessun altro metodo comodo
per dichiarare una funzione inline.
Beh, in genere neppure per dichiarare una classe inline, apposta si usa
l'istruzione class; e per le funzioni, l'istruzione def.
Post by theta
star Facendo Cacchiate, il che vuol dire che parecchio codice che
compilerebbe e poi romperebbe le scatole non solo non finisce in
produzione ma non va neanche in test.
Vedi, l'errore e` questo concetto di "andare in test". I test sono
indispensabili comunque; in Java anche per la tipizzazione, visto che i
contenitori tengono degli Object e i relativi cast sono tutti a runtime
(mi dicono che l'1.5 e` meno peggio, ma non ne ho per provare); ma
comunque lo sono, perche` nessuna tipizzazione t'impedira` mai di
scrivere < dove dovevi scrivere <= e tante altre scemenze del genere,
siamo umani e, si sa, errare e` appunto umano. Come spiega Martin
nell'articolo che ho citato, usando bene i test si rende praticamente
ridondante la tipizzazione statica: se ne continuano a pagare tutti i
prezzi ricavando quasi nessun vantaggio ('quasi', perche`: un
compilatore semplice puo` generare codice piu` spedito se puo` far leva
sulla tipizzazione statica, mentre per fare codice molto veloce con
tipizzazione dinamica occorrono compilatori piu` furbi e complicati).
Post by theta
Ma produttivo non vuol dire "scrivo piu' velocemente"; non soltanto,
almeno.
D'accordissimo. E` piu` importante la velocita` di lettura del codice
che non quella di scrittura, perche` nel corso dello sviluppo il codice
si legge e rilegge tante volte. E infatti Python favorisce sempre la
leggibilita` (una delle ragioni per buttare lambda;-). Ma la
tipizzazione statica non aiuta la leggibilita`.
Post by theta
usando un martello e mi saprai dire. Ognuno dei due ha usi propri. I
dinamici sono stupendi per fare programmazione di shell o scrivere
programmi anche complessi che pero' non hanno un "progetto" precedente,
o per buttare giu' le proprie idee.
Ma anche con tutto il progetto che vuoi, lo sviluppo e` comunque
iterativo.
Post by theta
Hmmm, adesso manca solo che venga fuori un evangelista della
programmazione funzionale a dirci quanto e' bello O'Caml/Haskell/Scheme.
Scheme non e` sostanzialmente diverso da Python: multiparadigma,
tipizzazione dinamica. ML (magari SML piu` che OCAML...) e Haskell sono
linguaggi molto puri, forse ideali per una squadra di PhD di matematica
e informatica, basta che non abbia nessun interesse che il codice sia
comprensibile a ingegneri, fisici, chimici, economisti, o altri comuni
mortali (anche con PhD ma non nelle discipline "giuste";-).
Post by theta
[Ereditarieta' multipla]
Post by Enrico Franchi
Ma mi e` comodo averla (certo che non faccio ereditare un gatto da un
pianoforte a coda perche` hanno 4 gambe e una coda).
Anche perche` qualche uso 'lecito' dell'ereditarieta` multipla che va
oltre l' 'implementazione di interfacce' ci puo` essere.
Sai che non me ne viene in mente proprio proprio nessuno?
Anzitutto i mix-in, implementativamente parlando. Progettualmente
parlando, evitare la jattura della tassonomia.


Alex
Enrico Franchi
2004-11-26 19:13:27 UTC
Permalink
Post by Alex Martelli
E infatti Python favorisce sempre la
leggibilita` (una delle ragioni per buttare lambda;-). Ma la
tipizzazione statica non aiuta la leggibilita`.
Io putroppo la trovo di un comodo... mi manchera` una cifra. Anche
perche` per assurdo mi trovero` ad usare lambda in C++ e non in Python.

Poi capisco la leggibilita`... ma io sono tutt'ora convinto che lambda
usata bene e non abusata possa aumentare la leggibilita`, invece di
diminuirla. Se pero` vedendo molto piu` codice altrui di quello che vedo
io ti rendi conto che sono troppi gli abusi...

Chiaramente un costrutto come lambda ben si presta agli abusi, ma in
alcuni casi, trovo che sia leggibile mettere l'azioncina da dare.
Poi vabbe` e` il mio personalissimo parere, e mi fido che la valutazione
che ha portato alla scelta sia piu` meditata e motivata della mia.
Solo e` un po' un peccato :))


F/UP e XPOST it.comp.lang.python
--
RiK0


Non credo negli schemi non vincenti.
Alex Martelli
2004-11-26 09:01:58 UTC
Permalink
Post by theta
Post by Enrico Franchi
Guardero` un giorno Ruby... ma con Python che funziona divinamente...
sempre che non mi tolgano le lambda... se no e` la volta che mi girano
:))
M'ero scordato il pitone, c'hai raggione, c'hai raggione. (So' poeta
nato :D.) Le lambda? E da quando in qua vogliono toglierle? Sono una
delle tante cose che rendono Python bello com'e'...
Parlando a nome della maggioranza dei committer, vogliamo toglierle da
circa 6 mesi dopo che furono messe (ma ovviamente non si e` mai potuto
per non rompere la compatibilita`). Ragione principale: vengono abusate
9 volte piu` spesso che non usate in quei rarissimi casi in cui sono la
soluzione giusta. Principio di Python (condiviso con "lo spirito del
C"): dovrebbe idealmente esserci un solo modo ovvio per svolgere un dato
compito. Sto finendo l'editing/selezione di oltre 1000 ricette postate
su activestate (beh no, sto maczuppando i.c.m, ma DOVREI rituffarmi nel
lavoro, sigh) quindi ho fin troppo presente la galleria di abusi che
lambda, apparentemente, causa in modo inevitabile, per una qualche
mistura di ignoranza di Python, ipnosi, antica maledizione contro la
sanguinosa Sparta, difficile spiegarlo ma innegabile.

Si sprecano le
lambda x: len(x)
dove ovviamente bisognerebbe semplicemente usare
len
le map(lambda x: x+1, xs) al posto dell'ovvio [x+1 for x in xs],
per non dire dell'abominio ultimo,
nome = lambda ...
dove anche una lucertola orba capisce che si dovrebbe usare
def nome ...
... e tutte le distorsioni per conficcare entro una sola espressione
(corpo di lambda) quello che con tanta piu` chiarezza e leggibilita` si
farebbe in un paio di statement usando def invece di lambda.

In pratica, in Python lambda non offre nessuna possibilita` sostanziale
che non si possa realizzare con un def. Una volta su 10 lambda puo`
risultare un poco piu` concisa e comoda, ma per quel 10% dei casi si
paga troppo salato -- vedi detto elenco di distorsioni eccetera.

Un giorno ci sara` un Python 3.0 dove sara` permesso rompere la
compatibilita` col passato, e saranno soprattutto semplificazioni,
rimozioni di feature storicamente accumulatesi che violano l'idea di
offrire un solo modo ovvio di svolgere un compito. Consultare la pep
3000 per l'attuale elenco delle features che probabilmente se ne
andranno. Ci vorranno anni prima che Guido possa prendersi un anno
sabbatico da dedicare interamente a Python, che probabilmente e` quel
che servira` per far uscire Python 3.0 dal regno delle ipotesi; e in
quel momento possiamo aspettarci battaglie sanguinose (praticamente ogni
singola feature, per quanto vecchia e ridondante, ha sempre degli
estimatori... persino apply!-). Ma io dico che ce la faremo.
Post by theta
Ruby saro' io che non cerco abbastanza ma un tutorial a trovarlo non ci
riesco proprio. E mi puzza comunque di simil-pitone, per cui non ci son
mai stato troppo dietro.
Python e Ruby coprono la stessa nicchia, con filosofie molto diverse:
Ruby condivide quella di Perl (piu` modi di fare una cosa ci sono meglio
e`), Python quella di C (idealmente dovrebbe esserci UN modo ovvio).
Per imparare Ruby, c'e` gratis in linea l'ottimo libro di Hunt e Thomas,
datato in termini di versione di Ruby ma ottimo come testo.
<http://www.bdelmee.easynet.be/ruby/PRframed/>.

Personalmente, trovo Ruby e Python due ottimi linguaggi. A chi
condivide la filosofia "piu` ce n'e` meglio e`" consiglio Ruby; a chi ha
capito i vantaggi della semplicita` e univocita`, Python; a chi e`
indeciso, Python, perche` i vantaggi in questione possono non essere
affatto ovvi in questo mondo dov'e` pandemica la featurite cronica, ma
sono reali e profondi, soprattutto per qualsiasi progetto che non sia
portato dall'inizio alla fine da una sola persona, ma non solo
(consiglio anche di leggere "The Paradox of Choice" per capire perche`,
benche` possa sembrare paradossale, avere troppe scelte e` un fattore
negativo, non positivo).
Post by theta
anche belle cose complete. Ma un linguaggio a forte tipizzazione aiuta a
trovare errori, a organizzare le idee, a progettare prima di scrivere.
Che non e' affatto male.
Aiuta molto di piu` il test-driven development.
<http://www.artima.com/weblogs/viewpost.jsp?thread=4639> .


Alex
theta
2004-11-26 12:34:16 UTC
Permalink
[snippone che ho letto tutto, giuro!]

Ma dai, adesso come fara' la gente a scrivere:


q = lambda l,s,e:s<e and (lambda p:(q(l,s,p-1),q(l,p+1,e)))((lambda
o=[l[e],s-1,e,0,0,0,0,0,0]:\
(o.__setitem__(6,lambda:
(o.__setitem__(4,0),o.__setitem__(5,lambda:(not o[4] and not o[3])\
and ((lambda:(o.__setitem__(1,o[1]+1),(o[1]==o[2]) and
(o.__setitem__(3,1),o.__setitem__(4,\
1)) or (l[o[1]]>o[0] and
(l.__setitem__(o[2],l[o[1]]),o.__setitem__(4,1)))))(),o[5]())),\

o[5]())),o.__setitem__(7,lambda:(o.__setitem__(4,0),o.__setitem__(5,lamb
da:(not o[4] and\
not o[3]) and (o.__setitem__(2,o[2]-1),(o[2]==o[1]) and
(o.__setitem__(3,1),o.__setitem__\
(4,1)) or (l[o[2]]<o[0] and
(l.__setitem__(o[1],l[o[2]]),o.__setitem__(4,1))),o[5]())),\
o[5]())),o.__setitem__(8,lambda:not o[3] and
(o[6](),o[7](),o[8]())),o[8](),l.__setitem__(\
o[2],o[0]),o[2])[-1])())

per fare quicksort, eh?
http://p-nand-q.com/python/lambdaizing_quicksort.html

:D

- ∞
Alex Martelli
2004-11-26 16:09:29 UTC
Permalink
theta <***@email.it.is.not.invalid> wrote:
...
Post by theta
per fare quicksort, eh?
Eh pasiensa, dovremo accontentarci di:

def q(L):
if not L: return L
return qs([lt for lt in L if lt<L[0]]) + \
[eq for eq in L if eq==L[0]] + \
qt([gt for gt in L if gt>L[0]])

rinunciando alla chiarezza e concisione dei lambda...


Alex
Enrico Franchi
2004-11-26 19:13:28 UTC
Permalink
Post by Alex Martelli
if not L: return L
return qs([lt for lt in L if lt<L[0]]) + \
[eq for eq in L if eq==L[0]] + \
qt([gt for gt in L if gt>L[0]])
Hey, ma questo e` scritto in Python ;)
--
RiK0


Non credo negli schemi non vincenti.
Alex Martelli
2004-11-26 19:41:14 UTC
Permalink
Post by Enrico Franchi
Post by Alex Martelli
if not L: return L
return qs([lt for lt in L if lt<L[0]]) + \
[eq for eq in L if eq==L[0]] + \
qt([gt for gt in L if gt>L[0]])
Hey, ma questo e` scritto in Python ;)
Eh si`, anche se la differenza rispetto ad Haskell e` minima. In
Haskell definiresti qs due volte, sfruttando il pattern matching
condizionale del compilatore per dire:

qs di lista vuota e` lista vuota;

qs di testa seguita da coda e`
qs degli elementi di coda < testa piu`
gli elementi di coda == testa piu`
qs degli elementi di coda > testa

In Python il compilatore il pattern matching lo fa NON condizionale,
quindi devi ricorrere a un meno elegante 'if'. Ma a parte quello la
struttura e` virtualmente identica (apposta abbiamo copiato le list
comprehension da Hashell).

Sia in Python o in Haskell, questa e` comunque l'espressione piu`
elegante del puro quicksort che io abbia mai visto.


Alex
Enrico Franchi
2004-11-26 20:35:54 UTC
Permalink
Post by Alex Martelli
Sia in Python o in Haskell, questa e` comunque l'espressione piu`
elegante del puro quicksort che io abbia mai visto.
Sono assolutamente d'accordo.
--
RiK0


Non credo negli schemi non vincenti.
Sembro la carta
2004-11-23 07:04:15 UTC
Permalink
Post by theta
Anche di Apple. La documentazione di AppleScript (specie delle
funzionalita' delle .app di Apple o delle Standard Additions, piuttosto
che del linguaggio di base) si riduce spesso ai soli dizionari delle
applicazioni... igh.
e cosa ti manca? :)
--
Splendente in eta` acerba di passione
rosso fiammante,
ma senza eta` matura
marcia impostura
theta
2004-11-23 11:08:28 UTC
Permalink
Post by Sembro la carta
e cosa ti manca? :)
Quante CAVOLO di volte in AppleScript studio ho lanciato maledizioni a
ogni NSReceiverQuellocheèError o NSCannotCreateScriptCommandError perché
AppleScript mi lasciava scrivere codice in un certo modo quando poi non
gli piaceva quel che facevo a runtime...

Solo a cercare dove stavano "i file assegnati ad un certo target" nelle
innumerevoli suite Xcodiche ci sono stato una vita e ancora non li ho
trovati.

Agh.

Meno male che Anteprima di 10.4 e' scriptabile, che era uno dei dolori
che mi affliggevano da una vita :D

- ∞
Sembro la carta
2004-11-23 11:23:55 UTC
Permalink
Post by theta
Quante CAVOLO di volte in AppleScript studio ho lanciato maledizioni a
ogni NSReceiverQuellocheèError o NSCannotCreateScriptCommandError perché
AppleScript mi lasciava scrivere codice in un certo modo quando poi non
gli piaceva quel che facevo a runtime...
e` inevitabilmente connaturato al progetto stesso di AppleScript: non e`
una gerarchia di classi nota e codificata, ma un collante per interagire
con oggetti ed eventi di diverse componenti, che non si conoscono l'un
l'altra. Capisco la frustrazione, ma ti rendeari conto che una qualunque
cetralizzazione operata da Apple castrerebbe ipso facto tutte le
possibilita` che Apple non considera... Ad esempio dovresti "tipizzare"
tutte le applicazioni per quello che fanno, e forzare una lettura per
tipo che sarebbe inevitabilmente castrante per quelle applicazioni che
non rientrano solo in quelle tipologie e gestiscono oggetti diversi e/o
estesi (tipo un text editor che supporta il search & replace, ed un
altro che lo supporta a regex, o ancora cerca dei placeholders o dei
codici... come sarebbe possibile armonizzare il tutto in uno schema?)

Potremmo magari arrivare ad una sorta di DTD per gli oggetti e per gli
eventi, da pubblicare a fianco del dizionario "human"... ma sarebbe
comunque un compito a carico di ogni singolo sviluppatore.
--
Splendente in eta` acerba di passione
rosso fiammante,
ma senza eta` matura
marcia impostura
theta
2004-11-23 14:40:13 UTC
Permalink
Post by Sembro la carta
Potremmo magari arrivare ad una sorta di DTD per gli oggetti e per gli
eventi, da pubblicare a fianco del dizionario "human"... ma sarebbe
comunque un compito a carico di ogni singolo sviluppatore.
Il DTD per gli oggetti e le classi c'e' gia'. Si chiama "dizionario
dell'applicazione" ed e' bello stringente. In Cocoa si mappa 1:1 con le
classi Objective-C dell'app se uno lo desidera. Peccato che sia un
macello da fare, ma vabbe'.

Il punto non e' (solo) quello. Il punto e' che quelli di Apple non hanno
speso una riga una a dirti, ad esempio, come scrivere un ca**lo di
plugin per Xcode. Una. Hanno messo anche il template, ma NON UNA LINEA
DI SPIEGAZIONI.
Io adesso sto cercando quella storia dei file e non la trovo no.
Non riesco nemmeno a trovare la classe file reference, per cui sto
andando a tentoni con script editor, una linea alla volta. Un
nscannotcreateecc. qui e un nsreceiverecc. la'.

- ∞
MarcoS
2004-11-22 16:13:02 UTC
Permalink
Post by Enrico Franchi
Uso indifferentemente GNU/Linux o MacOS X. Ho una buona conoscenza di
entrambi (anche se non sono piu` aggiornatissimo).
In generale mi trovo a svolgere compiti simili in entrambi i sistemi.
Come GNU/Linux uso Debian Sarge.
idem, ma uso quasi sempre solo osx
Post by Enrico Franchi
In generale a me GNOME piace come interfaccia utente. La trovo molto
usabile, e per assurdo quasi piu` maccosa di MacOS X (beh... per
assurdo. in realta` non lo e`).
E mi piace pure molto Aqua.
io sono un fan di KDE :)
Post by Enrico Franchi
E poi vabbe`... per i compiti di tutti i giorni MacOS X e` piu` facile.
Per esempio non devo ricordarmi di installare Flash. Java funziona bene
(su Debian per esempio non e` integratissimo... anzi... un giorno ci
dovro` lavorare su).
quale JVM usi su debian? io avevo provato senza riuscirci ad installare
quella di IBM...
Post by Enrico Franchi
D'altra parte quando sono su GNU/Linux mi manca alla follia MacSOUP
(anche se credo che piano piano lo abbandonero`, troppo poco
'compatibile').
quando sono su osx mi manca da morire KNODE...

cmq dopo aver usato OSX, usare linux mi sembra quasi un
"involuzione"...mi capita spesso di invocare invano exposé e di tentare
arditi drag&drop
L'unica cosa invidiabile è il tool APT, IMO
Enrico Franchi
2004-11-22 21:56:22 UTC
Permalink
Post by MarcoS
quale JVM usi su debian? io avevo provato senza riuscirci ad installare
quella di IBM...
Al momento nessuna. Mi da broken piu` o meno tutti i pacchetti. In
realta` uso Sid (con qualche ramo in experimental), mi sono solo
sbagliato a scrivere :))

[ forza dell'abitudine... ormai parlo solo di quanto e` facile da
installare debian sarge ]
Post by MarcoS
cmq dopo aver usato OSX, usare linux mi sembra quasi un
"involuzione"...mi capita spesso di invocare invano exposé e di tentare
arditi drag&drop
Boh... a me invece i drag and drop fungono bene.
Semmai mi capita di selezionare del testo con il mac e aspettarmi che
sia stato 'copiato' :))
--
RiK0


Non credo negli schemi non vincenti.
EmJey
2004-11-23 01:57:56 UTC
Permalink
Post by MarcoS
quando sono su osx mi manca da morire KNODE...
completamente daccordo, ne stiamo facendo un porting su osx, vuoi unirti
a noi?

EmJey
--
Non prendere la vita troppo sul serio...
non ne uscirai mai vivo
MarcoS
2004-11-23 13:08:02 UTC
Permalink
Post by EmJey
Post by MarcoS
quando sono su osx mi manca da morire KNODE...
completamente daccordo, ne stiamo facendo un porting su osx, vuoi unirti
a noi?
se posso essere utile in qualche modo... sono uno studente di
informatica al secondo anno, ma qualche lavoro di "bassa manovalanza" lo
posso fare...
scrivimi a ***@despammed.com
EmJey
2004-11-23 18:30:39 UTC
Permalink
hai posta

EmJey
--
Non prendere la vita troppo sul serio...
non ne uscirai mai vivo
Enrico Franchi
2004-11-23 21:05:19 UTC
Permalink
Post by EmJey
hai posta
Dai magari un po' di posta anche a me... con Qt sotto MacOS un po' ci
ho sviluppato.
Non so ben dirti se lo trovo il tempo per sviluppare attivamente... ma
almeno da betatester 'consapevole' ve lo faccio :)))
--
RiK0


Non credo negli schemi non vincenti.
uliano
2004-11-22 17:24:17 UTC
Permalink
Post by Enrico Franchi
Su MacOS X questo vale (in parte) per fink. Tutto il resto grava sulla
mia attenzione (vedere quando esce una nuova versione, vedere se e`
compatibile con il resto del mio sistema).
Inoltre FinkCommander imho non e` usabile quanto Synaptic (di recente lo
preferisco perfino ad Aptitude).
fink ha altre sfighe notevoli

la peggiore delle quali e' che ti costringe a duplicare programmi gia'
installati:

volevo vedere a che punto sono arrivati con koffice e gli ho detto di
compilarmelo: e' partito lo scaricamento di 150 pacchetti di cui almeno
4-5 duplicano cose che sono gia' installate (la piu' preoccupante e' il
python) tant'e' che ho messo /sw/bin/:/sw/sbin in fondo al path e non
davanti come vorrebbe lui

spero che basti a salvarmi dai casini, tanto poi fra 2 giorni vengo
preso dal solito raptus e butto tutto/sw (per poi riscaricarmelo quando
mi viene un altro ghiribizzo :-O)

(la compilazione dei 150 e' partita 2 min fa, speriamo bene, la ventola
sta cominciando a pompare seriamente :-O!)
Enrico Franchi
2004-11-22 21:56:25 UTC
Permalink
Post by uliano
fink ha altre sfighe notevoli
la peggiore delle quali e' che ti costringe a duplicare programmi gia'
Giusto. Dimenticavo. Per esempio python... fink ha parecchi pacchetti di
python... ma mi vuole installare il suo caxxo di interprete.
--
RiK0


Non credo negli schemi non vincenti.
EmJey
2004-11-23 01:57:58 UTC
Permalink
Post by Enrico Franchi
Uso indifferentemente GNU/Linux o MacOS X. Ho una buona conoscenza di
entrambi (anche se non sono piu` aggiornatissimo).
stessa situazione
Post by Enrico Franchi
In generale mi trovo a svolgere compiti simili in entrambi i sistemi.
io invece faccio una netta separazione trai compiti svolti su ognuno dei
due.
Post by Enrico Franchi
Come GNU/Linux uso Debian Sarge.
slack, for-ever
Post by Enrico Franchi
Mi chiedo... perche` ogni volta che sono su uno dei due sistemi, deve
mancarmi qualcosa dell'altro?
secondo me ognuno dei due va usato per cio' su cui eccelle: magari un
dual boot potrebbe essere la soluzione ma linux mi piace di piu' su
piattaforma x86
Post by Enrico Franchi
Su MacOS X questo vale (in parte) per fink.
uso apt-get per le 3-4 applicazioni che mi servono gestite cosi', per il
resto cerco pporting nativi.
Post by Enrico Franchi
D'altra parte quando sono su GNU/Linux mi manca alla follia MacSOUP
io lo uso e lo detesto, prima o poi avro' finito il porting di knode
Post by Enrico Franchi
Quando sono su MacOS X per contro mi manca OpenOffice,
non per sembrare eretico ma Mellel+Microsoft Office e' la soluzione
migliore che ho trovato.
Post by Enrico Franchi
E in generale quello che mi manca di GNU/Linux non lo posso aggiungere
pero', dopo aver provato Gnome 2.8 direi che alcune cose stanno
procedendo piu' velocemente di quanto previsto: linux realmente desktop
in 3 anni, secondo me.

EmJey
--
Non prendere la vita troppo sul serio...
non ne uscirai mai vivo
Enrico Franchi
2004-11-23 08:26:26 UTC
Permalink
Post by EmJey
pero', dopo aver provato Gnome 2.8 direi che alcune cose stanno
procedendo piu' velocemente di quanto previsto: linux realmente desktop
in 3 anni, secondo me.
Il problema non e` in GNOME. Quello e` perfetto gia` ora.
Il problema sono:
1) tools di configurazione unificati e facili da usare
2) *installazione e configurazione periferiche*. ma qui bisognerebbe
spiegare alla gente che non possono pretendere che certe cose funzionino
davvero.
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-23 11:11:37 UTC
Permalink
Post by Enrico Franchi
2) *installazione e configurazione periferiche*. ma qui bisognerebbe
spiegare alla gente che non possono pretendere che certe cose funzionino
davvero.
Dipende dalle cose. Se altrove funzionano, perché non devono funzionare
anche sul Pinguino? (Vedi udev con dbus.)
Se poi ti riferivi alle specifiche chiuse, li' si puo' far ben poco.

- ∞
Enrico Franchi
2004-11-23 12:49:35 UTC
Permalink
Post by theta
Dipende dalle cose. Se altrove funzionano, perché non devono funzionare
anche sul Pinguino? (Vedi udev con dbus.)
Se poi ti riferivi alle specifiche chiuse, li' si puo' far ben poco.
Ecco appunto. Oppure alternativamente ti trovi davanti ad hardware
leggermente modificato, per cui viene riconosciuto in un modo, ma
effettivamente funziona un po' in un altro (tipo il fastrate... devi
metterti a patchare i driver... non proprio un esempio di user
friendlyness, permettimi di dirlo).

Ti trovi davanti cose che non hai la piu` pallida idea di cosa siano
*dentro*.

Non solo. Gia` il fatto di 'partizionare' spaventa. La gente comune non
ci e` abituata.

Poi prendi una banale scheda wireless supportata. Devi scaricarti il
firmware da qualche parte, oppure estrarlo dal driver di windows.
Metterlo in una certa cartella...

Insomma... manca ancora molto. E non nascondiamoci dietro un dito. Puo`
essere fatto... ma finche` non si ha il minimo supporto dei produttori
di hardware (il driver di cui ti parlo e` open source, ma il firmware
non e` distribuibile con il driver)....
--
RiK0


Non credo negli schemi non vincenti.
theta
2004-11-23 14:31:57 UTC
Permalink
Post by Enrico Franchi
Insomma... manca ancora molto. E non nascondiamoci dietro un dito. Puo`
essere fatto... ma finche` non si ha il minimo supporto dei produttori
di hardware (il driver di cui ti parlo e` open source, ma il firmware
non e` distribuibile con il driver)....
Avevo gia' sentito tutto cio' in occasione della gente OpenBSDica che
aveva fatto quella petizione per trasformare in aperto il driver di
quell'altra scheda wireless...

Se non fosse per questi brutti "angoli taglienti", Linux sarebbe un
sistema operativo coi controcosiddetti...

...ma, fino ad allora, il Mac avra' ben poco da temere ;D

- ∞
Enrico Franchi
2004-11-23 15:26:30 UTC
Permalink
Post by theta
Avevo gia' sentito tutto cio' in occasione della gente OpenBSDica che
aveva fatto quella petizione per trasformare in aperto il driver di
quell'altra scheda wireless...
Se si fa, io firmo strafirmo e tutto.
Post by theta
Se non fosse per questi brutti "angoli taglienti", Linux sarebbe un
sistema operativo coi controcosiddetti...
Ehg... purtroppo la gente in casa ha dei PC. :)
--
RiK0


Non credo negli schemi non vincenti.
Giuseppe
2004-11-23 07:32:44 UTC
Permalink
Post by Enrico Franchi
Uso indifferentemente GNU/Linux o MacOS X. Ho una buona conoscenza di
entrambi (anche se non sono piu` aggiornatissimo).
In generale mi trovo a svolgere compiti simili in entrambi i sistemi.
Come GNU/Linux uso Debian Sarge.
Faccio anche presente che io GNU/Linux me lo sono configurato per
benino, non sto provando a sostenere che sia piu` facile di MacOS X. Me
la sono sudata. Ma ora ne godo i frutti.
<cut>

Hai installato entrabi i sistemi operativi su un solo mac ?
Enrico Franchi
2004-11-23 08:26:27 UTC
Permalink
Post by Giuseppe
Hai installato entrabi i sistemi operativi su un solo mac ?
No. Sul Mac ho poco spazio. Per GNU/Linux ho un PC apposta (e un vecchio
Mac).
--
RiK0


Non credo negli schemi non vincenti.
micron
2004-11-23 08:40:04 UTC
Permalink
Ho visto molti messaggi a cui avrei dovuto rispondere, ma per non
frammentare il tutto farò un unico messaggio.

Molti hanno detto cosa manca a linux per essere simile a mac os x
(esteticamente e funzionalmente parlando).

Ecco il mio consiglio:
-) kernel 2.6.9 con patch sleep (nel 2.6.10 probabilmente sarà già
integrata), in questo modo gli ibook/pbook G3 e G4 (tranne pbook 12'' per
via della scheda video nvdia) andranno a nanna come con mac os x.
-) xorg (accellerazione 3D su ibook/pbook con schede video ati), inoltre in
futuro supporterà anche trasparenze reali come succede con mac os x (al
momento il tutto è ancora un po' sperimentale e lento)
-) kde 3.3.x
-) un set di icone stile mac
-) un cursore stile mac (ne esiste uno su kde-look.org)
-) tema baghira: su ppc ha ancora un paio di problemi con i colori dei
pulsanti di apertura/chiusura delle finestre, per il resto il look è
identico a quello di mac os x
-) kompose per avere un buon clone di expose
-) kxdocker

ed ecco fatto! :)

Per chi invece volesse usare le applicazione di kde *nativamente* in mac os
x consiglio di guardare il progetto kde on darwin:
http://wiki.befunk.com/tiki-index.php

Al momento funziona abbastanza bene, l'unico neo sono i programmi
leggermenti datati (si potrebbero sempre compilare a mano le nuove
versioni).

Da buon utente gentoo segnalo anche che attualmente è possibile usare il
portage di gentoo anche su mac os x.
Per maggiori info: http://www.gentoo.org oppure
http://www.gentoo.org/doc/it/macos-guide.xml

Se avete delle domande fatevi pure avanti ;)
micron
2004-11-23 08:48:11 UTC
Permalink
[...]
Post by micron
-) kxdocker
Ah.. dimenticavo:
-) amarok: è chi la sente la mancanza di itunes?
-) kdevelop,quanta: per sviluppare in un ambiente grafico ottimo
-) kopete: come client di chat (aol, icq, messenger, yahoo messenger)
-) kvirc / xchat: per chattare su irc

e la lista sarebbe molto lunga... :D
Enrico Franchi
2004-11-23 09:59:34 UTC
Permalink
Post by micron
-) amarok: è chi la sente la mancanza di itunes?
io. iTunes Music Store?
tutt'ora uso script di shell per ascoltare musica.
Post by micron
-) kdevelop,quanta: per sviluppare in un ambiente grafico ottimo
buzz.. dicono tutti che sia ottimo. E io ci credo...
Solo che non riesco a schiodarmi dal Vim.

E comunque in python 9/10 faccio prima a scrivermi a manina il tutto.
Post by micron
-) kopete: come client di chat (aol, icq, messenger, yahoo messenger)
Non chatto.
Post by micron
-) kvirc / xchat: per chattare su irc
Ecco... xchat. Quello si. Lo uso anche su MacOS X (peraltro).
Non mi fa nemmeno rimpiangere la puttanazza... (quanti ricordi con
BitchX :)) )
--
RiK0


Non credo negli schemi non vincenti.
micron
2004-11-23 11:05:01 UTC
Permalink
Post by Enrico Franchi
io. iTunes Music Store?
Non usando iTunes Music Store non so cosa mi perda, ergo non ne sento la
mancanza.
Il bello di Amarok è che supporta la crezione di un db a partire dai tag dei
file mp3/ogg contenuti in dir che puoi specificare. Successivamente puoi
porre vari filtri sul db per fare le stesse cose che compie una library di
itunes.
Post by Enrico Franchi
tutt'ora uso script di shell per ascoltare musica.
prova mp3blaster, molto carino

Dimenticavo un'altro programma notevole: mol (Mac On Linux).
Si tratta di un emulatore che permette di eseguire macos all'interno di
linux. Non è comunque un emulatore come vmware o virtualpc, infatti mol fa
partire macos direttamente dalla sua partizione nativa. Inoltre supporta
altivec, sfruttando direttamente l'hw della macchina (senza creare quindi
un pc virtuale).
Enrico Franchi
2004-11-23 12:49:36 UTC
Permalink
Post by micron
Post by Enrico Franchi
tutt'ora uso script di shell per ascoltare musica.
prova mp3blaster, molto carino
sox. sono anni che uso quello :))
Post by micron
Dimenticavo un'altro programma notevole: mol (Mac On Linux).
Capisco su Pegasos.... ma su un Mac :))
Voglio dire, al piu` mi fa saltare un reboot.

E poi io sono sempre stato contrario ai dual boot. si adattano poco al
mio modo di lavorare, e mi creano problemi sulla sincronizzazione dei
dati. Tutto risolvibile, ma preferisco risolvere alla radice. :))
--
RiK0


Non credo negli schemi non vincenti.
uliano
2004-11-23 09:02:07 UTC
Permalink
Post by micron
Se avete delle domande fatevi pure avanti ;)
Per chi invece volesse usare le applicazione di kde *nativamente* in mac os
http://wiki.befunk.com/tiki-index.php
se installo sta roba e' poi facilmente cestinabile o mi infesta le dir
in modo semi irreversibile?
Post by micron
Al momento funziona abbastanza bene, l'unico neo sono i programmi
leggermenti datati (si potrebbero sempre compilare a mano le nuove
versioni).
intendi le nuove versioni non portate *nativamente* su osx?

altra domanda

volendo giochicchiare con linux sull'imac g5 e avendo il seguente vincolo:

il disco interno DEVE rimanere intoccato, manco un butloader ci può stare!

e avendo un disco firewire esterno con spazio a sufficienza ma, ahime'
tutto assegnato a una partizione HFS+ (volendo posso bacuppare e
riformattare ma che OO, meglio sarebbe potere shrinkare la partizione
senza perdita dei dati...)

cosa mi consigli?
Enrico Franchi
2004-11-23 09:59:34 UTC
Permalink
Post by uliano
e avendo un disco firewire esterno con spazio a sufficienza ma, ahime'
tutto assegnato a una partizione HFS+ (volendo posso bacuppare e
riformattare ma che OO, meglio sarebbe potere shrinkare la partizione
senza perdita dei dati...)
Beh... al momento i tipi di Mdk PPC sostengono che la nuova Mdk si puo`
installare su dischi esterni firewire. Chiaramente io il backup lo
farei.

Se come a me non ti piace Mdk, puoi farlo di certo anche con le altre,
basta capire un minimo come :))
[ probabilmente e` banale ].
--
RiK0


Non credo negli schemi non vincenti.
uliano
2004-11-23 10:19:37 UTC
Permalink
Post by Enrico Franchi
Se come a me non ti piace Mdk,
potendo, debian
Post by Enrico Franchi
puoi farlo di certo anche con le altre,
basta capire un minimo come :))
[ probabilmente e` banale ].
(probabilmente richiede + tempo e risorse di quelle che posso dedicarci)
micron
2004-11-23 11:14:02 UTC
Permalink
Post by uliano
se installo sta roba e' poi facilmente cestinabile o mi infesta le dir
in modo semi irreversibile?
Primo punto delle FAQ:
http://wiki.befunk.com/tiki-index.php?page=FAQ

Ho sperimentato di persona e tutto è andato a buon fine.
Post by uliano
intendi le nuove versioni non portate *nativamente* su osx?
Intendo che il binario di kdevelop disponibile è abbastanza datato.
Per alcuni pacchetti non è un grosso problema, per altri invece un po' mi
secca (dato che le ultime versioni hanno delle features molto interessanti)
Post by uliano
il disco interno DEVE rimanere intoccato, manco un butloader ci può stare!
e avendo un disco firewire esterno con spazio a sufficienza ma, ahime'
tutto assegnato a una partizione HFS+ (volendo posso bacuppare e
riformattare ma che OO, meglio sarebbe potere shrinkare la partizione
senza perdita dei dati...)
cosa mi consigli?
Fai un copia dei dati sul disco firewire, ripartizionalo da mac os x
lasciando dello spazio libero per linux.
Installa una distro su quello spazio libero e poi ha due alternative:
1 - metti yaboot (il boot loader per ppc) sul disco firewire
2 - ti crei un bootdisk, lo metti su un cdrom e fai il boot dal cdrom

Non per spaventarti ma sotto ppc lo schema di partizionamento, boot del
sistema e gli strumenti da utilizzare sono ben diversi dal mondo i386
(supponendo che tu abbia un po' di dimestichezza con fdisk, lilo/grub),
buona fortuna se sei alle prime armi ;)
uliano
2004-11-23 11:30:05 UTC
Permalink
Post by micron
Post by uliano
se installo sta roba e' poi facilmente cestinabile o mi infesta le dir
in modo semi irreversibile?
http://wiki.befunk.com/tiki-index.php?page=FAQ
Ho sperimentato di persona e tutto è andato a buon fine.
ecco, questo intendevo, le faq possono dire quello che vogliono, ma un
po' di fidbec indipendente è meglio
Post by micron
Post by uliano
intendi le nuove versioni non portate *nativamente* su osx?
Intendo che il binario di kdevelop disponibile è abbastanza datato.
Per alcuni pacchetti non è un grosso problema, per altri invece un po' mi
secca (dato che le ultime versioni hanno delle features molto interessanti)
ok ma se prendi i sorgneti nuovi che non sono ancora stati portati pe
rgirare nativamente su osx e li compili mica girano...
Post by micron
Fai un copia dei dati sul disco firewire, ripartizionalo da mac os x
lasciando dello spazio libero per linux.
quindi la formattazione e' d'obbligo
Post by micron
1 - metti yaboot (il boot loader per ppc) sul disco firewire
2 - ti crei un bootdisk, lo metti su un cdrom e fai il boot dal cdrom
Non per spaventarti ma sotto ppc lo schema di partizionamento, boot del
sistema e gli strumenti da utilizzare sono ben diversi dal mondo i386
(supponendo che tu abbia un po' di dimestichezza con fdisk, lilo/grub),
buona fortuna se sei alle prime armi ;)
no beh qualcosina so, sapevo, son passati troppi anni e le tennologie
evolvon veloci (grub non c'era)

con calma daro' un occhio, magari incomincio a fare il becap, poi
riformatto e lascio un po' di spazio (30 giga bastano?), ci sono altre
avvertenze tipo lo spazio per yaboot deve stare in qualche posto
particolare?
Enrico Franchi
2004-11-23 09:59:33 UTC
Permalink
Post by micron
-) kernel 2.6.9 con patch sleep (nel 2.6.10 probabilmente sarà già
integrata), in questo modo gli ibook/pbook G3 e G4 (tranne pbook 12'' per
via della scheda video nvdia) andranno a nanna come con mac os x.
Ecco... io ho proprio quello.
Poi la scheda wireless come sta? Sono riusciti a farla andare?
Post by micron
-) xorg (accellerazione 3D su ibook/pbook con schede video ati), inoltre in
futuro supporterà anche trasparenze reali come succede con mac os x (al
momento il tutto è ancora un po' sperimentale e lento)
Delle trasparenze non me ne puo` fregare di meno.
Post by micron
-) kde 3.3.x
Odio KDE. Ne faccio volentieri a meno.
Post by micron
-) un set di icone stile mac
Mbeh? L'abito mo fa il monaco?
Post by micron
-) un cursore stile mac (ne esiste uno su kde-look.org)
bis.
Post by micron
-) tema baghira: su ppc ha ancora un paio di problemi con i colori dei
pulsanti di apertura/chiusura delle finestre, per il resto il look è
identico a quello di mac os x
Non ho visto un tema uno che clonasse bene Aqua. Dopo di che io sono
contrario ai cloni. Perche` devo fare assomigliare GNU/Linux a Mac?
Post by micron
-) kompose per avere un buon clone di expose
-) kxdocker
ed ecco fatto! :)
Hai clonato il look. Forse.
Il feel nemmeno lontanamente. Le applicazioni continuano a comportarsi
come applicazioni KDE (e non dire che posso usare il famoso 'mac mode').
Poi quando lancio un'applicazione come Gimp, vengono fuori gli altarini
comunque.

GNU/Linux non deve assomigliare a MacOS X, a Windows, ad Amiga, a NeXT
Step o a pinco pallino.

GNOME sta cercando di staccarsi dai modelli e proporre qualcosa di
nuovo. Sta facendo studi di usabilita` (che in parte giungono a
conclusioni cui era gia` arrivata Apple), ma non clona Apple. Nessuno
puo` venirmi a dire questo.

Sono stanco di temi aquosi. Cosi` come all'epoca non mi piaceva fvwm95
che cercava di clonare indovina chi...
Post by micron
Per chi invece volesse usare le applicazione di kde *nativamente* in mac os
http://wiki.befunk.com/tiki-index.php
Come si rapporta con questo:
http://kde.opendarwin.org/

Mortacci loro pero`... io voglio GNOME. Di KDE ne faccio a meno
allegramente pure su GNU/Linux.
Post by micron
Da buon utente gentoo segnalo anche che attualmente è possibile usare il
portage di gentoo anche su mac os x.
Per maggiori info: http://www.gentoo.org oppure
http://www.gentoo.org/doc/it/macos-guide.xml
Funziona bene? Come si integra con i pacchetti che mi installo a mano?
--
RiK0


Non credo negli schemi non vincenti.
Enrico Franchi
2004-11-23 10:05:45 UTC
Permalink
Post by Enrico Franchi
http://kde.opendarwin.org/
Ah... poi per i binari si appoggiano appunto a kde.opendarwin.org
--
RiK0


Non credo negli schemi non vincenti.
micron
2004-11-23 10:59:27 UTC
Permalink
Post by Enrico Franchi
Ecco... io ho proprio quello.
Forse un giorno lo sleep sarà supportato pure dalle nvidia... lo psero
perchè al momento è l'unica cosa che mi trattiene dal prendere un pbook
12'' (soldi a parte :)
Post by Enrico Franchi
Poi la scheda wireless come sta? Sono riusciti a farla andare?
Temo che per quella (ovviamente stiamo parlando della airport extreme) ci
vorrà un po' di tempo... :(
Post by Enrico Franchi
Delle trasparenze non me ne puo` fregare di meno.
Odio KDE. Ne faccio volentieri a meno.
De gustibus, a me per esempio non piace proprio gnome. Al suo posto
preferisco un xfce o un enlightenment
Post by Enrico Franchi
Non ho visto un tema uno che clonasse bene Aqua. Dopo di che io sono
contrario ai cloni. Perche` devo fare assomigliare GNU/Linux a Mac?
Ti assicuro che baghira lo clona veramente bene, prova a cercare un po' di
screenshot su kde-look.org (altrimenti quando ho un po' di tempo ti passo
uno del mio desktop).
Post by Enrico Franchi
Hai clonato il look. Forse.
Il feel nemmeno lontanamente. Le applicazioni continuano a comportarsi
come applicazioni KDE (e non dire che posso usare il famoso 'mac mode').
Poi quando lancio un'applicazione come Gimp, vengono fuori gli altarini
comunque.
Forse perchè gimp non usa le qt? :)
Post by Enrico Franchi
GNU/Linux non deve assomigliare a MacOS X, a Windows, ad Amiga, a NeXT
Step o a pinco pallino.
Concordo, però una delle tante cose positive di linux è che, grazie ai suoi
vari wm, è in grado di avere tutti gli aspetti che vuole. Se una persona è
innamorata del look di os x che male c'è a creare un tema ed una serie di
strumenti che lo "clonino"?
Io personalmente vado un po' ad umore, per un periodo uso un look stile os
x, negli altri alcuni temi prettamente da kde... è li il bello
Post by Enrico Franchi
GNOME sta cercando di staccarsi dai modelli e proporre qualcosa di
nuovo. Sta facendo studi di usabilita` (che in parte giungono a
conclusioni cui era gia` arrivata Apple), ma non clona Apple. Nessuno
puo` venirmi a dire questo.
Mai detto, tanto di cappello a gnome.
Post by Enrico Franchi
Funziona bene? Come si integra con i pacchetti che mi installo a mano?
Al momento è ancora in una fase di sviluppo iniziale. Funziona bene ma i
programmi installabili non sono ancora tantissimi.
Per i programmi che ti installi potrebbero esserci dei problemi se essi
fossero tra le dipendenze di un programma che stai installando. In questo
caso emerge li sovrascriverebbe con una sua versione (a meno che tu non li
metta nella lista dei programmi già installati). Ad ogni modo ti consiglio
di abbandonare le installazioni a mano ed usare direttamente il portage.
Spero di non essere stato troppo difficile, ti consiglio di dare un'occhiata
al funzionamento di gentoo e del suo portage.
Enrico Franchi
2004-11-23 13:04:19 UTC
Permalink
Post by micron
Temo che per quella (ovviamente stiamo parlando della airport extreme) ci
vorrà un po' di tempo... :(
In realta` avevo sentito che c'era chi e` riuscito....
Post by micron
De gustibus, a me per esempio non piace proprio gnome. Al suo posto
preferisco un xfce o un enlightenment
Io prima ero fan di wmaker. Ma mi sono imposto di modernizzarmi a tutti
i costi.
Post by micron
Ti assicuro che baghira lo clona veramente bene, prova a cercare un po' di
screenshot su kde-look.org (altrimenti quando ho un po' di tempo ti passo
uno del mio desktop).
Io ho trovato questo:
http://snipurl.com/au3l

Non e` che una copia grossolana. Ci sono decine di errori. No grazie.
Post by micron
Forse perchè gimp non usa le qt? :)
Poco importa il perche`. E` un fatto.
Lo stesso avviene con xchat e con Emacs (se usi Emacs).

Io uso vim e sarei piu` fortunato perche` avrei kvim...
Post by micron
Concordo, però una delle tante cose positive di linux è che, grazie ai suoi
vari wm, è in grado di avere tutti gli aspetti che vuole. Se una persona è
innamorata del look di os x che male c'è a creare un tema ed una serie di
strumenti che lo "clonino"?
Il fatto che lo clonano male. Liberissimi... ma vedi, quando hai in mano
anche l'originale ti sembra tristissimo il clone.
E poi ci sono un macello di piccole cose che non possono essere clonate.
E stridono. Comunque, de gustibus (salvo che imho e` pure illegale l'uso
della mela mordicchiata che potrebbe essere un marchio registrato).
Post by micron
Al momento è ancora in una fase di sviluppo iniziale. Funziona bene ma i
programmi installabili non sono ancora tantissimi.
Nell'ordine di?
Post by micron
Spero di non essere stato troppo difficile, ti consiglio di dare un'occhiata
al funzionamento di gentoo e del suo portage.
Sono radicalmente contrario a Gentoo. Debianita da tempo immemorabile,
io le mie macchine le devo usare, non posso perdere giornate a
compilare. Giornate ti sembra troppo? Ok. Mezze giornate.
E se parto da Stage 3, che gusto c'e`? Sto con Debian e via :))
--
RiK0


Non credo negli schemi non vincenti.
EmJey
2004-11-23 11:13:42 UTC
Permalink
Post by Enrico Franchi
Post by micron
Per chi invece volesse usare le applicazione di kde *nativamente* in mac os
http://wiki.befunk.com/tiki-index.php
http://kde.opendarwin.org/
prendono i sorgenti da noi, li compilano e li pacchettizzano, a volte
prendono pure direttamente in binari
Post by Enrico Franchi
Mortacci loro pero`...
spero che sia diretto alla squadra di KDEonX, potrei offendermi :-DDD
Post by Enrico Franchi
io voglio GNOME. Di KDE ne faccio a meno
allegramente pure su GNU/Linux.
vuoi iniziare un porting di Gnome su MacOsX? accomodati ma se posso
darti un consiglio metti su un bel gruppo perche' e' una vera ammazzata
(lo e' avendo le librerie gia' portate da qualcun altro, mi immagino che
culo debba essere se devi portare pure le librerie .-P)

EmJey
--
Non prendere la vita troppo sul serio...
non ne uscirai mai vivo
Enrico Franchi
2004-11-23 12:49:36 UTC
Permalink
Post by EmJey
spero che sia diretto alla squadra di KDEonX, potrei offendermi :-DDD
Era un imprecazione generica... perche` quello che voglio io non me lo
fa nessuno :))
Post by EmJey
vuoi iniziare un porting di Gnome su MacOsX? accomodati ma se posso
darti un consiglio metti su un bel gruppo perche' e' una vera ammazzata
(lo e' avendo le librerie gia' portate da qualcun altro, mi immagino che
culo debba essere se devi portare pure le librerie .-P)
E` lo so... il primo passo sarebbe portare le GTK2. Purtroppo da un lato
mi rendo conto che e` un macello incredibile. Sono tante, e per
'rimappare' il tutto su Carbon... forse basterebbe lavorare con gdk...
poi il resto si appoggia quasi tutto li (o per lo meno una volta era
cosi`...).
Ma si... mi rendo conto che e` un dolore atroce. E non ho a disposizione
un numero di persone sufficiente. E soprattutto mi mancano un po' di
skills. Gtk non lo conosco bene. Sembrera` assurdo, ma ho lavorato con
QT (Gtk non lo tocco da credo 3 anni).
Su tutto aggiungiamo che considero le interfacce grafiche un male
necessario (ovvero... preferisco dedicarmi a logica, progettazione,
strutture dati... roba del genere), non credo di essere la persona
giusta.

Poi mi sto rendendo conto di tutti i problemi delle GUI 'non native'.
Sono estremamente piu` lente. Un programma scritto con wx e` molto piu`
lento dello stesso programma scritto con Carbon o con Cocoa.

Certo... ci vogliono... e poi comunque non potrei integrare GNOME in
MacOS X come voglio io... alla fine potrei prenderne solo dei
programmi... ma non ce ne sono in media di cosi` eccellenti da portare
direttamente, e` piu` un feel generalizzato, quello che mi piace.

Insomma... quasi tutta fantasia :)
--
RiK0


Non credo negli schemi non vincenti.
Continua a leggere su narkive:
Loading...