PDA

View Full Version : [C++]Unire più file .exe


Pagine : [1] 2 3

Mazda RX8
29-02-2008, 20:28
Salve, premetto che sò pochissimo (praticamente niente) di questo linguaggio, volevo sapere come faccio ad unire 2 o più .exe...:fagiano:

lo scopo nn è quello di creare trojan o altro, ma è qsto: http://www.hwupgrade.it/forum/showthread.php?p=21295820

cioé unire al programma creato da me CoreTemp...:fagiano:

si può sotto C++?? se no, come potrei fare? sempre se si può...:p

:help: :help:

71104
01-03-2008, 09:52
non ho idea di cosa succeda schiaffando un file exe direttamente al linker come fosse un file oggetto anziché un file immagine (il formato è estremamente simile); si potrebbe provare, ma temo che lo riconosca e che si rifiuti, anche perché nel file immagine se ricordo bene rispetto al file oggetto mancano alcune informazioni di rilocazione.
potresti provare a vedere se esiste qualche programma per convertire un file immagine in un file oggetto (la ritengo una cosa possibile). per file oggetto intendo un file in formato COFF con estensione .obj

Mazda RX8
01-03-2008, 20:38
quello ke hai detto è arabo per me...:stordita:

se ti darei i file tu saresti in grado di unirli? :help:

grazie per la risposta...:)

torrent
01-03-2008, 21:40
Dovresti usare un Exe_Joiner,ma molto probabilmente sarebbe visto come trojan dalla maggior parte degli antivirus...
O fare un sempice bat e assemblarlo con un exeditor,ma credo sarebbero eseguiti in sequenza e non in contemporanea...se poi va ok lo stesso....
C'è anche questo semplice programma, ma purtroppo la versione demo fa ben poco...
http://www.file-joiner.com/
Infine vedi se puo' andar bene cosi'....scusa se c'e' qualcosa di troppo
http://www.megaupload.com/?d=GWRKGWNB ;)
ciao e complimenti per il prog

71104
01-03-2008, 21:45
se ti DAREI i file tu saresti in grado di unirli? :help: AAAAAAAAARRRRRGGH


se ti darei i file tu saresti in grado di unirli? :help: si, a pagamento :Prrr:

Mazda RX8
01-03-2008, 21:45
Dovresti usare un Exe_Joiner,ma molto probabilmente sarebbe visto come trojan dalla maggior parte degli antivirus...
O fare un sempice bat e assemblarlo con un exeditor,ma credo sarebbero eseguiti in sequenza e non in contemporanea...se poi va ok lo stesso....
C'è anche questo semplice programma, ma purtroppo la versione demo fa ben poco...
http://www.file-joiner.com/
Infine vedi se puo' andar bene cosi'....scusa se c'e' qualcosa di troppo
http://www.megaupload.com/?d=GWRKGWNB ;)
ciao e complimenti per il prog

file-joiner l'avevo provato, ma AVIRA me lo riconosce come viruz...:mad:

ed anke il file ke hai uppato su megaupload me lo riconosce come virus... a te lo apre?

Mazda RX8
01-03-2008, 21:47
AAAAAAAAARRRRRGGH

:Prrr: :Prrr:

si, a pagamento :Prrr:

no, vero, lo faresti? :help:

71104
01-03-2008, 21:54
no, vero, lo faresti? :help: si, a pagamento :read:

un bell'exe joiner ad-hoc.

torrent
02-03-2008, 00:29
Prova se in questo modo va meglio ;)
http://www.megaupload.com/?d=SU30RZA4
Questo è quanto da una scansione piuttosto impegnativa...
http://img178.imageshack.us/my.php?image=vscansi4.jpg
Purtroppo più pulito di così nn mi viene proprio...:mc:
notte...

Mazda RX8
02-03-2008, 08:39
si, a pagamento :read:

un bell'exe joiner ad-hoc.

allora niente...;)

Prova se in questo modo va meglio ;)
http://www.megaupload.com/?d=SU30RZA4
Questo è quanto da una scansione piuttosto impegnativa...
http://img178.imageshack.us/my.php?image=vscansi4.jpg
Purtroppo più pulito di così nn mi viene proprio...:mc:
notte...

io nn voglio ke partano separati, ma vorrei una cosa simile...
http://www.pctunerup.com/up//results/_200803/20080302093914_Immagine.PNG


si può fare?

Mazda RX8
03-03-2008, 13:06
up...:help:

nessuno sa come posso fare? :(

71104
03-03-2008, 23:20
up...:help:

nessuno sa come posso fare? :( io lo so ma non te lo dico :asd:

Mazda RX8
04-03-2008, 12:29
io lo so ma non te lo dico :asd:

:ncomment:

Ti prego, dimmelo!!! :cry: :cry:

71104
04-03-2008, 12:57
:ncomment:

Ti prego, dimmelo!!! :cry: :cry: e tu sgancia :ciapet: :Prrr:

Mazda RX8
04-03-2008, 13:00
e tu sgancia :ciapet: :Prrr:

NUUU!!!!:mad: :mad: :D

(:cry:)

PS: quanto dovrei pagare?? :asd:

71104
04-03-2008, 19:10
dipende, prima mi devi passare il programma, devo analizzare la situazione, e devo fare una stima del tempo che ci impiegherei :O

Mazda RX8
04-03-2008, 20:20
ok...:asd:

il programma mio lo trovi qui: http://www.hwupgrade.it/forum/showthread.php?p=21295820
CoreTemp qui: http://www.alcpu.com/CoreTemp/

Mazda RX8
13-03-2008, 13:34
up!!! :cry:

71104
13-03-2008, 14:11
ok...:asd:

il programma mio lo trovi qui: http://www.hwupgrade.it/forum/showthread.php?p=21295820
CoreTemp qui: http://www.alcpu.com/CoreTemp/
non avevo visto questo post ^^'

attendi almeno fino a dopodomani, che fino a domani sto impegnato :O
:stordita:

Mazda RX8
13-03-2008, 14:12
non avevo visto questo post ^^'

attendi almeno fino a dopodomani, che fino a domani sto impegnato :O
:stordita:

ok...:asd:

Mazda RX8
21-03-2008, 12:34
up! :help:

71104
21-03-2008, 19:39
75 euro?

(ed è poco eh...)

Mazda RX8
21-03-2008, 20:42
75 euro?

(ed è poco eh...)

no, è assai...:O

71104
21-03-2008, 20:46
hai solo altre due alternative: trovare qualcuno che te lo faccia per meno e continuare a uppare invano :)

e, seriamente parlando, se trovi qualcuno che te lo faccia per meno fammi sapere, chè mi interessa, e mi interessa anche sapere quanto si fa pagare.

Mazda RX8
21-03-2008, 21:01
hai solo altre due alternative: trovare qualcuno che te lo faccia per meno e continuare a uppare invano :)

e, seriamente parlando, se trovi qualcuno che te lo faccia per meno fammi sapere, chè mi interessa, e mi interessa anche sapere quanto si fa pagare.

ma ste cose nn si possono fare gratis? è un lavoro lungo? :(

0rph3n
21-03-2008, 21:25
ma ste cose nn si possono fare gratis? è un lavoro lungo? :(

beh se hai un'rx8, per racimolare 75 euro ti basta fare a meno di andare a tirar traversi per 2 sere :D

Mazda RX8
21-03-2008, 21:25
beh se hai un'rx8, per racimolare 75 euro ti basta fare a meno di andare a tirar traversi per 2 sere :D

hihihi...:asd:

71104
22-03-2008, 11:50
azz, dovevo chiederne 750 :asd:

Mazda RX8
22-03-2008, 20:23
ma ste cose nn si possono fare gratis? è un lavoro lungo? :(

:(

71104
22-03-2008, 22:28
:( puoi cambiare la faccina da :help: a :( ma la sostanza non cambia: stai uppando invano :rolleyes:

cionci
23-03-2008, 01:55
71104: se non ti interessa aiutarlo non postare

okay
23-03-2008, 11:00
Salve, premetto che sò pochissimo (praticamente niente) di questo linguaggio, volevo sapere come faccio ad unire 2 o più .exe...:fagiano:

lo scopo nn è quello di creare trojan o altro, ma è qsto: http://www.hwupgrade.it/forum/showthread.php?p=21295820

cioé unire al programma creato da me CoreTemp...:fagiano:

si può sotto C++?? se no, come potrei fare? sempre se si può...:p

:help: :help:

si può fare...

Tu hai il tuo programma e vuoi aggiungere un exe nel tuo exe?

l'eseguibile esegue una funzione() in cui ricostruisco un exe, ma può essere qualsiasi cosa .txt .htm ecc ecc, byte per byte completamente funzionante.

Non nel tuo exe ancora, ma a parte, leggi il tuo file exe che vuoi incorporare byte x byte in pratica leggi in input il tuo file .exe che vuoi incorporare:

1. Ogni byte letto lo scrivi in formato numerico che deve corrispondere da 0 a 255 del suo byte letto in una m,atrice stringa
2. Lo scrivi così in output su un file testo:
matrice[0] ="018253013..." ecc ecc
matrice[1] ="018253013..." ecc ecc

ogni terzina corrisponde al valore decimale del byte letto 018 253 013... ecc ecc

copi e incolli il file testo così creato nella funzione che andrà a leggere il tuo exe che lo incorpora così:

questa è la procedura in c:

Diciamo tu hai:


CString c[5424]; //lunghezza dell'exe da incorporare
CString xb;
int i;
int bv;
int n;

e la matrice di bytes così:

c[0] = "077090144000003000000000004000000000255255000000184000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216000000000014031186014000180009205033184001076205033084104105115032112114111103114097109032099097110110111116032098101032114117110032105110032068079083032109111100101046013013010036000000000000000000000065073248216005040150139005040150139005040150139134052152139007040150139005040151139002040150139103055133139000040150139003011157139004040150139194046144139004040150139250008146139004040150139082105099104005040150139000000000000000000000000000000000000000000000000080069000000076001007000101041251060000000000000000000000000224000014033011001006000000032001000000096000000000000000000";

fino a...

c[5423] = "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

//questo è il tuo file in codice ascii decimale. Ora...


fstream fo;
fo.open("c:\\windows\\system\\File.exe", ios::binary | ios::out);
for (n=0;n<=5423;n++) {
bv=strlen(c[n]);

for (i=1;i<= bv/3;i++) {

xb=("%s\n",c[n].Mid((i-1)*3,3));

int nAsc = atoi(xb);
char a = nAsc;

fo<< a;

}
}

fo.close();

//ti troverai l'exe in \system così ricostruito come l'originale

}


ciao

Edit: In fase di lettura del file.exe da incorporare e quindi la stampa dei decimali da 0 a 255 nel file testo, se il byte letto corrisponde a 18 tu devi aggiungere lo 0 scrivendo 018 se è 8 devi aggingere 008:
esempio se ti capita il 13 che è return allora aggiungi lo 0 scrivendo 013 e così via tutti gli altri attaccati.

la fase della ricostruzione te l'ho scritta sopra

Mazda RX8
23-03-2008, 18:35
oddio, è con ke programma dovrei fare tutto ciò?:stordita:

Grazie per l'aiuto eh, ( a differenza di altri...:rolleyes:)

okay
24-03-2008, 09:24
oddio, è con ke programma dovrei fare tutto ciò?:stordita:

Grazie per l'aiuto eh, ( a differenza di altri...:rolleyes:)

il titolo della tua richiesta è: [C++]Unire più file .exe

quindi presumo che tu lo voglia fare in c++:)


...cioé unire al programma creato da me CoreTemp...


hai creato un programma...? in c++...?

se hai creato un programma in c++, come hai scritto e vuoi inglobare nel exe CoreTemp, non devi far altro che:

1. Leggere a parte in input il tuo tuo file.exe CoreTemp.exe byte x byte:

te l'ho scrivo in vb6 faccio prima...


Dim buffile2, testo As String

DstPath = Path & Text1.Text 'nome del file CoreTemp.exe
LnFile = FileLen(DstPath)
If LnFile > 256 Then
nLoop = Fix(LnFile / 256)
'8192
nRemain = LnFile Mod 256
numero = nLoop
Else
nLoop = 0
nRemain = LnFile
numero = 0
End If

Open "CoreTemp.exe" For Binary As #1
For Cn = 1 To nLoop
buffile2 = String(256, " ")
ProgressBar1.Value = Cn
Get #1, , buffile2
Dim e As String
Dim bx, xb As String
' d = Asc("Z")
' Stop
cc(nr) = buffile2
d = Len(buffile2)
bx = "": For i = 1 To d
e = Asc(Mid(buffile2, i, 1))
If Len(e) = 1 Then bx = bx + "00" + e
If Len(e) = 2 Then bx = bx + "0" + e
If Len(e) = 3 Then bx = bx + e
Next i

'testo = "cc(" & nr & ") = " & Chr$(34) & bx & Chr$(34) 'routine per vb6
testo = "c[" & nr & "] = " & Chr$(34) & bx & Chr$(34) 'routine pe c/c++
close #1



ora che hai creato il file testo con dentro:


c[0] = "077090144000003000000000004000000000255255000000184000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216000000000014031186014000180009205033184001076205033084104105115032112114111103114097109032099097110110111116032098101032114117110032105110032068079083032109111100101046013013010036000000000000000000000065073248216005040150139005040150139005040150139134052152139007040150139005040151139002040150139103055133139000040150139003011157139004040150139194046144139004040150139250008146139004040150139082105099104005040150139000000000000000000000000000000000000000000000000080069000000076001007000101041251060000000000000000000000000224000014033011001006000000032001000000096000000000000000000";
c[1] = "020016000000000016000000000016000000000000000016000016000000000016000000004000000000000000000000004000000000000000000000000144001000000016000000000000000000002000000000000000016000000016000000000000016000000016000000000000000000016000000000048049001000136001000000000080001000060000000000000112001000124006000000000000000000000000000000000000000000000000000000000128001000168000000000000048001000028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180080001000120000000000000000000000000000000000000000000000000000000000000000000000000000000000046116101120116000000000096024001000000016000000000032001000000016000000000000000000000000000000000000000000032000000096046114100097116097000000";

fino a...

c[384] = "078066049048000000000000101041251060001000000000068058092095087079082075092083112121032075066068032072111111107092084104101104111111107092116104101104111111107092068076076092068101098117103092075066068072079079075046112100098000";



apri il file testo e copi e incolli tutte le matrici nel "TUO" programma scritto in c/c++ dentro una funzione:



int i=0;
int bv=0;
CString c[384];
CString xb;

CreaFile()
{

c[0] = "077090144000003000000000004000000000255255000000184000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216000000000014031186014000180009205033184001076205033084104105115032112114111103114097109032099097110110111116032098101032114117110032105110032068079083032109111100101046013013010036000000000000000000000065073248216005040150139005040150139005040150139134052152139007040150139005040151139002040150139103055133139000040150139003011157139004040150139194046144139004040150139250008146139004040150139082105099104005040150139000000000000000000000000000000000000000000000000080069000000076001007000101041251060000000000000000000000000224000014033011001006000000032001000000096000000000000000000";
c[1] = "020016000000000016000000000016000000000000000016000016000000000016000000004000000000000000000000004000000000000000000000000144001000000016000000000000000000002000000000000000016000000016000000000000016000000016000000000000000000016000000000048049001000136001000000000080001000060000000000000112001000124006000000000000000000000000000000000000000000000000000000000128001000168000000000000048001000028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180080001000120000000000000000000000000000000000000000000000000000000000000000000000000000000000046116101120116000000000096024001000000016000000000032001000000016000000000000000000000000000000000000000000032000000096046114100097116097000000";


//fino a...

c[383] = "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
c[384] = "078066049048000000000000101041251060001000000000068058092095087079082075092083112121032075066068032072111111107092084104101104111111107092116104101104111111107092068076076092068101098117103092075066068072079079075046112100098000";


fstream fo;
fo.open("CoreTemp.exe", ios::binary | ios::out);

for (int n=0;n<=384;n++) {
bv=strlen(c[n]);

for (i=1;i<= bv/3;i++) {

xb=("%s\n",c[n].Mid((i-1)*3,3));

int nAsc = atoi(xb);
char a = nAsc;



fo<< a;

}
}
fo.close();

//ti troverai CoreTemp.exe ricostruito sul tuo pc
}




si capisce cionci...?

Mazda RX8
24-03-2008, 09:28
devo usare visual studio?

okay
24-03-2008, 09:31
devo usare visual studio?

scusami ma hai scritto che hai creato un programma in c oppure è una balla?

Non necessariamente visual studio puoi usare qualsiasi linguaggio di programmazione

Mazda RX8
24-03-2008, 09:32
scusami ma hai scritto che hai creato un programma in c oppure è una balla?

nn è stato proprio creato, più ke altro è stato modificato cn dei dissassemblatori exe...

okay
24-03-2008, 09:39
nn è stato proprio creato, più ke altro è stato modificato cn dei dissassemblatori exe...

okay

io ti ho scritto come fare programmando... ora le cose sono 2:

o impari un linguaggio di programmazione e applichi ciò che ti ho scritto oppure vai su google dove puoi trovare dei programmi già pronti che ti consentono di unire + file.

Mazda RX8
24-03-2008, 09:42
okay

io ti ho scritto come fare programmando... ora le cose sono 2:

o impari un linguaggio di programmazione e applichi ciò che ti ho scritto oppure vai su google dove puoi trovare dei programmi già pronti che ti consentono di unire + file.

ma dall'exe già pronto non si può aggiungere ciò che mi hai detto?

i programmi già pronti ke uniscono gli exe nn fanno altro ke farli partire uno dopo l'altro, io invece voglio una cosa del genere...

http://www.pctunerup.com/up//results/_200803/20080302093914_Immagine.PNG

okay
24-03-2008, 09:55
ma dall'exe già pronto non si può aggiungere ciò che mi hai detto?

i programmi già pronti ke uniscono gli exe nn fanno altro ke farli partire uno dopo l'altro, io invece voglio una cosa del genere...

http://www.pctunerup.com/up//results/_200803/20080302093914_Immagine.PNG

si può fare...

ma per noi programmatori è assurdo prendere un'exe di terze parti andare sull'assembly e incorporarci nuove routine...

programmare vuol dire che se a me piace un programma di terze parti e trovo che sarebbe bello avere altre funzioni non faccio altro che scrivermelo da solo e aggiungere tutto ciò che mi aggrada nel giro di 2/3 giorni o una settimana ho il "MIO" programma tagliato come piace a me.

Nel tuo caso si può fare ma ci vorrebbero centinaia di anni di lavoro e non è detto che raggiungi la perfezione cioè senza "bug" perlomeno per quello che intendi fare.

Infatti come puoi vedere con poche righe di codice e un pò di esperienza, frutto di studi fatti in programmazione, puoi ottenere ciò che chiedi in poche ore di lavoro facendo fare al tuo programma ciò che vuoi ovvero "tagliartelo come meglio ti aggrada..."


ciao

p.s dai post fatti mi pare che ci stai sbattendo la testa da anni...

se impari a programmare te lo fai da solo in pochi minuti.

se così decidessi di fare, benvenuto in questo forum, dove l'aiuto ti sarà dato

stammi bene


ciao

Mazda RX8
24-03-2008, 13:08
umh, dovrò imparare a programmare...:fagiano:

Grazie tantissimo per il tuo aiuto...:)

cdimauro
24-03-2008, 16:24
Per imparare a programmare: http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm :fiufiu:

71104
24-03-2008, 16:26
è mia opinione che la probabilità che tu riesca ad ottenere quello che vuoi imparando a programmare e poi facendoti guidare da okay sia paragonabile a quella della collisione di due GUID :asd:
e domando scusa a cionci ma stavolta ci voleva proprio: voglio solo risparmiargli una enorme fatica che non lo porterebbe a nulla :)
(hai detto di postare solo se intendevo aiutarlo: sto cercando di aiutarlo.)

71104
24-03-2008, 16:27
Per imparare a programmare: http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm :fiufiu: se, buonanotte :asd:

okay
24-03-2008, 17:28
è mia opinione che la probabilità che tu riesca ad ottenere quello che vuoi imparando a programmare e poi facendoti guidare da okay sia paragonabile a quella della collisione di due GUID :asd:
e domando scusa a cionci ma stavolta ci voleva proprio: voglio solo risparmiargli una enorme fatica che non lo porterebbe a nulla :)
(hai detto di postare solo se intendevo aiutarlo: sto cercando di aiutarlo.)

..e poi si domandano perchè sono bollinati di rosso... mhà

per i bruciori di stomaco... prima e dopo i post

Mazda RX8
24-03-2008, 20:09
mi sto confondendo...:cry: :cry:

cdimauro
24-03-2008, 20:18
Abbi fede: http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm

"In Python we trust" (c) 2008 cdimauro ;)

Mazda RX8
24-03-2008, 20:38
Abbi fede: http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm

"In Python we trust" (c) 2008 cdimauro ;)

leggerò...:fagiano:

71104
24-03-2008, 21:14
voglio assolutamente sapere come va a finire questa storia... :asd:
Mazda, ti prego, tienici aggiornati :D

cdimauro
24-03-2008, 21:25
Eretico! Non pensavi neppure che con Python fosse possibile pacioccare con COM, ActiveX, e winputtanate32 varie. :O

