Category: Linguaggi di programmazione

Eseguire codice Oracle PL/SQL con IBM DB2

Una novità molto interessante del prodotto IBM DB2 9.7 riguarda la possibilità di eseguire nativamente codice scritto in linguaggio Oracle PL/SQL. Mi sembra una notizia degna di attenzione che credo possa spingere molti utenti a valutare la possibilità di migrare dati ed applicazioni da Oracle verso IBM DB2. Pare che la compatibilità sia molto alta e che dal 90  al 99% del codice non debba essere affatto modificato. Potete trovare qui ulteriori dettagli sulla compatibilità, su come si possano eseguire Oracle Applications con DB2 9.7 per Linux, Unix, Windows e su come utilizzare MEET, uno strumento per verificare quante istruzioni di codice PL/SQL siano direttamente “trasferibili” in DB2.

Fonte: www.ibm.com

Molto interessante anche questo video su PL/SQL Support in IBM DB2 9.7

Nel documento di analisi dal titolo “Value Proposition For IBM DB2 9.7 – Cost Savings Potential Compared to Oracle Database 11g” sono esaminate componenti di costo come sistemi di storage, database servers, costi del personale, costi della rete e costi di migrazione. Sono evidenziate anche altre caratteristiche di DB2 come la forte compressione dei dati, che consente una significativa riduzione dello storage utilizzato, e le sofisticate funzioni di self-tuning che riducono l’attività dei DB Administrator.

Fonte: www.ibm.com

Esiste una versione Community Edition di DB2 9.7 chiamata DB2 Express-C: i dettagli del prodotto sono qui e  potete scaricarlo qui. Nella stessa pagina trovate un link ad una nutrita serie di video tutorial tecnici su DB2.

Il pattern MVC e Zend Framework – terza parte

PHP e Zend Framework
di Sergio Vaccaro

La realizzazione di un progetto in PHP è decisamente “potenziata” dall’uso di Zend Framework.

Un framework è soprattutto una collezione di librerie di supporto alla programmazione. In termini di programmazione OOP, di cui abbiamo parlato in un precedente post, un framework è soprattutto una collezione di classi.

Il Framework di Zend è scritto interamente in PHP, è Open Source (sarebbe stato difficile concepire il contrario), quindi è libero e gratuito.

Viene rilasciato con licenza BSD, la più libera di tutte. La licenza BSD, infatti, consente di reintrodurre in circolazione anche versioni modificate del codice sottoposte a licenza diversa da quelle open (quindi anche a codice chiuso e/o commerciale).

Il carattere aperto del framework ha un riscontro immediato sia nella vivacità del suo bugzilla (5008 bug segnalati e 3800 risolti negli ultimi 2 anni) e soprattutto nella ricchissima sezione Proposers del Wiki, con decine e decine di nuove classi in cantiere.
L’effetto immediato è un susseguirsi incalzante di versioni (tutte retrocompatibili) che hanno portato il framework dalla versione 1.5 alla 1.7.8 nel giro di poco più di un anno.

Le classi sono raggruppate in categorie (oggi le categorie sono 51) e si va dai più tradizionali strumenti di sviluppo (interazione con i database, strumenti di autenticazione, mail, sessioni, validazioni, ecc.) ad una lunga serie di strumenti utili per utilizzare/realizzare API di varia natura (JSON, XML, XMLRPC, SOAP, ecc.), fino a un’ampia collezione di strumenti già pronti per l’utilizzo dei servizi più popolari (Akismet, Amazon, Audioscrobbler, Delicious, Flickr, Nirvanix, reCAPTCHA, Simpy, SlideShare, StrikeIron, Technorati, Twitter e naturalmente le ricerche di Yahoo e il vastissimo universo di Google Data).

Zend Framework è uno strumento delizioso, per chi lo usa. Un po’ indigesto al primo assaggio, fornisce in realtà un patrimonio numeroso, completo e versatile di classi. E’ uno strumento modernissimo soggetto ad aggiornamenti incalzanti, costituisce un invito all’utilizzo di tecniche altrimenti scomode o poco note e anche una positiva sollecitazione all’uso di best pratices.

Zend Framework, come altri framework, implementa anche il pattern MVC, di cui abbiamo parlato in un precedente post.

