Help conversione PHP to Ruby

Salve,
avrei bisogno di un aiuto;premetto di essere un principiante nel campo
della programmazione,conosco un pò di C++ e mi è stato assegnato un
compito,nell’ambito di un progetto che sto facendo con l’uni.Devo
convertire un paio di classi di un programma open source da PHP a
Ruby,non conosco nessuno dei due linguaggi (sto studiandone un pò le
basi) e vorre qualche consiglio e aiuto,posto la classe più breve che
devo tradurre:
CODICE:

<?php /** * Progetto: XML Tree: Costruisce documenti XML
* File: xml_tree.class.php
* * Descrizione: * Aggiunge, toglie, legge, scrive file XML * * Versione PHP 5.1 * * @category XML * @package XMLTree * @author Diego Brondo ~@:-] * @copyright 2006 * @license http://www.php.net/license/3_01.txt PHP License v3.01 * @version 0.0.1 */ if (!defined('__INCLUDE_PATH__')) define('__INCLUDE_PATH__', './'); require_once(__INCLUDE_PATH__.'exceptions.class.php'); require_once(__INCLUDE_PATH__.'xml_parser.class.php'); class xml_tree extends xml_parser { /** Indice nodo corrente * @var int * @access private */ private $_current = 0; /** Castruttore * @param mixed Percorso al file XML o Risorsa di file o stringa contenente XML * @param string Tipo di codifica */ function __construct($source, $charset=XML_CHARSET) { parent::__construct($source, $charset); } /** Distruttore */ function __destruct() { parent::__destruct(); } /** Ottine il nodo root * @return xml_element */ function get_root_node() { return $this->_element_list; } /** Compie una ricerca all'interno di tutti gli elementi * @param string Nome del tag da ricercare * @param int Numero massimo di risultati (default illimitato) * @param array Attributi che deve avere il nodo * @return array */ function search($name, $limit=-1, $attrs=NULL) { $ret = array(); if ($this->_element_list->get_name() == $name) return $this->_element_list; $i = 0; $count = 0; while ($node =& $this->_element_list->get_child($i++) && $count - $limit != 0) { $find = 0; if (!strcmp($node->get_name(), $name)) $find = 1; if (isset($attrs)) foreach($attrs as $k => $v) $find &= $node->has_attribute($k, $v); if ($find) { $ret[] = $node; $count++; } } return $ret; } /** Rimpiazza un nodo con un altro * @param xml_element Vecchio nodo * @param xml_element Nuovo nodo */ function replace($old_node, $new_node) { if (!is_object($old_node) || !is_object($new_node)) return 0; if ($this->_element_list == $old_node) $this->_element_list = $new_node; $i = 0; $continue = 1; while ($node =& $this->_element_list->get_child($i++) && $continue) { if ($node == $old_node) { $continue = 0; $node = $node->clona(&$new_node); } } return 1; } /** Rimuove un nodo * @param xml_element Vecchio nodo */ function remove($old_node) { if (!is_object($old_node)) return 0; if ($this->_element_list == $old_node) $this->_element_list = array(); $i = 0; $continue = 1; while ($node =& $this->_element_list->get_child($i++) && $continue) { if ($node == $old_node) { $continue = 0; $this->_element_list->del_child($i-1); } } return 1; } } // ~@:-] ?>

FINE CODICE

Le parti centrale e quella finale sono abbastanza semplici,il problema è
tradurre l’inizio ovvero queste 3-4 istruzioni:
if (!defined(‘INCLUDE_PATH’))
define(‘INCLUDE_PATH’, ‘./’);

require_once(INCLUDE_PATH.‘exceptions.class.php’);
require_once(INCLUDE_PATH.‘xml_parser.class.php’);

Se qualcuno può darmi qualche dritta mi sarebbe molto utile,Grazie

Se qualcuno può darmi qualche dritta mi sarebbe molto utile,Grazie

Usa Rexml:

http://www.germane-software.com/software/rexml/docs/tutorial.html


David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/

Concordo con David, direi che quello che ti serve è principalmente una
libreria per
manipolare file XML :smiley:

Quali sono le altre classi che devi convertire ? Magari troviamo dei
‘corrispondenti’ su Ruby :smiley:

Sandro

Inizio codice:

<?php /** * Progetto: ProjectTreeInterface
* File: webui_project_tree.class.php
* * Descrizione: * Gestione dell'interfaccia web per la gestione dell'albero di progetto * * Versione PHP 5.1 * * @category SCOWizard * @package ProjectTreeInterface * @author Diego Brondo ~@:-] * @copyright 2007 * @license http://www.php.net/license/3_01.txt PHP License v3.01 * @version 0.0.1 */ if (!defined('__INCLUDE_PATH__')) define('__INCLUDE_PATH__', './'); require_once(__INCLUDE_PATH__.'webui.class.php'); class webui_project_tree extends webui { function __construct() { parent::__construct(); } function __destruct() { parent::__destruct(); } private function _generate_project_tree() { $node_list = array(); if (isset($this->_project)) if (is_array($this->_project)) for ($i=0,$tot=count($this->_project); $i<$tot; $i++) $this->_project[$i]->get_info($node_list); // echo '
'; print_r($node_list); echo '
'; return $node_list; } function webui_project_tree_str() { if (!$this->is_cached('interface'.DIRECTORY_SEPARATOR.'webui_project_tree.tpl', $status)) { $this->assign('project_tree', $this->_generate_project_tree()); } // return $this->fetch_template('interface'.DIRECTORY_SEPARATOR.'webui_project_tree.tpl', $status, TFALSE, TRUE, -1); return $this->fetch_template('interface'.DIRECTORY_SEPARATOR.'webui_project_tree.tpl', $status, TRUE, FALSE, 0); } } // ~@:-] ?>

Fine codice

Questa ne è un’altra,ce n’è una lunghissima che non posto se no si
appesantisce troppo il forum,se vi dico solo il commento iniziale:
/**

  • Progetto: Session: gestione delle sessioni in PHP
  • File: session.class.php
  • Descrizione:
  • Gestione sontuosa delle sessioni in PHP.
  • Versione PHP 5.1
  • @category Session
  • @package Session
  • @author Diego Brondo ~@:-] [email protected]
  • @copyright 2006
  • @license http://www.php.net/license/3_01.txt PHP License v3.01
  • @version 3.0.1
  • @example session.example.php
    */
    Riuscite a capire se ce n’è una corrispondente in ruby??

Grazie

  • Gestione dell’interfaccia web per la gestione dell’albero di
    */

if (!defined(‘INCLUDE_PATH’))
define(‘INCLUDE_PATH’, ‘./’);

Premetto che non ho guardato molto il codice, ma se dovessi fare un
lavoro
di questo tipo, prima di tutto cercherei di individuare le
funzionalità che
devono essere sviluppate. Una volta trovate, e capite le combinazioni
input
=> output, allora inizierei la conversione.

Potrebbe anche succedere che 200 righe PHP, possano diventare 20 riche
ruby
:smiley: (usando anche librerie esistenti).
Scherzi a parte, questo è il mio suggerimento. Buone feste!!


Andrea R., http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it

Cavoli… allora… per la classe lunghissima che non hai postato leggo
dal
commento
iniziale che è una classe per gestire le Sessioni, da questo (e dal fatto
che è PHP… potevo
anche arrivarci prima :stuck_out_tongue: ) deduco che tu stia cercando, per il tuo
progetto,
di creare
un’applicazione web.

Quindi oltre a Ruby dovresti utilizzare anche un Framework Web (diciamo
Rails).

Per quanto riguarda la classe webui_project_tree in realtà quello che hai
postato
è solo un pezzetto di qualcosa di un ‘pò’ più grosso (nota, ad esempio che
la classe
eredita da un’altra classe chiamate ‘webui’ che è nel file
webui.class.php)

Comunque, ipotizziamo (come il nome sembra suggerire) che webui sia in
realtà
solo un package per gestire la parte grafica dell’applicazione, a questo
punto potresti
rifare il tutto in ActionView, che è diciamo, la parte di Rails che
governa
il layer di
presentazione (la grafica).

In ogni caso… sai fornirmi un dimensionamento del progetto ? devi per
forza
migrare a
Rails ? Sò che esistono alcuni framework web scritti in C++ (
Wt, C++ Web Toolkit — Emweb ad esempio)
che magari potrebbero risparmiarti il task complicato di dover
convertire
qualcosa
da un linguaggio che stai imparando ad uno che ancora non padroneggi :smiley:

Spero di esserti stato utile e… in bocca al lupo :smiley:

Sandro

On Fri, Dec 26, 2008 at 9:59 PM, Alessandro M.

Cavoli. più va avanti questo thread, più vedo questa come una mission
impossible :smiley:
non voglio scoraggiarti ma il lavoro che hai davanti è potenzialmente
ciclopico :smiley:

A questo punto IMHO devi seguire il consiglio di Alessando, cioè
individuare

le funzionalità principali del programma che vuoi sviluppare e poi
cercare
il modo di riprodurle in Rails astraendoti un pò dalla mera conversione
da
PHP
(che potrebbe richiederti tantissimo tempo :slight_smile:

Ehm… cosa intendi con “si dovrebbe sviluppare sottoforma di plugin per
eclipse” ?

Sandro

2008/12/26 Alessandro M. [email protected]

Già hai perfettamente ragione,il problema è che non ho le basi per fare
ciò(al momento ho fatto solo un esame di elementi di informatica e il
progetto in questione ci è stato richiesto dal prof di programmazione
I…),al momento non so nemmeno cosa sia l’XML e roba del genere!
Rispondendo a Sandro P.:l’applicazione da tradurre ha 16
classi,un main e un file di configurazione,una volta tradotto
necessariamente in rails,si dovrebbe sviluppare sottoforma di plugin per
eclipse.

Se è un esercizio, comunque non cambiare la modalità in cui vuoi
approcciarti. Il corso ti serve proprio per fare delle basi, quindi devi
approffittarne per imparare un pochino di PHP prima di tutto (e poi
cerchi
di leggere qualcosa per ogni nuova tecnologia che ne esce fuori come
XML,
HTML, CSS, blah blah) per capire cosa sia possibile fare con questo
linguaggio.

HTML.it fornisce ottime guide per introdurre moltissimi linguaggi
(trovi PHPhttp://php.html.it/guide/e Ruby). Prendine una di base,
leggila, e nel frattempo modifica un pochino
il codice per vedere che cosa cambia. Così prendi confidenza, ed il task
ti
farà meno paura. Se trovi qualche nuova nozione, non spaventarti, ma usa
amico Google e vedi ceh ti dice. Poi, se ne hai la
possibilità, confrontati
pure con un tuo amico dell’uni se hai dubbi.

A questo punto, quando avrai preso confidenza con PHP, direi che potrai
passare a Ruby.
Facci sapere e chiedi quanto vuoi, che siamo qui anche per te!


Andrea R., http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it

Andrea R. wrote:

  • Gestione dell’interfaccia web per la gestione dell’albero di
    */

if (!defined(‘INCLUDE_PATH’))
define(‘INCLUDE_PATH’, ‘./’);

Premetto che non ho guardato molto il codice, ma se dovessi fare un
lavoro
di questo tipo, prima di tutto cercherei di individuare le
funzionalit� che
devono essere sviluppate. Una volta trovate, e capite le combinazioni
input
=> output, allora inizierei la conversione.

Potrebbe anche succedere che 200 righe PHP, possano diventare 20 riche
ruby
:smiley: (usando anche librerie esistenti).
Scherzi a parte, questo � il mio suggerimento. Buone feste!!


Andrea R., http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it

Già hai perfettamente ragione,il problema è che non ho le basi per fare
ciò(al momento ho fatto solo un esame di elementi di informatica e il
progetto in questione ci è stato richiesto dal prof di programmazione
I…),al momento non so nemmeno cosa sia l’XML e roba del genere!
Rispondendo a Sandro P.:l’applicazione da tradurre ha 16
classi,un main e un file di configurazione,una volta tradotto
necessariamente in rails,si dovrebbe sviluppare sottoforma di plugin per
eclipse.

Già hai perfettamente ragione,il problema è che non ho le basi per fare
ciò(al momento ho fatto solo un esame di elementi di informatica e il
progetto in questione ci è stato richiesto dal prof di programmazione
I…),al momento non so nemmeno cosa sia l’XML e roba del genere!
Rispondendo a Sandro P.:l’applicazione da tradurre ha 16
classi,un main e un file di configurazione,una volta tradotto
necessariamente in rails,si dovrebbe sviluppare sottoforma di plugin per
eclipse.

Se è un esercizio, comunque non cambiare la modalità in cui vuoi
approcciarti. Il corso ti serve proprio per fare delle basi, quindi devi
approffittarne per imparare un pochino di PHP prima di tutto (e poi
cerchi
di leggere qualcosa per ogni nuova tecnologia che ne esce fuori come
XML,
HTML, CSS, blah blah) per capire cosa sia possibile fare con questo
linguaggio.

HTML.it fornisce ottime guide per introdurre moltissimi linguaggi
(trovi PHPhttp://php.html.it/guide/e Ruby). Prendine una di base,
leggila, e nel frattempo modifica un pochino
il codice per vedere che cosa cambia. Così prendi confidenza, ed il task
ti
farà meno paura. Se trovi qualche nuova nozione, non spaventarti, ma usa
amico Google e vedi ceh ti dice. Poi, se ne hai la
possibilità, confrontati
pure con un tuo amico dell’uni se hai dubbi.

A questo punto, quando avrai preso confidenza con PHP, direi che potrai
passare a Ruby.
Facci sapere e chiedi quanto vuoi, che siamo qui anche per te!


Andrea R., http://mikamai.com
Writing http://sensejs.wordpress.com/
Collaborating http://therubymine.it
Reading http://stacktrace.it