BEEing va in pensione e rinasce con un nuovo progetto

BEEing è giunto al termine del proprio ciclo di vita.

In questi anni di duro lavoro e dopo oltre 65.000 righe di codice abbiamo maturato l’idea per una nuova versione del framework.

BEEing era nato per progetti di Enterprise 2.0, con logiche molto flessibili ma piuttosto influenzate dall’idea di base del progetto.

Da quell’esperienza e da un processo di reingegnerizzazione del codice durato diversi mesi è nato SmartForge, un Application Server che sfrutta al meglio l’architettura del suo predecessore, ma che anche la estende con nuove funzionalità legate alla gestione dei plug-in, con una parte di framework scritto in puro HTML5 e CSS3 e con il supporto nativo per MongoDB.

I primi plug-in ad essere rilasciati sono SmartCommerce (o Smart Forge Cart) e Smart Forge Chat (ancora in fase Alpha).

Smart Forge Cart è un progetto di e-commerce molto flessibile ed orientato all’integrazione con sistemi ERP esterni (es: SAP/R3) così come all’estensione ed alla personalizzazione di ogni singola funzionalità.

A breve sul nuovo sito troverete molte altre informazioni, tutorial, specifiche tecniche ed esempi di programmazione.

 

 

BEEing X

Clicca sull'immagine per ingrandire

Cos’è BEEing?

Dopo questo lungo periodo di refactoring credo sia doveroso rifare il punto zero.
La mappa concettuale che trovate qui sopra dovrebbe chiarire le idee a quanti si sentono ancora confusi.

BEEing X non è un’applicazione finita, ma una piattaforma costruita in Java su diverse librerie OpenSource con cui è possibile realizzare ogni tipo di implementazione.

Quali sono le funzionalità principali?

Queste sono le librerie che caratterizzano l’architettura di BEEing (che sono state armonizzate ed integrate ad arte).
Ne risulta un Application Server molto leggero e performante, facilmente estensibile ed accessibile mediante servizi esposti secondo le specifiche RESTful.
Lo scripting server side per produrre l’output HTML viene delegato a Velocity (che è facilmente espensibile secondo la logica a plug-in), mentre tutte le azioni client side sono implementate in JavaScript.
BEEing consente di partire nello sviluppo di soluzioni enterprise scalabili basate su Java con il minimo sforzo.

Dove trovo BEEing X?

BEEing X lo ritrovate su SourceForge: http://sourceforge.net/projects/beeingx/
Potete scaricare i sorgenti con un qualunque client SVN da questo indirizzo: https://beeingx.svn.sourceforge.net/svnroot/beeingx
Se invece volete solo curiosare qua e la nei sorgenti:

Nuova documentazione per BEEing

beeing_presentation

Eccoci finalmente pronti con un minimo di documentazione.
Abbiamo fatto questo sforzo :) in vista dell’International Forum on Enterprise 2.0.

I documenti sono due, una presentazione ed un opuscolo. Potete scaricarli da slideshare, oppure visionarli da questo post.

BEEing (Opuscolo)

BEEing (Presentazione)

International Forum on Enterprise 2.0: Ci siamo anche noi!

ife2_2010

Quest’anno non saremo solo attenti uditori, ma avremo anche un piccolo ruolo attivo.
BEEing è stato premiato assieme a Incentive al “Contest Start-Up” organizzato da Open-Knowledge in occasione del Forum.

Un ringraziamento particolare da parte di tutti noi a Open-Knowledge, che con questa iniziativa offre una buona occasione per conoscere e farsi conoscere a piccole start-up che diversamente avrebbero delle difficoltà. Un ringraziamento di cuore anche a Stefano Besana ed Emanuele Quintarelli per la pazienza e la fiducia dimostrataci.

In occasione del Forum stiamo preparando un po’ di documentazione. Come al solito all’ultimo momento ;) .
Vi lascio il link per un’anteprima.

AUTORE: Gian Angelo Geminiani