Mazda RX8
24-03-2008, 21:30
voglio assolutamente sapere come va a finire questa storia... :asd:
Mazda, ti prego, tienici aggiornati :D

beh, dovrete aspettare un bel pò... devo cominciare ad imparare sto linguaggio...:D

okay
24-03-2008, 22:20
beh, dovrete aspettare un bel pò... devo cominciare ad imparare sto linguaggio...:D

Ottimo... ti bollino di verde;)

Innanzitutto hai risparmiato 75€

Se riesci a compilare un exe in python ci sei quasi riuscito.

Convertire quello che ti ho postato da vb6/c++ in python sarebbero veramente poche righe di codice...

dai che c'è la fai... vediamo in quanti post riesci a fare bingo!

Secondo me un post per installare il tutto, un post per compilare il primo exe, un'altro post per leggere e scrivere su file e... una trentina di post per convertire il code in python.

mi piaci perchè sei determinato... vai magda vai...;) ;)

71104
24-03-2008, 22:58
Eretico! Non pensavi neppure che con Python fosse possibile pacioccare con COM, ActiveX, e winputtanate32 varie. :O si si, ok, :asd: stiamo a vedere se, e soprattuto quando, Mazda riuscirà nell'impresa di fondere due eseguibili e due diverse interfacce grafiche partendo da... l'apprendimento di Python :rotfl:

io credo che il tempo che perderà (inutilmente) su questa cosa vale molto di più di 75 euro :)

cdimauro
24-03-2008, 23:55
Se impara a programmare il tempo speso varrà ben più dei 75€ che gli hai chiesto. :cool:

Mazda RX8
25-03-2008, 10:31
spero di capirci...:p

torrent
25-03-2008, 10:39
Immatricolato...:cool:

cdimauro
25-03-2008, 10:41
spero di capirci...:p
Non vedo perché non dovresti: hai mica deficienze neuronali? Non mi pare. ;)

Poi sta sicuro che partendo con Python hai MOOOOOOOLTE più possibilità di capire le nozioni della programmazione, rispetto a linguaggi come C/C++ et similia, perché è decisamente più semplice (e leggibile) come linguaggio. :cool:

okay
25-03-2008, 10:42
Iscritto:cool:

bollinato di verde;) ;)

avete installato? in che fase siete.

bisogna convertire il code postato da okay da vb6 e/o c++ in python!

io non conosco python ma cdimauro si;)

forza gente...

Mazda RX8
25-03-2008, 10:44
Grazie ragazzi!! :cry: :cry:

71104
25-03-2008, 12:59
Grazie ragazzi!! :cry: :cry: dai che faccio anch'io il tifo per te; come ho già detto, tienici informati :D
(mi iscrivo al thread :asd: )

killer queen
25-03-2008, 13:44
mi iscrivo anche io! :D

voglio sapere come va a finire. :O

DAI MAZDA SEI TUTTI NOI!!!!!!!

killer queen
26-03-2008, 10:23
poichè non riceviamo più risposta, non vorrei sia successo qualcosa di strano... :stordita:
Mazda sollevati! ti dedico quasta canzone: link (http://www.derelitti.com/ballata_del_programmatore/) :O

Mazda RX8
26-03-2008, 13:47
ragazzi, nn posso imparare il C++ in un giorno...:D

cdimauro
26-03-2008, 13:49
Infatti ti conviene partire con Python... ;)

cionci
26-03-2008, 13:52
Infatti ti conviene partire con Python... ;)
Un suggerimento un tantino estremistico ;) Certo è che C++ non è il linguaggio migliore da cui partire.

Mazda RX8
26-03-2008, 13:53
Un suggerimento un tantino estremistico ;) Certo è che C++ non è il linguaggio migliore da cui partire.

e da cosa parto? :(

cionci
26-03-2008, 13:55
e da cosa parto? :(
Imho Java...

Mazda RX8
26-03-2008, 13:57
Imho Java...

e a cosa mi può servire il JAVA? è più semplice del C++?

cionci
26-03-2008, 14:01
e a cosa mi può servire il JAVA? è più semplice del C++?
E' più semplice da imparare del C++ sicuramente.

Mazda RX8
26-03-2008, 14:04
:cry: :cry:


ke devo fare?? :cry: :cry:

cdimauro
26-03-2008, 14:08
Python: è più facile di Java. :cool:

khelidan1980
26-03-2008, 14:09
:cry: :cry:


ke devo fare?? :cry: :cry:

te l'hanno detto la via piu semplice è impararsi un linguaggio,ti permetterà di risolvere questo problema ma ciò è solo un dettaglio,il fine ultimo sarà aver imparato un linguaggio di programmazione,comunque appoggio anchio java:
tieni:

http://www.claudiodesio.com/

buono studio! :D

cionci
26-03-2008, 14:09
Python: è più facile di Java. :cool:
Ma anche peggiore come linguaggio :O
Anche php è più facile di python...eppure nessuno si sognerebbe mai di consigliarlo.

okay
26-03-2008, 14:18
:cry: :cry:


ke devo fare?? :cry: :cry:

i passaggi erano:

1. Installazione di python o altro
2. Lettura e scrittura su file

e poi altri 30 post per tradurre il code postato che è quello che ti serviva di fare.

Devi iniziare a digitare...

p.s. Sii deciso installa python o visual studio e iniziamo siamo tutti quì

Il tuo target del 3d è: unire uno o + file dentro l'exe

coraggio vai al punto 1) intanto

cdimauro
26-03-2008, 14:19
Ma anche peggiore come linguaggio :O
Opinabile. :O
Anche php è più facile di python...eppure nessuno si sognerebbe mai di consigliarlo.
Perché NON è più facile di Python. ;)

cionci
26-03-2008, 14:20
Opinabile. :O
Opinabile anche il contrario :O

Mazda RX8
26-03-2008, 14:21
aiuto, mi sto perdendo! :cry: :cry:

khelidan1980
26-03-2008, 14:23
aiuto, mi sto perdendo! :cry: :cry:

1- hai scelto il linguaggio?Python o java?mi sembrava fossi piu indirizzato sul primo comunque la cosa per ora è equivalente,scegli uno o l'altro

okay
26-03-2008, 14:25
aiuto, mi sto perdendo! :cry: :cry:

dai su... non fare così...:eek:

Hai installato sto python si o no

Non perdere tempo...sù!

cionci
26-03-2008, 14:25
1- hai scelto il linguaggio?Python o java?mi sembrava fossi piu indirizzato sul primo comunque la cosa per ora è equivalente,scegli uno o l'altro
Veramente era partito da C++ ;)

khelidan1980
26-03-2008, 14:27
Veramente era partito da C++ ;)

ah gia vero! :D avevo automaticamente ristretto il campo! ;)

killer queen
26-03-2008, 14:27
si infatti, il titolo è per il c++.

Mazda RX8
26-03-2008, 14:30
andiamoci così, qual'è il linguaggio più semplice per fare ciò ke voglio?

cdimauro
26-03-2008, 14:32
Python

okay
26-03-2008, 14:33
Veramente era partito da C++ ;)


si c++ va benone...

credo che abbia visual studio.

dai che ci divertiamo dopo che avrai unito l'exe inglobato da codice dentro l'exe origine e incominci a capirci qualcosa non ci abbandoni + saremmo noi che litigheremo per il code + opportuno e + breve...;)

già sta nascendo un flame inutile... se installi è meglio così un dente/post in meno

cionci
26-03-2008, 14:33
andiamoci così, qual'è il linguaggio più semplice per fare ciò ke voglio?
Io sinceramente non ho ancora ben capito quello che vuoi fare...se ti puoi spiegare per l'ultima volta.

okay
26-03-2008, 14:34
andiamoci così, qual'è il linguaggio più semplice per fare ciò ke voglio?

si mi intriga python e la conversione da vb6 e/o c++

Mazda RX8
26-03-2008, 14:34
Io sinceramente non ho ancora ben capito quello che vuoi fare...se ti puoi spiegare per l'ultima volta.

voglio unire un pogramma dentro l'altro...:fagiano:

khelidan1980
26-03-2008, 14:36
si infatti fai prima a dire ho installato xxx e poi si parte,tanto si può fare con tutti linguaggi citati


P.s:forse mi sbaglio ma non credo che il titolo del thread sia stato scelto in modo consapevole per i suoi fini! ;)

cionci
26-03-2008, 14:38
voglio unire un pogramma dentro l'altro...:fagiano:
Spiegati meglio...vuoi unire le funzionalità di un programma dentro ad un altro ?

killer queen
26-03-2008, 14:38
segui il titolo del thread e parti con il c++.
inutile perdere tempo a sceglere il linguaggio. :O

morskott
26-03-2008, 14:45
Ma visto che l'exe di partenza ha una GUI già prefabbricata non può giostrasela con gli stream console (se fosse stata una CLI poteva reindirizzando stoud e stin incorpore quell'exe in una sua funzione). Ad un primo acchitto dovrebbe tramite decompilazione capire esattamente le funzioni che la GUI va ad eseguire e trovare un modo per chiamarsele lui. Per esempio la GUI fa vedere la temperatura della CPU chiamando una funzione "int getCPUTemp()" che in qualche modo dovrà esser lui a chiamare dal suo programma trattando l'exe di origine come una mera libreria (sul COME farlo non c'ho ancora pensato). Tanto vale andare ancora piu "sotto il cofano" e cercare qualche funzione del SO che ti dice il dato di interesse, senza appoggiarsi ad altri eseguibili.
Se invece il problema era di far vedere la GUI gia esistente DENTRO un'altra GUI di un altro programma (esistente (arghhhhh) o da fare (già ,penso, leggermente meglio)) senza andare a sfiorare l'exe di partenza, bhe alzo le mani e mi affido a divinità superiori visto che ad occhio ci vorrebbe il buon caro vecchio Tom :sofico:

71104
26-03-2008, 14:48
:rolleyes:

Mazda RX8
26-03-2008, 14:51
Spiegati meglio...vuoi unire le funzionalità di un programma dentro ad un altro ?

ESATTO!! :)

killer queen
26-03-2008, 14:53
ESATTO!! :)

mazda ma invece di stare li a discutere, scegli un linguaggio e inizia a studiare. :doh:

cionci
26-03-2008, 14:55
ESATTO!! :)
Allora scordati Python, scordati Java, l'unico modo in cui puoi farlo, se non hai a disposizione il codice sorgente del programma, è con conoscenze avanzate delle API di Windows. Il linguaggio: qualsiasi che permetta di accedere direttamente e senza troppi problemi alle API di Windows, quindi C, C++ o qualsiasi linguaggio .Net.
Quello che stavano cercando di farti fare finora era andare ad inserire un exe all'interno di un sorgente ed andarlo ad eseguire a runtime, cosa che non c'entrava assolutamente niente con quello che volevi fare.

Ti ricordo anche che non è legale andare a modificare programmi già fatti di cui non hai il codice sorgente.

cionci
26-03-2008, 14:57
mazda ma invece di stare li a discutere, scegli un linguaggio e inizia a studiare. :doh:
Per quello che vuole fare ci vuole:
- conoscere bene un linguaggio che permetta di usare le API di Windows
- conoscere bene le API di Windows
Quindi ne riparliamo fra qualche annetto.

khelidan1980
26-03-2008, 14:57
Ti ricordo anche che non è legale andare a modificare programmi già fatti di cui non hai il codice sorgente.

Infatti anche perchè quelli di cpu-z vendono il loro development kit,quindi non credo proprio sia legale dissamblare il loro programma

Mazda RX8
26-03-2008, 15:00
Allora scordati Python, scordati Java, l'unico modo in cui puoi farlo, se non hai a disposizione il codice sorgente del programma, è con conoscenze avanzate delle API di Windows. Il linguaggio: qualsiasi che permetta di accedere direttamente e senza troppi problemi alle API di Windows, quindi C, C++ o qualsiasi linguaggio .Net.
Quello che stavano cercando di farti fare finora era andare ad inserire un exe all'interno di un sorgente ed andarlo ad eseguire a runtime, cosa che non c'entrava assolutamente niente con quello che volevi fare.

Ti ricordo anche che non è legale andare a modificare programmi già fatti di cui non hai il codice sorgente.

e se lo creassi da me? tutto da capo, senza prendere spunto da cpu-z?? ke linguaggio dovrei imparare?

71104
26-03-2008, 15:01
Quindi ne riparliamo fra qualche annetto. bingo... ce n'è voluto ma finalmente ci siete arrivati :rolleyes:

okay
26-03-2008, 15:02
ESATTO!! :)

aspetta una attimo... perchè questo è un dettaglio importante;)

Tu vuoi fare che da un exe di 3 parti lanci la funzionalità di un'altro programma inglobato nell'exe di 3 parti?

Il discorso è differente da quello che avevo capito io.

Io intendo che una volta compilato un TUO exe (python vb6 c++) con minimo un pulsante, tanto per iniziare, lanci CoreTemp che come immagine byte x byte si trovi in una funzione del tuo exe in quanto cliccando sul pulsante ricostruisci CoreTemp.exe e lo lanci allora a questo punto puoi usare CoreTemp... ecco il code che ho postato serve per fare questo inglobare un exe nel tuo exe, non di terze parti, costruire il file.exe fare ciò che si crede di fare e magari eliminarlo. Poi magari cliccare un'altro pulsante e costruire un'altro exe o altro txt, htm ecc ecc

cdimauro
26-03-2008, 15:02
Allora scordati Python, scordati Java, l'unico modo in cui puoi farlo, se non hai a disposizione il codice sorgente del programma, è con conoscenze avanzate delle API di Windows. Il linguaggio: qualsiasi che permetta di accedere direttamente e senza troppi problemi alle API di Windows, quindi C, C++ o qualsiasi linguaggio .Net.
Quello che stavano cercando di farti fare finora era andare ad inserire un exe all'interno di un sorgente ed andarlo ad eseguire a runtime, cosa che non c'entrava assolutamente niente con quello che volevi fare.

Ti ricordo anche che non è legale andare a modificare programmi già fatti di cui non hai il codice sorgente.
Lo puoi fare anche con Python. ;)

Tra l'altro Python per .NET c'è già: si chiama IronPython. :p

killer queen
26-03-2008, 15:02
Per quello che vuole fare ci vuole:
- conoscere bene un linguaggio che permetta di usare le API di Windows
- conoscere bene le API di Windows
Quindi ne riparliamo fra qualche annetto.

eh infatti, sta partendo da zero. :stordita:

P.S. un modo più veloce c'è! pagare 75 euro a 71104. :asd:
(giustamente si skerza ;) )

morskott
26-03-2008, 15:03
bingo... ce n'è voluto ma finalmente ci siete arrivati :rolleyes:

che abbiamo vinto? Ma i secondi posti mi sa che non son premiati, vero?

cionci
26-03-2008, 15:03
e se lo creassi da me? tutto da capo, senza prendere spunto da cpu-z?? ke linguaggio dovrei imparare?
Anche qui ti serve molto:
- necessità di un framework grafico
- molto probabilmente (dipende da ciò che vuoi fare) possibilità di scrivere un driver che acceda direttamente all'hardware

Ad occhio potrei consigliarti C# o Java per l'interfaccia e C++ per il driver...o solo C++ con wxWidgets o QT4 per l'interfaccia.
Ma anche qui ci vogliono anni.

cionci
26-03-2008, 15:04
Tra l'altro Python per .NET c'è già: si chiama IronPython. :p
Che culo :asd:

Mazda RX8
26-03-2008, 15:07
mi sa ke abbandono l'idea...:stordita:

cdimauro
26-03-2008, 15:08
Che culo :asd:
Ed è mantenuto da un tizio di MS, tra l'altro. :D

71104
26-03-2008, 15:08
mi sa ke abbandono l'idea...:stordita: minchia, pur di non cacciare sti 75 euri... :ciapet:
tu non hai una Mazda, dico bene? :asd:

killer queen
26-03-2008, 15:08
mi sa ke abbandono l'idea...:stordita:

io lo sapevo che andava a finire così :doh:

^TiGeRShArK^
26-03-2008, 15:09
bingo... ce n'è voluto ma finalmente ci siete arrivati :rolleyes:
:rotfl:
ah regà, me fate morì :asd:

cionci
26-03-2008, 15:10
mi sa ke abbandono l'idea...:stordita:
Comunque potrebbe essere un buon motivo per iniziare a studiare un linguaggio e, visto il tuo scopo, ti posso consigliare un linguaggio con sintassi C-style come Java o C#, che sicuramente ti renderebbe più facile il passaggio ad un linguaggio come C++. Anzi probabilmente, visto l'obiettivo che ti poni, il migliore per iniziare è proprio C#.

71104
26-03-2008, 15:11
Comunque potrebbe essere un buon motivo per iniziare a studiare un linguaggio e, visto il tuo scopo, ti posso consigliare un linguaggio con sintassi C-style come Java o C#, che sicuramente ti renderebbe più facile il passaggio ad un linguaggio come C++. Anzi probabilmente, visto l'obiettivo che ti poni, il migliore per iniziare è proprio C#. ROTFL :rotfl:

killer queen
26-03-2008, 15:12
:rotfl:
ah regà, me fate morì :asd:

ci sono sezioni in questo forum che sono terribili! :asd:

Mazda RX8
26-03-2008, 15:14
Comunque potrebbe essere un buon motivo per iniziare a studiare un linguaggio e, visto il tuo scopo, ti posso consigliare un linguaggio con sintassi C-style come Java o C#, che sicuramente ti renderebbe più facile il passaggio ad un linguaggio come C++. Anzi probabilmente, visto l'obiettivo che ti poni, il migliore per iniziare è proprio C#.

sicuro?? confermate?:stordita:

cionci
26-03-2008, 15:14
ROTFL :rotfl:
:mbe:

71104
26-03-2008, 15:15
sicuro?? confermate?:stordita: 1) cdimauro non confermerà mai :asd:
2) questo nuovo post comunque non riduce i tempi necessari a raggiungere uno qualsiasi dei tuoi obiettivi (rifare il programma o modificare quello esistente).

71104
26-03-2008, 15:16
:mbe: chiedo scusa :D, è che ogni volta che vedo un potenziale cliente lo concepisco in una maniera tutta particolare; lo vedo come uno che della programmazione non gliene potrebbe fregà de meno :asd:

||ElChE||88
26-03-2008, 15:17
sicuro?? confermate?:stordita:
[confusione mode]
No, vai di COBOL o Fortran.
[/confusione mode]

cdimauro
26-03-2008, 15:18
sicuro?? confermate?:stordita:
No. :O

71104
26-03-2008, 15:18
[confusione mode]
No, vai di COBOL o Fortran.
[/confusione mode] avrei detto Simula :O

71104
26-03-2008, 15:19
No. :O :asd:

morskott
26-03-2008, 15:21
ma il buon caro vecchio assembler non glielo consiglia nessuno? :D

71104
26-03-2008, 15:26
ma il buon caro vecchio assembler non glielo consiglia nessuno? :D e mi pare giusto, e allora io a questo punto ci andrei dritto con un assembler coi controcoglioni: MASM :O

||ElChE||88
26-03-2008, 15:26
ma il buon caro vecchio assembler non glielo consiglia nessuno? :D
O anche linguaggio macchina...

cionci
26-03-2008, 15:28
No. :O
xyz: voglio scrivere un sistema operativo: cosa mi consigliate ?
cdimauro: Python, c'è il progetto bootPython che permette di inserire l'interprete Python in un boot record e scriverci sopra in Python

zyx: voglio scrivrere un driver per Windows: che linguaggio mi consigliate ?
cdimauro: Python, esiste HokutoPython che con la forza delle stelle di Hokuto permette di inserire l'interprete Python sotto forma di driver in modo da poter scrivere il device driver in Python

:rotfl:
Tutti stanno scrivendo in altri linguaggi sistemi per l'integrazione di Python Vs resto del mondo. Alla fine tutti scriveranno in altri linguaggi sistemi per l'integrazione di Python e nessuno scriverà più in Python :asd:

okay
26-03-2008, 15:35
xyz: voglio scrivere un sistema operativo: cosa mi consigliate ?
cdimauro: Python, c'è il progetto bootPython che permette di inserire l'interprete Python in un boot record e scriverci sopra in Python

zyx: voglio scrivrere un driver per Windows: che linguaggio mi consigliate ?
cdimauro: Python, esiste HokutoPython che con la forza delle stelle di Hokuto permette di inserire l'interprete Python sotto forma di driver in modo da poter scrivere il device driver in Python

:rotfl:
Tutti stanno scrivendo in altri linguaggi sistemi per l'integrazione di Python Vs resto del mondo. Alla fine tutti scriveranno in altri linguaggi sistemi per l'integrazione di Python e nessuno scriverà più in Python :asd:

;)

Se stai alla guida della tua auto e sei ad un casello premendo il pulsante "python" ti troverai istantaneamente all'altro casello se premi "altro" una scritta dirà "operazione non consentita... riprova, tralascia, ignora";)

cdimauro
26-03-2008, 15:36
ma il buon caro vecchio assembler non glielo consiglia nessuno? :D
Assembly.
xyz: voglio scrivere un sistema operativo: cosa mi consigliate ?
cdimauro: Python, c'è il progetto bootPython che permette di inserire l'interprete Python in un boot record e scriverci sopra in Python

zyx: voglio scrivrere un driver per Windows: che linguaggio mi consigliate ?
cdimauro: Python, esiste HokutoPython che con la forza delle stelle di Hokuto permette di inserire l'interprete Python sotto forma di driver in modo da poter scrivere il device driver in Python

