Category Archives: Linguaggi

Problema Horde con PHP 5.3

Pubblicato da

Problema Horde con PHP 5.3

L’aggiornamento a PHP 5.3 ha portato svariate noie con le vecchie applicazioni.
Tra queste il servizio per server di webmail Horde dà qualche disfunzione se non, addirittura, smette proprio di funzionare!
Dopo qualche ora di ricerca ho trovato questa brillante soluzione nel caso in cui, dopo il login, ci si ritrova in una pagina bianca

in
/usr/share/psa-horde/imp/lib/IMAP/Client.php line 576
modifica  
function namespace($additional = array())
con 
function plnamespace($additional = array())

in
/usr/share/psa-horde/imp/lib/Session.php line 295
modifica  
$_SESSION['imp']['namespace'] = $imapclient->namespace($user_namespace);
con 
$_SESSION['imp']['namespace'] = $imapclient->plnamespace($user_namespace);

Link: howto’s

Aggiornare PHP su CentOS

Pubblicato da

Aggiornare PHP su CentOS

Aggiornare PHP su CentOS

L’aggiornamento di WordPress alla versione 3.2.1 richiedeva un upgrade di PHP alla versione 5.2.4 o superiore del mio server con CentOS.
Così ho proceduto (dopo un adeguato backup dell’intero sistema) installando yum e aggiornando partendo dalle dipendenze (MySQL).

Installo yum

wget  http://www.atomicorp.com/installers/atomic.sh
sh atomic.sh

Aggiorno MySQL

yum update mysql
mv /etc/my.cnf.rpmnew /etc/my.cnf
service mysqld restart

Dopo questa operazione anche PHP è aggiornato alla versione più recente.
Tuttavia il servizio mysqld non ne voleva sapere di riavviarsi.
Dopo aver googlato un po’ ho capito che la dipendenza bdb non è più necessaria in /etc/my.cnf (il file di configurazione).
Per cui ho commentato la riga di comando che lo riguardava.