Archiviazione 2.0 con BEEing

archiviazione 2.0

BEEing può essere agevolmente utilizzato per la condivisione dei documenti, in alternativa o in aggiunta alla piu’ classica archiviazione e conservazione documentale.
Le caratteristiche della piattaforma e le funzionalità sociali implementate nativamente rendono l’archiviazione destrutturata un gioco da ragazzi.

Gli utenti non devono conoscere anticipatamente la tassonomia documentale per poterli archiviare. La struttura delle cartelle, i tag e le keywords dei vari documenti possono essere definite successivamente e con “pratiche sociali” abbinate alle attività dei singoli individui.

Tagging condiviso

Il tagging condiviso dei documenti, per esempio, aiuta gli operatori di diversi dipartimenti a condividere un linguaggio aziendale comune, ma anche ad organizzare la gerarchia documentale secondo un punto di vista personale ben piu’ utile e mnemonico di quanto non possa essere una struttura definita a priori e secondo punti di vista generalistici.

In questo modo, per esempio, lo staff commerciale potrà taggare i contratti con i clienti secondo le proprie keywords e condividere questa modalità di classificazione con il resto dell’azienda. Gli utenti amministrativi a loro volta avranno modo di etichettare gli stessi contratti con altre parole chiave, pur condividendo la catalogazione degli utenti commerciali. Entrambi i dipartimenti potranno ricercare i documenti in oggetto sfruttando le due diverse modalità di etichettatura e catalogazione e, aiutati dal tag cloud, avranno modo di condividere punti di vista differenti sugli stessi documenti.

Diventa “FAN” di un documento

I documenti hanno diverse opzioni e caratteristiche che facilitano la condivisione e la collaborazione sul documento stesso, nonchè la rintracciabilità.
Le caratteristiche di un documento sono:

  • Gestione multilingua (ogni documento può essere redatto in diverse lingue. ogni lingua ha la sua gestione delle versioni)
  • Tre livelli di accesso con relative regole (Visualizzazione, Modifica, Condivisione)
  • Allegati (Ad ogni documento possiamo allegare qualunque file)
  • Deduplica degli allegati (Gli stessi file possono essere allegati a diversi documenti senza che il sistema ne duplichi il contenuto)
  • Gestione della versione degli allegati
  • Blocco degli allegati per le modifiche
  • Gestione della versione del documento
  • Tre livelli di tagging (Tag di sistema, Tag personali, Tag Sociali)
  • Sistema privato di annotazione del documento (Note personali che restano riservate)
  • Documenti correlati e sottodocumenti
  • Aggiunta del documento ai Preferiti
  • Widget di condivisione
  • Collaboratori (L’autore del documento può definire dei collaboratori)
  • Iscritti al documento (gli utenti possono iscriversi al documento e ricevere le notifiche sulle variazioni)
  • Commenti (Ogni documento presenta una timeline di commenti)

Diventa “FAN” di un documento

I documenti hanno diverse opzioni e caratteristiche, tra cui anche la possibilità da parte degli utenti di essere “iscritti” (proprio come se il documento fosse un gruppo).
L’iscrizione al documento è un’opzione molto importante perchè consente la ricezione di una notifica ogni volta che il documento subisce una variazione o un viene inserito un nuovo commento.

Inoltre l’iscrizione ad un documento consente di rintracciarlo mediante il widget apposito che mostra agli utenti i documenti a cui ci si è iscritti, quelli di cui si è autore e quelli a cui si stà collaborando.

Dall’archiviazione documentale alla condivisione documentale

Screenshot

Potete trovare alcuni screenshot nella sezione apposita.

BEEing v. 5.0.0.2

v5002

Eccoci finalmente fuori con la nuova versione 5.0.0.2.
Le novità sono tantissime, tra cui:

  • Nuovo framework Ajax per l’interfaccia grafica ZK 5.x
  • Il modulo eCMS supporta la sottoscrizione ai documenti ed i collaboratori
  • Nuovi template grafici
  • Nuovi widgets per il tag cloud, i tag personali, i tag sociali e di sistema
  • Localizzazione in Polacco, Russo, Francese, Tedesco, Spagnolo, oltre alle già supportate Italiano ed Inglese.
  • Sistema di audit e notifica attività

