Newsgroup: it.comp.programmare
Titolo: Cambiare Linguaggio

Volevo porvi una Domanda...
Finalmente dopo anni sono riuscito a convincere la mia Direzione
a cercare di cambiare linguaggio di programmazione...
fin qua tutto ok ma ora mi trovo al BIVIO
non so' da che parte diregirmi...
vi spiego meglio...
Sviluppiamo applicazione nel campo dell'archiviazione ottica 
sotto windows, oltre alla applicazioni forniamo anche servizi
di scannerizzazione e catalogazione
per ora per le applicazioni Cliente/server utilizziamo CA-Visual Objets
che fino a ori ha dato + grattacapi che benefici
come database utilizzimiamo PER FORTUNA MySql e nei casi in cui dobbiamo
rendere "VISIBILE" il nostro service sviluppiamo intranet con PHP e 
Mysql
Ora..
mi sono guardato un po' attorno
a me picarebbe avere un linguaggio UNICO specialmente qualcosa che mi 
permetta di gestire la scansione massiva/singola da delle appilcazioni 
intranet NON client-server
ho visto che le scelte potremmo cadere
1)Java
2).NET
3)python
Sinceramente sono + orientato verso i primi 2 perche vengo da 6 anni di 
sviluppo su VO dove per avere informazioni era come fare la caccia al 
tesoro, se scrivevi un mex sul ng dopo GIORNI avevi una risposta che
la maggior parte delle volte non risolveva o quantomeno t'indirizzava
verso una soluzione,
ATTENZIONE non sto dicendo che voglio che gli altri mi facciano il 
lavoro ma il prossimo strumento di sviluppo mi deve permettere il 
confronto con PARECCHIE persone che hanno problemi simili ai miei
Insomma ad oggi il linguaggio mi deve permettere il collegamento Diretto
con MySql visto che gestiamo DB con milioni di record cercando di 
velocizzarmi il reperimento dei dati garantendomi stabilita' che per ora 
ho trovato in PHP 
Avere controllo di tutti gli scanner twain, con la possibilita' di 
trovare delle librerie che mi permattano di manipolare immagini se non 
sara' possibile implementare gli OCX che fin'ora ho utilizzato...
C'e' qualcuno che puo' indirizzare la mia Scelta??
Grazie Massimo

 sara' possibile implementare gli OCX che fin'ora ho utilizzato...
Una domanda : sviluppate applicazioni per Windows ma devono essere
multi-piattaforma o vi basta che siano per Win32 ?
Perchè se vi serve che siano multi-piattaforma .Net magari con C# e ASP.Net
potrebbe essere una scelta azzardata. Esiste Mono ma fare programmi in C# in
grado di funzionare su Win32, Linux e Mac OS X non è certo compito facile. E
poi Mono esiste da poco, non è tecnologia stabile e consolidata come Java e
Python.
Se hai bisogno della portabilità chiedi su it.comp.java se ci sono colleghi
che si occupano di problematiche simili.
L'ultimo punto cmq (controllo di tutti gli scanner twain, uso di librerie
già esistenti per manipolare immagini, uso di DLL ActiveX e OCX esistenti
... il tutto per Win32) depone fortemente per .Net e C#  ;-))
-- 
Jarod

 ... il tutto per Win32) depone fortemente per .Net e C#  ;-))
Su Quello hai perfettamente Ragione..
Diciamo che la "conversione" tra il mio attuale linguaggio e .NET mi 
costerebbe "meno" fatica ma non vorrei che la facilitazione iniziale
mi si tramutasse in una limitazione Futura...
E' un bel problema devo scegliere e ORA mi sembra il momento meno Adatto
anche perche' ho l'impressione che come decido Sbaglio comunque o almeno
Scelgo una soluzione che non calzera' mai al 100% i miei Bisogni...
Massimo

 cominciare???
