Opencart – software open source per ecommerce

Sto lavorando ad un sito di ecommerce per un Cliente, ed ho pensato di adottare Opencart per il fatto che è potente, flessibile e open source. Sto infatti procedendo ad una serie di modifiche strutturali abbastanza significative per adattarlo alle esigenze del mio Cliente.

Un paio di cose noiose che mi hanno fatto perdere tempo, ma alle quali ho trovato risposta:

  • Un fastidioso errore Javascript (JSON Error: SyntaxError: Unexpected token E con Chrome, un po’ differente con Firefox) durante il check out mi impedisce di completare l’acquisto; ho trovato la soluzione nel [1] di OpenCart, ma è molto recente (un paio di settimane fa) ; c’è da aggiungere una nuova libreria e sostituire il file catalog/view//theme/default/checkout/checkout.tpl. Questo consente di produrre un debug più prolisso per cui si capisce l’origine dell’errore JSON che compariva: mancava un file di configurazione della lingua (nel mio caso, il file catalog/language/italian/checkout/success.tpl). Copiato il file dalla versione inglese, tradotto e tutto ha funzionato.
  • Sempre sul forum di Opencart [2] ho trovato qualche suggerimento a cui rifarmi per il progetto dei banner.
  • Lo stesso errore può accadere anche durante in free checkout: ciò che esce è un errore JSON che, dopo aver installato il pacchetto vqmod, riporta il messaggio “Error: Could not load language payment/free checkout”; anche in questo caso occorre copiare il file catalog/language/english/payment/free_checkout.php nella corrispondente cartella italiana.

Yii in ambienti promiscui

Si possono usare prefissi alle tabelle per far convivere più sottoschemi all’interno di un solo schema. Buono per ambienti promiscui.

Perché le classi omettano tale prefisso nel loro nome (quindi, a partire dalla tabella tbl_user, generare la classe User e non TblUser) editare il file protected/config/main.php e aggiungere la riga

 tablePrefix' => 'tbl_',

nel descrittore del connettore a database:

 db'=>array(
       'class'=>'CDbConnection',
       'connectionString' => 'mysql:host=localhost;dbname=mydb',
       'tablePrefix' => 'tbl_', <-------------
       'emulatePrepare' => true,
       'username' => 'user',
       'password' => 'pass',
       'charset' => 'utf8',
 ),

 

Bosone di Higgs, particella di Dio

Una delle più ricercate particelle nel nostro campo, il bosone di Higgs, sì sta rivelando difficile da catturare.
Potrebbe essere che non esiste neppure.
Tutto quello che i fisici sanno è che qualcosa è richiesto dalla nuova teoria. Potrebbe essere il bosone di Higgs: che sarebbe la soluzione più semplice, o abbiamo bisogno di escludere la sua esistenza e passare ad esplorare la prossima serie di possibilità.
L’intero articolo qui http://ow.ly/7FC3f.

Installazione di Mirth Connect

Prerequisito: installazione della JVM

L’installazione non partirà nemmeno se l’installer non avvertirà la presenza di Sun JDK. Ho provato anche con OpenJDK, ma non c’è verso.

Prerequisito: installazione del driver JDBC Oracle

Scaricare un driver jdbc che si vuole dal sito dell’Oracle. Io ad esempio ho scaricato l’Oracle Thin Client per Oracle 10.2 e all’interno c’era già il file ojdbc14.jar.

Nella mia installazione il file con la libreria Java jdbc l’ho messo in

 /opt/oracle/instantclient_10_2

dove si trovano anche i tnsnames; questo percorso va inserito nella variabile di ambiente CLASSPATH:

  $ CLASSPATH=/opt/oracle/instantclient_10_2

Nota bene

Il client Oracle serve affinché i servizi possano interagire con un DB relazionale.

Anche Mirth stesso scrive le sue configurazioni in un database, e si può configurare una serie di db relazionali molto usati: MySQL, PostGRES, Oracle affiché esso salvi tutti i parametri per il suo funzionamento.

Mirth “out-of-the-box” utilizza un Db con poche pretese, giusto per valutare il prodotto: Apache Derby.

Altre informazioni

Ulteriori informazioni su Mirthconnect sono disponibili nel mio Wiki.

Come faccio a testare se Java funziona sul mio computer?

How do I test whether Java is working on my computer?

Ci sono diversi modi, uno semplice e simpatico è questo: http://ow.ly/7xGyF

 

i18n & l10n

Cosa significano queste sigle?

  • internationalization → i[ altre 18 lettere ]n → i18n
  • localization → l[altre 10 lettere]n → l10n

Fine della magia.

Stando al sito del Consorzio Web la localizzazione è la declinazione di un prodotto nella lingua (ma anche negli usi e costumi) di una particolare comunità (Italia, Catalogna, USA etc); l’internazionalizzazione è la integrazione di un software con un componente che permetta al prodotto di essere facilmente localizzato.

Misurare il software

Come si fa a misurare un progetto software? In chilogrammi? in metri cubi? Esiste una specifica unità di misura e un algoritmo per il calcolo. E anche un esempio su un progetto di Cloud Computing.

  • COCOMO: Constructive Cost Model è un modello matematico per la stima dei costi di realizzazione di una applicazione software, espressi in termini di tempo di consegna o di mesi-uomo per la loro realizzazione [Wikipedia]. Il CoCoMo può essere calcolato secondo tre gradi di raffinatezza crescente (Basic, Intermediate, Detailed) e viene espresso in KNCSS.
  • KNCSS: Kilo Non Commenting Source Statements, sono 103 linee di codice esclusi i commenti: è un’unità di misura della grandezza di un programma: conto le istruzioni (un’istruzione distribuita su più righe la conto una volta soltanto) escludendo i commenti [Wikipedia].