:rotfl:
Tutti stanno scrivendo in altri linguaggi sistemi per l'integrazione di Python Vs resto del mondo. Alla fine tutti scriveranno in altri linguaggi sistemi per l'integrazione di Python e nessuno scriverà più in Python :asd:
Non ho mai detto che Python serva per qualunque cosa, Riccardo.

Take it easy. :)

cionci
26-03-2008, 15:41
Non ho mai detto che Python serva per qualunque cosa, Riccardo.
Mi sembra proprio di sì...se lo consigli anche per programmare con le API Win32 e con .Net ;)
Comunque voleva essere una battuta :)

cdimauro
26-03-2008, 15:45
L'avevo capito, anche se era un po' troppo tirata. ;)

Comunque con le API win32 è facile lavorarci, grazie a librerie come PyWin32. Tempo fa postai un link ad Alberto, con diversi esempi.

Con .NET... beh, IronPython è un porting "nativo", per cui ci si lavora in maniera naturale... :)

Mazda RX8
26-03-2008, 17:12
e quindi riassumendo?? :stordita:

cdimauro
26-03-2008, 17:18
Se vuoi imparare a programmare, usa Python.

71104
26-03-2008, 17:19
se invece vuoi solo avere il tuo programma bell'e pronto, contattami su MSN (indirizzo nel profilo).

Mazda RX8
26-03-2008, 17:39
voglio una decisione unanime!!! :cry: :cry: :cry:

killer queen
26-03-2008, 17:44
voglio una decisione unanime!!! :cry: :cry: :cry:

l'unanimità non ci sarà mai perchè cdimauro è fissato con il python, cionci giustamente dice di provare con il c# e 71104 vuole farsi pagare per farlo lui e non da opinioni :asd:

Mazda RX8
26-03-2008, 18:22
Te ke mi dici? :asd:

||ElChE||88
26-03-2008, 18:24
Io dico C#. :O

cionci
26-03-2008, 18:28
Se vuoi imparare a programmare, usa Python.
Io la metto così: se vuoi imparare a programmare avvicinandoti al tuo scopo allora impara il C#...

Sinceramente Cesare non capisco con quale criterio tu stia consigliando Python considerando che il suo scopo è realizzare un programma che andrà a lavorare a contatto diretto con l'hardware.

cdimauro
26-03-2008, 19:28
l'unanimità non ci sarà mai perchè cdimauro è fissato con il python, cionci giustamente dice di provare con il c# e 71104 vuole farsi pagare per farlo lui e non da opinioni :asd:
Fissato? Non mi pare. :) Più precisamente, non mi pare di aver pisciato fuori dal seminato, per così dire: non ho proposto Python per scrivere un s.o... ;)
Io la metto così: se vuoi imparare a programmare avvicinandoti al tuo scopo allora impara il C#...

Sinceramente Cesare non capisco con quale criterio tu stia consigliando Python considerando che il suo scopo è realizzare un programma che andrà a lavorare a contatto diretto con l'hardware.
Mi riquoto:

Se vuoi imparare a programmare, usa Python.

Mi sembra che la mia frase sia piuttosto eloquente, no? ;)

Quanto all'interfacciamento con l'hardware, non è precluso a Python.

Anzi, esistono numerose librerie che espongono delle API che permettono di racimolare le informazioni che interessano a Mazda, per cui è sufficente... utilizzarle.

E con Python è una bazzecola farlo direttamente con la libreria standard ctypes http://docs.python.org/lib/module-ctypes.html :O

fek
26-03-2008, 19:43
xyz: voglio scrivere un sistema operativo: cosa mi consigliate ?
cdimauro: Python, c'è il progetto bootPython che permette di inserire l'interprete Python in un boot record e scriverci sopra in Python

zyx: voglio scrivrere un driver per Windows: che linguaggio mi consigliate ?
cdimauro: Python, esiste HokutoPython che con la forza delle stelle di Hokuto permette di inserire l'interprete Python sotto forma di driver in modo da poter scrivere il device driver in Python

:rotfl:
Tutti stanno scrivendo in altri linguaggi sistemi per l'integrazione di Python Vs resto del mondo. Alla fine tutti scriveranno in altri linguaggi sistemi per l'integrazione di Python e nessuno scriverà più in Python :asd:

Come si puo' risolvere il problema della fame nel mondo?
cdimauro: Python, c'e' il progetto jesusPython per moltiplicare i pani e i pesci. L'ultima versione ha problemi a trasformare l'acqua in vino ma stanno lavorando alla patch.

Ho problemi con mia moglie che cosa consigliate?
cidimauro: Python, c'e' il progetto viagraPython, beh, non so se mi spiego, pitone... viagra... nulla di meglio.

cdimauro
26-03-2008, 19:48
Ho problemi con mia moglie che cosa consigliate?

cdimauro: aspetta che ci penso io a risolverli ("casualmente" ho un bel pitone)... :oink: :asd:

dupa
26-03-2008, 19:57
Per far quello che vuoi fare basta trovare una zona dell'exe con zero-padding, metti un jump che ti porta alla zona zero paddata, dove inietti il tuo codice (che potrebbe esser semplicemente una chiamata all'API per eseguire il tuo exe) e infine metti un jump di ritorno da dove eri uscito dal codice originale.

71104
26-03-2008, 20:00
Per far quello che vuoi fare basta trovare una zona dell'exe con zero-padding, metti un jump che ti porta alla zona zero paddata, dove inietti il tuo codice (che potrebbe esser semplicemente una chiamata all'API per eseguire il tuo exe) e infine metti un jump di ritorno da dove eri uscito dal codice originale. inutile e complesso.
edit - e non sempre funzionante.

dupa
26-03-2008, 20:01
inutile e complesso.
edit - e non sempre funzionante.

boh anni fa avevo fatto una cosa del genere, non so se esistono vie + semplici per iniettare codice in un .exe altrui.

questo può essere un tool per iniziare
http://www.hex-rays.com/idapro/

Mazda RX8
26-03-2008, 20:34
ragazzi son sempre più confuso!! :(

killer queen
26-03-2008, 20:45
ragazzi son sempre più confuso!! :(

mazda deciditi, hai intenzione di imparare un linguaggio?
cionci penso che abbia parlato chiaro! :O

Mazda RX8
26-03-2008, 20:51
a casa al momento ho un bel libro di C++, ke faccio?? :O

||ElChE||88
26-03-2008, 21:02
a casa al momento ho un bel libro di C++, ke faccio?? :O
Lo lasci dov'è.
Iniziare col C++ è da http://www.echeat.com/images/gun.gif
Vai di C#. :O

cdimauro
26-03-2008, 21:09
ragazzi son sempre più confuso!! :(
Prima dovresti chiarire se hai intenzione di iniziare a programmare, quindi DA ZERO.

In soldoni: sei più bianco di una camicia lavata con la candeggina, e devi apprendere le BASI della programmazione (per poi andare avanti chiaramente).

In queste condizioni, IMHO, Python è il linguaggio che fa per te.

Se i tuoi obiettivi sono altri, facceli conoscere in modo da indirizzarti meglio. ;)

Mazda RX8
26-03-2008, 21:19
Voglio creare il programma cpu view da zero implementando anke nuove funzionalità

marko.fatto
26-03-2008, 21:22
Voglio creare il programma cpu view da zero implementando anke nuove funzionalità

ma hai o no basi nella programmazione? :mbe:

||ElChE||88
26-03-2008, 21:25
Prima dovresti chiarire se hai intenzione di iniziare a programmare, quindi DA ZERO.
Mi sa che così lo confondiamo ancora di più. :D

Mazda, devi sapere che non tutti i programmatori la pensano allo stesso modo:
Alcuni ti consiglieranno di iniziare con C#, alcuni con C++, altri con Python ed anche con C (questi ultimi sono rari, spesso sono finlandesi ed arroganti).

Forse è meglio che ti informi un po', San Google è sempre disponibile...

marko.fatto
26-03-2008, 21:26
Mi sa che così lo confondiamo ancora di più. :D

Mazda, devi sapere che non tutti i programmatori la pensano allo stesso modo:
Alcuni ti consiglieranno di iniziare con C#, alcuni con C++, altri con Python ed anche con C (questi ultimi sono rari, spesso sono finlandesi ed arroganti).

Forse è meglio che ti informi un po', San Google è sempre disponibile...

questa me la spieghi :asd:

Mazda RX8
26-03-2008, 21:27
ma hai o no basi nella programmazione? :mbe:

no, infatto lo voglio creare da zero...:D

cdimauro
26-03-2008, 21:28
Voglio creare il programma cpu view da zero implementando anke nuove funzionalità
Intanto mi passeresti un link al programma?

Poi rimane la domanda di prima: sei completamente a digiuno di programmazione?

Mazda RX8
26-03-2008, 21:30
Intanto mi passeresti un link al programma?

Poi rimane la domanda di prima: sei completamente a digiuno di programmazione?

http://www.hwupgrade.it/forum/showthread.php?p=21295820

sono totalmente nubbio...:(

killer queen
26-03-2008, 21:30
no, infatto lo voglio creare da zero...:D

lui voleva sapere se hai le basi della programmazione. :O

cdimauro
26-03-2008, 21:44
http://www.hwupgrade.it/forum/showthread.php?p=21295820

sono totalmente nubbio...:(
Scusa, ma come hai fatto a "ridurre" CPU-Z e farlo diventare il "tuo" CPU View? Qualche conoscenza di programmazione dovresti averla, no?

khelidan1980
26-03-2008, 21:54
questa me la spieghi :asd:



http://en.wikipedia.org/wiki/Linus_Torvalds

;)

noto anche per la sua proverbiale pacatezza nordica.....

Mazda RX8
26-03-2008, 21:58
Scusa, ma come hai fatto a "ridurre" CPU-Z e farlo diventare il "tuo" CPU View? Qualche conoscenza di programmazione dovresti averla, no?

beh, devo dire grazie a quei meravigliosi EDIT EXE ke mi han permesso di trafsormare e tradurre molti programmi (anke Cpu-Z)

cionci
26-03-2008, 22:00
Scusa, ma come hai fatto a "ridurre" CPU-Z e farlo diventare il "tuo" CPU View? Qualche conoscenza di programmazione dovresti averla, no?
Ha semplicemente usato un resource editor ;)

Fissato? Non mi pare. :) Più precisamente, non mi pare di aver pisciato fuori dal seminato, per così dire: non ho proposto Python per scrivere un s.o... ;)
Io capisco che se uno chiede "voglio imparare a programmare, quale linguaggio posso usare?" tu gli risponda Python. E' una scelta valida come primo linguaggio.
Ma se uno chiede "Voglio imparare a programmare perché ho come obiettivo creare un programma che si interfaccia direttamente con l'hardware su SO Windows" sicuramente Python è l'ultima scelta nella mia lista e scommetto anche in quella di tutti gli altri che frequentano questa discussione. Prima ci sono C, C++ e tutti i linguaggi .Net.
Se vuoi imparare a programmare, usa Python.
Perché, con gli altri linguaggi non si impara a programmare ? Magari (e non è detto) ci si mette di più, ma conta che se parte da Python dopo dovrebbe impararsi anche un altro linguaggio per eventualmente scriversi un driver, quindi alla fine dei conti la scelta Python è assolutamente deleteria, anche perché per passare da Python ad un linguaggio C-Style il passo è ben più complesso che passare da un linguaggio C-Style ad un altro.

71104
26-03-2008, 22:04
a casa al momento ho un bel libro di C++, ke faccio?? :O vendilo a 75 euro

Mazda RX8
26-03-2008, 22:14
Lol!
Te lo vendo a te così mi fai il lavoro... :D

cdimauro
26-03-2008, 22:15
beh, devo dire grazie a quei meravigliosi EDIT EXE ke mi han permesso di trafsormare e tradurre molti programmi (anke Cpu-Z)
Ha semplicemente usato un resource editor ;)
OK, tutto chiaro. Programmazione: zero. :p
Io capisco che se uno chiede "voglio imparare a programmare, quale linguaggio posso usare?" tu gli risponda Python. E' una scelta valida come primo linguaggio.
Ma se uno chiede "Voglio imparare a programmare perché ho come obiettivo creare un programma che si interfaccia direttamente con l'hardware su SO Windows" sicuramente Python è l'ultima scelta nella mia lista e scommetto anche in quella di tutti gli altri che frequentano questa discussione. Prima ci sono C, C++ e tutti i linguaggi .Net.
Avevo già detto che fra tutti i linguaggi .Net c'è pure IronPython: come la mettiamo? ;)

Avevo anche detto che per recuperare le informazioni che gli servono sono già presenti librerie a cui è facilissimo interfacciarsi.

Aggiungo che la maggior parte del lavoro che dovrà fare sarà quello di presentare i dati.

Bastano come motivazioni? :cool:
Perché, con gli altri linguaggi non si impara a programmare ?
No, mai detto questo, lo sai. ;)
Magari (e non è detto) ci si mette di più, ma conta che se parte da Python dopo dovrebbe impararsi anche un altro linguaggio per eventualmente scriversi un driver, quindi alla fine dei conti la scelta Python è assolutamente deleteria, anche perché per passare da Python ad un linguaggio C-Style il passo è ben più complesso che passare da un linguaggio C-Style ad un altro.
Scrivere un driver non è cosa affatto banale: richiede parecchia esperienza. Quando ne avrà abbastanza passare da un linguaggio a un altro (se proprio sarà necessario) sarà una bazzecola. :p

Ma... intanto deve partire, e con Python la partenza è molto comoda e moooolto meno traumatica rispetto a tanti altri linguaggi di programmazione. ;)

cionci
26-03-2008, 22:20
OK, tutto chiaro. Programmazione: zero. :p

Avevo già detto che fra tutti i linguaggi .Net c'è pure IronPython: come la mettiamo? ;)
Che futuro può avere un linguaggio .Net non supportato da Microsoft ?
Avevo anche detto che per recuperare le informazioni che gli servono sono già presenti librerie a cui è facilissimo interfacciarsi.

Aggiungo che la maggior parte del lavoro che dovrà fare sarà quello di presentare i dati.
Non credo assolutamente che gli bastino quei dati, se non sbaglio parlava anche di voltaggi.
Scrivere un driver non è cosa affatto banale: richiede parecchia esperienza. Quando ne avrà abbastanza passare da un linguaggio a un altro (se proprio sarà necessario) sarà una bazzecola.
Passare da un linguaggio come Python ad un linguaggio C-Style è una bazzecola ? Non credo proprio.
Ma... intanto deve partire, e con Python la partenza è molto comoda e moooolto meno traumatica rispetto a tanti altri linguaggi di programmazione. ;)
Questo lo dici te. Per me è solo uno spreco di tempo ed è un linguaggio, per come la vedo io, assurdo.

cionci
26-03-2008, 22:44
Poi ritornando alla questione librerie: credi che non ci siano librerie equivalenti anche per C++ e C# ?

cdimauro
26-03-2008, 22:45
Che futuro può avere un linguaggio .Net non supportato da Microsoft ?
Riccardo, MS ha INGAGGIATO il tizio che ha iniziato il porting di Python per .NET. :p

Il futuro per Python su .NET è a dir poco roseo: infatti è fra i linguaggi che MS supporta pienamente per SilverLight, ad esempio. ;)
Non credo assolutamente che gli bastino quei dati, se non sbaglio parlava anche di voltaggi.
Sì, chiaro: per dati mi riferivo a tutti quelli che bisogna recuperare, e lo si può fare agevolmente con le librerie di cui parlavo (che si interfacciano col s.o. per ottenere i permessi di accesso alle porte di I/O, oppure per utilizzare istruzioni come CPUID).
Passare da un linguaggio come Python ad un linguaggio C-Style è una bazzecola ? Non credo proprio.
Se hai sufficiente esperienza per poter scrivere un driver, non vedo perché dovresti avere difficoltà.
Questo lo dici te. Per me è solo uno spreco di tempo ed è un linguaggio, per come la vedo io, assurdo.
Opinabile. :)
Poi ritornando alla questione librerie: credi che non ci siano librerie equivalenti anche per C++ e C# ?
Mai detto questo, lo sai. :)

Le librerie servono a smazzarti un bel po' di lavoro per accedere a quelle informazioni, e chiaramente sono utili per qualunque linguaggio. Anche per Python, quindi, che sulla carta era dato per spacciato visto che per compiti come questi si lavora a livello molto basso. ;)

71104
26-03-2008, 23:26
Scrivere un driver non è cosa affatto banale: richiede parecchia esperienza. Quando ne avrà abbastanza passare da un linguaggio a un altro (se proprio sarà necessario) sarà una bazzecola. :p scrivere un driver richiede parecchia esperienza in cose che non hanno nulla a che vedere con Python se non un misero 1% di concetti di base di programmazione (variabili, funzioni, statements...); richiede esperienza invece con gli internals del sistema operativo, e adesso non venirmi a cantare che per imparare quelli sarebbe molto più comodo partire con Python, con tutta la documentazione MSDN del kernel che ti presenta prototipi e strutture in C brutto, crudele e pieno di macro :asd:

cionci
26-03-2008, 23:29
scrivere un driver richiede parecchia esperienza in cose che non hanno nulla a che vedere con Python se non un misero 1% di concetti di base di programmazione (variabili, funzioni, statements...); richiede esperienza invece con gli internals del sistema operativo, e adesso non venirmi a cantare che per imparare quelli sarebbe molto più comodo partire con Python, con tutta la documentazione MSDN del kernel che ti presenta prototipi e strutture in C brutto, cattivo e pieno di macro :asd:
Appunto :)

fek
26-03-2008, 23:33
Che futuro può avere un linguaggio .Net non supportato da Microsoft ?


IronPython (purtroppo) e' molto supportato da Microsoft.

cionci
26-03-2008, 23:35
IronPython (purtroppo) e' molto supportato da Microsoft.
Ci sta circondando :cry:

cdimauro
26-03-2008, 23:35
scrivere un driver richiede parecchia esperienza in cose che non hanno nulla a che vedere con Python se non un misero 1% di concetti di base di programmazione (variabili, funzioni, statements...); richiede esperienza invece con gli internals del sistema operativo, e adesso non venirmi a cantare che per imparare quelli sarebbe molto più comodo partire con Python, con tutta la documentazione MSDN del kernel che ti presenta prototipi e strutture in C brutto, crudele e pieno di macro :asd:
1) L'esperienza con gli "internal" te la puoi fare DOPO che sarai diventato un ottimo programmatore.

2) Un ottimo programmatore può passare da Python a qualunque altro linguaggio (compreso quello schifo di C), e viceversa.

3) Per diventare un ottimo programmatore devi prima imparare a programmare, e farti le ossa.

Chiaro? ;)

cionci
26-03-2008, 23:36
1) L'esperienza con gli "internal" te la puoi fare DOPO che sarai diventato un ottimo programmatore.

2) Un ottimo programmatore può passare da Python a qualunque altro linguaggio (compreso quello schifo di C), e viceversa.

3) Per diventare un ottimo programmatore devi prima imparare a programmare, e farti le ossa.

Chiaro? ;)
Se vuoi triplicare il tempo per arrivare al tuo obiettivo, sicuramente ;)

cdimauro
26-03-2008, 23:36
IronPython (purtroppo) e' molto supportato da Microsoft.
:cool:
Ci sta circondando :cry:
Rassegnatevi: sarete assimilati. :O :asd:

P.S. Buonanotte a tutti. :)
Se vuoi triplicare il tempo per arrivare al tuo obiettivo sicuramente ;)
Coi segmentation fault, i double delete, ecc. ne perderai molto di più. :D

cionci
26-03-2008, 23:38
Rassegnatevi: sarete assimilati. :O :asd:
Escono dalle fottute pareti !!! (cit.)

Notte ;)

fek
26-03-2008, 23:40
:cool:

Rassegnatevi: sarete assimilati. :O :asd:


Non credo finche' avro' un po' di senso critico.
Cesare, ormai consigli Python per tutto e questo dovrebbe farti suonare un campanello d'allarme. E' come se consigliassi di usare sempre un martello perche' ti ci trovi bene a piantare chiodi. Ma se provi a tagliartici le unghie dei piedi ti fai male ;)

cionci
26-03-2008, 23:45
Coi segmentation fault, i double delete, ecc. ne perderai molto di più. :D
Infatti ho consigliato C# ;)

morskott
26-03-2008, 23:58
Infatti ho consigliato C# ;)

C# o Java, due ottime basi per imparare a programmare.
Basi fatte poi su 2 linguaggi molto potenti.
Senza scatenare flames io consiglierei a tutti di iniziare o con uno o con l'altro.

71104
27-03-2008, 00:02
1) L'esperienza con gli "internal" te la puoi fare DOPO che sarai diventato un ottimo programmatore.

2) Un ottimo programmatore può passare da Python a qualunque altro linguaggio (compreso quello schifo di C), e viceversa.

3) Per diventare un ottimo programmatore devi prima imparare a programmare, e farti le ossa. non capisco ora come sia saltata fuori questa cosa dell'ottimo programmatore, comunque:

1) non hai la minima idea delle proporzioni dei vari tratti della curva d'apprendimento; se per imparare a programmare in paradigma procedurale basta una settimana, per imparare a scrivere drivers sensati e che non diano schermata blu appena caricati... ma che dico, anche solo per caricare un driver nel kernel di Windows, servono un paio d'anni; se credi che sia un'esagerazione ti sbagli.

