Aspetti negativi di Ruby

Salve a tutti,
sto usando Ruby da poco.

Da anni lavoro in Delphi/Firebird in ditta, e sento l’esigenza di
integrarlo con un linguaggio non compilato, al quale demandare alcune
procedure (tipo tutte quelle che prevedono invio dati via internet ecc).
Ottimo ambiente Delphi, ma l’uso dei componenti per internet tipo ad
esempio gli Indy, fa cascare le braccia, sia perchè sono complessi, sia
perchè sono sempre incompatibili con le versioni precedenti.

Vi chiederei alcune cose:

  • mi consigliate un ambiente RAD per Ruby. Ad esempio le wxRuby le ho
    installate, però io venendo da Delphi sento la mancanza di un gui
    grafico con cui costruire i frames. Io lavoro in Windows,
    necessariamente usando già Delphi …

  • se è possibile trasformare in eseguibile un .rb. Ad esempio supponete
    di voler fare una criptazione / decriptazione secondo le vostre esigenze
    e la fate in Ruby. Mica volete dare a giro il codice di come si fa a
    decriptare … ebbene, questo .rb, si può renderlo un .exe e chiamarlo
    da un’altro .rb (ovviamente recuperandone i risultati del calcolo)
    quando serve la decriptazione?

  • un’altra cosa analoga alla precedente. Supponete di avere un .exe che
    si serve per calcolare una cosa. Ora voi volete eseguirlo da un .rb e
    recuperare il risultato del calcolo che il .exe deve fare, e usarlo nel
    ruby per fare altre cose. Io pensavo, o scrivo il risultato del .exe in
    un file e lo leggo da ruby … oppure come posso fare? se chiamo un .exe
    da ruby, l’esecuzione dello script ruby attende la fine del .exe o va
    avanti?

  • questa è veramente banale: come faccio per eseguire un .rb dentro
    un’altro .rb? cioè

if scelta
#eseguo pippo.rb
else
#eseguo poldlo.rb
end

che metto al posto di #eseguo?

  • ultima domanda: un mio amico programmatore da molti anni si è
    entusiasmato a ruby, però mi ha detto “ci sarà mica sotto qualche
    fregatura? sembra tutto troppo bello …”. Voi che dite? è un onesto
    dubbio … che aspetti un po’ negativi o non esaltanti ci sono in Ruby?
    o in altre parole, quali sono i suoi difetti posto che ogni cosa ha
    pregi e difetti e la perfezione è molto difficile averla.

Ok grazie di tutto. Buona programmazione a tutti.
XarYo

On Sun, Feb 10, 2008 at 12:09 AM, xaryo [email protected] wrote:

  • ultima domanda: un mio amico programmatore da molti anni si è

entusiasmato a ruby, però mi ha detto “ci sarà mica sotto qualche
fregatura? sembra tutto troppo bello …”. Voi che dite? è un onesto
dubbio … che aspetti un po’ negativi o non esaltanti ci sono in Ruby?
o in altre parole, quali sono i suoi difetti posto che ogni cosa ha
pregi e difetti e la perfezione è molto difficile averla.

Per le altre domande ti risponderà chi ne sa di più di me.
Per questa, ti posso dire che Ruby è… lento!

~Tommaso

On Sun, Feb 10, 2008 at 12:09 AM, xaryo [email protected] wrote:

  • se è possibile trasformare in eseguibile un .rb. Ad esempio supponete
    di voler fare una criptazione / decriptazione secondo le vostre esigenze
    e la fate in Ruby. Mica volete dare a giro il codice di come si fa a
    decriptare … ebbene, questo .rb, si può renderlo un .exe e chiamarlo
    da un’altro .rb (ovviamente recuperandone i risultati del calcolo)
    quando serve la decriptazione?

in generale si, proprio il codice per criptazione / decriptazione e’
quello
che dovrebbe sempre essere pubblico e disponibile, perche’ la sicurezza
della cifratura non deve dipendere dalla segretezza dell’algoritmo e
perche
tutti gli algroritmi di cifratura per essere ritenuti validi devono
passare
lo scrutinio della comunita degli esperti, ed infatti tutti quelli usati
correntemente lo sono (pubblici), dunque non c’e’ motivo per tenerlo
segreto
(a meno che non parliamo di snake-oil crypto :slight_smile:
Snake oil (cryptography) - Wikipedia )

Luca

Eh beh, lo so che non può essere lesto come un compilato :slight_smile: però
sinceramente mi aspettavo di peggio, proprio vendendo da Delphi, in
generale mi aspettavo performance molto peggiori.

XarYo

On gio, 2008-02-21 at 10:28 +0100, Luca M. wrote:

Luca