Grazie alle classi generalmente disponibili, la preparazione del modello (la M dell’acronimo) risulta fortemente agevolata.

Tra le classi a disposizione ne troviamo alcune specializzate nel gestire l’acquisizione e l’analisi della richiesta, il suo smistamento tra le varie classi, il montaggio degli oggetti necessari, un gran quantitativo di accessori e così via.
Tutti questi strumenti consentono di realizzare un ottima gestione del processo e quindi di scrivere un controller (la C dell’acronimo) di ottima qualità.

Inoltre possiede uno strumento estremamente versatile per iniettare le informazioni di output verso layout differenziati e sofisticati (la V dell’acronimo), sia attraverso una gestione dei template nativa e sia utilizzando differenti gestori dei template (come Smarty).

È difficile dirne di più senza addentrarsi nei labirinti del codice (che però, grazie a ZF, diventa molto più luminoso).
Va detto però che lo sviluppo di applicazioni in PHP utilizzando Zend Framework consiste in attività che si concentrano molto di più sulla qualità, sulla cura dei dettagli, sulla versatilità, ecc.
Chi sviluppa utilizzando Zend Framework è fortemente sollevato dalla realizzazione di task ordinari e deve concentrarsi solo sugli aspetti di innovazione e di invenzione, producendo applicazioni migliori, estremamente moderne e di grande eleganza.


Il pattern MVC e Zend Framework – seconda parte

Il pattern MVC
di Sergio Vaccaro

Il pattern MVC è uno schema progettuale che consiste nel separare i livelli di un’applicazione in tre grandi gruppi:

  • Il Model (modello), cioè l’impianto logico dell’applicazione (database, collezioni di informazioni, connessioni a host, fruizione di servizi, ecc.);
  • La View (vista), cioè il livello di presentazione dell’applicazione, sia nel caso in cui si debba avere una interazione con un utente umano sia nel caso in cui debbano dialogare più applicazioni;
  • Il Controller (controllore), cioè il “direttore d’orchestra” di tutta l’attività, che raccoglie le richieste in input, attiva gli oggetti necessari del modello e, attraverso essi, produce i dati da affidare alla vista per la presentazione.


I vantaggi sono evidenti.
Si possono ulteriormente isolare diversi ambiti di complessità di un progetto. Si può lasciare che chi si occupa del modello interagisca con chi progetta i database, mantenendo una certa libertà di sviluppo. Nello stesso tempo, chi si occupa della vista può concentrarsi sull’usabilità, i rapporti con i grafici e le problematiche di accessibilità. E chi si occupa del controllore può occuparsi del funzionamento generale dell’applicazione, senza sapere cosa succede nelle altre stanze dello sviluppo.

Inoltre sarà possibile, con relativa disinvoltura, modificare una sola parte dell’applicazione, senza travolgere il resto.
Immaginiamo, ad esempio, la penosa fatica di cambiare la struttura di un database (o l’RDBMS stesso) in una applicazione non strutturata in questo modo: bisognerebbe cercare le query in tutta l’applicazione per adattarle ai nuovi formati. Oppure potrebbe essere di impatto disastroso la modifica di un layout di presentazione, se il layout non fosse stato isolato ma costruito “pezzo per pezzo” nel corso del flusso dei programmi.

Quando si programma a oggetti, lo schema MVC è ampiamente riconosciuto come estremamente vincente ed è anche concettualmente piuttosto semplice.
Operativamente, però, realizzare un progetto che rispetti lo schema MVC può essere un compito piuttosto complesso.

COBOL – Un successo che dura dal 1959