Abbiamo creato una nuova sezione “Screenshots” che arricchiremo con immagini e video dimostrativi.

Potete scaricare la nuova versione da SourceForge.

Stile e Specifiche di programmazione in BEEing


StileProgrammazione

Introduzione.

Questo post è indirizzato esclusivamente ai programmatori che abbiano interesse ad orientarsi nel codice sorgente di BEEing.
Per migliorare la lettura del codice ed il lavoro in team, abbiamo definito alcune semplici specifiche che vanno dalla definizione dei nomi delle variabili, dei metodi, ecc.. alla struttura dei package.

Specifiche:

NOMI COMPOSTI:

Java impone che i nomi di metodi,di variabili … vengano scritti con l’iniziale minuscola.
Se sono nomi composti, ogni nuova parola deve iniziare con la lettera maiuscola.

***************************************************************
setPostName(final String postName){
…..
…..
}
***************************************************************

DIVISIONE ALL’INTERNO DEI PROGETTI:

Il codice sorgente di BEEing è organizzato in packages ed in cartelle.
La divisione in cartelle rispetta le specifiche del pattern MVC (Model View Control), e separa nettamente GUI (View),  Model e Controller:

  • GUI: Parte di grafica. Spesso viene fatta un ulteriore divisione in GUI_WIDGETS, GUI_COMPONENTS, GUI_WINDOWS…
  • MODEL: Sezione relativa al Database.
  • CONTROLLER: Cartella destinata a contenere classi di utiliti, classi astratte …

***************************************************************

NOMI DEI PACKAGE:

In BEEing si è scelto di definire in nomi dei package in questo modo:

Prima parte: org.sf.bee.

Seconda parte: nome del progetto o identificativo della sezione: (esempio search, admin, wiki …);

Terza parte: nome della cartella in cui si trova il package: gui (se si trova in una cartella GUI), gui.components (se si trova nella cartella GUI_COMPONENTS);

Quarta parte: components, widgets, windows a seconda del tipo di componente. Non viene inserita se è già stata specificata al terzo punto;

Quinta parte: pagectrls, nel caso si tratti di un componente che funga da controller della pagina. In questo modo è molto facile distinguere tra classi principali e classi secondarie.

Sesta parte: nome esplicito ed identificativo della funzionalità della classe. Tutto in minuscolo e senza separatori.
ESEMPIO:

***************************************************************

UTILIZZATE NOMI INTELLIGENTI:

le funzioni, le proprietà, le variabili … devono avere nomi semplici; in questo modo sia chi scrive il codice sia chi lo va a leggere può dedurne immediatamente lo scopo. Eventualmente utilizzate dei prefissi per indicare tipi diversi di variabili e funzioni.

Scrivendo i nomi chiaramente non avrete bisogno di scrivere commenti troppo descrittivi.
Esempi di nomi per i metodi:
doSave, doRemove … –> il prefisso do rende l’idea di un’azione, quindi può essere utilizzato per i metodi chiamati al click su un bottone, su un link …;

getText, getName … –> il prefisso get, in italiano “dammi”, dedicatelo a quei metodi che devono restituire qualcosa;

setText, setName … –> viceversa adoperate la parola set, in italiano “imposta”, per quei metodi che devono inizializzare o aggiornare dei dati (normalmente vengono passati, come argomenti, i dati da aggiornare);

init, initComponents… –> il prefisso init dev’essere utilizzato per indicare una inizializzazione. Normalmente tutti i metodi che iniziano con init vengono posti vicini nel codice.

E’ buona norma che i metodi abbiano una lunghezza massima intorno alle 15 righe. Quando iniziano ad essere 20 – 30 sarebbe buona norma pensare di dividere i metodi in due o più; in questo modo sarà più facile manutenere e debuggare il codice.

