Newsgroup: it.comp.lang.vo-clipper
Titolo: Migrazione da Visual Objects a X#

Salve a tutti,
 
per chi fosse interessato alla migrazione dei suoi applicativi Visual
Objects verso .NET con X#: ho appena pubblicato sul sito
http://www.xsharp.it
 il primo articolo di una serie che si occuperà
proprio di questo.
 
Questi articoli si basano sulle mie proprie esperienze. Ho moltissimo
codice VO (oltre 2 milioni di righe di codice) che devo migrare verso
X# per ovviare ai limiti sempre più visibili di Visual Objects stesso.
Visto che non mi posso permettere di riscriverli completamente in .NET
devo muoverli prima in X#, per poi poter aggiungere man mano
funzionalità .NET e WinForms.
 
Chi ha bisogno di chiarimenti da parte mia si può rivolgere a me -
cercherò di rispondere sia in questo gruppo sia in un articolo sul sito
www.xsharp.it
 - e sempre in Italiano.
 
Saluti
 
Wolfgang
 
-- 
 

Ciao,
vorrei capire meglio perche' non tutto mi e' chiaro.
X# non ha il runtime e si deve appoggiare al runtime di VO o Vulcan?
Cioe' io non posso scrivere codice in X# compilare, linkare e distribuire?
Sono possessore di una vecchia copia di VO (mai usata), prima VO1, poi VO2. Non ricordo se ho fatto qualche aggiornamento alle releases piu' recenti: senz'altro NON ho VO2.8.
Utilizzando le librerie runtime del prodotto in mio possesso, posso scrivere codice X# (dico scrivere perche' non ho una riga in VO, che avevo comprato per passare da Clipper)?
Se non sbaglio x# e' opensource e tramite una subscription si ha maggiore e tempestivo aiuto ed altro. C'e' un link per il download? (confesso che non l'ho trovato: solo quello delle licenze).
Marco

Ciao Marco,
 
un paio di cose da sapere (stato attuale che dato lo sviluppo molto
attivo cambierà a settimane):
 
- X# è open source, lo puoi usare senza limiti sia per sviluppo
commerciale che privato
- il programma FoX fornisce le sorgenti del compilatore, un
aggiornamento circa ogni mese (altrimenti ogni tre mesi circa),
supporto diretto dal team di sviluppo in NG dedicati, e ovviamente la
certezza di supportare financialmente il lavoro del team
- oggi come oggi puoi usare X# senza usare librerie o funzioni di VO,
usandolo praticamente come un C# ma con sintassi xBase. In effetti, il
mio primo applicativo X# con interfaccia grafica (
https://www.xsharp.info/examples/102-riedmann-gmbh-the-door-configurator
 
) è scritto completamente in X# usando solo le API di .NET e WPF
- per scaricare il compilatore bisogna registrarsi sul sito e poi si
può scaricare da qui:
https://www.xsharp.info/itm-downloads?folder=general%252FSetups
 -
attualmente la beta 11
- se hai bisogno di usare funzioni Clipper/VO oppure gli RDD, puoi
usare la runtime di Vulcan oppure attendere che sia pronta quella di X#
- X# non può usare le librerie di VO direttamente - per chi ne ha
bisogno potrà ricompilare le classi GUI, RDD e SQL di VO. Non è il
tuo caso se ho capito bene.
 
Personalmente uso X# da più di un anno in maniera produttiva (perciò
scrivendo del software che è in produzione presso i miei clienti),
attualmente senza collegamenti a software scritto in VO. Sono oltre al
configuratore porte sopratutto piccole utility o webservice, che fanno
parte di soluzioni più complesse (come un applicativo a riga di
commando che usa i servizi Windows Update per distribuire documenti su
PC in tutta Italia).
 
Saluti
 
Wolfgang

-- 
 

Uso X# da diverso tempo.
Ho realizzato applicazioni molto ma molto complesse con centinaia di 
migliaia di righe di codice.
Scrivo in X# anche complessi gestionali totalmente WEB, pagine ASPX e logica 
in DLL X#.
 