Riprendo l’argomento trattato da Daniele in un recente post per fare ancora un po’ di chiarezza su alcuni aspetti di questo linguaggio, sconosciuto agli sviluppatori più giovani e spesso ingiustamente bistrattato. Come nell’ingegneria delle costruzioni anche nello sviluppo del software esistono metodologie e strumenti più o meno adatti alla realizzazione del prodotto che si intende costruire. Lo sviluppo della teoria dei linguaggi formali e dei compilatori, spesso anche ragioni puramente commerciali, hanno portato nel corso degli anni alla nascita e morte, vera o presunta, di molti linguaggi di programmazione. Dico presunta perché ogni tanto mi capita di fare scoperte davvero inaspettate. Tempo addietro, per esempio, ho conosciuto il titolare di una azienda che sviluppa e commercializza software per piccole e medie imprese. Chiacchierando con lui ho scoperto che utilizzano Harbour e credo facciano anche buoni profitti. Perché in fondo la vita lavorativa quotidiana non è fatta sempre di programmazione a supporto del controllo del traffico aereo ma più “banalmente” di calcoli di fatture, stipendi, estratti conto, bilanci ecc. ecc. Proprio in questo contesto, ma ad un livello decisamente industriale, ritengo che COBOL sia ancora insuperato (l’acronimo COBOL significa COMMON BUSINESS ORIENTED LANGUAGE); lo dimostrano le milioni di righe di codice ancora in esercizio ed il numero di offerte di lavoro che si trovano anche nei periodi più critici. Non si tratta, come molti sostengono, di eredità del passato di cui non ci si riesce a liberare ma di codice in produzione e manutenuto. I programmi COBOL spesso fanno la loro parte in sordina, per esempio sotto la patina dorata di uno sportello bancomat. Piuttosto che fare paragoni con questo o quel linguaggio preferisco offrire alcuni spunti di riflessione e contribuire a sfatare qualche mito. Può darsi che qualche professore universitario decida di tenere delle lezioni di approfondimento su un argomento con cui molti futuri laureati potrebbero confrontarsi una volta entrati nel mondo del lavoro.

  • COBOL è estremamente manutenibile anche perché è strutturato in sezioni e paragrafi. Ad esempio, la sezione dedicata all’I/O consente di cambiare la codifica da EBCDIC ad ASCII semplicemente modificando uno degli attributi descrittivi e lasciando invariato il resto. Anche se questo può far sorridere, dispone di una sintassi verbosa che ricorda frasi della lingua inglese. Queste caratteristiche rendono un sorgente COBOL mediamente più lungo rispetto a quelli scritti con altri linguaggi ma decisamente più autodocumentante
  • La variabili possono essere facilmente aggregate per comporre strutture gerarchiche anche molto complesse (clausola redefines)
  • Le variabili hanno un tipo selezionabile tra quelli comunemente presenti negli altri linguaggi. Tra i tipi numerici disponibili ne esiste uno avente un numero di cifre intere e decimali definibile dall’utente (es. 999,99)
  • Una delle caratteristiche che rende COBOL particolarmente adatto alle elaborazioni finanziarie è la precisione fixed point
  • E’ prevista una gestione avanzata degli array attraverso sofisticate funzioni di definizione (es. tabelle indexed) e ricerca di elementi
  • Data la particolare vocazione di COBOL per la gestione di grossi volumi di dati sono previste delle apposite sezioni in cui è possibile fare: SORT di file, MERGE di file e stampa di prospetti utilizzando il REPORT WRITER integrato, il tutto all’interno del programma e durante il normale flusso elaborativo. Il REPORT WRITER rende disponibili: numeri di pagina, campi data, campi legati e calcolati, sub totali di gruppo e di report
  • Con un programma scritto in COBOL è possibile accedere ai più diffusi DBMS relazionali come ORACLE e IBM DB2
  • Esistono compilatori COBOL (anche open source) per le più diffuse piattaforme e non solo per ambienti mainframe
Esaminando i prodotti di Micro Focus e di IBM è possibile farsi subito un’idea precisa delle potenzialità attualmente offerte dal mondo COBOL: programazione object oriented, web services, interoperabilità COBOL/JAVA, supporto XML, SOA, .NET e molto altro ancora

Fonte: Micro Focus Studio for COBOL developers


Fonte: IBM COBOL for AIX Version 2 (5724-H44)

Con questo post non voglio apparire nostalgico. Ciò che le aziende cercano sono strumenti al passo con l’evoluzione tecnologica che non rimettano in discussione tutti gli investimenti fatti. Da questo punto di vista direi che COBOL garantisce continuità e tecnologicamente non sembra affatto una vecchia mummia.

COBOL: davvero preistoria?