viste le proporzioni ed ipotizzando un niubbo (cioè uno a digiuno totale) che si ponga come obiettivo la realizzazione di un driver funzionante, consigliare di partire da Python è completamente fuor di luogo, è un allungamento inutile dei tempi; gli stai consigliando di imparare qualcosa che non gli servirà e che si potrebbe forse identificare come ciò che tu definisci l' "essere un ottimo programmatore".

2, 3) embè?

Chiaro? ;) chiarissimo: non hai mai scritto drivers per Windows.
(e ora mi spara "per Windows no, ma su <esotica architettura anni '70 di un mondo che non c'è più, stile bus dati a 4 bit> programmavo col generatore di segnali digitali: davo in input uni e zeri e costruivo man mano gli opcode del codice macchina :asd:")

Se vuoi triplicare il tempo per arrivare al tuo obiettivo, sicuramente ;) era per questo che l'ha diviso in 3 punti :D

71104
27-03-2008, 00:13
Coi segmentation fault, i double delete, ecc. ne perderai molto di più. :D un driver è un programma strano: è totamente privo di logica se non per un paio (a dir proprio tanto) d'algoritmi che può capitare di dover implementare in qualche routine e che sono descritti passo passo su MSDN in una maniera a prova di deficiente (praticamente leggi la descrizione del codice in inglese: "chiama questo passandogli questo e quest'altro, chiama quell'altro..."). un driver è solo un sacco di entry points che ti vengono chiamati e all'interno dei quali devi fare determinate cose, dettagliatamente descritte nello stile di cui sopra.

stando così le cose i segmentation fault e le doppie delete sono praticamente impossibili, purché al programmatore sia chiaro quale routine di deallocazione vada associata a quale routine di allocazione (e questo Python non te lo insegna).

cdimauro
27-03-2008, 07:31
Non credo finche' avro' un po' di senso critico.
Cesare, ormai consigli Python per tutto e questo dovrebbe farti suonare un campanello d'allarme. E' come se consigliassi di usare sempre un martello perche' ti ci trovi bene a piantare chiodi. Ma se provi a tagliartici le unghie dei piedi ti fai male ;)
Non mi sembra d'aver consigliato di scrivere s.o. o driver con Python finora: il dominio applicativo è sempre stato tranquillamente alla portata di questo linguaggio. ;)

Quando comincerò a farlo, siete autorizzati a chiamare la neuro. :asd:
Infatti ho consigliato C# ;)
Che non ho mai considerato un pessimo linguaggio mi pare. A me piacciono i linguaggi managed, solo che fra questi prediligo quelli più semplici e produttivi. :)
non capisco ora come sia saltata fuori questa cosa dell'ottimo programmatore,
E' una consecutio: non si arriva a scrivere driver dalla mattina alla sera. ;)
comunque:

1) non hai la minima idea delle proporzioni dei vari tratti della curva d'apprendimento; se per imparare a programmare in paradigma procedurale basta una settimana, per imparare a scrivere drivers sensati e che non diano schermata blu appena caricati... ma che dico, anche solo per caricare un driver nel kernel di Windows, servono un paio d'anni; se credi che sia un'esagerazione ti sbagli.
Ho già letto diverse volte i tuoi commenti in merito. :p
viste le proporzioni ed ipotizzando un niubbo (cioè uno a digiuno totale) che si ponga come obiettivo la realizzazione di un driver funzionante, consigliare di partire da Python è completamente fuor di luogo, è un allungamento inutile dei tempi; gli stai consigliando di imparare qualcosa che non gli servirà e che si potrebbe forse identificare come ciò che tu definisci l' "essere un ottimo programmatore".
Posto che gli auguro di non sviluppare mai un driver, con Python potrebbe apprendere velocemente a programmare e formarsi senza i tanti sbattimenti che trovi con linguaggi come C, C++ et similia.

Se, una volta maturato come programmatore, dovesse sentire l'esigenza di scendere così a basso livello, nessuno gli impedisce di imparare altri dettagli e altri linguaggi.

Ma al momento, come dici, è a totale digiuno e non sappiamo nemmeno se si fermerà al classico "Hello, world!"...
2, 3) embè?
Vedi all'inizio. ;)
chiarissimo: non hai mai scritto drivers per Windows.
(e ora mi spara "per Windows no, ma su <esotica architettura anni '70 di un mondo che non c'è più, stile bus dati a 4 bit> programmavo col generatore di segnali digitali: davo in input uni e zeri e costruivo man mano gli opcode del codice macchina :asd:")
No, non ho mai scritto driver per Windows e mi ritengo fortunato. :p
un driver è un programma strano: è totamente privo di logica se non per un paio (a dir proprio tanto) d'algoritmi che può capitare di dover implementare in qualche routine e che sono descritti passo passo su MSDN in una maniera a prova di deficiente (praticamente leggi la descrizione del codice in inglese: "chiama questo passandogli questo e quest'altro, chiama quell'altro..."). un driver è solo un sacco di entry points che ti vengono chiamati e all'interno dei quali devi fare determinate cose, dettagliatamente descritte nello stile di cui sopra.
Chiaro. Il concetto di driver mica è cambiato con Windows. ;)
stando così le cose i segmentation fault e le doppie delete sono praticamente impossibili, purché al programmatore sia chiaro quale routine di deallocazione vada associata a quale routine di allocazione (e questo Python non te lo insegna).
Lo puoi imparare dopo, quando ti servirà. ;)

Comunque se puoi scrivere un driver con un qualunque linguaggio .NET, sulla carta puoi benissimo farlo anche con IronPython. Poi bisogna vedere se e quanto sarebbe conveniente farlo, ma qui fermo per mancanza di esempi e/o documentazione in materia.

gugoXX
27-03-2008, 07:51
Che non ho mai considerato un pessimo linguaggio mi pare. A me piacciono i linguaggi managed, solo che fra questi prediligo quelli più semplici e produttivi. :)

cdimauro, penso che tu lo conosca quindi il C#.
Non ho trovato ancora un esempio in cui Python possa essere preso a modello per risolvere un problema piu' velocemente o piu' "elegantemente" del C#.
Mi aiuti a trovare qualcosa?

cdimauro
27-03-2008, 08:00
Non riguarda proprio C#, ma intanto puoi provare a leggere questo http://www.mindviewinc.com/downloads/pub/eckel/LovePython.zip documento di Bruce Eckel.

Per quanto riguarda la "misura" della produttività, bisognerebbe fare delle prove. Io sono disponibile, eventualmente non si riescano a trovare in giro. :)

gugoXX
27-03-2008, 08:19
Certo che paragonare un linguaggio nuovo con uno vecchio di 30 anni (il C fra poco spegne 30 candeline) non mi sembra proprio equo.
E ho anche tanto l'impressione che il sig.Eckel il C# non l'abbia mai neppure aperto. (Annoiato perche' il C# ha tolto tutte le cose interessanti del C? E quali sarebbero le cose piu' interessanti del C, quelle che il C# ha tolto e il Phyton ha invece tenuto?)

Penso che il documento che mi hai passato non sia il campo giusto d'indagine. Il messaggio che mi ha passato e' che il Phyton e' un linguaggio adatto a chi non sa fare le cose e vuole farle velocemente.
Non e' pero' lo scopo degli addetti ai lavori. Un addetto ai lavori che "Si dimentica come fare per leggere un file" nel linguaggio di programmazione che usa per scopo professionale, mi sa che ha sbagliato mestiere.

Il C# comunque e'
byte[] eccoli = File.ReadAllBytes("Pippo.dat"); // se vuoi tutti i byte del file
string pippo = File.ReadAllText("Pippo.txt"); // se vuoi che ti venga invece restituita una stringa, supposto il file come file di testo.
Senza aprire, chiudere, dichiarare o fare alcunche'.
Se non se lo ricorda gli consiglio prima un corso di inglese, e poi di informatica.

Davvero, questo x10 nei confronti del C# non lo vedo proprio.

cdimauro
27-03-2008, 08:27
Quella presentazione è del 2001. ;)

Gli esempi che hai fatto, ma in Python:

eccoli = open('Pippo.dat').read()
pippo = open('Pippo.Txt').readline()

Basta scriverli così come sono, e... funziona tutto. :p

Mi faresti vedere il sorgente completo in C# per eseguire quanto hai scritto prima? ;)

Comunque sono esempietti. Vogliamo prendere qualcosa un po' complesso della banale lettura di qualche dato? Mettiamoci almeno qualche operazione di filtraggio / manipolazione, no? ;)

gugoXX
27-03-2008, 08:41
Quella presentazione è del 2001. ;)

Gli esempi che hai fatto, ma in Python:

eccoli = open('Pippo.dat').read()
pippo = open('Pippo.Txt').readline()

Basta scriverli così come sono, e... funziona tutto. :p

Mi faresti vedere il sorgente completo in C# per eseguire quanto hai scritto prima? ;)

Comunque sono esempietti. Vogliamo prendere qualcosa un po' complesso della banale lettura di qualche dato? Mettiamoci almeno qualche operazione di filtraggio / manipolazione, no? ;)

Chiaro, solo esempietti, comunque e' proprio tutto li'


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace Stampofile
{
class Program
{
static void Main(string[] args)
{
string pippo = File.ReadAllText("Pippo.txt");
Console.WriteLine(pippo);
}
}
}


Le uniche 2 righe che ho scritto io sono proprio quelle li', dentro la Main.
Il resto e' stato scritto da lui, appena dopo aver creato un nuovo Programma di tipo "Console Application"

Per intenderci, il C# non e' stato studiato per fare Console Application, ovvero programmi su linea di comando. Il contorno sarebbe stato quasi tutto "bypasato" se il C# sapesse fare solo quello e se quindi molte di quelle cose fossero implicite.

Vogliamo provare a fare la stessa cosa scrivendo in una bella Finestra o applicazione grafica il contenuto del testo, in un controllo a piacere, tipo una TextBox? Anche senza alcuna interazione utente. Parte, legge pippo.txt e mette tutto il testo su una zona a piacere di una finestra.

Per condire il tutto, vogliamo poi invece provare a stampare magari, invece del testo, il numero delle 'a' che sono presenti nel testo letto? (Giusto per accogliere la tua proposta di cucinare i dati). Meglio se gli esempi li cerchi tu, io sono piu' bravo a risolvere gli esercizi piuttosto che inventarli.
E comunque per me non e' che "vince" chi scrive meno righe. Non mi interessa.
Secondo me vince chi scrive la cosa che si legge meglio oppure che usa un modo che difficilmente puo' portare ad errori di programmazione (peggio ancora errori che si beccano a RunTime come nel javascript)

cionci
27-03-2008, 08:52
Le uniche 2 righe che ho scritto io sono proprio quelle li', dentro la Main.
Ora Cesare ti dirà che in Python bastano solo due righe senza il contorno perché Python è multiparadigma.
Una delle critiche che muovo a Python è proprio questa: permette di mescolare paradigmi diversi di programmazione, questa cosa cosa creerà problemi a chiunque debba iniziare a programmare con Python. Agli stessi livelli di chi inizia con C++.

cdimauro
27-03-2008, 08:56
Chiaro, solo esempietti, comunque e' proprio tutto li'


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace Stampofile
{
class Program
{
static void Main(string[] args)
{
string pippo = File.ReadAllText("Pippo.txt");
Console.WriteLine(pippo);
}
}
}


Le uniche 2 righe che ho scritto io sono proprio quelle li', dentro la Main.
Il resto e' stato scritto da lui, appena dopo aver creato un nuovo Programma di tipo "Console Application"

Per intenderci, il C# non e' stato studiato per fare Console Application, ovvero programmi su linea di comando. Il contorno sarebbe stato quasi tutto "bypasato" se il C# sapesse fare solo quello e se quindi molte di quelle cose fossero implicite.
C# è un linguaggio non un IDE. ;)
Vogliamo provare a fare la stessa cosa scrivendo in una bella Finestra o applicazione grafica il contenuto del testo, in un controllo a piacere, tipo una TextBox? Anche senza alcuna interazione utente. Parte, legge pippo.txt e mette tutto il testo su una zona a piacere di una finestra.
Non ho mai scritto applicazioni dotate di GUI in Python, quindi non potrei proseguire col confronto, a meno che qualcuno che c'abbia già lavorato non mi dia una mano (o sia lui stesso a "raccogliere la sfida").
Per condire il tutto, vogliamo poi invece provare a stampare magari, invece del testo, il numero delle 'a' che sono presenti nel testo letto? (Giusto per accogliere la tua proposta di cucinare i dati). Meglio se gli esempi li cerchi tu, io sono piu' bravo a risolvere gli esercizi piuttosto che inventarli.
Ecco qui:

print 'Nel testo letto ci sono %s caratteri a' % len([Ch for Ch in pippo if Ch == 'a'])

:D

Comunque se definisco io i problemi da risolvere poi sarei tacciato d'esser di parte. Che lo faccia qualcun altro, che è meglio. ;)
E comunque per me non e' che "vince" chi scrive meno righe. Non mi interessa.
Secondo me vince chi scrive la cosa che si legge meglio oppure che usa un modo che difficilmente puo' portare ad errori di programmazione (peggio ancora errori che si beccano a RunTime come nel javascript)
Qui stai già ponendo altre condizioni. Prima si parlava di produttività in quanto tale. ;)
Ora Cesare ti dirà che in Python bastano solo due righe senza il contorno perché Python è multiparadigma.
Una delle critiche che muovo a Python è proprio questa: permette di mescolare paradigmi diversi di programmazione, questa cosa cosa creerà problemi a chiunque debba iniziare a programmare con Python. Agli stessi livelli di chi inizia con C++.
No, ti dico che Python è un linguaggio a oggetti "puro", dove con ciò intendo che qualunque cosa è un oggetto.

Il poter esprimere dei concetti attraverso dei "paradigmi" è una semplice conseguenza logica delle PROPRIETA' che questi oggetti di Python mettono a disposizione. ;)

Il concetto mi pare decisamente diverso, non trovi? :cool:

E problemi, comunque, non ne comporta. Non vedo perché dovrebbe comportarne. Se hai qualche esempio, fallo pure... ;)

cionci
27-03-2008, 09:01
C# è un linguaggio non un IDE. ;)
C# e tutti i linguaggi .Net di MS sono fra i pochi che si possono identificare con l'ide. Chi programmerà in C# su Windows avrà sicuramente Visual Studio o Visual Studio Express.

print 'Nel testo letto ci sono %s caratteri a' % len([Ch for Ch in pippo if Ch == 'a'])

Della serie: buttiamo a mare tutta quanto detto sulla leggibilità e sulla manutenibilità del codice.

cdimauro
27-03-2008, 09:04
C# e tutti i linguaggi .Net di MS sono fra i pochi che si possono identificare con l'ide. Chi programmerà in C# su Windows avrà sicuramente Visual Studio o Visual Studio Express.
Python è multipiattaforma. C# pure. Stai limitando volutamente il dominio d'applicazione del linguaggio, e non mi pare giusto.
Della serie: buttiamo a mare tutta quanto detto sulla leggibilità e sulla manutenibilità del codice.
Non era l'oggetto del contendere, e comunque per chi ha masticato un po' di insiemistica a scuola la sintassi della list comprehension è facilmente intuibile.

cionci
27-03-2008, 09:06
E problemi, comunque, non ne comporta. Non vedo perché dovrebbe comportarne. Se hai qualche esempio, fallo pure... ;)
Non a te o a chi è padrone di altri linguaggi, ma a chi inizia Python come primo linguaggio: ho lodato per anni Java perché ti forzava ad esplicitare il paradigma di programmazione ad oggetti anche per un Hello World. Quindi rimango coerente con il mio pensiero: visto Python permette di mescolare programmazione procedurale e programmazione ad oggetti allora non è un bene per chi inizia, mi sembra che sia un ragionamento lineare, no ?

cionci
27-03-2008, 09:10
Python è multipiattaforma. C# pure. Stai limitando volutamente il dominio d'applicazione del linguaggio, e non mi pare giusto.
Davvero c'è qualcuno che usa a livello produttivo C# su piattaforme diverse da Windows ? Se c'è qualcuno lo fa solo per la comodità di non doversi imparare un altro linguaggio.

cionci
27-03-2008, 09:12
Non era l'oggetto del contendere, e comunque per chi ha masticato un po' di insiemistica a scuola la sintassi della list comprehension è facilmente intuibile.
Produttività va a braccetto con manutenibilità e leggibilità, imho ;) Posso anche essere 10 volte più veloce in Python a scrivere un programma, ma se dopo un mio collega che lo legge e lo deve modificare è 10 volte più lento ho perso qualsiasi vantaggio di produttività.

cdimauro
27-03-2008, 09:12
Riccardo, mi riquoto:

Python è un linguaggio a oggetti "puro", dove con ciò intendo che qualunque cosa è un oggetto.

Il poter esprimere dei concetti attraverso dei "paradigmi" è una semplice conseguenza logica delle PROPRIETA' che questi oggetti di Python mettono a disposizione.

In soldoni: con Python lavori sempre e soltanto con OGGETTI, che ti mettono a disposizione delle PROPRIETA'.

In Java quando scrivi

int a = 1;

a NON è un oggetto.

Mentre in Python

a = 1

a contiene un oggetto.

I paradigmi di programmazione vengono fuori esclusivamente da come il programmatore utilizza gli strumenti / costrutti sintattici / oggetti (nel caso di Python, in particolare) che il linguaggio mette a disposizione.

cdimauro
27-03-2008, 09:16
Davvero c'è qualcuno che usa a livello produttivo C# su piattaforme diverse da Windows ? Se c'è qualcuno lo fa solo per la comodità di non doversi imparare un altro linguaggio.
Mono non è per Windows, o sbaglio? :O

E non esiste soltanto perché qualcuno ha deciso di imparare un altro linguaggio.
Produttività va a braccetto con manutenibilità e leggibilità, imho ;) Posso anche essere 10 volte più veloce in Python a scrivere un programma, ma se dopo un mio collega che lo legge e lo deve modificare è 10 volte più lento ho perso qualsiasi vantaggio di produttività.
Certamente, ma tu stai facendo assunzione su cosa PER TE è leggibile oppure no.

Sei abituato a un approccio procedurale e/o a oggetti, non a uno funzionale / matematico, per cui un qualunque (perché Python non è certo il solo; tutt'altro) linguaggio permette di "operare" con insiemi di dati con costrutti come quello che ho usato ti sarà sempre poco leggibile.

Un matematico o una persona con una certa estrazione non la penserà certamente come te. ;)

gugoXX
27-03-2008, 09:16
Comunque questa e' una soluzione "normale" in C#
che ritengo leggibile e di facile scrittura per quasi tutti.


string pippo = File.ReadAllText("Pippo.txt");

int t = 0;
foreach (char ch in pippo)
if (ch == 'a') t++;

Console.WriteLine("Ecco i caratteri 'a': "+t);


Se invece vogliamo fare i fighi, anche in C# si possono fare cose carine.
Restano comunque leggibili, e per chi le sa maneggiare sono anche molto potenti.


string pippo = File.ReadAllText("Pippo.txt");
int res=pippo.Where(u => u == 'a').Count();
Console.WriteLine("Ecco qui di nuovo i caratteri 'a': "+ res);


Dove quella u si legge
Prese pippo, estrai tutti i caratteri di pippo. Un carattere u e' da estrarre se e solo se u e' uguale ad 'a'. (E fino a li' abbiamo ancora una stringa).
Poi estrai invece il conteggio. Il conteggio restituisce un intero.

Ovviamente si puo' mettere anche qui tutto sulla stessa riga se vuoi, ma a me non piace proprio per nulla.
Quale e' il vantaggio di farlo? Scrivo piu' in fretta?
Io questa la boccio, e se mi permetti boccio anche la tua che non ha avuto voglia di scrivere almeno 2 righe.

Console.WriteLine("Ecco qui di nuovo i caratteri 'a': "+ File.ReadAllText("Pippo.txt").Where(u => u == 'a').Count() );


Io sono della scuola
1 riga = 1 concetto
Se una riga stampa, non la faccio contare.
Se una riga conta, non la faccio leggere da file.

gugoXX
27-03-2008, 09:17
[QUOTE=cdimauro;21740061]In Java quando scrivi

int a = 1;

a NON è un oggetto.

[/code]
in C' si'.
Anche a e' un oggetto.

cdimauro
27-03-2008, 09:20
pippo = open('Pippo.txt').read()

t = 0
for ch in pippo:
if ch == 'a': t += 1

print "Ecco i caratteri 'a': ", t
Così va bene? Mi sembra comunque più semplice e leggibile di quanto hai scritto C#, e a cui manca tutto il "contorno". ;)

cionci
27-03-2008, 09:24
I paradigmi di programmazione vengono fuori esclusivamente da come il programmatore utilizza gli strumenti / costrutti sintattici / oggetti (nel caso di Python, in particolare) che il linguaggio mette a disposizione.
Scusa, ma questo mi sembra solo un modo per aggirare il problema. In Python puoi fare solo programmazione procedurale (anzi, anche programmazione senza alcun paradigma esplicito, cioè scrivendo codice direttamente nel "modulo", alla php tanto per intendersi) ? La risposta è sì, in Java puoi ? La risposta è no. Questo crea problemi a chi inizia con Python ? Secondo me la risposta è sì.
Mono non è per Windows, o sbaglio? :O

Certo, mi riferivo proprio a Mono. Chi è tanto masochista da usare Mono su linux a livello produttivo ?

cdimauro
27-03-2008, 09:29
Scusa, ma questo mi sembra solo un modo per aggirare il problema. In Python puoi fare solo programmazione procedurale ? La risposta è sì, in Java puoi ? La risposta è no. Questo crea problemi a chi inizia con Python ? Secondo me la risposta è sì.
Anche in Java puoi fare solo programmazione procedurale, ed è inutile che ti mostri in che modo, perché lo puoi immaginare. ;)