Attualmente per mia comodità uso i runtime Vulcan per poter continuare ad 
usare funzioni, array, code block etc.. in stile XBase.
Sono pienamente soddisfatto potendo ora accedere alla montagna di funzioni 
che il Net Framework mette a disposizione.
 
Credo si tratti di uno strumento di alta produttività, che ben si adatta a 
chi, per anni, ha programmato in clipper prima, ed in VO poi.
 
Danilo
 
ha scritto nel messaggio 
news:aad8d69a-00b7-4d05...@googlegroups.com...


Ciao,
 
volevo aggiungere: se ci sono abbastanza interessati, posso anche
aprire un NG X# italiano sul mio server.
Da una parte potrebbe aiutare perchč potremmo dialogare in Italiano,
dall'altra parte nessuno del team parla l'Italiano e per questo motivo
non potrebbero intervenire (se non usando Google Translator).
 
Saluti
 
Wolfgang 
 
 
 
-- 
 


Sei sempre molto disponibile e generoso, molto carino da parte tua.
Ma ormai siamo rimasti in 4 a leggere saltuariamente questo NG, io 
personalmente sono passato a VS nel 2010, e forse non vale la pena di 
creare e gestire un server per così pochi...
Siamo comunque tutti "navigati" con l'inglese
... ma questa è solo la mia personalissima opinione ...
GRAZIE
 
Massimo Bighelli
ARCA Sistemi S.r.l.


sarei curioso di fare un mini-censimento per contare gli utenti ex-VO ed 
ora in X# in Italia
per conto mio, guarderò X# quando ci saranno i driver per i DBF, non ho 
nessuna intenzione di guardare Vulcan
:-)


Sei sempre un grande, vediamo quanti siamo in Italia ad usare X#, credo non 
molti,
La cosa però potrebbe essere utile per recuperare programmatori che nel 
frattempo si sono dispersi, e credo che qualcuno si potrebbe recuperare.
 
Auspicherei anche un incontro per scambio di esperienze, sempre utile.
 
Danilo
 
"Wolfgang Riedmann"  ha scritto nel messaggio 
news:epq0ts...@mid.individual.net...
 
Ciao,
 
volevo aggiungere: se ci sono abbastanza interessati, posso anche
aprire un NG X# italiano sul mio server.
Da una parte potrebbe aiutare perchè potremmo dialogare in Italiano,


 opinione ...  GRAZIE
 
gestisco giŕ un server per il NG tedesco.... Anni fa, quando i tedeschi
hanno chiesto un NG ufficiale di lingua tedesca, gli č stato negato
perchč giudicato di troppo poco interesse. E da li il gruppo esiste su
un server privato, e quando chi lo gestiva prima doveva spegnere il suo
server, lo ho trasferito su uno dei miei.
 
Penso anch'io che l'inglese č meglio perchč le "forze" sono unite, ma
comunque penso che ci sono sempre le persone che non si sentono di
scrivere in inglese nonostante nessuno dei sviluppatori di X# siano di
madrelingua inglese.
 
Saluti
 
Wolfgang
 
 
-- 
 

 driver per i DBF, non ho nessuna intenzione di guardare Vulcan :-)
 
Vulcan ormai è morto, purtroppo.
 
Per X# penso che siano ancora pochi, ma non appena la runtime e l'RDD è
disponibile penso che incrementerà perchè sarà possibile una migrazione
abbastanza facile - una possibilità quasi unica tra gli strumenti di
sviluppo.
 
In Italia so che ACS (o meglio Infominds come si chiamano addesso)
hanno portato in X# il loro gestionale gigantesco scritto in VO),
Danilo ha portato tutto il suo software, e anche io non ho più niente
in Vulcan e ho iniziato la migrazione da VO verso X#, attualmente
ancora con le runtime Vulcan.
 
Saluti
 
Wolfgang
 
 
 
-- 
 

Hi Marco,
 