Lo confesso: quando sento parlare di COBOL penso al paleolitico, ai Flinstones, agli albori dell’informatica, al monolite in Odissea 2001 nello spazio o al più alla programmazione di HAL9000. Ma è davvero solo un reperto archeologico, una manciata di bit scritta nel fango e nelle caverne? A quanto pare no, e mi son dovuto ricredere. Prima di tutto c’è da dire che, a causa della sua stabilità, il COBOL è utilizzato in molti sistemi transazionali, il più noto dei quali è il bancomat. Non solo. Sempre più spesso trovo articoli che lo descrivono come uno dei linguaggi più interessanti ed in del momento. Qualche esempio? Eccolo: Cerchi un lavoro sicuro? Impara COBOL. E in effetti su siti come JobCrawler ci sono decine di richieste di esperti. A questi, e a quanti vogliano (ri)studiare questo linguaggio, consiglio allora questo manuale che, incidentalmente (l’ho scoperto mentre preparavo questo post), è stato scritto da uno dei nostri autori ed è acquistabile (anche) in pdf.

Ps La vignetta si intitola Java è il nuovo COBOL

Java e PHP: una questione di “complessità”?


Riporto volentieri una riflessione/domanda su Java e PHP di un nostro lettore:

“C’è qualcuno che teorizza confronti tra Java e PHP non analizzando i risultati da conseguire, ma puntando sulla difficoltà a programmare in un linguaggio piuttosto che in un altro e sostenendo che PHP si usa per cose semplici e Java per cose complesse.
A parte l’atteggiamento singolare e l’inutilità di confrontare linguaggi di programmazione, vi siete mai imbattuti nella programmazione per classi e oggetti in PHP5?
Vi assicuro che a difficoltà ce n’è tanto quanto in Java!
In quanto a cose complesse, bisogna capire cosa si intenda, ma vi assicuro che nel mondo ci sono siti che gestiscono movimenti di miliardi di dollari in PHP!
Ci sono siti che in uso di astronomi con relativi calcoli di una complessità “lunare” scritti in PHP!

Infine per capire vi ricordate il primo compitino che si dà ai programmatori principianti? Scrivere il messaggio Hello World!

Ebbene in PHP è:

echo 'Hello World!';?>

In Java è:

import java.awt.Frame;import java.awt.Label;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;

public class HelloWorldFenster extends Frame {   public HelloWorldFenster() {       super("Hello World!");       Label HelloWorldLabel = new Label("Hello World!");       add(HelloWorldLabel);       addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                System.exit(0);            }       });       setResizable(false);       setLocation(350, 320);       setSize(160, 60);       setVisible(true);   }   public static void main(String[] args) {       new HelloWorldFenster();   }}

In conclusione sono stato più bravo perchè ho scritto più codice?
Franco”

La ballata del programmatore (imperdibile!)

http://www.derelitti.com/ballata_del_programmatore/

Accessibilità Guida completa, è disponibile la versione elettronica

di Fabio Brivio

Rilasciata, nei primi giorni del 2008, la versione HTML del libro di Michele Diodati dedicato all’accessibilità web

http://www.apogeonline.com/webzine/2008/01/09/22/200801092203

La versione HTML gratuita del testo la trovate qui:
http://accessibile.diodati.org/agc/index.html

Ajax Demo su Dev.

Vi segnalo l’articolo “Ajax Demo” di Andrea Libratore, uno degli autori di questo blog, sul numero 153 della rivista Dev.

“Come creare un’applicazione PHP/AJAX basata sulla tecnologia Web 2.0 in grado di usare le più avanzate tecniche Javascript per modificare dinamicamente la struttura e il contenuto della pagina senza doverla ricaricare interamente”.

eXtreme Programming

L’eXtreme Programming (conosciuta anche come XP) è una metodologia agile per lo sviluppo di software

Si tratta di un approccio diverso dai processi di svilppo più noti.
Formulato da Kent beck, Ward Cunningham e Ron Jeffreis già nel 1999

Tra gli aspetti caratteristici dell’extreme programming vi sono la progettazione con il cliente, la programmazione a più mani (generalmente in coppia), la verifica continua del programma durante lo sviluppo per mezzo di programmi di test e la frequente reingegnerizzazione del software, di solito in piccoli passi incrementali, senza dover rispettare fasi di sviluppo particolari.

eXtreme Programming