In Python hai la possibilità, combinando gli oggetti che ti mette a disposizione, di simulare diversi paradigmi di programmazione.
Certo, mi riferivo proprio a Mono. Chi è tanto masochista da usare Mono su linux a livello produttivo ?
Non io, ma a quanto pare qualcuno lo usa: http://www.mono-project.com/Companies_Using_Mono#Who_uses_Mono.3F ;)

gugoXX
27-03-2008, 09:34
pippo = open('Pippo.txt').read()

t = 0
for ch in pippo:
if ch == 'a': t += 1

print "Ecco i caratteri 'a': ", t
Così va bene? Mi sembra comunque più semplice e leggibile di quanto hai scritto C#, e a cui manca tutto il "contorno". ;)

A me sembrano davvero uguali. Perche' dici che e' piu' semplice o piu' leggibile?
c'e' la read di un file, un conteggio fatto anche qui su 3 righe, con concetti analoghi e una istruzione per stampare su schermo.

A me sembrano uguali a parte la print. Ripeto, il C# non e' stato studiato per stampare su console.
Ma cio' non toglie che lo si possa fare, anche se ovviamente l'astrazione ha protato alla creazione di un oggetto chiamato "Console", con dei metodi come WriteLine.

Comunque anche io ho usato Mono per motivi professionali almeno una volta.
Le richieste erano che il prodotto fosse in grado di compilare as-is sia sotto windows che sotto linux.
Addirittura gli assembly (dll) erano portabili, nel senso che li si potevano copiare da un sistema all'altro.
Anche noi potevamo figurare li'.
Peccato poi che pero' su 100 installazioni che abbiamo fatto non una e' stata fatta sotto Linux. Tutta una questione commerciale che ci ha rotto le wallas per fare le cose portabili, inutile, con il risultato che la realizzazione sotto Windows non e' stata ovviamente cosi' bella come poteva esserlo.

cionci
27-03-2008, 09:34
Non io, ma a quanto pare qualcuno lo usa: http://www.mono-project.com/Companies_Using_Mono#Who_uses_Mono.3F ;)
Come puoi notare si tratta appunto, per la maggior parte dei casi, di questioni di portabilità ;)
Sono software sviluppati su Visual Studio e poi portati su Mono. Ritorna appunto l'identità Visual Studio <-> C#.

cdimauro
27-03-2008, 09:45
A me sembrano davvero uguali. Perche' dici che e' piu' semplice o piu' leggibile?
c'e' la read di un file, un conteggio fatto anche qui su 3 righe, con concetti analoghi e una istruzione per stampare su schermo.

A me sembrano uguali a parte la print. Ripeto, il C# non e' stato studiato per stampare su console.
Ma cio' non toglie che lo si possa fare, anche se ovviamente l'astrazione ha protato alla creazione di un oggetto chiamato "Console", con dei metodi come WriteLine.
Nella tua versione c'è soltanto il corpo del codice, però: manca tutto il contorno. ;)

A parte questo, in Python è più leggibile perché:
- non devi dichiarare il tipo delle variabili (è implicito);
- hai meno simboli da usare per racchiudere espressioni & codice (e il terminatore è il fine riga, non il ";");
- per stampare, come hai notato, c'è già l'istruzione print, che in ogni caso ha una sintassi più semplice.

Python è più vicino al concetto di pseudocodice. ;)

Comunque finché ci limitiamo a esempietti sarà difficile far trasparire in maniera marca la differenza di "espressività" e produttività dei due linguaggio.
Comunque anche io ho usato Mono per motivi professionali almeno una volta.
Le richieste erano che il prodotto fosse in grado di compilare as-is sia sotto windows che sotto linux.
Addirittura gli assembly (dll) erano portabili, nel senso che li si potevano copiare da un sistema all'altro.
Anche noi potevamo figurare li'.
Peccato poi che pero' su 100 installazioni che abbiamo fatto non una e' stata fatta sotto Linux. Tutta una questione commerciale che ci ha rotto le wallas per fare le cose portabili, inutile, con il risultato che la realizzazione sotto Windows non e' stata ovviamente cosi' bella come poteva esserlo.
Capisco, ma allora che dobbiamo fare? Ignorare la portabilità di un'applicazione .NET?
Come puoi notare si tratta appunto, per la maggior parte dei casi, di questioni di portabilità ;)
Sono software sviluppati su Visual Studio e poi portati su Mono. Ritorna appunto l'identità Visual Studio <-> C#.
Perché gli ambienti di sviluppo su Windows sono più comodi. ;)

tomminno
27-03-2008, 10:09
Mono non è per Windows, o sbaglio? :O


Ti sfido ad usare Monodevelop e a paragonarlo anche solo minimamanete a VisualStudio (ma anche a SharpDevelop)

gugoXX
27-03-2008, 10:40
Nella tua versione c'è soltanto il corpo del codice, però: manca tutto il contorno. ;)

A parte questo, in Python è più leggibile perché:
- non devi dichiarare il tipo delle variabili (è implicito);
- hai meno simboli da usare per racchiudere espressioni & codice (e il terminatore è il fine riga, non il ";");
- per stampare, come hai notato, c'è già l'istruzione print, che in ogni caso ha una sintassi più semplice.

Python è più vicino al concetto di pseudocodice. ;)


Anche in C# puoi non dichiarare le variabili. Io lo faccio comunque per scelta, per migliorare la leggibilita' successiva. Chiaro esempio di come talvolta preferisco scrivere di piu' per ottenere qualcosa successivamente.

Spero comunque che non si vada a preferire il Phyton al C# a causa del punto e virgola oppure del fatto che in applicazioni Console puoi scrivere Print al posto di Console.WriteLine.

Finora quello che ho capito e' che lascerei il Phyon per Console Application, e non sono neppure convinto che sia una scelta cosi' vantaggiosa rispetto al C#. Il 10x non lo vedo ancora.
Ma al lavoro io non devo fare console application. Non ne ho mai fatte in 10 anni.
Oggi devo fare
- WebService.
- Applicazioni Client Server con Gui complesse, che chiacchierno con i WebService
- WebService che chiacchierano con i database
- Pagine Web che chiacchierano con i WebService
- Installer e Updater olnline di applicazioni.
- Applicazioni MultiThread
- Applicazioni Server, quindi MultiProcess, non solo Multithread, che chiacchierano con la rete.
- Applicazioni che abbracciano strettamente il Sistema Operativo per gestire oggetti di basso livello (l'anno scorso ho dovuto usare una named Pipe di Windows, per risolvere un problema in modo semplice).
- Applicazioni che vanno a chiacchierare a basso livello con i device. Ultimo che mi e' capitato sempre l'anno scorso, interazione con un device di fingerprint e un device di retinal scan.

Sono quasi sicuro di aver migliorato di parecchio la velocita' di scrittura, di aver minimizzato gli errori e di aver migliorato anche la leggibilita' e la manutenibilita', rispetto al C++.
Ma non so se il Python mi puo' aiutare a migliorare ancora. Non sono neppure certo che Python possa risolvere questi problemi in modo altrettanto efficace.

Un esempio che sto usando proprio ora.
Usando tecnologie come AJAX.net e LINQ, sto preparando lo scheletro di un'applicazione che permettera' agli sviluppatori di creare pagine Web che interagiscono con i Database, in un ambiente 3 livelli, tutto da una singola classe di codice. Senza una riga di Javascript e senza una riga di SQL.
Tutto fortemente tipizzato e controllato a Compile-time.

fortemente tipizzato significa semplicemente che un oggetto nasce di un determinato tipo, e il tipo non cambiera' fino alla sua morte.
Ma davvero in Python capita cosi' spesso dia vere l'esigenza di cambiare il tipo di un oggetto?
Si puo' fare anche in javascript, ma ho imparato a starci lontano proprio per evitare problemi. Quali sarebbero i vantaggi di questo approccio?

Poi sono anche dell'idea che un linguaggio da solo non serve a nulla.
La parte piu' importante e' il contorno, le librerie.
E il C# ha a disposizione un'immensa libreria standard usabile nativamente da tutti, subito pronta all'uso. Il FrameWork.

Ma anche solo per un'applicazione come quella da cui e' partito questo thread, ma sei davvero sicuro che farla da zero in Python sia la cosa migliore?
In C#, nell'assembly diagnostic (gia' nativamente a disposizione per tutti) posso leggere tantissime cose del sistema operativo, e non escludo che si possano trovare anche valori come temperature e frequenze.

Non riesco a capire come faccia Python ad essere stato portato sotto .net, quando uno dei requisiti del .net e' proprio l'estremo strong-typing di tutti gli oggetti, la cui mancanza invece e' uno dei punti di forza del Python espressi nel documento che mi hai passato prima.

fek
27-03-2008, 10:43
Non mi sembra d'aver consigliato di scrivere s.o. o driver con Python finora: il dominio applicativo è sempre stato tranquillamente alla portata di questo linguaggio. ;)

Quando comincerò a farlo, siete autorizzati a chiamare la neuro. :asd:

Forse un SO e' l'unico scenario degli ultimi dieci che ti ho visto consigliare dove Python avrebbe magari un senso, visto che ne stanno scrivendo almeno un paio in .NET :D
(Sono progetti interessantissimi per altro)

Cesare, a parte gli scherzi, non credo di essere l'unico (eufemismo) ad aver notato che ultimamente il tuo zelotisimo pro-python sta raggiungendo livelli di guardia. Ogni tuo post e' una difesa di Python dagli attacchi immeritati oppure un consiglio di Python per le applicazioni piu' disparate.
Io applico una regola: quando TUTTI mi dicono che sto esegerando e forse sto sbagliando mi fermo e ci ragiono. Magari e' vero, mi sto sbagliando (raro ma capita :asd: ).

fek
27-03-2008, 10:48
print 'Nel testo letto ci sono %s caratteri a' % len([Ch for Ch in pippo if Ch == 'a'])

Ti faccio vedere un intero gioco scritto in C su una riga sola? Non e' tanto meno leggibile di Python...

gugoXX
27-03-2008, 10:48
Avevo intenzione di proporre un esercizio quasi accademico.
Un simulatore di sistema solare, con pianeti definiti da coordinate e massa.
Il simulatore dovrebbe preoccuparsi di calcolare le accellerazioni e di manutenere le velocita', tutto partendo dalla legge di Newton.
Poi sarebbe anche bello stampare a video il risultato passo-passo della simulazione, disegnando dove i pianeti (e il sole) vanno a posizionarsi man mano che il tempo passa.

Cosi' anche chi dice che non c'e' soluzione per il problema dei 3 pianeti sta zitto. Anche qui matematicamente si ha una soluzione, che non e' analitica, ma precisa a piacere.
Proprio come le tanto elogiate funzioni analitiche, che tanto hanno lo stesso problema.
sin(31) sara' tanto bella scritta cosi', ma per avere il valore numerico si devono fare gli sviluppi, con tanti passi quanti sono necessari per ottenere la precisione che si desidera. Esattamente come potrebbe essere la nostra simulazione...

Stasera provo.
Ho capito che in Python non ci sara' la parte grafica, fa lo stesso.
Al C# gliela aggiungero', magari in un bel Thread separato, per non bloccare la finestra come capita a tutti i niubbi...

fek
27-03-2008, 10:49
Produttività va a braccetto con manutenibilità e leggibilità, imho ;) Posso anche essere 10 volte più veloce in Python a scrivere un programma, ma se dopo un mio collega che lo legge e lo deve modificare è 10 volte più lento ho perso qualsiasi vantaggio di produttività.

E se poi il tuo collega perde due giorni di lavoro per un errore di sintassi colto a runtime solo tre ore dopo?

fek
27-03-2008, 10:51
Certo, mi riferivo proprio a Mono. Chi è tanto masochista da usare Mono su linux a livello produttivo ?

Pixar e Dreamworks :|

cionci
27-03-2008, 10:53
Pixar e Dreamworks :|
Ma per fare porting di programmi per Windows ?

fek
27-03-2008, 10:58
Nella tua versione c'è soltanto il corpo del codice, però: manca tutto il contorno. ;)

Ma questo e' un discorso capzioso. Il contorno manca anche in Python perche' e' stato gia' scritto da altri ;)
Vuoi che ti scriva il contorno che ti permette di lanciare due righe di C# da console? Ci metto mezz'ora, probabilmente c'e' anche in giro.

fek
27-03-2008, 10:59
Ma per fare porting di programmi per Windows ?

No, nativo, per lavorare con XSI all'interno del loro Linux completamente customizzato. Giuro, non ci volevo credere, ma Mono e C# stanno mangiando tantissimo terreno a Python come linguaggio per programmare sotto Linux.

fek
27-03-2008, 11:02
A parte questo, in Python è più leggibile perché:
- non devi dichiarare il tipo delle variabili (è implicito);
- hai meno simboli da usare per racchiudere espressioni & codice (e il terminatore è il fine riga, non il ";");
- per stampare, come hai notato, c'è già l'istruzione print, che in ogni caso ha una sintassi più semplice.

- Il codice e' molto piu' leggibile se posso leggere il tipo della variabile piuttosto che cercare di comprenderlo dal codice. E c'e' meno pericolo di fare casini che poi Python rivela solo a runtime
- Meno simboli non vuol dire piu' leggibilita' quando l'indentazione ad esempio e' forzata e non ti permette di organizzare il codice in maniera piu' leggibile
- print non e' necessariamente piu' leggibile di Write


Python è più vicino al concetto di pseudocodice. ;)

Si', lo pseudocodice illeggibile ;)

fek
27-03-2008, 11:04
Interactive C#:

http://www.dcs.bbk.ac.uk/~keith/research/sIDE/
http://lists.ximian.com/pipermail/mono-devel-list/2005-July/013230.html

Are you referring to a way to execute small C# code statements and have
them executed as if they were within a simple program, on the fly?
Because if so, then you can use the classes and methods within
System.CodeDom, specifically within System.CodeDom.Compiler, to compile
and execute code. So you can take a command such as
"string.Compare("test","testing")" from a prompt, build it up into a
simple class with an entry point, use an ICodeCompiler object (which one
depends on which language) to compile the code, and then execute the
assembly in memory, returning the result back to the prompt (without
saving any of the code or binary assembly to file, truly on the fly).

Cesare, davvero, basta :)

tomminno
27-03-2008, 11:38
Pixar e Dreamworks :|

Hanno un loro IDE interno?

fek
27-03-2008, 11:53
Hanno un loro IDE interno?

Non lo so.

cdimauro
27-03-2008, 13:17
Ti sfido ad usare Monodevelop e a paragonarlo anche solo minimamanete a VisualStudio (ma anche a SharpDevelop)
Perché, fa cacare? :fiufiu:

Mai provato onestamente.
Ma al lavoro io non devo fare console application. Non ne ho mai fatte in 10 anni.
Oggi devo fare
- WebService.
- WebService che chiacchierano con i database
- Applicazioni MultiThread
- Applicazioni Server, quindi MultiProcess, non solo Multithread, che chiacchierano con la rete.
Queste sono cose che faccio abitualmente in Python, come console application.
Sono quasi sicuro di aver migliorato di parecchio la velocita' di scrittura, di aver minimizzato gli errori e di aver migliorato anche la leggibilita' e la manutenibilita', rispetto al C++.
Ma non so se il Python mi puo' aiutare a migliorare ancora. Non sono neppure certo che Python possa risolvere questi problemi in modo altrettanto efficace.
Dipende dal problema. Io per le applicazioni di cui sopra ti posso dire che mi ha aiutato molto a svilupparle velocemente.
Un esempio che sto usando proprio ora.
Usando tecnologie come AJAX.net e LINQ, sto preparando lo scheletro di un'applicazione che permettera' agli sviluppatori di creare pagine Web che interagiscono con i Database, in un ambiente 3 livelli, tutto da una singola classe di codice. Senza una riga di Javascript e senza una riga di SQL.
Tutto fortemente tipizzato e controllato a Compile-time.

fortemente tipizzato significa semplicemente che un oggetto nasce di un determinato tipo, e il tipo non cambiera' fino alla sua morte.
Ma davvero in Python capita cosi' spesso dia vere l'esigenza di cambiare il tipo di un oggetto?
Si puo' fare anche in javascript, ma ho imparato a starci lontano proprio per evitare problemi. Quali sarebbero i vantaggi di questo approccio?
Gli oggetti non cambiano di tipo. Semplicemente le variabili in Python (ma anche in JavaScript, se non ricordo male) conservano sempre e soltanto il riferimento a un oggetto.

Quindi se scrivi prima a = 1 e subito dopo a = 'Pippo', a non ha cambiato tipo, ma soltanto "punta" a un oggetto diverso. Tutto qui.
Poi sono anche dell'idea che un linguaggio da solo non serve a nulla.
La parte piu' importante e' il contorno, le librerie.
E il C# ha a disposizione un'immensa libreria standard usabile nativamente da tutti, subito pronta all'uso. Il FrameWork.
Indubbiamente. Anche per questo Python ha avuto e sta avendo una notevole diffusione: ha un'ottima libreria standard. Infatti il suo motto è "with batteries included". Ovviamente non copre tutti i campi (è carente lato GUI, ad esempio, perché non s'è voluto legare "mani e piedi" il linguaggio a una libreria; generalmente gli utenti si scelgono la libreria grafica che gli piace di più).

IronPython, che è il porting di Python per .NET (e mantenuto dalla stessa MS ormai), unisce il meglio dei due mondi: libreria standard di Python + framework .NET.
Ma anche solo per un'applicazione come quella da cui e' partito questo thread, ma sei davvero sicuro che farla da zero in Python sia la cosa migliore?
In C#, nell'assembly diagnostic (gia' nativamente a disposizione per tutti) posso leggere tantissime cose del sistema operativo, e non escludo che si possano trovare anche valori come temperature e frequenze.
Se è così, si può usare anche con IronPython: lavoro risparmiato.
Non riesco a capire come faccia Python ad essere stato portato sotto .net, quando uno dei requisiti del .net e' proprio l'estremo strong-typing di tutti gli oggetti, la cui mancanza invece e' uno dei punti di forza del Python espressi nel documento che mi hai passato prima.
E' sbagliato: Python è fortemente tipizzato come linguaggio. Prova a sommare un numero con una stringa.

Non bisogna confondere la (forte o debole) tipizzazione con la "dinamicità" del linguaggio, che permette di eseguire il binding di un oggetto a una "variabile" in qualunque momento e più volte.
Forse un SO e' l'unico scenario degli ultimi dieci che ti ho visto consigliare dove Python avrebbe magari un senso, visto che ne stanno scrivendo almeno un paio in .NET :D
(Sono progetti interessantissimi per altro)
Sì, ho letto qualche notizia tempo fa, e sembrano anche a me interessanti. Comunque .NET è multilinguaggio, per cui... no comment. :p
Cesare, a parte gli scherzi, non credo di essere l'unico (eufemismo) ad aver notato che ultimamente il tuo zelotisimo pro-python sta raggiungendo livelli di guardia. Ogni tuo post e' una difesa di Python dagli attacchi immeritati oppure un consiglio di Python per le applicazioni piu' disparate.
Io applico una regola: quando TUTTI mi dicono che sto esegerando e forse sto sbagliando mi fermo e ci ragiono. Magari e' vero, mi sto sbagliando (raro ma capita :asd: ).
Mi fermo qui, infatti (anche perché mi sono stancato di battagliare sempre sulle stesse cose).

Sto rispondendo soltanto ad alcune cose per precisare alcuni concetti.
Ti faccio vedere un intero gioco scritto in C su una riga sola? Non e' tanto meno leggibile di Python...
Non c'è bisogno.
Avevo intenzione di proporre un esercizio quasi accademico.
Un simulatore di sistema solare, con pianeti definiti da coordinate e massa.
Il simulatore dovrebbe preoccuparsi di calcolare le accellerazioni e di manutenere le velocita', tutto partendo dalla legge di Newton.
Poi sarebbe anche bello stampare a video il risultato passo-passo della simulazione, disegnando dove i pianeti (e il sole) vanno a posizionarsi man mano che il tempo passa.

Cosi' anche chi dice che non c'e' soluzione per il problema dei 3 pianeti sta zitto. Anche qui matematicamente si ha una soluzione, che non e' analitica, ma precisa a piacere.
Proprio come le tanto elogiate funzioni analitiche, che tanto hanno lo stesso problema.
sin(31) sara' tanto bella scritta cosi', ma per avere il valore numerico si devono fare gli sviluppi, con tanti passi quanti sono necessari per ottenere la precisione che si desidera. Esattamente come potrebbe essere la nostra simulazione...

