Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-04-2006, 17:52   #1
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
TDD in J2ME...sviluppare l'interfaccia test driven

Devo svilupapre un progetto J2ME...e sono sorte le prime difficoltà... La prima è il debugging, ma con EclipseME sono riuscito a fare un passo avanti riuscendo a debuggare anche le MIDLet...

Volevo sviluppare Test First un'applicazione J2ME... Il problema è che le API MIDP vanno a fare chiamate native al "cellulare" ogni volta che anche solo si instanzia una Item...

Avevo pensato a fare diversi Mock Object per le Form e le Item da immettere sulle form...

Prima di tutto faccio una FormInterface con questi metodi:
Codice:
public interface FormInterface
{
    int append(Image img);

    
    int append(ItemInterface item);


    int append(String str);


    void delete(int itemNum);


    void deleteAll();


    ItemInterface get(int itemNum);


    int getHeight();


    int getWidth();


    void insert(int itemNum, ItemInterface item);


    void set(int itemNum, ItemInterface item);


    int size();
}
Poi mi faccio una classe MyForm che implementa FormInterface e estende Form...
I metodi da implementare dovranno semplicemente fare una chiamata al corrispondente metodo della API facendo un cast al tipo Item...

Poi creo una classe MockForm che implementa l'interfaccia FormInterface...di fatto questo MockForm è una semplice collection...

Quello che mi "puzza" è ItemInterface... ItemInterface è un'interfaccia che è praticamente identica a quella di Item...

Il problema a questo punto è che per qualsiasi Item XXXXX che voglio inserire nella Form devo:

- creare XXXXXInterface che estende ItemInterface
- creare MyXXXXX che estende XXXXX e implementa XXXXXInterface (i metodi dell'interfaccia sono già implementati da XXXXX)
- creare MockXXXXX che implementa l'interfaccia XXXXXInterface (tutti i metodi del mock vanno implementati e devono simulare il funzionamento dell'item)

La cosa mi sembra abbastanza complicata...cosa ne pensate ? C'è un modo più veloce ?
Sicuramente l'implementazione dei metodi potrebbe essere minimale (tanto per chiarire molti dei metodi di Item non credo di doverli implementare)...o comunque implementerei gli altri metodi solo al momento in cui mi servirebbero nel codice...
Pensavo che esistessero delle librerie che "simulavano" il funzionamento di un cellulare senza fare il deploy dell'applicazione sul simulatore...

Ultima modifica di cionci : 28-04-2006 alle 17:57.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2006, 10:48   #2
theClimber
Senior Member
 
L'Avatar di theClimber
 
Iscritto dal: Oct 2000
Messaggi: 235
Quote:
Originariamente inviato da cionci
Volevo sviluppare Test First un'applicazione J2ME...
Lodelvole iniziativa, ci sono passato ma non e' affatto banale. E' un progetto con scopi "didattici" o sviluppi una vera applicazione?
Provo a spiegare qualcosa di quello che ho sperimentato, penso sia abbastanza interessante, anche se non e' tutto collegato al TDD.
Quote:
Originariamente inviato da cionci
Il problema è che le API MIDP vanno a fare chiamate native al "cellulare" ogni volta che anche solo si instanzia una Item...
Le api MIDP spesso non sono facilmente mockabili,con implementazioni final di classi e metodi. Questi metodi, di cui non e' possibile fare override, spesso sono proprio quelli che chiamano funzioni native (storage e display..). Una soluzione e' quella di wrappare tutto con classi e interfacce di adapter, ma questo e' problematico (Vedi sotto).
Un alternativa e' quella di usare tecniche di Aspect Oriented programming (aspectj in particolare) per istrumentare il codice (i .jar) delle librerie J2ME e rimpiazzare metodi e classi con implementazioni mock. Occhio che non e' assolutamente possibile distribuire i jar J2ME modificati per questioni di licenza.
Quote:
Originariamente inviato da cionci
Avevo pensato a fare diversi Mock Object per le Form e le Item da immettere sulle form...
L'applicazione dovra' mai funzionare su veri device? di che tipo ?
Tieni presente che per applicazioni vere, il numero di interfacce, classi, metodi è da minimizzare specie se i dispositivi finali hanno limitazioni sulla dimensione delle midlet. Questo spesso obbliga a compromessi nel design (dello stesso tipo di quelli visti nelle API MIDP ). Ti butto li tre trucchi banali che sono praticamente un Must per guadagnare memoria da dedicare al "design" dell'applicazione:
  • Tutte le classi devi farle nel package di default, se le metti in un altro package occupano memoriaù
  • Offusca il codice, i metodi ed i campi diventano piu' corti
  • Non usare mai getter e setter
  • Minimizza le classi. In un applicazione normale se ci sono due responsabilita' collegate faresti 2 classi nello stesso package che collaborano. In J2ME fai una sola classe!