Un’altra tecnica spesso utilizzata per aver maggiore chiarezza consiste nell’inserire delle righe bianche per dividere le varie parti di un metodo.

***************************************************************

CURARE LA FORMA:

è importante, sia per chi sviluppa che per chi legge, che il codice sia pulito, ordinato e ben formattato.

Cercate di dichiarare le variabili sempre prima del codice così da poterle ritrovare facilmente. –>
Utilizzate sempre le costanti (nome della variabile tutto maiuscolo). –>
Quando potete, anteponete al tipo di variabile la keyword final. –>



Andiamo nel dettaglio…

Cercate di dichiarare le variabili sempre prima del codice così da poterle ritrovare facilmente.

StileProgrammazione_Properties
Le variabili della classe vengono identificate come “Properties” se prevedono i metodi “set” e “get“.
StileProgrammazione_CompFieldsConstants
I “Fields” vengono distinti dalle altre variabili in quanto il nome identificativo viene preceduto da un singolo underscore “_”.  Questa tecnica derivante dal C++ rappresenta, a mio parere, un’alternativa più elegante al “this.” introdotto con Java. Per questo motivo è stata adottata in tutto il framework e dovrà essere utilizzata.

Utilizzate sempre le costanti (nome della variabile tutto maiuscolo).

All’interno di una classe (Prova.java):

public static final String BTN_ADD = “btnAdd”;

All’interno di un’altra classe che debba utilizzare lo stesso bottone della classe Prova (Test.java):
public static final String BTN_ADD =  Prova.BTN_ADD;
In questo modo non dovrete ricercare per tutta la classe (o addirittura su più classi) una stringa da modificare (es. da “btnAdd” a “btnNew”), basterà farlo per una sola costante.

Formattate bene il codice; molti strumenti di sviluppo offrono delle funzioni che consentono una strutturazione automatica.

Quando potete, anteponete al tipo di variabile la costante final.

L’applicazione della keyword final alle variabili è un’ottimizzazione in quanto constente di allocarle direttamente in memoria così che possano essere reperite più velocemente.
Naturalmente comporta alcune limitazioni, in quanto dopo la dichiarazione, potrete inizializzare la variabile UNA sola volta.

Applicando final ad una classe, impedisce la creazione di sottoclassi (N.B. non confondere il concetto di sottoclasse, subclass, con istanza della classe).

Se applicata ai metodi ne impedisce l’override.

Alcune variabili, quelle relative ai componenti grafici, è buona norma inizializzare SOLO una volta per ogni istanza di classe.


L’utilizzo di questo metodo comporta i seguenti vantaggi:
- performance migliori
- drastica riduzione di null pointer exception e di pagine bianche.
Mal che vada, non vedendo il componente, potrete farvi immediatamente un’idea su chi ha originato l’errore.

AUTORERoberto Fratti

BEEing v. 3.0.0

glassfishv3BEEing cresce di versione e passa alla 3.0.0.

Tra le principali novità di questa versione vi segnalo la completa integrazione con Glassfish v3, l’accorpamento dei database in un unico archivio centralizzato, l’integrazione del modulo KNOL per la gestione della conoscenza e la condivisione documentale.

Le prossime versioni vedranno, oltre all’aggiornamento ed all’estensione del modulo KNOL, l’introduzione dei Channels e dei Gruppi, la gestione di script di autorizzazione concatenati con operatori logici e l’implementazione delle specifiche OSGi.

Presto pubblicheremo anche la road map per il 2010, che sarà ricca di novità.

Cos’è BEEing?

BEEing loginLa piattaforma