Stasera provo.
Ho capito che in Python non ci sara' la parte grafica, fa lo stesso.
Al C# gliela aggiungero', magari in un bel Thread separato, per non bloccare la finestra come capita a tutti i niubbi...
Lasciamo perdere, mi sono stufato. Se hai intenzione di farti una cultura con Python, visto che conosci altri linguaggi, magari è meglio.
E se poi il tuo collega perde due giorni di lavoro per un errore di sintassi colto a runtime solo tre ore dopo?
Lasciamo perdere questi confronti, Fran. Il primo progetto (costituito da più applicazioni, con compiti diversi) che ho realizzato in Python l'ho portato a termine in 20 giorni, incluso il tempo di apprendimento di molti concetti di questo linguaggio.
Ed era un progetto che una società svedese si vantava di avere realizzato in "appena" 6 mesi... :rolleyes:

Di esempi così potrei fartene parecchi, ma non ti direbbero nulla. Idem per i disastri che ti sono capitati con Python: non mi dicono nulla.

Possiamo soltanto prendere atto che abbiamo avuto esperienze diverse.

Io, da 3 anni e mezzo a questa parte, noto un notevole miglioramento della mia produttività personale. Opinione personalissima, sia chiaro, ma... per me è così: non posso certo nascondere quella che è la realtà che ho vissuto in tutto questo tempo, soltanto per far contento qualcuno. ;)
Ma questo e' un discorso capzioso. Il contorno manca anche in Python perche' e' stato gia' scritto da altri ;)
Vuoi che ti scriva il contorno che ti permette di lanciare due righe di C# da console? Ci metto mezz'ora, probabilmente c'e' anche in giro.
Interactive C#:

http://www.dcs.bbk.ac.uk/~keith/research/sIDE/
http://lists.ximian.com/pipermail/mono-devel-list/2005-July/013230.html

Are you referring to a way to execute small C# code statements and have
them executed as if they were within a simple program, on the fly?
Because if so, then you can use the classes and methods within
System.CodeDom, specifically within System.CodeDom.Compiler, to compile
and execute code. So you can take a command such as
"string.Compare("test","testing")" from a prompt, build it up into a
simple class with an entry point, use an ICodeCompiler object (which one
depends on which language) to compile the code, and then execute the
assembly in memory, returning the result back to the prompt (without
saving any of the code or binary assembly to file, truly on the fly).

Cesare, davvero, basta :)
Hai tirato in ballo un intero IDE: se facciamo di questi confronti non ne usciamo più, e comunque non mi va di continuare con questa polemica.

Anche per questo, ho evitato di rispondere all'altro messaggio. ;)

gugoXX
27-03-2008, 13:56
Gli oggetti non cambiano di tipo. Semplicemente le variabili in Python (ma anche in JavaScript, se non ricordo male) conservano sempre e soltanto il riferimento a un oggetto.

Quindi se scrivi prima a = 1 e subito dopo a = 'Pippo', a non ha cambiato tipo, ma soltanto "punta" a un oggetto diverso. Tutto qui.

E' sbagliato: Python è fortemente tipizzato come linguaggio. Prova a sommare un numero con una stringa.

Non bisogna confondere la (forte o debole) tipizzazione con la "dinamicità" del linguaggio, che permette di eseguire il binding di un oggetto a una "variabile" in qualunque momento e più volte.


E quindi non ci sono differenze, dato che lo si puo' fare anche in C#.
L'unica differenza sarebbe quindi che in C# non posso riusare lo stesso nome di variabile? Non mi sembra un cosi' grande limite.
Una differenza potrebbe essere che il tipo di una variabile viene fissata in C# al momento della creazione dell'istanza dell'oggetto, cosa che invece mi sembra di aver capito che in Python puo' anche avvenire dopo vero? (Come in javascript, p.es.)


Lasciamo perdere, mi sono stufato. Se hai intenzione di farti una cultura con Python, visto che conosci altri linguaggi, magari è meglio.

Chiaro. I problemi sono 2 pero'. Conoscere un linguaggio di programmazione e' una fatica non nulla. Lo farei se fossi sicuro di ottenere qualcosa in cambio.
Finora il x10 rispetto al C# non l'ho proprio visto. Ma neppure x2 o x1 ad essere sinceri.
C'e' un caso, un pattern, una situazione dove e' chiaramente piu' vantaggioso l'uso di Python?
Se qualcuno me lo chiedesse tra C++ e C# saprei tirare fuori decine di esempi.

L'altro problema e' questo.

Required Skills: C#
Posted: last 7 days
1 - 25 of 353 matches.
Highest salary: Salary:£90k pa + Bonus + Benefit (120k€ anno)

Required Skills: Python
Posted: last 7 days
1 - 25 of 45 matches
Highest salary: 50k to 60k pa + benefits (80k$ anno)

E ho tolto quelli a contratto, questi sono permanent.
A contratto in C# ce ne sono parecchi (e arrivano a 1000€ al giorno), mentre per Python non ne ho trovati.
Vorrei sottolineare la differenza sui matches, non sui salari, che sono effettivamente molto simili.

Questo solo per dire che oggi il mercato richiede di piu' il C#, e se devo proprio tirare la monetina per decidere cosa imparare, ho piu' speranze che mi possa servire per lavoro il C# piuttosto che il Python.
Questo oggi, domani magari sara' invece diverso.
Rendo merito anche che il Python si conosce di meno, quindi e' possibile che io riesca piu' facilmente a trovare lavoro se lo conosco bene. Non generalizzerei neppure qui.
Ma se fossi proprio digiuno di entrambi io personalmente sceglierei C#.

Io, da 3 anni e mezzo a questa parte, noto un notevole miglioramento della mia produttività personale. Opinione personalissima, sia chiaro, ma... per me è così: non posso certo nascondere quella che è la realtà che ho vissuto in tutto questo tempo, soltanto per far contento qualcuno. ;)
Ed e' la stessa cosa che dico io del C#.
Ma non vado a dire in giro che quindi e' 10 volte meglio di qualsiasi altro linguaggio, soprattutto di quelli che non conosco.
Magari 10 volte meglio del C, e parecchie volte meglio del C++, ma non generalizzerei.

fek
27-03-2008, 13:58
Lasciamo perdere questi confronti, Fran. Il primo progetto (costituito da più applicazioni, con compiti diversi) che ho realizzato in Python l'ho portato a termine in 20 giorni, incluso il tempo di apprendimento di molti concetti di questo linguaggio.

Ma non lasciamoli perdere proprio per nulla, perche' e' l'unica cosa che per me conta: due giorni di lavoro persi per un errore che doveva essere trovato a compile-time. Il resto e tutti gli altri esempi, davvero, sono chiacchiere perche' nell'applicazione sul campo in un progetto ampio Python per me ha fallito. Occhio che sono due anni che lavoro con un sistema totalmente scritto in Python e so che cosa vuole dire. E infatti usero' altri strumenti.

Hai tirato in ballo un intero IDE: se facciamo di questi confronti non ne usciamo più, e comunque non mi va di continuare con questa polemica.

Ho tirato in ballo cinquanta righe di codice che posso scrivere in mezz'ora per fare esattamente quello che dici tu! C# in console.
Permettimi, come consigli ad altri di studiare meglio Python, dai un'occhiata meglio alle possibilita' offerte da .NET prima di fare certe affermazioni.

^TiGeRShArK^
27-03-2008, 16:35
Ti sfido ad usare Monodevelop e a paragonarlo anche solo minimamanete a VisualStudio (ma anche a SharpDevelop)

beh..
ho paura solo ad immaginare cosa sia dato che il BELLISSIMO visual studio nemmeno mi rinomina il nome delle classi in seguito ad una copia e mi sono accorto che aveva fatto un casino tremendo solo una volta che ho riaperto il file originale e non funzionava + una mazza dato che avevo fatto refactor -> rename a manetta.. :muro:
meno male che c'è il santissimo SVN altrimenti sarebbe stata la volta buona che sarei partito dritto dritto per redmond...
Ma cazzarola..
Un editor completamente gratuito come eclipse fa 'sta cosa da tempo immemore..
possibile che nel 2008 ancora devo smazzarmi le cose a mano io?!? :muro:
ah.. ovviamente mi è capitato proprio in questo istante... per questo da quasto post traspare tutto il mio "amore" verso visual studio....:mad:

Torav
27-03-2008, 20:59
Avevo intenzione di proporre un esercizio quasi accademico.
Un simulatore di sistema solare, con pianeti definiti da coordinate e massa.
Il simulatore dovrebbe preoccuparsi di calcolare le accellerazioni e di manutenere le velocita', tutto partendo dalla legge di Newton.
Poi sarebbe anche bello stampare a video il risultato passo-passo della simulazione, disegnando dove i pianeti (e il sole) vanno a posizionarsi man mano che il tempo passa.

Cosi' anche chi dice che non c'e' soluzione per il problema dei 3 pianeti sta zitto. Anche qui matematicamente si ha una soluzione, che non e' analitica, ma precisa a piacere.
Proprio come le tanto elogiate funzioni analitiche, che tanto hanno lo stesso problema.
sin(31) sara' tanto bella scritta cosi', ma per avere il valore numerico si devono fare gli sviluppi, con tanti passi quanti sono necessari per ottenere la precisione che si desidera. Esattamente come potrebbe essere la nostra simulazione...

Stasera provo.
Ho capito che in Python non ci sara' la parte grafica, fa lo stesso.
Al C# gliela aggiungero', magari in un bel Thread separato, per non bloccare la finestra come capita a tutti i niubbi...

io credo di non essere un gran programmatore (tutt'altro! :D ), però se vuoi il progammino l'ho fatto in python, perchè non avevo mai provato a fare un algoritmo di simulazione numerica non in c/c++ e volevo vedere quanto ci avrei messo :stordita: . Devo dire che lo sviluppo è stato molto più rapido che in uno dei due suddetti linguaggi, anche se mi sembra decisamente più lento (come c'era da aspettarsi) nell'esecuzione. Se vuoi posso mandartelo via mail e puoi giudicare tu, ma onestamente credo che chiunque qua dentro saprebbe scriverlo meglio :p

gugoXX
27-03-2008, 21:20
io credo di non essere un gran programmatore (tutt'altro! :D ), però se vuoi il progammino l'ho fatto in python, perchè non avevo mai provato a fare un algoritmo di simulazione numerica non in c/c++ e volevo vedere quanto ci avrei messo :stordita: . Devo dire che lo sviluppo è stato molto più rapido che in uno dei due suddetti linguaggi, anche se mi sembra decisamente più lento (come c'era da aspettarsi) nell'esecuzione. Se vuoi posso mandartelo via mail e puoi giudicare tu, ma onestamente credo che chiunque qua dentro saprebbe scriverlo meglio :p

L'ho quasi finito anche io, la parte matematica e' fatta.
Mi sto solo arrabbiando un po' con la parte grafica. Non mi hanno messo la possibilita' di disegnare un semplice punto. Ma perche'?
Vabbe'. Sto per disegnare dei piccoli cerchi, e a sto punto li faccio tanto piu' grossi quanto piu' grande e' la loro massa.
Putroppo non ho un compilatore Python sotto mano. Ho scaricato IronPython e me lo guardero' con calma.
Sulla velocita' di sviluppo non lo metto in dubbio che sia piu' veloce del C.
Devo dire pero' che lo pensavo piu' accattivante. Invece a conti fatti non e' proprio tanto stravolto rispetto al C++.
Il codice della parte centrale, ovvero lo STEP di simulazione, e' venuto fuori cosi'


public List<Planet> PlanetList = new List<Planet>();

// Costruttore: vado a caricarmi un po' di pianeti da file XML.

// Un passo di simulazione.
public void Step()
{
int plength = PlanetList.Count;
foreach (Planet p in PlanetList) p.ResetAccell();
// Per ciascuna coppia di pianeti calcolo l'interazione reciproca
for(int t=0;t<plength;t++)
{
Planet p = PlanetList[t];
for(int u=t+1;u<plength;u++)
{
Planet q = PlanetList[u];
Interaction(p, q);
}
}
// Applico l'accellerazione di ciascun pianeta.
foreach(Planet p in PlanetList)
{
p.vinst += p.accell;
p.coords += p.vinst;
}
}

public const double G = 1d;

//Interazione tra due pianeti. Calcolo dell'accellerazione su ciascuno dei 2
public void Interaction(Planet p1, Planet p2)
{
double dist2 = PointD.Dist2(p1.coords, p2.coords);
double dist = Math.Sqrt(dist2);

double F = G / dist2;
PointD delta = (p1.coords - p2.coords) / dist;
PointD deltaF = delta * F;

p1.accell += deltaF*(-p2.m);
p2.accell += deltaF*p1.m;
}


Tutto ben scritto grazie all'overload degli operatori.
Ma non mi sembra molto diverso da come l'avrei scritto in C++

Il resto e' poco interessante, solo la definizione degli operatori di cui prima e la definizione della classe Planet (quasi una struttura in realta')
In Python come e' venuto scritto?

cdimauro
27-03-2008, 21:25
E quindi non ci sono differenze, dato che lo si puo' fare anche in C#.
Scusami, mi son perso: cosa si potrebbe fare anche in C#?
L'unica differenza sarebbe quindi che in C# non posso riusare lo stesso nome di variabile? Non mi sembra un cosi' grande limite.
No, chiaro: non si muore mica.
Una differenza potrebbe essere che il tipo di una variabile viene fissata in C# al momento della creazione dell'istanza dell'oggetto, cosa che invece mi sembra di aver capito che in Python puo' anche avvenire dopo vero? (Come in javascript, p.es.)
Il tipo può cambiare in base all'oggetto referenziato, ma è sempre "fissato".

In JavaScript mi sembra che un variabile mai assegnata assuma il valore "unknown" (se ricordo bene) una volta referenziata. In Python ciò scatena un errore (prima di essere referenziata dev'essere sempre assegnata).
Chiaro. I problemi sono 2 pero'. Conoscere un linguaggio di programmazione e' una fatica non nulla. Lo farei se fossi sicuro di ottenere qualcosa in cambio.
Finora il x10 rispetto al C# non l'ho proprio visto. Ma neppure x2 o x1 ad essere sinceri.
C'e' un caso, un pattern, una situazione dove e' chiaramente piu' vantaggioso l'uso di Python?
Se qualcuno me lo chiedesse tra C++ e C# saprei tirare fuori decine di esempi.
Ti faccio qualche esempio, dividendo il discorso in due macroaree.

Ricca varietà di tipi di dati predefiniti (riporto i più importanti e "particolari"):
- interi (illimitati. Es: 1 << 256 = 115792089237316195423570985008687907853269984665640564039457584007913129639936L);
- stringhe (queste devi provarle: per la manipolazione delle stringhe Python è particolarmente comodo e versatile; esempietto al volo: s = ', '.join(['Qui', 'Quo', 'Qua']) produce s = 'Qui, Quo, Qua'), con supporto anche allo unicode (quindi posso avere stringhe che contentono sequenze di byte, oppure sequenze di caratteri unicode; la gestione è esattamente la stessa);
- tuple, cioé sequenza di oggetti immodificabile (per restituire più valori o s/impacchettarli; es: return 'Qui', 'Quo', 'Qua' in una funzione, oppure x, y, z = 'Qui', 'Quo', 'Qua' assegna x = 'Qui', y = 'Quo', y = 'Qua');
- liste; simili alle tuple, ma modificabili (es: x = [1, 2, 3]; y = [9, 8, 7, 6]; z = x + y assegna z = [1, 2, 3, 9, 8 ,7, 6]));
- dizionari, cioé array associativi / hash map / hash table (es: x = {'Qui' : 1, 'Quo' : 2, 'Qua' : 3}; x['Quo'] restituisce 2;
- set; simili alle liste, ma contengono valori unici e non ordinati, e inoltre supportano le operazioni su insiemi (unione, differenza simmetrica, intersezione, ecc.).
- decimali (valori in virgola fissa illimitati).

Ce ne sarebbero tanti altri, ma te li risparmio.

La seconda "macroarea" verte sul carattere dinamico di Python. In parte l'avrai notato dagli esempi precedenti, dove le liste o dizionari non hanno specificato il/i tipo/i su cui lavorano. In soldoni: possono contenere valori di qualunque tipo.

Esempio: L = [1, 'Qui', 3.14, {'Qui' : 1, 1 : 'Qui'}, set([1, 2, 3, 5, 7, 11])]

Da nessuna parte devi specificare il tipo dell'oggetto. Ad esempio quando definisci una funzione (o metodo):

def Somma(x, y):
return x + y

Non solo non definisci il tipo, ma più che una funzione hai appena definito un "comportamento", posto che x e y siano oggetti che supportano l'operazione di addizione (il primo o, in mancanza, il secondo oggetto).
Insomma, è un'operazione "generica" / "universale".

Un'utile conseguenza di ciò è che non hai bisogno di ricorrere alla definizione di un delegate quando devi "passare una funzione" a un'altra funzione.

def Apply(Function, x, y):
return Function(x, y)

print Apply(Somma, 1, 2)

Sulla "dinamicità" di Python ci sarebbe ancora parecchio da dire. Se ti ho stuzzicato l'appetito posso farti altri esempi (ci sarebbero argomenti molto più avanzati, come i "decoratori", ad esempio).
L'altro problema e' questo.

E ho tolto quelli a contratto, questi sono permanent.
A contratto in C# ce ne sono parecchi (e arrivano a 1000€ al giorno), mentre per Python non ne ho trovati.
Vorrei sottolineare la differenza sui matches, non sui salari, che sono effettivamente molto simili.

Questo solo per dire che oggi il mercato richiede di piu' il C#, e se devo proprio tirare la monetina per decidere cosa imparare, ho piu' speranze che mi possa servire per lavoro il C# piuttosto che il Python.
Questo oggi, domani magari sara' invece diverso.
Rendo merito anche che il Python si conosce di meno, quindi e' possibile che io riesca piu' facilmente a trovare lavoro se lo conosco bene. Non generalizzerei neppure qui.
Ma se fossi proprio digiuno di entrambi io personalmente sceglierei C#.
Nulla da dire su questo: il mercato al momento è così...
Ed e' la stessa cosa che dico io del C#.
Ma non vado a dire in giro che quindi e' 10 volte meglio di qualsiasi altro linguaggio, soprattutto di quelli che non conosco.
Magari 10 volte meglio del C, e parecchie volte meglio del C++, ma non generalizzerei.
10 volte è una sparata, dai: non è cosa di tutti giorni, perché può capitare qualche volta. Ma IMHO Python è più produttivo.
Ma non lasciamoli perdere proprio per nulla, perche' e' l'unica cosa che per me conta: due giorni di lavoro persi per un errore che doveva essere trovato a compile-time. Il resto e tutti gli altri esempi, davvero, sono chiacchiere perche' nell'applicazione sul campo in un progetto ampio Python per me ha fallito. Occhio che sono due anni che lavoro con un sistema totalmente scritto in Python e so che cosa vuole dire. E infatti usero' altri strumenti.
De gustibus: a me (che ci lavoro da 3 anni e mezzo a tempo pieno: qualcosa varrà pure come esperienza, spero :)) e a tanti altri va benissimo con Python. :p
Ci sono aziende come Google che non hanno certo progettini da due soldi e per i quali viene utilizzato Python... :D

Abbiamo avuto esperienze diverse. Tutto qui. ;)
Ho tirato in ballo cinquanta righe di codice che posso scrivere in mezz'ora per fare esattamente quello che dici tu! C# in console.
Mai negato questo Fran, ma io lo posso già fare da dubito, senza scrivere né cercare alcunché: in qualunque distribuzione di Python oltre alla V.M. (e la libreria standard) c'è sempre la shell a disposizione per smanettare. :)
Permettimi, come consigli ad altri di studiare meglio Python, dai un'occhiata meglio alle possibilita' offerte da .NET prima di fare certe affermazioni.
Ma mica ho negato che per C# (su .NET, poi, gira IronPython! :)) sono disponibili tanti utili e comodi strumenti. ;)

Però quando ti dico che esistono IDE e strumenti per Python che permettono di individuare velocemente l'errore in cui sei incappato non vuoi sentire ragioni... :|

Torav
27-03-2008, 21:27
oddio...devo dire che dato che l'ho preso come esercizio per l'università io ho usato l'algoritmo di runge kutta (al quart'ordine) e il formalismo hamiltoniano (quindi ho 2 coordinate e 2 momenti, il tutto fatto con coordinate angolari perchè è un problema quasi centrale e mi sembrava meglio) quindi mi sa che è venuto decisamente più illeggibile :p

Torav
27-03-2008, 21:36
beh tanto per far vedere del codice:
ho la classe pianeta che anche nel mio caso è praticamente una struttura:

class pianetaClass:
def __init__(self, nome, massa, r, theta, pr, ptheta):
self.nome = nome
self.massa = massa
self.coord = dict([('r',r), ('theta',theta)])
self.mom = dict([('r',pr), ('theta',ptheta)])


def __str__(self):
return self.nome + ": massa = " + str(self.massa) + ", posizione = (" + str(self.coord['r']) + ", " + str(self.coord['theta']) + "), momenti = (" + str(self.mom['r']) + ", " + str(self.mom['theta']) + ")"


# Ritorna un pianeta con coordinate e momenti uguali a quelli di self + gli argomenti
def aggiungiCost(self, r, theta, PR, PTheta):
return pianetaClass(self.nome, self.massa, self.coord['r'] + r, self.coord['theta'] + theta, self.mom['r'] + PR, self.mom['theta'] + PTheta)


# Ritorna la distanza (al quadrato) tra self e il pianeta in argomento
def distanzaQ(self, pianeta):
dist = self.coord['r']**2 + pianeta.coord['r']**2 - self.coord['r'] * pianeta.coord['r'] * math.cos(self.coord['theta'] - pianeta.coord['theta'])

return math.sqrt(dist)



e la classe sistema solare che controlla tutto "l'ambiente":

class sistemaSolareClass:
def __init__(self, pianeti):
self.pianeti = pianeti


def __str__(self):
toPrint = "Attuali posizioni e momenti dei pianeti all'interno del sistema solare:\n"
for pianeta in self.pianeti:
toPrint += str(pianeta) + "\n"

return toPrint


def evolvi(self, tempo, salvaOgni=1000):
# questo metodo prende un centinaio di righe di codice piuttosto noiosette
# che sono semplicemente l'implementazione dell'algoritmo di runge kutta


def rPunto(self, pianeta):
return (pianeta.mom['r'] / pianeta.massa)


def thetaPunto(self, pianeta):
return pianeta.mom['theta'] / (pianeta.massa * pianeta.coord['r']**2)


def PRPunto(self, pianeta, altriPianeti):
valore = - G*M * pianeta.massa / (pianeta.coord['r']**2) + pianeta.mom['theta']**2 / (pianeta.massa * pianeta.coord['r']**3)

for altroP in altriPianeti:
valore -= (1./2.) * G * altroP.massa * pianeta.massa / (pianeta.distanzaQ(altroP)**(3./2.)) * (2.*pianeta.coord['r'] - altroP.coord['r'] * math.cos(pianeta.coord['theta'] - altroP.coord['theta']))

return valore


def PThetaPunto(self, pianeta, altriPianeti):
valore = 0
for altroP in altriPianeti:
valore -= (1./2.) * G * pianeta.massa * altroP.massa / (pianeta.distanzaQ(altroP)**(3./2.)) * pianeta.coord['r'] * altroP.coord['r'] * math.sin(pianeta.coord['theta'] - altroP.coord['theta'])

return valore

all'inizio ovviamente ho definitio un paio di variabili contenente G, la massa del "sole" (che considero fisso, più che altro per comodità, non ci vorrebbe nulla a piazzarlo al centro con una massa molto grande :D ) e l'intervallo di tempo DT.
per inciso nel metodo che calcola runge kutta ho anche messo la scrittura su file dei risultati (in output ci sono solo x = r cos(theta) e y=r sin(theta) per poter essere visualizzati meglio, io uso gnuplot e vengono tante belle quasi-ellissi :D ).
il programma "esterno" si riduce ad un qualcosa del genere:


a = pianetaClass("Terra", 1, 1, 0.4, 0.1, 0.5)
b = pianetaClass("Mercurio", 0.3 0.4, 2, 0.03, 0.02)

mySis = sistemaSolareClass((a, b))

mySis.evolvi(10, 100000)

mi scuso per l'orrido uso degli oggetti, ma nella mia facoltà non ci sono esami di ingegneria del software e da solo non riesco proprio a tirare fuori qualcosa di meglio :stordita:

fek
27-03-2008, 21:43
De gustibus: a me (che ci lavoro da 3 anni e mezzo a tempo pieno: qualcosa varrà pure come esperienza, spero :)) e a tanti altri va benissimo con Python. :p