Sorry for using English here, but just to answer your question quickly, 
right now x# does not have its own runtime, so for DBF access and for 
using Clipper/VO types like FLOAT, DATE etc, classes from the VOSDK and 
runtime functions, you need to use the runtime dlls that come with 
Vulcan.NET, if you have a license for it. Any version of vulcan (from 
2.0 and later) should be enough, even any trial version. Without those 
runtime dlls, you can use X# with all the classes and libraries 
available in .Net, but no VO/Clipper specific ones.
 
We plan to release the X# (improved over vulcan's) runtime in a few 
months from now, this will include RDDs, runtime functions and a macro 
compiler based on the X# compiler. If you also need the VOSDK, we are 
writing a tool that reads it from your VOSDK code and converts it to X#. 
This tool is 95% finished already.
 
I hope this makes things clear!
 
Chris / X# dev team


Ciao Danilo,
 
spero proprio che possiamo recuperare i programmatori VO... Per questo
ho deciso di mettere in piedi delle guide per la migrazione.
 
Sicuramente ci sono se si tratta di organizzare un incontro che penso
sia veramente utile. Avrà senso solo quando le runtime sono disponibili
e riusciamo a accendere un po di interesse....
 
Saluti
 
Wolfgang


Ciao Wolfgang e grazie.
Vorrei ringraziarti e nel contempo ringraziare Chris, Danilo, e tutti quelli che hanno risposto. 
Quindi, se non ho capito male: 
- X# non ha ancora runtime e RDD
- i dbf attualmente (in mancanza di RDD) non si possono usare (o comunque non direttamente come siamo abituati)
- il linguaggio non e' compatibile con VO se non usando le DLL di Vulcan, le DLL di VO sono inutili a questo proposito
- se io, che posseggo solo un vecchio VO, volessi usare X# utilizzando la sintassi xBase/VO non potrei farlo
- potrei usare X#, pero', con la sua sintassi e le classi .NET, giusto?
 
Per quanto riguarda il NG in italiano, direi che questo e' piu' che sufficiente anche per X#: non vedo tanto traffico da giustificare un gruppo dedicato, ma e' la mia opinione. Capisco l'inglese scritto al 90/95% (alcuni argomenti estremamente tecnici sono fuori dalla mia portata). Scrivo con molta difficolta' (me la cavo se uso i pochi termini del mio dizionario), percio' consulto i vari gruppi in lingua inglese ma non partecipo attivamente.
Personalmente ho scritto qualcosa in C#, ma le mie capacita' sono molto limitate e ho sempre trovato difficolta' con l'ambiente .NET. Mi piacerebbe poterlo imparare meglio e sfruttarne le opportunita' e pensavo che utilizzando una sintassi xBase, fossi facilitato. 
Se pero' devo imparare una nuova sintassi, forse e' meglio continuare (anzi, riprendere) C#.
 
Ciao a tutti e grazie per la disponibilta' che date sempre (anche se passano gli anni) a chi, come me, ha sempre bisogno di aiuto.
 
Marco

 potrei usare X#, pero', con la sua sintassi e le classi .NET, giusto?
 
X# usa la sintassi VO, ma ha ancora le funzioni, il compilatore
macro/runtime e i tipi di dato come array, codeblock, float, date
 
Un pezzo di codice X# per esempio è questo (per rendere l'idea):
 
static class AdUtil
 
static method FixKampDesc( cDesc as string ) as string 
local cReturn as string
local nStart as int
local nEnd as int             
local cAt as char
 
cReturn := cDesc:TrimEnd()	
cAt := c'@'
nEnd 	:= 0
while true                          
  nStart := cReturn:IndexOf( cAt )                
  if nStart >= 0
    nEnd := cReturn:IndexOf( cAt, nStart + 1 )
  endif
  if nStart < 0 .or. nEnd == 0
    exit
  endif
  cReturn := cReturn:Substring( 0, nStart ) + cReturn:Substring( nEnd +
1 )
end                 
 
return cReturn
 
end class
 
Tutte queste specialità saranno implementate nella runtime - il
compilatore le conosce già (che a detta degli autori era il lavoro
più grande).
 
Tra l'altro X# già addesso ha un compilatore di script che in sostanza
è quello che sarà poi il compilatore delle macro/runtime.
 
Saluti
 