Docs su Java ne trovi a quintali.
Se googli su it.comp.java trovi tante indicazioni su libri, manuali, corsi
on-line.
Come risorse free ti posso indicare i libri di Bruce Eckel
http://www.mindview.net
, mokabyte 
http://www.mokabyte.it
 e the server side
http://www.theserverside.com
-- 
Jarod

 permette di usare tutte le librerie di Java 2.
Sarebbero + contenti se passiamo a Java il problema e' che con .NET vedo
lo sviluppo + "monolitico" mentre con java vedo 2324876243 Scappatoie 
che quando 6 uno sviluppatore esperto sono la manna dal cielo mentre
quando 6 un principiante purtroppo non fanno altro che complicarti la 
Vita...
io sono Propenso a JAva ma GIA' so' che verro stressato per i tempi 
"LUNGHI" di apprendimento e poi di Conversione...
Sai darmi qualche dritta per trovare del Buon Materiale per 
cominciare???
Massimo

 Scelgo una soluzione che non calzera' mai al 100% i miei Bisogni...
Chiedi ai commerciali che cosa piace al cliente e che reazioni ha quando
citano soluzioni opensource, java o ms .net
Poi fai delle prove tu con dei prototipi e vedi cosa ti da meno problemi pur
piacendo al cliente.
Tieni conto che java e python si integrano abbastanza bene, esiste persino
un interprete di python scritto in java 
http://www.jython.org
 che ti
permette di usare tutte le librerie di Java 2.
-- 
Jarod

 C'e' qualcuno che puo' indirizzare la mia Scelta??
Tieni conto di quanto segue.
1) .NET e' una piattaforma che supporta piu' linguaggi. La Microsoft 
vende compilatori per versioni ad hoc dei linguaggi Visual Basic, C++, 
C#, Javascript, e J++ (Java), ma altri produttori producono compilatori 
per altri linguaggi per la piattaforma .NET.
2) Python e PHP sono molto piu' lenti di Java e C#. Quindi pur andando 
bene per molte cose, sono inadatti per scandire i pixel di un'immagine. 
Li puoi usare solo se il software di trattamento delle immagini e' 
incapsulato in una libreria scritta in un linguaggio compilato (come 
Java o C#).
3) Se hai bisogno di un database open source che supporti tipi di dato 
definiti dall'utente, prendi in considerazione PostgreSQL, che e' un 
database ORDBMS.
4) .NET e' sviluppato dalla Microsoft solo per ambiente Windows; il 
progetto Mono e' un porting su piattaforme Posix, ma ha prestazioni 
inferiori a quelle della versione Microsoft, inoltre non supporta gli 
OCX e supporta solo parzialmente la libreria System.Windows.Forms. In 
conclusione, se devi sviluppare un'applicazione stand-alone che abbia 
una grafica ricca e accattivante, e funziona indifferentemente negli 
ambienti Linux, Windows, MacOS, la piattaforma .NET e' sconsigliabile, 
mentre e' consigliabile Java. Se invece l'applicazione e' solo per 
Windows, oppure Web-based, oppure e' accettabile una grafica spartana, 
allora si puo' prendere in considerazione .NET.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 un database a oggeti(quindi Dati+Immagini) si sono Azzerati
Scusa la precisazione ma database a oggetti non equivale semplicemente a
dati + immagini.
Ciao, scusa la pignoleria.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 o C#).
Non sono affatto d'accordo.
1- Java e C# NON sono linguaggi compilati
O quantomeno non più di Python.
Tutti infatti hanno bisogno di un interprete o comunque una macchina 
virtuale.
2- Non capisco "Python e PHP sono molto piu' lenti di Java e C#"
Più lenti in che cosa? In quali casi?
La (differenza di) velocità è un fattore importante per le applicazioni in 
questione?
3- Sembra che tu dica che è un male usare component preconfezionati.
Perchè?
4- 
http://www.pythonware.com/products/pil/
Non l'ho mai usata, ma  a priori non direi che è male.
-- 
Gerolamo 

 Non l'ho mai usata, ma  a priori non direi che è male.