Urca due giorni di lavoro persi per un difetto del linguaggio non e' una questione di gusti.

Mai negato questo Fran, ma io lo posso già fare da dubito, senza scrivere né cercare alcunché: in qualunque distribuzione di Python oltre alla V.M. (e la libreria standard) c'è sempre la shell a disposizione per smanettare. :)

Anch'io posso farlo subito, mi scarico la shell per C# come tu ti scarichi la shell di Python.

Però quando ti dico che esistono IDE e strumenti per Python che permettono di individuare velocemente l'errore in cui sei incappato non vuoi sentire ragioni... :|

Perche' un IDE non e' la soluzione ad un difetto di progettazione del linguaggio, come i commenti non sono una soluzione al codice scritto coi piedi ;)

Si riscrive il codice. E si usa un linguaggio migliore.

cdimauro
27-03-2008, 21:47
Urca due giorni di lavoro persi per un difetto del linguaggio non e' una questione di gusti.
Ma lo posso dire che a me piace così? :stordita:
Anch'io posso farlo subito, mi scarico la shell per C# come tu ti scarichi la shell di Python.
Ehm... c'è già con Python: non devo scaricare niente. :fagiano:
Perche' un IDE non e' la soluzione ad un difetto di progettazione del linguaggio, come i commenti non sono una soluzione al codice scritto coi piedi ;)

Si riscrive il codice. E si usa un linguaggio migliore.
OK, OK: cedo alla violenza. :p

gugoXX
27-03-2008, 22:20
oddio...devo dire che dato che l'ho preso come esercizio per l'università io ho usato l'algoritmo di runge kutta (al quart'ordine) e il formalismo hamiltoniano (quindi ho 2 coordinate e 2 momenti, il tutto fatto con coordinate angolari perchè è un problema quasi centrale e mi sembrava meglio) quindi mi sa che è venuto decisamente più illeggibile :p

Olamadd... hai fatto un Runge Kutta in una sera?
Stocks!!!
100 righe nascoste pure.

Comunque hai praticamente scritto la formula di evoluzione secondo newton qui

valore -= (1./2.) * G * pianeta.massa * altroP.massa / (pianeta.distanzaQ(altroP)**(3./2.)) * pianeta.coord['r'] * altroP.coord['r'] * math.sin(pianeta.coord['theta'] - altroP.coord['theta'])


(Fra l'altro sin e cos li puoi calcolare direttamente date le coordinate, e ci guadagni qualcosina sia in codice che in velocita')

A cosa ti e' servito Runge Kutta?

morskott
27-03-2008, 22:28
beh tanto per far vedere del codice:
ho la classe pianeta che anche nel mio caso è praticamente una struttura:

class pianetaClass:
def __init__(self, nome, massa, r, theta, pr, ptheta):
self.nome = nome
self.massa = massa
self.coord = dict([('r',r), ('theta',theta)])
self.mom = dict([('r',pr), ('theta',ptheta)])


def __str__(self):
return self.nome + ": massa = " + str(self.massa) + ", posizione = (" + str(self.coord['r']) + ", " + str(self.coord['theta']) + "), momenti = (" + str(self.mom['r']) + ", " + str(self.mom['theta']) + ")"


# Ritorna un pianeta con coordinate e momenti uguali a quelli di self + gli argomenti
def aggiungiCost(self, r, theta, PR, PTheta):
return pianetaClass(self.nome, self.massa, self.coord['r'] + r, self.coord['theta'] + theta, self.mom['r'] + PR, self.mom['theta'] + PTheta)


# Ritorna la distanza (al quadrato) tra self e il pianeta in argomento
def distanzaQ(self, pianeta):
dist = self.coord['r']**2 + pianeta.coord['r']**2 - self.coord['r'] * pianeta.coord['r'] * math.cos(self.coord['theta'] - pianeta.coord['theta'])

return math.sqrt(dist)



e la classe sistema solare che controlla tutto "l'ambiente":

class sistemaSolareClass:
def __init__(self, pianeti):
self.pianeti = pianeti


def __str__(self):
toPrint = "Attuali posizioni e momenti dei pianeti all'interno del sistema solare:\n"
for pianeta in self.pianeti:
toPrint += str(pianeta) + "\n"

return toPrint


def evolvi(self, tempo, salvaOgni=1000):
# questo metodo prende un centinaio di righe di codice piuttosto noiosette
# che sono semplicemente l'implementazione dell'algoritmo di runge kutta


def rPunto(self, pianeta):
return (pianeta.mom['r'] / pianeta.massa)


def thetaPunto(self, pianeta):
return pianeta.mom['theta'] / (pianeta.massa * pianeta.coord['r']**2)


def PRPunto(self, pianeta, altriPianeti):
valore = - G*M * pianeta.massa / (pianeta.coord['r']**2) + pianeta.mom['theta']**2 / (pianeta.massa * pianeta.coord['r']**3)

for altroP in altriPianeti:
valore -= (1./2.) * G * altroP.massa * pianeta.massa / (pianeta.distanzaQ(altroP)**(3./2.)) * (2.*pianeta.coord['r'] - altroP.coord['r'] * math.cos(pianeta.coord['theta'] - altroP.coord['theta']))

return valore


def PThetaPunto(self, pianeta, altriPianeti):
valore = 0
for altroP in altriPianeti:
valore -= (1./2.) * G * pianeta.massa * altroP.massa / (pianeta.distanzaQ(altroP)**(3./2.)) * pianeta.coord['r'] * altroP.coord['r'] * math.sin(pianeta.coord['theta'] - altroP.coord['theta'])

return valore

all'inizio ovviamente ho definitio un paio di variabili contenente G, la massa del "sole" (che considero fisso, più che altro per comodità, non ci vorrebbe nulla a piazzarlo al centro con una massa molto grande :D ) e l'intervallo di tempo DT.
per inciso nel metodo che calcola runge kutta ho anche messo la scrittura su file dei risultati (in output ci sono solo x = r cos(theta) e y=r sin(theta) per poter essere visualizzati meglio, io uso gnuplot e vengono tante belle quasi-ellissi :D ).
il programma "esterno" si riduce ad un qualcosa del genere:


a = pianetaClass("Terra", 1, 1, 0.4, 0.1, 0.5)
b = pianetaClass("Mercurio", 0.3 0.4, 2, 0.03, 0.02)

mySis = sistemaSolareClass((a, b))

mySis.evolvi(10, 100000)

mi scuso per l'orrido uso degli oggetti, ma nella mia facoltà non ci sono esami di ingegneria del software e da solo non riesco proprio a tirare fuori qualcosa di meglio :stordita:

Come si è passati dall'unire due file exe a dissertazioni astrofisiche sul sistema solare devo ancora capirlo.......:D Passando dal solito (flame? (almeno è garbato)) Python VS resto del mondo