Ciao Luca, si in effetti è snake-oil (non sapevo si chiamasse così!) nel
senso che è criptatura/decriptatura di dati per il gestionale della
ditta, sicchè non ho interesse a mostrare la criptatura. I sorgenti del
gestionale ovviamente sono privati e non pubblici, sicchè mi basta una
criptazione semplice ma oscura, lo so, in barba a quanto direbbe la
corretta teoria della criptazione che tu dici.

Comunque, allora, ho un .exe che calcola ad esempio un ‘casfe322’ come
risultato finale, cioè una stringa insomma. Ora, come faccio da Ruby a
prendere tale stringa? c’è un modo diretto per prendere il risultato di
un .exe dentro uno script ruby senza ricorrere a files .txt di scambio?

Grazie e ciao.
XarYo

xaryo wrote:

  • questa � veramente banale: come faccio per eseguire un .rb dentro
    un’altro .rb? cio�

if scelta
#eseguo pippo.rb
else
#eseguo poldlo.rb
end

che metto al posto di #eseguo?

Devi usare o exec o system, due metodi della classe Kernel che trovi
documentata a module Kernel - RDoc Documentation
L’indice di tutte le classi è a RDoc Documentation

Per il resto, ho usato Ruby solo per applicazioni web con Rails o per
piccoli script e quindi non so rispondere alle tue altre domande con
cognizione di causa.
Posso solo dirti che come ide uso emacs -t /dev/tty, ma non credo sia
quello che hai in mente :-), e che per trasformare Ruby in exe in
effetti sembra esserci qualcosa. Il primo link ritornato da Google è
http://www.erikveen.dds.nl/rubyscript2exe/

Ciao
Paolo

Comunque, allora, ho un .exe che calcola ad esempio un ‘casfe322’ come
risultato finale, cioè una stringa insomma. Ora, come faccio da Ruby a
prendere tale stringa? c’è un modo diretto per prendere il risultato di
un .exe dentro uno script ruby senza ricorrere a files .txt di scambio?

Sparo eh…

http://www.ruby-doc.org/core/classes/Kernel.html#M005999

Se leggo giusto, con il metodo open se l’argomento è preceduto da un pipe,
ruby apre il subprocesso e ne legge l’output:

cmd = open(“|casfe322.exe”)
stringa = cmd.gets
cmd.close

print stringa

Son curioso facci sapere!

On gio, 2008-02-21 at 12:15 +0100, giovanni lion wrote:

print stringa

Son curioso facci sapere!

Funziona perfettamente!!!

Ho fatto un mio .exe in Delphi, una Console Application, cioè un .exe da
dos per intenderci e gli ho fatto semplicemente stampare una stringa,
che poi può essere il risultato di una elaborazione qualsiasi.
Chiamandolo con la pipe davanti con open, come hai visto tu, riprendo
perfettamente la stringa da ruby.

Favoloso, questo è oro colato! specialmente per me che voglio
integrare .exe fatti in delphi, è realmente ottimo.

Capisco che Ruby è famoso per Rails, però da quel poco che sto provando,
lo trovo formidabile anche per lavorare integrandolo con
applicazioni .exe per intenderci …

Ciao e grazie molte Giovanni!
XarYo

xaryo wrote:

  • un’altra cosa analoga alla precedente. Supponete di avere un .exe che
    si serve per calcolare una cosa. Ora voi volete eseguirlo da un .rb e
    recuperare il risultato del calcolo che il .exe deve fare, e usarlo nel
    ruby per fare altre cose. Io pensavo, o scrivo il risultato del .exe in
    un file e lo leggo da ruby … oppure come posso fare? se chiamo un .exe
    da ruby, l’esecuzione dello script ruby attende la fine del .exe o va
    avanti?

Se l’eseguibile fornisce le informazioni su stdout, le puoi recuperare
facilmente:

s = ‘/path/to/eseguibile.exe’
(dove al posto dell’apice c’e’ l’apice rovesciato)

  • questa � veramente banale: come faccio per eseguire un .rb dentro
    un’altro .rb? cio�
    if scelta
    #eseguo pippo.rb
    else
    #eseguo poldlo.rb
    end

che metto al posto di #eseguo?

load ‘pippo.rb’

2008/2/21, Tommaso P. [email protected]:

On Sun, Feb 10, 2008 at 12:09 AM, xaryo [email protected] wrote:
[cut]
Per le altre domande ti risponderà chi ne sa di più di me.
Per questa, ti posso dire che Ruby è… lento!

mmh…
dopo aver sentito il discorso di avi bryant al railsconf mi permetto
di completare quest’affermazione con il seguente link:
http://www.innoq.com/blog/st/2006/09/14/is_ruby_too_slow.html

le potenzialita’ del linguaggio non lo costringono alla lentezza,
quindi non considererei questo punto come un difetto :slight_smile:

bai, bau e miao


it will be a hard life
one without reward, without remorse, without regrets
a path will be placed before you
the choice is your alone
do what you think you cannot do
and you will find out who you are

On gio, 2008-02-21 at 10:37 +0100, Paolo M. wrote:

Devi usare o exec o system, due metodi della classe Kernel che trovi
documentata a module Kernel - RDoc Documentation
L’indice di tutte le classi è a RDoc Documentation

Dicevo questo, mi spiego meglio:

Ho ad esempio 2 script ruby, a.rb e b.rb:


#a.rb
totale = 10
puts ‘Questo è lo script a’



#b.rb
puts ‘Questo è lo script b, dove non ho nessuna variabile’
puts ‘Ora chiamo a.rb, dovrei vedere poila variabile “totale”’

#chiamo l’altro script
esegui a.rb

puts totale


Ecco, dicevo, come faccio per vedere la variabile “totale” che è
istanziata in a.rb dentro lo script b.rb?

Per il resto, ho usato Ruby solo per applicazioni web con Rails o per
piccoli script e quindi non so rispondere alle tue altre domande con
cognizione di causa.

Capisco :slight_smile:

Posso solo dirti che come ide uso emacs -t /dev/tty, ma non credo sia
quello che hai in mente :-),

Eh no :-), avrei in mente un qualcosa tipo Boa per Python per
intenderci, c’é per Ruby?

e che per trasformare Ruby in exe in
effetti sembra esserci qualcosa. Il primo link ritornato da Google è
http://www.erikveen.dds.nl/rubyscript2exe/

Grande, lo
proverò!Grazie di tutto

xaryo wrote:

  • mi consigliate un ambinte RAD per Ruby. Ad esempio le wxRuby le ho
    installate, per� io venendo da Delphi sento la mancanza di un gui
    grafico con cui costruire i frames. Io lavoro in Windows,
    necessariamente usando gi� Delphi …
    non ne conosco nessuno. di solito uso kate o jedit, ma non si possono
    disegnare le form come vorresti fare tu.
  • un’altra cosa analoga alla precedente. Supponete di avere un .exe che
    si serve per calcolare una cosa. Ora voi volete eseguirlo da un .rb e
    recuperare il risultato del calcolo che il .exe deve fare, e usarlo nel
    ruby per fare altre cose. Io pensavo, o scrivo il risultato del .exe in
    un file e lo leggo da ruby … oppure come posso fare? se chiamo un .exe
    da ruby, l’esecuzione dello script ruby attende la fine del .exe o va
    avanti?
    puoi eseguire un file esterno in entrambi i modi. ma perché vuoi fare un
    exe esterno? non sarebbe meglio fare tutto nello stesso programma?
  • questa � veramente banale: come faccio per eseguire un .rb dentro
    un’altro .rb? cio�
    cmd = open(‘|comando’)
    status = cmd.gets
    cmd.close

questo esegue “comando” e legge quello che ritorna in “status”

system "ciccio"

questo esegue il comando “ciccio”

  • ultima domanda: un mio amico programmatore da molti anni si �
    entusiasmato a ruby, per� mi ha detto “ci sar� mica sotto qualche
    fregatura? sembra tutto troppo bello …”. Voi che dite? � un onesto
    dubbio … che aspetti un po’ negativi o non esaltanti ci sono in Ruby?
    o in altre parole, quali sono i suoi difetti posto che ogni cosa ha
    pregi e difetti e la perfezione � molto difficile averla.
    è lento, non supporta l’unicode, è difficile localizzare le
    applicazioni.

xaryo wrote:

On gio, 2008-02-21 at 12:15 +0100, giovanni lion wrote:

print stringa

Son curioso facci sapere!

Funziona perfettamente!!!

Ho fatto un mio .exe in Delphi, una Console Application, cio� un .exe da
dos per intenderci e gli ho fatto semplicemente stampare una stringa,
che poi pu� essere il risultato di una elaborazione qualsiasi.
Chiamandolo con la pipe davanti con open, come hai visto tu, riprendo
perfettamente la stringa da ruby.

Favoloso, questo � oro colato! specialmente per me che voglio
integrare .exe fatti in delphi, � realmente ottimo.

Capisco che Ruby � famoso per Rails, per� da quel poco che sto provando,
lo trovo formidabile anche per lavorare integrandolo con
applicazioni .exe per intenderci …

Ciao e grazie molte Giovanni!
XarYo

Io ho avuto problemi nel catturare l’output o nel settare l’input di
programmi sotto windows usando ruby.
Per esempio se si vuole controllare il risultato di una compilazione,
dove un exe lancia a sua volta altri exe, ho usato un file batch e una
pipe.

class Better

def self.popen(cmd, mode=“r”, expected_exit=0, &proc)

ret = IO.popen(cmd, mode) do |io|

  proc.call(io)

end

ret

end

end

aString = “”
aString << “nmake mymake.mk”
batch_name = “my.bat”
log_build_file = []
File.open(batch_name, “w”){ |file| file << aString}
Better.popen(batch_name)do |io|

  io.each_line do |line|
  puts line

    log_build_file << line

  end

end