Si tratta di una libreria compilata in linguaggio macchina, pertanto 
probabilmente molto performante.


 chiamo compilatori.
..in quanto traducono da codice a bytecode. Siccome python fa lo stesso, 
o chiami compilato pure python (e pure perl) o accetti che c'č 
un'interprete/vm/jit :)

 probabilmente molto performante.
Infatti.
Ma probabilmente divergiamo sul fatto che sia importante o meno che
questa libreria risulti aperta o meno a modifiche da parte 
dell'utilizzatore.
Per me, nella maggior parte dei casi, non interessa.
Per te, evidentemente, si.
-- 
Gerolamo 

 un'interprete/vm/jit :)
Secondo me ci sono due importanti differenze tra python/perl e java/C#. 
Una e' che nei primi due linguaggi l'utente finale usa direttamente i 
file sorgente, mentre nei secondi due il programmatore lancia 
esplicitamente un programma di generazione del bytecode.
L'altra e' che il bytecode dei primi due e' molto diverso dal bytecode 
dei secondi due. Per i primi due si tratta di una conversione in codice 
binario delle stesse istruzioni sorgente, e quindi di un codice molto 
lontano dal codice macchina, e quasi impossibile da tradurre in 
linguaggio macchina. Per i secondi due si tratta sostanzialmente di un 
codice macchina portabile, quindi facile (per i programmatori) ed 
efficiente (per i computer) da tradurre in modo ottimizzato nel 
linguaggio macchina di qualunque architettura di processore. Quindi non 
solo l'interpretazione di bytecode Java/C# e' una decina di volte piu' 
veloce dell'interpretazione di bytecode Python/Perl, ma comunemente tale 
bytecode viene tradotto in linguaggio macchina (just-in-time o 
ahead-of-time) ottenenedo prestazioni circa 200 volte migliori.
Naturalmente, quando parlo di prestazioni intendo le prestazioni dei 
costrutti linguistici di base, come aritmetica intera (piccola) o a 
virgola mobile. E' chiaro che se si usano costrutti a piu' alto livello, 
come liste, stringhe, file, o gestione dell'interfaccia-utente, il 
divario prestazionale si assottiglia.


 ahead-of-time) ottenenedo prestazioni circa 200 volte migliori.
vedi sopra, psycho. O anche parrot per perl. O YARV/rubydium per ruby.
In ogni caso, si tratta di un passaggio successivo, equivalente a dire 
"c'è un interprete migliore". Ma rimane il fatto che javac e csc non 
sono compilatori più di python.

 sono compilatori più di python.
"python.exe" permette di eseguire codice sorgente, e normalmente non 
genera codice macchina.
D'altra parte i programmi Java e C# normalmente non possono essere 
eseguiti se non previo trattamento da parte di programmi compilatori, e 
normalmente vengono eseguiti come codice macchina grazie al JIT-compiler.
Questi sono gli usi tipici. Chiaramente, si fare di tutto, si possono 
generare EXE per MS-DOS a partire dai file BAT e ci sono interpreti per 
il linguaggio C, ma non mi sentirei di dire che il linguaggio di comandi 
del DOS e' un linguaggio compilato ne' che il C e' un linguaggio 
interpretato.
Non conoscevo 'psyco' (questo e' il nome ufficiale del modulo, uguale al 
titolo della versione italiana del film diretto da Hitchcock; 
curiosamente, gabriele renzi e la maggior parte dei siti Web lo chiamano 
'psycho', uguale al titolo della versione orginale americana dello 
stesso film).
Se funziona bene, risolve molti problemi di prestazioni di Python.
Ma allora perche' tanta gente si ostina a scrivere gli "extension 
module", invece di limitarsi a scrivere i "pure Python module"?


 module", invece di limitarsi a scrivere i "pure Python module"?