Come esempio: il Basic COCOMO è stato utilizzato per misurare la stazza del progetto OpenNebula, che è di circa 170 KNCSS e la stima in dollari è pari a $ 2,392,496 [Fonte: ohlho]. OpenNebula è un progetto Open Source di piattaforma per il  Cloud Computing.

hg Mercurial: sistema di versionamento ad alte prestazioni

Mercurial Logo Fantastico! Provengo da CVS (Concurrent Versioning System) e ho trovato questo sistema di versionamento, per dirla coi matematici, un meraviglioso prolungamento analitico di CVS: l’interfaccia testuale è molto simile (gli usuali comandi di init, add, commit, log, eccetera).

sito: http://hgbook.red-bean.com/ , oppure qui per un bellissimo ground-up tutorial).

hg è un sistema di versionamento multi repository che permette di lavorare su più ambienti che possono fondersi con una operazione di merge in un repository centrale.

Cos’è un sistema di versionamento concorrente? E’ uno strumento software che permette di gestire senza errori la produzione di documenti (tipicamente codice di programmazione, ma non esclusivamente) scritti a molte mani, tipica situazione per gruppi che sviluppano uno stesso progetto software e nel quale ogni programmatore può intervenire sul lavoro di altri (ad esempio: correggere un bug, aggiungere una funzionalità, eccetera). Come fare in modo che le modifiche di ognuno non sovrascrivano quelle degli altri? Si usa un sistema di versionamento.

Cosi Marco può rilasciare una versione 0.1, Alessio può accorgersi ci un bug e correggerlo, rilasciando una versione 0.2, e quando Marco torna a lavorare sullo stesso file, ripartirà dalla versione senza bug, per produrre la sua versione 0.3 e così via; si può anche lavorare contemporaneamente sullo stesso file e il sistema di versionamento deve avvertire i concorrenti in casi di conflitti e deve segnare tutte le modifiche secondo uno storico che possa anche permettere di ripartire da un punto precedente che era noto funzionare. Questo sistema consente anche di effettuare i cosiddetti fork, ovvero delle derivazioni in cui il software iniziale prende una strada indipendente ad esempio perché la versione che si va a sviluppare è verticale per una determinata architettura hardware, pure essendo lo stesso software.

Yii framework: sviluppo rapido secondo il pattern MVC e PHP 5

Yii è un framework PHP opensource per lo sviluppo di applicazioni Web 2.0.

Tra le features che lo rendono il framework di punta: adozione del pattern MVC, DAO/ActiveRecord, I18N/L10N, caching, autenticazione a controllo accesso role-based, scaffolding, testing, ecc.

In linea di principio lo sviluppo è rapido attraverso questi semplici passi:

  1. tu crei il database;
  2. Yii genera il codice PHP di base;
  3. tu personalizzi il codice per soddisfare le tue specifiche necesssità.

Il pattern MVC (ho già scritto di questo qualche tempo fa) permette di separare dati/business (M) da logica di controllo (C) e dalla presentazione (V).

Coorperazione applicativa con Mirth, puntata 1

Dopo aver fatto un po’ di training sono in grado di spiegare un po’ meglio cos’è e come funziona Mirth.

Mirth è un software che assomiglia molto ad un PLC: elaboro una serie di input (sorgenti) e produco una molteplicità di output (destinazioni) in modo sincrono con la frequenza di scansione del programma. Ovvero ad ogni colpo di clock faccio una istantanea degli ingressi ed elaboro i valori delle uscite; se nel corso della scansione i valori cambiano non me ne curo.

Entrambi sorgenti e destinazioni possono essere webservice, database, file di testo… varie combinazioni:

  • leggo da un database, scrivo su un webservice
  • leggo da un webservice, scrivo su un servizio HL7
  • leggo da un servizio HTTP, scrivo su database e su file di testo…

Al pari della frequenza di scansione degli ingressi dei PLC, anche Mirth ha una frequenza di polling che però può essere impostata in modo indipendente da sorgente a sorgente.

Un’applicazione Mirth si compone di canali che sono processi che leggono da un insieme di sorgenti, eseguono una serie di operazioni (trasformazioni e filtri) e producono degli output su una o più destinazioni.

Esempio: scrivo in una istanza di Oracle, in un certo host, la temperatura registrata da un webservice ipotetico messo a disposizione da www.ilmeteo.it. In questo caso, definisco un nuovo canale che chiamerò “Temperature giornaliera delle ore 13” (nella scheda Summary) definendo una frequanza di polling in millisecondi, poi nella scheda Source definisco il tipo di connettore (in questo caso SOAP o HTTP Listener), scrivendo ad esempio l’indirizzo, il metodo di trasmissione GET/POST eccetera; infine, nella scheda Destinations definirò un connettore Oracle 10g Release 2, scriverò un template di SQL che verrà valorizzato con le variabili di canale (analogamente al PLC, è possibile definire delle variabili interne con uno scope variabile, da utilizzare a livello di canale, di singolo connettore o di tutta l’applicazione – globale).

Da un punto di vista generale è così che Mirth funziona.