Spesso mi sono trovato a dover mantenere un delicato equilibrio tra astrarre e ripulire il design e dover procedere ad inlining di metodi dove necessario.
Quote:
Originariamente inviato da cionci
Pensavo che esistessero delle librerie che "simulavano" il funzionamento di un cellulare senza fare il deploy dell'applicazione sul simulatore...
Il wireless toolkit della sun lo usi? http://java.sun.com/products/sjwtoolkit/
Alcune case produttrici forniscono tool specifici (Mi viene in mente Nokia, se ti iscrivi al loro sito di dev, o motorola ...), ma spesso sono solo modifiche minimali al WTK sun.
Comunquei tool di questo tipo non sono poi cosi' utili. In un progetto che ho seguito la fase di sviluppo e test sui device e' durate anche 4/5 volte piu' lunga della fase in cui abbiamo usato gli emulatori ed ha portato ad un drastico redesign che ha rimosso molti dei layer di astrazione utilizzati. I problemi sono vari:
  • Non tutti i device supportano correttamente le API J2ME (Esempio: Mi e' capitato di dover wrappare il layer di accesso allo storage in un package parallelo perche' alcuni device avevano problemi di concorrenza, nonostante le API "ufficiali" della piattaforma indicavano i metodi come synchronized). In questi casi ci si gioca la memoria disponibile per creare un layer di astrazione "indispensabile" anche se teoricamente inutile. NOTA: emulatori specifici rilasciati dal produttore del device OVVIAMENTE non avevano questo problema
  • E' complesso tracciare il comportamento in esecuzione su device senza strumenti specifici, e non sono facili da avere. In alcuni casi sono stato costretto ad usare un framework per loggare tramite chiamate di rete
  • Hai un modo per deployare le midlet sul device? non tutti i dispositivi permettono un upload via cavo o infrarosso, potrebbe essere necessario fare un download da rete.
  • Se devi supportare device multipli, specie se con diverse versioni delle specifiche J2EE, ti può essere utilie un precompilatore per fare include condizionato di segmenti di codice(Vedi il progetto antenna con alcuni tools utili: http://antenna.sourceforge.net/)

Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt)
theClimber è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2006, 11:15   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il progetto è per scopi didattici e lo volevo provare almeno sul mio cellulare (LG 8330), ma viste le difficoltà credo che mi appoggerò al debugger e mi limiterò a sviluppare Test First la logica anche se questo probabilmente mi imporrrà un aumento del numero di classi...
Chiaramente non volevo fare un Mock per tutto, ma mi sarei limitato solamente a quei componenti che avrei usato...
Quote:
Originariamente inviato da theClimber
Un alternativa e' quella di usare tecniche di Aspect Oriented programming (aspectj in particolare) per istrumentare il codice (i .jar) delle librerie J2ME e rimpiazzare metodi e classi con implementazioni mock. Occhio che non e' assolutamente possibile distribuire i jar J2ME modificati per questioni di licenza.
Però una volta fatto questo lavoro in teoria sarebbe trasportabile su tutti i progetti...ma da come dici sembra che non ci sia nemmeno speranza di trovarli in giro
Quote:
Originariamente inviato da theClimber
L'applicazione dovra' mai funzionare su veri device? di che tipo ?
Tieni presente che per applicazioni vere, il numero di interfacce, classi, metodi è da minimizzare specie se i dispositivi finali hanno limitazioni sulla dimensione delle midlet. Questo spesso obbliga a compromessi nel design (dello stesso tipo di quelli visti nelle API MIDP ). Ti butto li tre trucchi banali che sono praticamente un Must per guadagnare memoria da dedicare al "design" dell'applicazione:
  • Tutte le classi devi farle nel package di default, se le metti in un altro package occupano memoriaù
  • Offusca il codice, i metodi ed i campi diventano piu' corti
  • Non usare mai getter e setter
  • Minimizza le classi. In un applicazione normale se ci sono due responsabilita' collegate faresti 2 classi nello stesso package che collaborano. In J2ME fai una sola classe!
Spesso mi sono trovato a dover mantenere un delicato equilibrio tra astrarre e ripulire il design e dover procedere ad inlining di metodi dove necessario.
Grazie per i suggerimenti...tutto interessante e utile (anche se non mi piace )
Quote:
Originariamente inviato da theClimber
Il wireless toolkit della sun lo usi? http://java.sun.com/products/sjwtoolkit/
Sì...certo... Mi riferivo alla possibilità che le mie classi JUnit si appoggiassero direttamente al "layer" dell'emulatore che "riceve" le chiamate native... Esistono delle EmptyAPI nel WTK22, ma sono proprio Empty, nel senso che se metto una stringa in una StringItem e dopo la recupero, mi ritorna null...
Quote:
Originariamente inviato da theClimber
Alcune case produttrici forniscono tool specifici (Mi viene in mente Nokia, se ti iscrivi al loro sito di dev, o motorola ...), ma spesso sono solo modifiche minimali al WTK sun.
Comunquei tool di questo tipo non sono poi cosi' utili. In un progetto che ho seguito la fase di sviluppo e test sui device e' durate anche 4/5 volte piu' lunga della fase in cui abbiamo usato gli emulatori ed ha portato ad un drastico redesign che ha rimosso molti dei layer di astrazione utilizzati. I problemi sono vari:
Purtroppo questo lo so...ma mi limiterò alla compatibilità con un solo device...
Quote:
Originariamente inviato da theClimber
Hai un modo per deployare le midlet sul device? non tutti i dispositivi permettono un upload via cavo o infrarosso, potrebbe essere necessario fare un download da rete.
L'ho già hackato Ora lo permette...