Wolfgang
 
 
-- 
 

Ciao Marco,
 
vorrei dire ancora una cosa che mi sembra molto importante: al di là
di avere una sintassi abituale (che mi sembra molto più leggibile
perchè più esplicita di C#), X# già addesso ha delle particolarità
di assoluto rilievo:
 
- permette una sintassi di property abbreviata:
 
property MyProp as string get _cProp set _cProp := value
 
- ha già un preprocessore funzionante come ce lo aveva il buon Clipper
per permettere di definire propri commandi o funzioni. Questo viene per
esempio usato per implementare commandi come @get per una migrazione da
Harbour (due del team stanno lavorando su un progetto di migrazione)
 
Oppure questo preprocessore permette l'implementazione di property che
implementano l'interfaccia INotifyChanged che serve per i ViewModel
MVVM e il databinding con WPF - e tutto su una riga singola e massima
chiarezza.
 
- un script compiler distribuibile che permette di scrivere e compilare
degli script sia standalone che anche come parte integrante di un
applicativo - una grandissima cosa per personalizzare i programmi o
scrivere piccole utility direttamente sulla macchina del cliente
 
- contatto diretto con il team di sviluppo (che per me hanno
implementato delle cose che mi servivano)
 
E poi non parliamo delle cose che conosciamo da VO come array e
codeblock oppure il compilatore macro.
 
Perciò penso che al di là della compatibilità con VO esistono buoni
motivi a usare X#!
 
Saluti
 
Wolfgang
 
 
-- 
 

 macro/runtime e i tipi di dato come array, codeblock, float, date
 
Quindi, non possedendo Vulcan, posso scrivere codice X# con la sintassi dell'esempio che hai riportato? In fin dei conti, se e' vero, differisce poco dal vecchio clipper/VO (affermazione molto generica, lo so), e le chiamate alle funzione tipo SubStr(..) sono sostituite dai metodi della stringa, come in C#.
Un'ultima cosa: non essendo possessore di Vulcan per poterlo provare dovro' aspettare il rilascio del runtime, giusto?
 
Ciao
Marco

 
 
Grazie ancora,
Marco
 

Hi Marco,
 
Just to explain a bit further: Right now, you can define some functions 
yourself in your X# code like (I have not included range checking to 
keep the size small) :
 
FUNCTION Left(c AS STRING , length AS INT) AS STRING
RETURN c:Substring(0 , length)
FUNCTION SubStr(c AS STRING , start AS INT) AS STRING
RETURN c:Substring(start - 1)
FUNCTION SubStr(c AS STRING , start AS INT, length AS INT) AS STRING
RETURN c:Substring(start - 1 , length)
FUNCTION At(search AS STRING, c AS STRING) AS INT
RETURN c:IndexOf(search) + 1
 
and then you can use them normally in your code like:
 
FUNCTION Start() AS INT
LOCAL c AS STRING
c := "TottiCapitano"
? Left(c , 5)
? SubStr(c , 6)
? At("tt" , c)
RETURN 0
 
In fact this is what we will do with the x# runtime, we will provide all 
the functions like those, together with some special code to handle 
Clipper style arrays, dates etc.
 
Regarding dbf support, yes without the vulcan dlls you must wait until 
we release our own. We have not always been precise on our deadlines, 
but I believe it should take only a few months from now.
 
Regarding (x)Harbour, yes this is also a parallel work we are doing, 
already the preproccessor of X# is fully capable to translate @SAY..GET 
commands (even very complex ones) and we are writing a library that 
translates SAY/GET to WinForms and in the future also WPF controls. This 
will also take some months to finish, probably longer that the X# rdds.
 
Chris


Ciao Marco,

esatto. Potresti però anche prendere la runtime da una versione demo
di Vulcan.
 
Saluti
 
Wolfgang
 
 
-- 
 

 riguardo confermano che si tratta di persone molto, molto attive.
 