BEEing è una piattaforma java per lo sviluppo di soluzioni Enterprise 2.0, intranet ed extranet.
Lo sviluppo delle funzionalità base è molto dinamico e ad ogni release è possibile trovare nuove applicazioni (wiki, blog, microblogging, project management, crm, ecc..).
In futuro è possibile che alcuni moduli siano distribuiti come plug-in, e quindi non vengano integrati nel pacchetto base (es: il modulo di configurazione prodotto).
La distribuzione separata di alcuni plug-in specifici consente al modulo “CORE” di mantenere un peso ridotto e un minor numero di parametri di sistema.
Tutti i moduli ed i plug-in sono distribuiti completi di codice sorgente, compresi quelli di integrazione a sistemi proprietari (es: modulo per SAP/R3).
I moduli di integrazione a sistemi proprietari possono richiedere, per un corretto funzionamento,  la presenza di librerie di terze parti e delle relative licenze d’uso (non distribuite coi moduli BEEing)

Il framework di sviluppo è stato progettato con un’architettura modulare e basata sul concetto di plug-in.
La stratificazione del codice e dei package secondo una logica a “layer funzionali” consente una miglior manutenzione anche nel lungo periodo e favorisce lo sviluppo in team grazie ad una chiara e semplice suddivisione dei compiti.

I Moduli

Attualmente BEEing è composto da:

  • CORE: Contiene le classi base del framework e l’integrazione con alcune librerie open source (es: rome, Json, ZK, OpenJpa);
  • WEBAPP: E’ il cuore dell’application server e raggruppa in se il modulo wiki, il blog, la gestione utenti, la gestione dei profili, il datastore ed i componenti base per la gestione delle dashboard e dei widgets;
  • LIB_ADMIN: E’ un plug-in di sistema e contiene tutte le maschere e le logiche di amministrazione (variazione dei parametri di configurazione, definizione delle costanti di sitema, gestione delle lingue, gestione delle localizzazioni);
  • LIB_KNOL: Contiene l’interfaccia grafica del modulo wiki, del modulo gestione conoscenza e del modulo di gestione del datastore (per l’archiviazione dei file allegati);
  • LIB_BLOG: Contiene l’interfaccia grafica del modulo blog;
  • LIB_RSS: Contiene le logiche di conversione dei contenuti in formato RSS;
  • LIB_TRACKBACK: Modulo di gestione dei trackback;
  • PLG_CUSTOMER: Plug-in per il CRM (in fase alpha)
  • PLG_FLASHGATEWAY: Plug-in di integrazione con librerie Flash Remoting (Adobe Flash) per l’integrazione con Flash;
  • PLG_SAP/R3: Plug-in per l’integrazione con SAP/R3 (richiede librerie proprietarie SAP che non vengono distribuite con BEEing)

Come si sviluppa con BEEing

BEEing non è un’applicazione, ma un framework di sviluppo modulare.
Benchè le molte funzionalità base lo rendano del tutto simile ad una applicazione, ed in futuro lo sarà sempre piu’, BEEing nasce per essere integrato o per integrare sistemi esistenti. Grazie a BEEing potrete implementare soluzioni extranet/inranet molto avanzate, estendere l’interfaccia del vostro sistema ERP o integrarlo con sistemi di e-commerce o social networking, potete realizzare CRM o sistemi di configurazione prodotto facilmente integrabili con sistemi esistenti, così come estendere la vostra archiviazione documentale o implementarla partendo da zero (il datastore interno è compatibile JSR-000170).

Su BEEing si sviluppa in Java, Scripting Java, Scripting Velocity, XML, XUL.
Ma principalmente in Java.
L’architettura del sistema consente lo sviluppo di plug-in che possono essere vere e proprie applicazioni complete di database, maschere e menù, semplicemente integrabili alla WEBAPP.
Il deploy dei plug-in è completamente automatico ed il sistema integra i moduli esterni esattamente come accade per quelli nativi.
Non tutti i plug-in devono contenere obbligatoriamente elementi di interfaccia utente o database. E’ possibile integrare oggetti che il sistema caricherà come task schedulati o thread “one shot”, per compiere le piu’ disparate attività (backup, sincronizzazione database, controllo risorse di sistema, monitoraggio e alert, ecc..) .