La cosa che più mi ha stupito di J2ME è l'assoluta assenza di VM per PALMARI... Tranne in rari casi (alcuni modelli HP), la VM non viene distribuita con il palmare e si trova solo a pagamento (IBM J9 ad esempio)...

Comunque ti ringrazio per i suggerimenti...ora saprò a chi rivolgermi

Ah...l'idea era di realizzare una shell remota... Mi sono già fatto uno spike per la parte server e sono risucito a controllare perfettamente stdin e stdout da Java... Ora devo fare uno spike sul cellulare... Credo che il problema amggiore sarà il numero di righe di output che può contenere anche un semplice "ls" o "dir"... Dovrò studiarmi un metodo per gestirmi il buffer di queste righe (credo che anche la dimensione delle righe bufferizzate sarà determinante) e come farle "scorrere" sul dispositivo mobile...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2006, 13:15   #4
theClimber
Senior Member
 
L'Avatar di theClimber
 
Iscritto dal: Oct 2000
Messaggi: 235
Su alcuni LG ho fatto qualche prova, per un esperimento sulle API Push Registry (http://developers.sun.com/techtopics...cles/pushreg/), prova a vedere se il tuo modelle la supporta. Io l'ho utilizzata per installare una midlet che si risveglia quando riceve comandi telnet. La cosa positiva degli LG e' che hanno dato meno rogne dei motorola.

Per le liberie instrumentate con AOP, per riusarle in modo efficace su piu' progetti lo sforzo non e' banale. Se non sei piu' che esperto di aspectj e' meglio partire con casi e situazione specifiche, e piano piano riutilizzare la conoscenza.

Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt)
theClimber è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2006, 14:33   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Consoco il Push Registry, ma dimmi una cosa... Come si fa a ricevere una connessione entrante se tutti i cellullari sono dietro ad un proxy (o almeno mi sembra) ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2006, 22:05   #6
theClimber
Senior Member
 
L'Avatar di theClimber
 
Iscritto dal: Oct 2000
Messaggi: 235
Ci sono varie modalita di connessione per Push registry. Quello che dici è corretto se si vogliono usare datagram UDP o connessioni TCP; un questo caso devi essere sulla stessa rete IP del device, quindi su un server dell'operatore che ti ha fornito l'IP.
Questa soluzione va bene per applicazioni/servizi dell'operatore che vogliono attivare una midlet.

C'e' un alternativa, ed è quella di attivare il push registry con un SMS. La midlet quindi si attiva ed apre la connessione di dialogo in direzione opposta.
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt)
theClimber è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2006, 19:51   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sapevo degli SMS, ma mi imporrebbe di mettere un cellulare anche sul server...

Riguardo alla rete interna fra gli apparecchi collegati allo stesso operatore...hanno un indirizzo ip privato assegnato ? Sai come si potrebbe recuperare l'indirizzo ip privato assegnato ? Mi viene in mente una cosa interessante Anche se mi immagino che una connessione diretta cellulare-cellulare sia impossibile...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2006, 21:52   #8
theClimber
Senior Member
 
L'Avatar di theClimber
 
Iscritto dal: Oct 2000
Messaggi: 235
Anche a me era passata per la testa l'idea della connessione Cell-Cell. In linea di principio potrebbe funzionare, i cellulari che si registrano hanno un indirizzo IP assegnato, e rispondono al ping! Se non funziona è dovuto a configurazioni particolari della rete che bloccano connessioni che non vanno sui server di gateway.

Non so pero' dirti come recuperare IP direttamente da cellulare. Magari con dei nokia 6630 o 6680, che sono simbian, si puo' installare qualche SW e scoprire l'indirizzo IP.
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt)
theClimber è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
La scopa elettrica Mova K30 Mix crolla a...
Violazione in Almaviva, fornitore IT di ...
Amazon avvia un investimento da 3 miliar...
Ci fai tutto e ci giochi bene: a 999€ po...
Snapdragon o Exynos? Un sondaggio svela ...
TP-Link porta Netgear in tribunale: camp...
2 portatili tuttofare a 499€: uno ha 32G...
HONOR prepara il suo top di gamma compat...
Sony WH-1000XM6 a un prezzo senza preced...
Borderlands 4: 2K Games rende gratis il ...
I 7 robot aspirapolvere più venduti del ...
Samsung Galaxy S26: il salto generaziona...
Caso Lo Wen-jen: Intel nega qualsiasi ut...
Portatili con 32GB e 40GB di RAM e 1TB S...
Prezzo dell'ittrio fuori controllo: perc...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v