Robert e Chris sono i più attivi, mentre Fabrice e Nikos lavorano di
più dietro le quinte.
La cosa che mi piace di più è che tutti hanno lavorato per anni in
VO, e sono molto "vicini" a noi, perciò parlono lo stesso linguaggio e
hanno gli stessi problemi da rosolvere.
Sopratutto Robert ha fatto molta consulenza nella migrazione da VO a
Vulcan, e perciò conosce le problematiche molto bene.
 
Poi, altra cosa da non dimenticare, con XIDE esiste un ambiente di
sviluppo molto simile a VO (anzi, creato da Chris sull'esempio di VO),
che personalmente preferisco largamente a Visual Studio perchè molto
veloce e orientato al codice e non ai painter.
 
Saluti
 
Wolfgang
 
 
-- 
 

Grande Wolfgang
 
"Wolfgang Riedmann"  ha scritto nel messaggio 
news:epld25...@mid.individual.net...


 will also take some months to finish, probably longer that the X# rdds.
 
Just to well understand: prgs witten in (x)harbour/clipper/xbase dialect will be translated ONLY for @say .. @get commands (in winforms, WPF controls). I imagine the part of the prgs outside the screen painting will not be translated. Or I'm wrong.
 
Marco


Grazie, non sapevo fosse possibile.
ciao
marco

 Vulcan, e perciò conosce le problematiche molto bene.
 
Li conosco tutti e 4 per fama e per i loro lavori ma devo dire che la cosa che piu' impressiona e' il fatto che sono sempre pronti a darti una mano: anche in Microsoft lo fanno, ma i numeri sono diversi e, spesso, non sono i diretti sviluppatori a risponderti, ma MVP o simili.
 
Marco

 simili.
 
propria questa vicinanza e la loro disponibilità di aggiungere anche
delle funzionalità (se hanno senso ovviamente!) vale moltissimo!
 
Alla fine io sono molto produttivo grazie alle possibilità di VO, e
solo con un prodotto ugualmente potente (opuure superiore) riesco a
mantenere questo mio vantaggio. Parlo della possibilità di mettere in
ordine un array in una sola riga, avere un compilatore di macro a
runtime, ecc.
 
Saluti
 
Wolfgang
 
 
-- 
 

 Just to well understand: prgs witten in (x)harbour/clipper/xbase dialect will be translated ONLY for @say .. @get commands (in winforms, WPF controls).. I imagine the part of the prgs outside the screen painting will not be translated. Or I'm wrong.
 
 
Let me give you an example, for this simple snippet of code (can be 
Clipper, (x)Harbour, VO etc):
 
LOCAL cDescription
cDescription := mydbf->DESCRIPT
@5,10 SAY cDescription
 
the x# preprocessor translates this code to
 
LOCAL cDescription
cDescription := mydbf->DESCRIPT
DevPos(5, 10);DevOut(cDescription)
 
(
this happens because there's a #command defined that looks like this: 
#command @<y> , <x> SAY <text> => DevPos(<y> , <x>);DevOut(<text>)
)
 
and this is the code that the compiler actually "sees" and compiles. 
What he are doing, is to define our own set of DevPos(), DevOut() etc 
functions which for the above sample create a Label control and put it 
in a .Net form in the location 5,10 (well that's translated to pixels, 
so we end up with something like 50,100). So the actual code of the user 
remains 100% unchanged, all we do is to provide the runtime functions 
that translate Console printing commands to WinForms/WPF ones. And of 
course all the other code compiles and runs in x# with no changes (or 
very few ones), since x# is using the same syntax with Clipper etc. I 
hope I explained it ok, but please ask if you want any other clarifications!
 
Chris
 
 
 
 

 Chris
Thank you Chris and all for your patience.
 
Marco
 

 Thank you Chris and all for your patience.
 
Nothing to be patient for, I am glad to see that there's a growing 
interest for X# so I am happy to answer questions about it :) So please 
ask anything else you may want!
 
Chris
 

 un DBF)
 
Perfetto, come immaginavo. Quindi puoi creare dei piccoli files di istruzioni e lanciarli interattivamente, giusto?
 
 
Ciao 
Marco

 istruzioni e lanciarli interattivamente, giusto?
 
Esatto. 
 
Saluti
 
Wolfgang
 
 
 
--