[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

#skip-bdb

set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2
[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-bdb


set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2

..ed ho potuto riavviare normalmente il demone MySQL.

Link: CentOS PHP MySQL

 

Interfacce utenti semplici ed efficaci con jQuery EasyUI

Pubblicato da

Interfacce utenti semplici ed efficaci con jQuery EasyUI

jQuery EasyUI è una collezione di plugin per jQuery che aiuta a creare interfacce utente in maniera semplice e con pochissimo codice.
Ogni componente di EasyUI ha proprietà, metodi ed eventi. Lo sviluppatore può estendere qualsiasi parte del pacchetto semplicemente.
L’intero progetto è ben documentato e dispone di moltissimi tutorial per trasformare “semplice” HTML in avanzate interfacce.
Una vera manna per chi vuole utilizzare jQuery senza perdersi troppo nello sterminato materiale a disposizione.

Link: jQuery EasyUI

E-commerce: Google Shopping e osCommerce

Pubblicato da

E-commerce: Google Shopping e osCommerce

E’ da inizio mese che Google Shopping ha fatto il suo ingresso anche in Italia.
Utilizzando il motorone di Mountain View sarà possibile navigare e cercare tra i prodotti di proprio interesse, pubblicati dai vari merchant.
Una grande e scomoda concorrenza per tutti quei portali che offrono servizi di comparazione prezzi.
Ecco alcuni link utili per approfondire:

Inviare l’elenco dei prodotti presenti nel proprio e-commerce non è difficile, basta estrarre tutti i record e seguire alcune linee guida.

Un mio cliente che aveva una versione vecchia ma personalizzata di osCommerce desiderava essere presente in Google Shopping.
Ci sono alcuni plugin che permettono di interfacciarsi con Google Shopping ma li ho trovati macchinosi e, spesso, difficili da configurare.
Ho scelto, così, come metodo di invio dei dati, la pubblicazione del datafeed sotto forma di file di testo scritto da uno script PHP.

Nota bene che c’è un set di dati obbligatori da estrarre dal db e inserire nel datafeed (vedi qui) e altri che sono consigliati.
AGGIORNAMENTO: Il valore MPN è diventato praticamente obbligatorio

Lo condivido sperando che possa essere utile a qualcun altro.

<?php
// connessione
$dbhost = ‘tuohost’;
$dbuser = ‘tuouser’;
$dbpass = ‘tuapass’;

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die (‘Error connecting to mysql’);

$dbname = ‘nometuodb’;
mysql_select_db($dbname);

$query = ”
select p.products_id,
pd.products_name,
pd.products_description,
manufacturers.manufacturers_name as mfgName,
manufacturers.manufacturers_id,
p.products_price,
p.products_image,
p.products_weight,
p.products_quantity
from products p
left join products_description pd on p.products_id = pd.products_id
left join manufacturers on manufacturers.manufacturers_id = p.manufacturers_id
where p.products_status = ‘1’ and p.products_quantity > ‘0’ order by p.products_id”;

// nome del file txt. Il nome può essere uno qualsiasi
$datafile=”miodominio-googlebase.txt”;

// lancio la query
$products_query = mysql_query($query);

// apro il file per scriverci
$file = fopen($datafile, “w”);

// scrivo le intestazioni dei dati che voglio inviare.
// Il separatore predefinito che ho scelto è il tab
$file_header = “id\tcondizione\tlink\ttitolo\tmarca\tdescrizione\tprezzo\tpeso spedizione\tlink_immagine\tquantit&agrave;\tmpn\n”;
fwrite($file, $file_header);

// ciclo attraverso i risultati per scrivere il datafeed
while ($products = mysql_fetch_array($products_query)) {

// i maggiori problemi sono dati dai caratteri della descrizione del prodotto
// la “pulizia” avviene in due passaggi
$descr_clean = preg_replace(“/^[^a-z0-9]?(.*?)[^a-z0-9]?$/i”, “$1”, strip_tags($products[‘products_description’]));

$_strip_search = array(
“![\t ]+$|^[\t ]+!m”, // rimuove spazi avanti e dietro che possono essere confusi con i tab
‘%[\r\n]+%m’); // rimuove a capo
$_strip_replace = array(
”,
‘ ‘);
$_cleaner_array = array(“>” => “> “, “&reg;” => “”, “®” => “”, “&trade;” => “”, “™” => “”, “\t” => “”, ”    ” => “”); //rimuove caratteri speciali

$descr_clean = preg_replace($_strip_search, $_strip_replace, strip_tags(strtr($products[‘products_description’], $_cleaner_array)));

// cerco se esiste l’immagine del prodotto altrimenti metto il no_image.png (questo file può variare da installazione a installazione di osCommerce)
if(!file_exists(“images/”.$products[‘products_image’])) {
$image = “http://www.miodominio.com/images/no_image.png”;
} else {
$image = “http://www.miodominio.com/images/”.$products[‘products_image’];
}

$price = number_format($products[‘products_price’], 2, ‘.’, ”); //formattazione euro

$prod_line = $products[‘products_id’].”\tnuovo\thttp://www.miodominio.com/product_info.php?products_id=”.$products[‘products_id’].”\t”.$products[‘products_name’].”\t”.$products[‘mfgName’].”\t”.substr($descr_clean, “0”, “400”).”\t”.$price.”\t”.$products[‘products_weight’].”\t”.$image.”\t”.$products[‘products_quantity’].”\t”.$products[‘products_id’].”\n”;

$line_to_write = htmlentities($prod_line);

fwrite($file, $line_to_write);
}

fclose($file);
?>

Lanciando questo script che io ho chiamato datafeedgoogle.php si crea un file di testo (miodominio-googlebase.txt) che poi deve essere segnalato nel pannello merchant di Google.
Ovviamente si può settare un cron job sul server in modo che ogni sera venga lanciato lo script per la creazione del file txt.
In questo modo, nello stesso pannello di configurazione del merchant, potremo segnalare che l’aggiornamento dei prodotti avviene giornalmente.

Link: Google Shopping

Scarica il file dell’esempio

Google Shopping
Google Merchant Center
la guida al Google Merchant Center
il blog di Google Merchant Center center
il punto di partenza per

Validazione form: il modo semplice e veloce

Pubblicato da

Validazione form: il modo semplice e veloce

Chi sviluppa per il web sa che la validazione dei dati inseriti in un form è un passaggio obbligato per la sicurezza dell’applicazione che lo ospita e per la validità degli stessi.
Il metodo più utilizzato è quello che fa uso di script javascript.
Ve ne propongo uno molto semplice e veloce da implementare in qualsiasi form esistente.

  1. innanzitutto si scarica questo script da Javascript-Coder
  2. si inserisce questa istruzione tra i tag <HEAD> della pagina

    <script src="gen_validatorv4.js" type="text/javascript"></script>

  3. si aggiunge poi il codice javascript che richiama la funzione di controllo e validazione subito dopo il form

    <form id='mioform' action="">
    <!--qui vanno i campi input -->
    </form>
    <script type="text/javascript">
    var frmvalidator  = new Validator("mioform");
    //dove mioform è l'id/nome del form

  4. poi si aggiungono tutte le validazioni richieste per il form come ad esempio

    frmvalidator.addValidation("Nome","req","Inserisci il tuo nome");
    oppure
    frmvalidator.addValidation("Email","req");
    frmvalidator.addValidation("Email","email");

  5. qui c’è una lista completa delle validazioni possibili

La funzione permette di controllare l’input in maniera molto completa. Anche tramite l’uso delle espressioni regolari.
I messaggi di errore e di dialogo possono essere visualizzati sia nella maniera classica tramite finestrine javascript che attraverso l’utilizzo di DIV all’interno della pagina stessa.
Oppure ancora i messaggi possono essere visualizzati vicino i campi di input stessi. Si legga qui per la spiegazione estesa di questa modalità avanzata.

[da Javascript-Coder]

MySQL: contare le occorrenze tra i valori di un campo

Pubblicato da

Talvolta si fa un uso eccessivo di PHP anche quando basterebbero gli strumenti messi a disposizione dal linguaggio SQL.
Un esempio è quando si vogliono contare le occorrenze di un determinato valore all’interno delle diverse righe di un campo.
Con PHP siamo abituati a creare un contatore ed a stampare la variabile ma possiamo fare tutto con SQL.
Riprendo l’esempio che ho trovato sul web

person vote
obama yes
mccain no
obama yes
obama no
mccain yes
obama yes
obama yes
obama no
mccain no

Il codice SQL che compie il lavoro è

SELECT person,
SUM(IF(vote = "yes", 1,0)) AS `yes_votes`,
SUM(IF(vote = "no", 1,0)) AS `no_votes`,
COUNT(vote) AS `total`
FROM votes
GROUP BY person
ORDER BY yes_votes DESC

Il risultato è

person yes_votes no_votes total
obama 4 2 6
mccain 1 2 3

La parte comoda del codice SQL risiede in quel ..SUM(IF.. che ci evita di creare un loop in PHP a valle della query per il conteggio.

via Random Snippets

bMap, un plugin jQuery per un uso semplificato ed esteso delle mappe di Google

Pubblicato da

bMap, un plugin jQuery per un uso semplificato ed esteso delle mappe di Google

Se utilizzate la libreria jQuery e volete inserire le mappe di Google nel vostro sito web, il plugin bMap è quello che fa per voi.
Aggiungendo questo plugin sarà possibile:

  • inserire mappe semplici
  • aggiungere al volo marcatori
  • aggiungere marcatori, polilinee, poligoni
  • aggiungere una sidebar che illustri ed elenchi i marcatori
  • aggiungere markers da un’altra pagina con AJAX
  • utilizzare funzionalità avanzate AJAX per agire su markers e layer della mappa
  • aggiungere set di icone personalizzate (anche al volo)
  • cambiare la gif per il loading
  • cambiare la finestrella informativa di un marcatore con qualsiasi altra window
  • sovrapporre immagini

Link: bMap

Implementazione Javascript dei pre-processori CSS

Pubblicato da

Implementazione Javascript dei pre-processori CSS

I pre-processori CSS sono strumenti che estendono le potenzialità dei CSS. Due tra i più utilizzati sono LESS e SASS.
Queste librerie permettono di aggiungere variabili e classi, effettuare operazioni e nidificare i CSS.
Sia LESS che SASS devono però essere installate sul server per poter essere utilizzate.
Inizialmente LESS e SASS erano stati sviluppati come gem Ruby ma attualmente esistono dei porting per PHP.NET.

Per chi volesse cimentarsi nei pre-processori CSS ma non vuole chiamare in causa Ruby, PHP o .NET, è stata realizzata una libreria .js che sostituisce le installazioni.
Secondo lo sviluppatore, questa libreria permette di essere fino a 40 volte più veloce (anche nei browser non di ultima generazione).
L’unica accortezza è quella di inserire il file LESS prima dell’inclusione alla libreria javascript

<link rel="stylesheet/less" href="/stylesheets/main.less" type="text/css" />
<script src="http://lesscss.googlecode.com/files/less-1.0.21.min.js"></script>

Lo sviluppo è ancora agli inizi ma promette bene. Tutto nell’ottica di un utilizzo più semplice di questo strumento di estensione delle capacità dei “vecchi” CSS

Link: Less.js

SQLike, un piccolo query engine

Pubblicato da

SQLike, un piccolo query engine

Talvolta può sorgere la necessità di compiere operazioni di tipo SQL come GROUP, SUM, SELECT DISTINCT ecc. su array di dati che sono il risultato di una query contro un db.
Voi direte: “ma io queste operazioni le posso fare già nella query contro il db”. Ed è vero ma immaginate di fare un’unica operazione di SELECT contro il database, magari estraendo tutto quello che c’è (parliamo di al massimo qualche migliaio di record per una decina di colonne) e poi di operare su questo array di array o array di oggetti.
Avremmo una sola operazione in cui è chiamato in causa il db (la SELECT), mentre tutte le  altre operazioni potrebbero essere svolte lato client da …qualcosa.

Quel qualcosa è una libreria javascript che si chiama SQLike.
Lo scopo della libreria (o motore o funzione q) è quello di utilizzare una sintassi simile a SQL per operare sui risultati della query.
Questa “query della query” viene poi presentata in una comoda forma tabellare.
A seconda del javascript engine che si utilizza (e quindi del browser) si hanno risultati sorprendenti.
SQLike è scritto in ActionScript2, ActionScript3 e Javascript.

Link: SQLikedemo