gugoXX
27-03-2008, 22:38
Ricca varietà di tipi di dati predefiniti (riporto i più importanti e "particolari"):
- interi (illimitati. Es: 1 << 256 = 115792089237316195423570985008687907853269984665640564039457584007913129639936L);
- stringhe (queste devi provarle: per la manipolazione delle stringhe Python è particolarmente comodo e versatile; esempietto al volo: s = ', '.join(['Qui', 'Quo', 'Qua']) produce s = 'Qui, Quo, Qua'), con supporto anche allo unicode (quindi posso avere stringhe che contentono sequenze di byte, oppure sequenze di caratteri unicode; la gestione è esattamente la stessa);
- tuple, cioé sequenza di oggetti immodificabile (per restituire più valori o s/impacchettarli; es: return 'Qui', 'Quo', 'Qua' in una funzione, oppure x, y, z = 'Qui', 'Quo', 'Qua' assegna x = 'Qui', y = 'Quo', y = 'Qua');
- liste; simili alle tuple, ma modificabili (es: x = [1, 2, 3]; y = [9, 8, 7, 6]; z = x + y assegna z = [1, 2, 3, 9, 8 ,7, 6]));
- dizionari, cioé array associativi / hash map / hash table (es: x = {'Qui' : 1, 'Quo' : 2, 'Qua' : 3}; x['Quo'] restituisce 2;
- set; simili alle liste, ma contengono valori unici e non ordinati, e inoltre supportano le operazioni su insiemi (unione, differenza simmetrica, intersezione, ecc.).
- decimali (valori in virgola fissa illimitati).


Per intanto ti ringrazio.
Mi sa che non sono mica tanto diversi alla fine allora.
Guarda qui:

var sorgente = new string[] { "bimbo", "Brutto", "Cattivo", "ﺹﻀﻏﻖﺦﺬﺡﺴ" };
var pippolone=string.Join(",", sorgente );

var Tupla=new{ Nome = "Pippo", age = 15 };
string PippoName=Tupla.Nome;
int PippoAge=Tupla.age;

int[] int1=new[]{1,2,3,4};
var int2=new[]{5,6,7,7};
var insieme=int1.Union(int2);


Poi mi sono divertito con l'insieme:


var quanti = insieme.Count();
var qualigrossi = insieme.Where( u => u>3);
int quantigrossi = qualigrossi.Count();
var alcontrario = insieme.Reverse();
var piuuno = insieme.Select( u=>u+1 );
var diversi = insieme.Distinct();
bool celo = insieme.Contains(2);
var manca = !insieme.Contains(9);
int sommone = insieme.Sum();
var soloiprimi5 = insieme.Take(5);
int dammiquesto = int1.Single(y => (y > 4) && (y < 6));

var comuni = int1.Intersect(int2);
var subtract=int1.Where(t => !int2.Contains(t));


Poi ho visto che tu hai citato le operazioni su insieme, e io ho trovato in libreria la Intersect e la Union, ma non la Subtract (che li' sopra ho fatto con quella Where)
A questo punto, aggiungendo una funzione alla classe generica "array di interi" (penso che sia un concetto simile alla decorazione di cui accennavi)
ho potuto scrivere anche

var oracelho=int1.MenoSoloPerInt(int2);


Poi, visto che mi rompeva alquanto avere sto metodo solo per gli "Array di interi", allora l'ho esteso a quasiasi tipo di array. Il codice dei 2 estensori e' bruttino, ma lo metto qui per libreria.

public static int[] MenoSoloPerInt(this int[] daquesti, int[] togliquesti)
{
return daquesti.Where(t => !togliquesti.Contains(t)).ToArray();
}

public static IEnumerable<T> Meno<T>(this IEnumerable<T> daquesti, IEnumerable<T> togliquesti)
{
return daquesti.Where(t => !togliquesti.Contains(t));
}


Sul fatto di passare "funzioni" ad altre funzioni, anche senza delegate, lo puoi vedere dal codice divertimento che ho scritto sopra. In C# si chiamano lambda function.

I dictionary ci sono, per implementare le Hashtable tipizzate.
Ci sono anche i SortedDictionary per resituire velocemente le chiavi ordinate (quando servono), le LookUp che sono Dictionary con solo le chiavi, e altre.

Conti fatti restano fuori gli interi lunghi e i virgola fissa lunghi (e magari altri che non hai citato) pero' ammetti che non si usano poi cosi' spesso. E soprattutto non fanno uso del coprocessore (molto probabilmente) quindi non saranno neppure molto performanti. Spero che gli interi normali si differenzino da questi.

Pero' potrei mettere sul tavolo ancora una trentina (non esagero) di funzioni come le Where, Union, etc. di cui sopra, gia' in libreria e pronti all'uso, da applicare su oggetti enumerabili come le liste, etc.
Se poi ci si mette si puo' scrivere anche qualcosa di molto carino, che sembra quasi SQL.

Finisco dicendo che l'uso della keyword var lo limiterei proprio solo dove non se ne puo' fare a meno,
ovvero dopo le creazioni al volo di oggetti di una classe senza nome (Come la Tupla di prima),
oppure a seguito della restituzione di oggetti "anonimi" da funzioni che usano i generici.
In pratica io sopra avrei esplicitato quasi tutte le dichiarazioni, ma solo perche' in seguito mi piace leggere le cose in quel modo. Il risultato sarebbe stato lo stesso.

Torav
27-03-2008, 22:40
Olamadd... hai fatto un Runge Kutta in una sera?
Stocks!!!
100 righe nascoste pure.

Comunque hai praticamente scritto la formula di evoluzione secondo newton qui


(Fra l'altro sin e cos li puoi calcolare direttamente date le coordinate, e ci guadagni qualcosina sia in codice che in velocita')

A cosa ti e' servito Runge Kutta?

beh, con runge kutta al quarto ordine hai errori del quinto ordine, con il metodo di eulero (mi pare che usi quelli?) che usi tu invece non si conserva neanche l'energia :p
e te l'ho detto, ho usato la tua idea come banco di prova per provare a sviluppare un programmino di calcolo numerico in python (cosa che non avevo mai fatto) e per riprendere la mano con runge kutta che mi tocca utilizzare in un corso che sto facendo ora :)

gugoXX
27-03-2008, 22:48
beh, con runge kutta al quarto ordine hai errori del quinto ordine, con il metodo di eulero (mi pare che usi quelli?) che usi tu invece non si conserva neanche l'energia :p
e te l'ho detto, ho usato la tua idea come banco di prova per provare a sviluppare un programmino di calcolo numerico in python (cosa che non avevo mai fatto) e per riprendere la mano con runge kutta che mi tocca utilizzare in un corso che sto facendo ora :)

Guarda, non so se si chiama di Eulero oppure no.
Semplicemente ad ogni passo calcolo l'interazione fra ciascuna coppia di pianeti (accellerazioni), aggiorno le velocita' di ciascuno, aggiorno di conseguenza le coordinate e ricomincio.
Perche' non si conserverebbe l'energia?
L'unica cosa che non considero e' la collisione (al posto di schiantarsi e inglobarsi si trapassano, e questo non e' ovviamente reale).

Torav
27-03-2008, 23:04
Guarda, non so se si chiama di Eulero oppure no.
Semplicemente ad ogni passo calcolo l'interazione fra ciascuna coppia di pianeti (accellerazioni), aggiorno le velocita' di ciascuno, aggiorno di conseguenza le coordinate e ricomincio.
Perche' non si conserverebbe l'energia?
L'unica cosa che non considero e' la collisione (al posto di schiantarsi e inglobarsi si trapassano, e questo non e' ovviamente reale).

guarda è assai possibile che mi sbaglio, il primo esame di analisi numerica in cui facevo questi metodi l'ho dato un paio di anni fa e non ricordo bene, in pratica il problema del tuo algoritmo (che però fa il suo più che onesto dovere eh!) è che è del primo ordine e quindi ha un errore che va come n*dt^2 dove n è il numero di passi e dt l'ampiezza dell'intervallo temporale. Mi ricordo che a laboratorio avevamo graficato l'energia e in effetti veniva una roba un po' oscillante :stordita: ! cmq penso che per la precisione che serve a noi un algoritmo vale l'altro! solo che ho usato questo problema come esercizio e ho colto la palla al balzo :)

gugoXX
27-03-2008, 23:09
guarda è assai possibile che mi sbaglio, il primo esame di analisi numerica in cui facevo questi metodi l'ho dato un paio di anni fa e non ricordo bene, in pratica il problema del tuo algoritmo (che però fa il suo più che onesto dovere eh!) è che è del primo ordine e quindi ha un errore che va come n*dt^2 dove n è il numero di passi e dt l'ampiezza dell'intervallo temporale. Mi ricordo che a laboratorio avevamo graficato l'energia e in effetti veniva una roba un po' oscillante :stordita: ! cmq penso che per la precisione che serve a noi un algoritmo vale l'altro! solo che ho usato questo problema come esercizio e ho colto la palla al balzo :)


Mi fido. E' ovvio che si tratti di un'approssimazione, ma pensavo che riducendo a piacere il DeltaT potessi raggiungere una precisione a piacere.
Ma a questo punto mi sa che non e' cosi'.

Ho finito la parte grafica. E' davvero carino. Velocissimo peraltro, non pensavo.
Ci ho messo anche un attrito, senno' era noioso. Non succedeva nulla e i pianeti andavano avanti forse per sempre.
Ora sto facendo girare un po' di pianeti in senso orario e un po' in senso antiorario. Funzionano pure i satelliti!!!
Ma il sole non doveva stare sempre in uno dei 2 fuochi dell'ellisse? Non era una delle leggi di Keplero? Ad occhio mi sembra che ci siano casi che non sembrano proprio rispettarla... boh?

Torav
27-03-2008, 23:25
bello! domani faccio anche io la gui va...carina l'idea dell'attrito :D

fek
28-03-2008, 00:06
Ehm... c'è già con Python: non devo scaricare niente. :fagiano:


Python, l'unico linguaggio che funziona senza neppure scaricare l'interprete... solo su... Rieducational Channel :fagiano:

DioBrando
28-03-2008, 02:24
Ti sfido ad usare Monodevelop e a paragonarlo anche solo minimamanete a VisualStudio (ma anche a SharpDevelop)

Se è per questo possiamo sostituire la stragrande maggioranza degli IDE al posto di Monodevelop e SharpDevelop e otterremo lo stesso risultato ovvero che non sono paragonabili.

Quei pochi che reggono il confronto sono sulle dita di una mano e in ogni caso non offrono la stessa varietà e produttività in termini di strumenti: lo stesso Eclipse, è sì ricco di plugin ma se si sviluppa in Java è un discorso, passando ai linguaggi C-like un altro (senza menzionare nemmeno il confronto tra Matisse e il tool integrato in Eclipse).

Per quanto riguarda Mono sono rimasto piuttosto di sale anche io eppure sì è utilizzato anche i progetti grossi; al di là dei nomi che ha fatto fek ci sono Beagle, F-Spot, Zenworks Linux Management, lo stesso Moonlight (porting di Silverlight per Linux) ne è un suo "frutto".


x cionci:
scusa ma abbiamo capito che Python non lo digerisci, più o meno ad ogni menzione di questa parola scrivi un messaggio in cui si capisce piuttosto bene il tuo pensiero, tanto quanto Cesare invece lo loda.
Basterà no?
Posso capire che il suo atteggiamento sia un po' "oltranzista" (anche se poi tutto sommato ci si ride in tanti su :D), magari è un lato del suo carattere, ma d'altra parte se lo consiglia è perchè evidentemente nella sua esperienza ha tratto dei benefici in termini di produttività rispetto alle tecnologie utilizzate prima (magari usando C# avrebbe avuto lo stesso impatto...magari anche no perchè mi pare almeno fino a un po' di tempo fa lavorasse su piattaforme Linux).
Fek ha avuto un'esperienza completamente opposta, però ci hanno lavorato entrambe seppur con profitto differente e dal mio punto di vista hanno senz'altro più titolo per parlarne con cognizione di causa.
E al di là del profilo tenuto, le critiche penso siano più solide di chi le fa sulla base delle caratteristiche del linguaggio ma senza (correggimi se sbaglio) averlo mai utilizzato nella sua esperienza lavorativa.
D'altra parte il tuo non sapere che Python rientri nella famiglia NET, mi pare sia piuttosto indicativo, come tempo fa' non sapevi fosse disponibile il plugin per Eclipse.

cdimauro
28-03-2008, 08:28
Come si è passati dall'unire due file exe a dissertazioni astrofisiche sul sistema solare devo ancora capirlo.......:D Passando dal solito (flame? (almeno è garbato)) Python VS resto del mondo
Don't underestimate the power of flame...

http://sithsigma.files.wordpress.com/2007/06/darthvader.jpg
Per intanto ti ringrazio.
Mi sa che non sono mica tanto diversi alla fine allora.
Guarda qui:

var sorgente = new string[] { "bimbo", "Brutto", "Cattivo", "ﺹﻀﻏﻖﺦﺬﺡﺴ" };
var pippolone=string.Join(",", sorgente );

var Tupla=new{ Nome = "Pippo", age = 15 };
string PippoName=Tupla.Nome;
int PippoAge=Tupla.age;

int[] int1=new[]{1,2,3,4};
var int2=new[]{5,6,7,7};
var insieme=int1.Union(int2);


Poi mi sono divertito con l'insieme:


var quanti = insieme.Count();
var qualigrossi = insieme.Where( u => u>3);
int quantigrossi = qualigrossi.Count();
var alcontrario = insieme.Reverse();
var piuuno = insieme.Select( u=>u+1 );
var diversi = insieme.Distinct();
bool celo = insieme.Contains(2);
var manca = !insieme.Contains(9);
int sommone = insieme.Sum();
var soloiprimi5 = insieme.Take(5);
int dammiquesto = int1.Single(y => (y > 4) && (y < 6));

var comuni = int1.Intersect(int2);
var subtract=int1.Where(t => !int2.Contains(t));


Poi ho visto che tu hai citato le operazioni su insieme, e io ho trovato in libreria la Intersect e la Union, ma non la Subtract (che li' sopra ho fatto con quella Where)
A questo punto, aggiungendo una funzione alla classe generica "array di interi" (penso che sia un concetto simile alla decorazione di cui accennavi)
ho potuto scrivere anche

var oracelho=int1.MenoSoloPerInt(int2);


Poi, visto che mi rompeva alquanto avere sto metodo solo per gli "Array di interi", allora l'ho esteso a quasiasi tipo di array. Il codice dei 2 estensori e' bruttino, ma lo metto qui per libreria.

public static int[] MenoSoloPerInt(this int[] daquesti, int[] togliquesti)
{
return daquesti.Where(t => !togliquesti.Contains(t)).ToArray();
}

public static IEnumerable<T> Meno<T>(this IEnumerable<T> daquesti, IEnumerable<T> togliquesti)
{
return daquesti.Where(t => !togliquesti.Contains(t));
}

Che si possano fare più o meno le stesse cose non ci sono dubbi, ma t'invito a riflette sul COME queste cose vengano fatte, che mi sembra alquanto diverso (specialmente con le ultime parti in cui hai usato IEnumerable; a proposito: le "decorazioni" in Python servono ad altro; hanno a che fare con la composizione di funzioni :D). :)
Sul fatto di passare "funzioni" ad altre funzioni, anche senza delegate, lo puoi vedere dal codice divertimento che ho scritto sopra. In C# si chiamano lambda function.
Le lambda function ci sono anche in Python:

Somma = (lambda x, y: x + y)(1, 2)

:)

Ma Python, come dicevo, non richiede che tu definisca un "delegate" per indicare che il parametro di una funzione è... una funzione: passi direttamente o il nome della funzione (se esiste una funzione) oppure ne crei al volo una con l'istruzione lambda. ;)
I dictionary ci sono, per implementare le Hashtable tipizzate.
Ci sono anche i SortedDictionary per resituire velocemente le chiavi ordinate (quando servono), le LookUp che sono Dictionary con solo le chiavi, e altre.
OK, ma vedi sopra: vogliamo vedere in che modo si utilizzano? Oggetti come questi ormai li mettono a disposizione quasi tutti i linguaggi di programmazione, ma dubito che tu possa fare qualcosa di più semplice di:

Map = {'Qui' : 1, 'Quo' : 2, 'Qua' : 3}

in C#. ;)
Conti fatti restano fuori gli interi lunghi e i virgola fissa lunghi (e magari altri che non hai citato) pero' ammetti che non si usano poi cosi' spesso. E soprattutto non fanno uso del coprocessore (molto probabilmente) quindi non saranno neppure molto performanti. Spero che gli interi normali si differenzino da questi.
No, anzi con Python 3.0 ci sarà un solo tipo di interi, quello a precisione illimitata (adesso se un intero "sfora", l'oggetto viene fatto diventare un long integer, per l'appunto, come puoi vedere dall'esempio che t'avevo fatto: 1 << 256).

E' chiaro che le prestazioni non posso essere paragonabili a quelle di C#, ma tieni presente che Python attualmente non usa nessuna forma di compilazione JIT: l'interprete esegue i byte code uno alla volta. Esistono poi progetti come Psyco http://psyco.sourceforge.net/ che permettono di ottenere delle buone prestazioni.

Comunque Python non è nato per essere veloce, ma semplice: non ti devi preoccupare di quale tipo di intero da usare fra gli 8 (se non ricordo male) che un linguaggio come C# ti mette a disposizione (più eventuali altre classe per gestire "BigInt").
Pero' potrei mettere sul tavolo ancora una trentina (non esagero) di funzioni come le Where, Union, etc. di cui sopra, gia' in libreria e pronti all'uso, da applicare su oggetti enumerabili come le liste, etc.
Se poi ci si mette si puo' scrivere anche qualcosa di molto carino, che sembra quasi SQL.
Non lo metto in dubbio, ma potrei portarti anche gli iteratori e le funzioni di iterazione (nel modulo standard itertools) che permettono di ottenere risultati simili, ma non ne usciamo più: ogni linguaggio ha i suoi oggetti, e altri se ne possono usare da librerie esterne, ma... rimane la (diversa) espressività con cui riesci a rappresentare la soluzione al tuo problema. ;)
Finisco dicendo che l'uso della keyword var lo limiterei proprio solo dove non se ne puo' fare a meno,
ovvero dopo le creazioni al volo di oggetti di una classe senza nome (Come la Tupla di prima),
oppure a seguito della restituzione di oggetti "anonimi" da funzioni che usano i generici.
In pratica io sopra avrei esplicitato quasi tutte le dichiarazioni, ma solo perche' in seguito mi piace leggere le cose in quel modo. Il risultato sarebbe stato lo stesso.
Chiaro. Con Python, proprio perché è un linguaggio dinamico, non te ne devi preoccupare. Ad esempio, non hai bisogno dei generic perché le tuple, le liste, i dizionari, ecc. ecc. accettano oggetti di qualunque tipo. :)

Comunque stare a fare confronti "sulla carta" lascia il tempo che trova: potrei stare qui per ore a raccontarti come si fa qualcosa in Python, e tu a rispondermi come la faresti in C#, ma non risolveremmo nulla.

Dopo che avrai approfondito il tuo studio di C#, quando avrai tempo ti consiglio di smanettare con Python: è il modo migliore per poterti fare un'idea sul linguaggio, i suoi pregi e i suoi difetti. :)
Python, l'unico linguaggio che funziona senza neppure scaricare l'interprete... solo su... Rieducational Channel :fagiano:
print "Permettimi, come consigli ad altri di studiare meglio Python, dai un'occhiata meglio alle possibilita' offerte da .NET prima di fare certe affermazioni.".replace('Python', 'C#').replace('.NET', 'Python')

:D

Python è costituito da 3 elementi fondamentali: la virtual machine, il "compilatore" (lo metto tra virgolette e ti spiego dopo il perché) e la libreria standard. Senza di queste non vai da nessuna parte: non puoi lavorare in Python.

Il "compilatore" è un eseguibile (python.exe per Windows), ma non ha soltano questa funzionalità perché può:
- compilare (e basta) un sorgente (specificando l'opzione che forza la sola compilazione);
- compilare (se il sorgente è cambiato dall'ultima esecuzione) ed eseguire l'applicazione;
- eseguire i comandi in maniera interattiva.

Ecco perché ti dico che con Python la shell (interattiva) è già inclusa, mentre con linguaggi come C# (o Java, che ha javac.exe per compilare e java.exe per eseguire l'applicazione) devi andare a cercare soluzioni di terze parti. ;)

Poi è chiaro che "fuori" c'è di meglio: ci sono IDE molto più avanzati, ma anche shell interattive decisamente migliori. :)

cionci
28-03-2008, 08:48
x cionci:
scusa ma abbiamo capito che Python non lo digerisci, più o meno ad ogni menzione di questa parola scrivi un messaggio in cui si capisce piuttosto bene il tuo pensiero, tanto quanto Cesare invece lo loda.
Ti spiego, questo perché l'unico che posta quando qualcuno chiede "con quale linguaggio posso fare questo" è sempre e solo Cesare e la risposta è sempre e solo Python. Una situazione del genere mi sembra più vicina al tentativo di indottrinamento che al consiglio sulla base delle effettive qualità del linguaggio e le necessità del richiedente. E' per questo che questa volta mi sono permesso non solo di consigliare una strada alternativa, ma anche di giustificarla. Spesso non lo faccio (e lascio che non ci siano contraddittori), ma questa volta mi è sembrato giusto, visto che la situazione lo richiedeva.
Obiettivamente, visti gli scopi di chi ha creato il thread, cioè creare un programma di monitoraggio e rilevamento della caratteristiche hardware, avresti consigliato Python ? Questo un giorno potrebbe avere la necessità di scrivere un driver...e gli si consiglia Python ?

cdimauro
28-03-2008, 08:58
Non ho mai mancato di fornire argomentazioni, comunque.

Tra l'altro se ti vai a rileggere il thread, non sono intervenuto proponendo Python "a gamba tesa", ignorando il topic: ne ho parlato quando l'utente ha detto di essere completamente a digiuno di programmazione e aveva l'esigenza di IMPARARE A PROGRAMMARE. Cerchiamo di contestualizzare... ;)

Quanto alla possibilità che sviluppi driver, beh, che dire: mi sembra DECISAMENTE PREMATURO. :D

Ci lamentiamo dei programmatori che "sovraingegnerizzano" il codice, perché "magari in futuro X, Y e Z potranno servire, anche se al momento non ce ne facciamo una mazza", e poi facciamo ipotesi su quello che in futuro (REMOTO, visto che scrivere driver non è certo roba da poco: vedi messaggi di Alberto) potrebbe fare uno che non sa nemmeno cos'è una variabile... :rolleyes:

cionci
28-03-2008, 09:05
Quindi secondo te uno che inizia dovrebbe automaticamente cominciare con Python sempre e comunque ? Secondo me dipende anche dalle motivazioni per cui inizia a programmare.
Di conseguenza io ho consigliato C# per diminuire il suo percorso di apprendimento, visto che un giorno vorrebbe andare a lavorare a basso livello.
Credo che un percorso di apprendimento Python -> C# -> C++ sia ben più lungo di un percorso C# -> C++, nonostante la supposta facilità di apprendimento del Python rispetto al C#, soprattutto considerando la distanza fra questi due linguaggi.

cdimauro
28-03-2008, 09:25
Il concetto per me (lo sottolineo: è una mia opinione) è semplice: con Python imparerebbe più velocemente, e una volta acquisita la mentalità del programmatore passare a un altro linguaggio non sarebbe difficile.

E' una mia opinione, e l'ho semplicemente espressa, come fanno altri che propongo C#, Java, C++ (!), C (!!), assembly, ecc. ecc. ;)

fek
28-03-2008, 10:27
Ecco perché ti dico che con Python la shell (interattiva) è già inclusa, mentre con linguaggi come C# (o Java, che ha javac.exe per compilare e java.exe per eseguire l'applicazione) devi andare a cercare soluzioni di terze parti. ;)

Io ti conosco come persona ragionevole, non in questa veste da Criceto, davvero.

Per usare Python da shell devi scaricare qualcosa? Si'. L'ambiente.
Per usare C# da shell devi scaricare qualcosa? Si'. Il programmino che ti fa da shell.

Che sia terze parti, prime parti, prodotto dal padre eterno in persona non cambia nulla, C# puo' essere usato da shell esattamente come Python scaricando l'apposito strumento. Con C# neppure ti serve l'SDK, ti basta il programmino. Come volevasi dimostrare.

tomminno
28-03-2008, 10:40
beh..
ho paura solo ad immaginare cosa sia dato che il BELLISSIMO visual studio nemmeno mi rinomina il nome delle classi in seguito ad una copia e mi sono accorto che aveva fatto un casino tremendo solo una volta che ho riaperto il file originale e non funzionava + una mazza dato che avevo fatto refactor -> rename a manetta.. :muro:


Cioè hai fatto copia e incolla del codice di una classe e lui non ha cambiato il nome della classe?
A me sembra un comportamento normale.
E suppongo anche che tu abbia fatto il refactor a diritto, per cui trovandosi con un conflitto di nomi 2 classi uguali nello stesso namespace ha fatto casini.

Forse in un caso simile potrebbe avvisare del problema e non eseguire le modifiche.


meno male che c'è il santissimo SVN altrimenti sarebbe stata la volta buona che sarei partito dritto dritto per redmond...


Con Ankh ci metti un secondo a tornare indietro.


Ma cazzarola..
Un editor completamente gratuito come eclipse fa 'sta cosa da tempo immemore..


Cioè se fai copia e incolla del codice di una intera classe lui ti rinomina la classe?
Personalmente non vorrei mai un comportamento simile.


possibile che nel 2008 ancora devo smazzarmi le cose a mano io?!? :muro:


Pensa che per il C++ non ci sono proprio strumenti di refactor...
E Refactor! effettua il refactoring solo all'interno del file cpp e relativo h, bello strumento di refactoring!
M$ prevede di fornire uno strumento di refactoring C++ per il successore del successore di VS2008 :doh:


ah.. ovviamente mi è capitato proprio in questo istante... per questo da quasto post traspare tutto il mio "amore" verso visual studio....:mad:

Per linguaggi come C# (ovviamente), ma anche C++ devo ancora trovare un IDE migliore.

Se penso che sotto Linux non c'è un IDE C++ che abbia la possibilità di muovere a piacere l'istruzione attuale durante il debug, nè di visualizzare il contenuto delle classi... A volte mi chiedo come si faccia a sviluppare così.

La produttività di un linguaggio, secondo me, è legata anche all'IDE.

gugoXX
28-03-2008, 10:56
La produttività di un linguaggio, secondo me, è legata anche all'IDE.

Quoto.
Comunque a me basta l'intellisense e un robusto debug e sono contento.

Ho scoperto da poco che con VisualStudio posso piazzare breakpoint non solo sul codice C#, ma anche sul javascript e pure sul TSql delle stored procedure di Sql-Server.
In questo modo si puo' seguire tutta la catena dei 3 livelli, quando si deve andare a cercare un baco ben nascosto.

mindwings
28-03-2008, 11:11
Riporto un link che ho postato altrove dove ci sono delle considerazioni
interessanti fatte sa Steve Yegge

Qui le caratteristiche per un linguaggio mainstream :
http://steve-yegge.blogspot.com/2007/02/next-big-language.html

in sintesi riporto : ( Edit: nel link vi sono le motivazioni per ogni Rule :))
Rule #1: C-like syntax.
Rule #2: Dynamic typing with optional static types.
Rule #3: Performance
Rule #4: Tools
Rule #5: Kitchen Sink
1. Object-literal syntax for arrays and hashes
2. Array slicing and other intelligent collection operators
3. Perl 5 compatible regular expression literals
4. Destructuring bind (e.g. x, y = returnTwoValues())
5. Function literals and first-class, non-broken closures
6. Standard OOP with classes, instances, interfaces, polymorphism, etc.
7. Visibility quantifiers (public/private/protected)
8. Iterators and generators
9. List comprehensions
10. Namespaces and packages
11. Cross-platform GUI
12. Operator overloading
13. Keyword and rest parameters
14. First-class parser and AST support
15. Static typing and duck typing
16. Type expressions and statically checkable semantics
17. Solid string and collection libraries
18. Strings and streams act like collections
Rule 6: Multi-Platform

altre considerazioni :
I think a truly great language would support Erlang-style concurrency, would have a simpler syntax and a powerful macro system, and would probably have much better support for high-level declarative constructs, e.g. path expressions, structural dispatch (e.g. OCaml's match ... with statement) and query minilanguages. Among other things.The features I've outlined are basically the minimal set of requirements for not sucking. At least off the top of my head; I've probably overlooked a few.

fek
28-03-2008, 11:15
beh..
ho paura solo ad immaginare cosa sia dato che il BELLISSIMO visual studio nemmeno mi rinomina il nome delle classi in seguito ad una copia e mi sono accorto che aveva fatto un casino tremendo solo una volta che ho riaperto il file originale e non funzionava + una mazza dato che avevo fatto refactor -> rename a manetta.. :muro:
meno male che c'è il santissimo SVN altrimenti sarebbe stata la volta buona che sarei partito dritto dritto per redmond...
Ma cazzarola..
Un editor completamente gratuito come eclipse fa 'sta cosa da tempo immemore..
possibile che nel 2008 ancora devo smazzarmi le cose a mano io?!? :muro:
ah.. ovviamente mi è capitato proprio in questo istante... per questo da quasto post traspare tutto il mio "amore" verso visual studio....:mad:

Ti lamenti per poco. Usa Visual Studio su una codebase da 2M di loc e poi troverai nuovi significati al termine "frustrazione".

^TiGeRShArK^
28-03-2008, 11:19
Cioè hai fatto copia e incolla del codice di una classe e lui non ha cambiato il nome della classe?

no, ho proprio copiato il file dal solution explorer e l'ho incollato nella stessa directory.
Ovviamente non poteva avere un nome di file uguale essendoci già il file originale nella stessa directory.

A me sembra un comportamento normale.

A me no dato che il nome del file era uguale a quello della classe nel file originale.
Invece nel file di destinazione il nome della classe era uguale al nome del file originario.

E suppongo anche che tu abbia fatto il refactor a diritto, per cui trovandosi con un conflitto di nomi 2 classi uguali nello stesso namespace ha fatto casini.

Poi ho iniziato a lavorare con il designer (dato che era un Dialog) per modificare il secondo dialog, eliminando componenti che non mi servivano, aggiungendone altri e rinominandoli e mi è scoppiato tutto.
Ovviamente me ne sono accorto solo quando sono andato a riaprire il file originale nel designer.... :muro:

Forse in un caso simile potrebbe avvisare del problema e non eseguire le modifiche.

eh.. mi pare anche il minimo :asd:

Con Ankh ci metti un secondo a tornare indietro.

what is Ankh? :fagiano:

Cioè se fai copia e incolla del codice di una intera classe lui ti rinomina la classe?
Personalmente non vorrei mai un comportamento simile.

Con eclipse se copi il file nella stessa directory ti rinomina anche la classe seguendo il nome del nuovo file.
Ma in effetti fa lo stesso anche se fai un semplice rename di file o se lo sposti di package.
Tutto in automatico e finora non mi pare mai di averlo visto creare casini.

Pensa che per il C++ non ci sono proprio strumenti di refactor...
E Refactor! effettua il refactoring solo all'interno del file cpp e relativo h, bello strumento di refactoring!
M$ prevede di fornire uno strumento di refactoring C++ per il successore del successore di VS2008 :doh:

:doh:
ennesimo motivo per non programmare in c++... come se non ce ne fossero già abbastanza :asd:

Per linguaggi come C# (ovviamente), ma anche C++ devo ancora trovare un IDE migliore.

Infatti pure io per .Net sto usando Visual Studio.......

Se penso che sotto Linux non c'è un IDE C++ che abbia la possibilità di muovere a piacere l'istruzione attuale durante il debug, nè di visualizzare il contenuto delle classi... A volte mi chiedo come si faccia a sviluppare così.

La produttività di un linguaggio, secondo me, è legata anche all'IDE.
yes..
l'IDE ti migliora di moltissimo la produttività.

^TiGeRShArK^
28-03-2008, 11:38
Ti lamenti per poco. Usa Visual Studio su una codebase da 2M di loc e poi troverai nuovi significati al termine "frustrazione".
e ci credo :asd:
per fortuna per progetti grandi ho sempre usato Eclipse...altrimenti mi sarei sparato credo :asd:
questo qui è un progettino da poche migliaia di LOCs :p