Per lo stesso motivo per cui tanta gente scrive codice unmanaged in C# o
librerie native in C/C++ da chiamarsi in C# e Java.
Cmq come ha detto qualcuno famoso l'ottimizzazione precoce č uno dei mali
della programmazione.
Per esempio sviluppando in Python ti scrivi la prima versione tutta in pure
Python e dopo, se č necessario, ottimizzi le poche parti piů eseguite/piů
lente/meno efficienti scrivendo degli extension module ... magari usando
Pyrex 
http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex
p.s. per i confronti sulle prestazioni dei vari linguaggi ti rimando a
http://shootout.alioth.debian.org
 e ti consiglio di usare criteri simili la
prossima volta che vuoi esprimere numeri affidabili senza lanciarti in cicli
for poco significativi  ;-)
-- 
Jarod

 normalmente vengono eseguiti come codice macchina grazie al JIT-compiler.
Guarda che Python, Java e C# fanno tutti la stessa cosa, producono
bytecode a partire da codice sorgente, solo che per gli ultimi due devi
lanciare esplicitamente compilatore ed interprete, python invece fa
tutto in una volta. 

 for poco significativi  ;-)
non è che lo shootout abbia poi criteri così significativi.. *nessuno* 
scriverebbe una funzione heapsort in python, per la semplice ragione che 
c'è una funzione builtin. O una funzione fibonacci() ricorsiva.
Per non parlare di riscriversi un PRNG etc etc..
Insomma, lo shootout è interessante e divertente ma come si dice,
"ci sono bugie, grosse bugie e benchmark" :)

 normalmente vengono eseguiti come codice macchina grazie al JIT-compiler.
Mh, quindi:
poiché:
  'python.exe' fa sia da compilatore che da interprete
  il bytecode jvm/clr viene jit-ato (brr) da HotSpot/.net runtime
consegue:
  python non è un compilatore
  csc/javac si.
Quindi, invertenedo:
  modifico javac per far si che faccia una chiamata ad hotspot sul .class
  uso una delle vecchi jvm che erano interpreti javac non è più un
  spezzo 'python.exe' in pycompiler.exe e pyinterpreter.exe
consegue:
  javac non è un compilatore
  pythonc.exe diventa un compilatore
Vabè ancora buona pasqua.

 normalmente vengono eseguiti come codice macchina grazie al JIT-compiler.
Mh, quindi:


 "ci sono bugie, grosse bugie e benchmark" :)
Sicuramente i criteri per confrontare linguaggi diversi sono ben altri che
non semplici test di velocità/occupazione di memoria nei calcoli sugli
interi, numeri in virgola mobile, algoritmi famosi (basti pensare all'ampia
disponibilità di GUI framework chiamabili in python, la discreta ma
crescente disponibilità in C#, la scarsa disponibilità in Java).
Per esempio il linguaggio D sembra la sintesi perfetta fra un linguaggio
compilato ultra-efficiente come C ed uno moderno che permette tempi di
sviluppo più rapidi grazie a garbage collector, libreria standard, oop resa
più semplice ed immediata ... tutte funzionalità presenti in linguaggi ad
alto livello.
Peccato però che quando tu debba fare programmi con GUI multipiattaforma od
interfacciarti ad un particolare db server capiti facilmente che manchino le
librerie (o che quelle presenti non siano linkabili/chiamabili con quel
linguaggio).
Ammetterai però che almeno lo shootout tenta di essere più significativo di
un paio di cicli for annidati  ;-)
Buona Pasqua anche a te.
-- 
Jarod

 Java o C#).
A grande richiesta, modifico la mia citata affermazione nella seguente.
2) Python, Perl e PHP sono normalmente molto piu' lenti di Java e C# *ad 
eseguire istruzioni di codice puro*. Quindi pur andando
bene per molte cose, sono inadatti per scandire i pixel di un'immagine.
Li puoi usare solo se il software di trattamento delle immagini e'
incapsulato in una libreria scritta in un linguaggio *tipizzato 
staticamente* (come C, C++, Fortran, Pascal, Java o C#).
