mar
09

Nella pagina relativa alla raccolta di patch per Kurzweil PC3 sono disponibili quattro nuove patch, che riassumo molto molto brevemente riportando una breve demo:

 

LeadER 1 (Lead)

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

 

Saw Synth POLY (Synth)

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

 

Ultra Saw Lead (Lead)

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

 

Xilopad (Pad)

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

 

Sono liberamente scaricabili dalla pagina delle patch!! :-D

mar
09

Passando per un negozio di musica, in una delle frequenti visite che faccio per sognare e sbavare di fronte alle meraviglie tecnologiche, mi sono imbattuto in un pedale di sustain come quello in foto:

 

 

Mi è subito venuto in mente un discorso che facevo tempo fa:
deve essere comodo cambiare suoni con il pedale, durante i concerti…

Allora, ormai sicuro che la PC3, seppur Light, può fare praticamente di tutto, ho deciso di comprarlo per la modica cifra di 7,80 € progettando di usarlo come pedale esclusivamente per il cambio delle patch dal vivo.
Inoltre, ho pensato, in ogni caso potrebbe essere utilizzato come pedale sustain di riserva.

Una volta tornato a casa ed aperto la confezione, dentro alla quale si trovano anche altre due cover intercambiabili – anche l’occhio vuole la sua parte :D – mi sono subito informato su come fosse possibile usare un comunissimo pedale sustain per pilotare una workstation e cambiare i suoni a mio piacimento.
Ho scoperto che l’unica opzione davvero efficace e compatibile sulla Kurzweil sia quella di assegnare a quel particolare pedale una specifica funzione, ovvero il DataInc.

Che cos’è il DataInc

Il DataInc non è altro che il comando di avanzamento di un passo nella determinata sezione. Per essere più chiari, corrisponde alla pressione del tasto + oppure ad uno “scatto” in avanti della manopola “DataWheel”.
Ad esempio, se siamo in modalità Program, quindi singolo programma, mandando il comando “DataInc” ci sposteremo al suono successivo.  In modalità di modifica, se con il cursore stiamo accordando il PITCH di un campione, dando il comando di “DataInc” il valore si sposterà da 0 a +1 ct (un centesimo di semitono).
Quindi, in ogni sezione della tastiera, il comando di DataInc funzionerà esattamente come la pressione del tasto “+” o la rotazione di uno scatto della manopola “DataWheel” in avanti.

Il pedale SW2 e la PC3LE

Le tastiere della serie LE (Light Edition) dispongono di 3 pedali (di cui uno a controllo continuo), così programmati:

  • SW1 – Pedale “sustain” (mantiene la nota)
  • SW2 – Pedale “sostenuto” (manda le note in risonanza)
  • CC1 – Pedale d’espressione (permette di variare in tempo reale il volume)

Le altre tastiere, della serie PC3X e della serie PC3K hanno altri connettori jack da usare per i controlli, ma per il momento vediamo di progettare tutto per usare i primi due ingressi, per associare due pedali: uno di sostegno (SW1) e uno per il DataInc (SW2). Al terzo ingresso (CC1) possiamo collegare il pedale d’espressione, che approfondirò in un altro articolo.

Programmi, configurazioni, e vocine che girano nella testa

Nella modalità Setup (accessibile spingendo l’ononimo tasto) consente di assegnare a ciascun controller una specifica funzione. Ad esempio, potremmo fare in modo che la levetta del pitchbend non svolga la funzione di variare l’intonazione della nota, ma che modifichi il volume del suono (sempio stupido puramente indicativo).

Tra i controlli programmabili c’è anche il pedale n.2 che possiamo tranquillamente utilizzare come pedale per il DataInc.
E invece come fare per programmare il pedale in modo che svolga la funzione DataInc in modalità Program e Q Access?

Nella modalità Setup è presente un particolare setup che contiene al suo interno tutte le programmazioni dei vari controlli in modalità Program e si chiama Internal Voices (#126).
In altre parole, facendo un esempio: se quando si spinge il pedale di sostegno (collegato alla porta SW1) la nota rimane sospesa è perché l’ingresso SW1 è programmato nel setup Internal Voices.
Quindi, proseguendo nel ragionamento, modificando qualcosa all’interno del setup “Internal Voices” esso andrà ad influenzare tutti i programmi della modalità Program e Q Access.

Perfetto! Quindi non ci resta che programmare correttamente il pedale n.2 per far si che esso funzioni perfettamente (e ci faccia risparmiare acrobazie inutili durante i live :D )

Preparazione

Per prima cosa occorre procurarsi un comunissimo pedale di sostegno dotato di connettore jack. Io ho optato per il GF29 della Proel (quello nella foto in alto), acquistabile in negozio per meno di 10 euro: lo trovo semplicemente perfetto in quanto è diverso dai classici pedali (rendendolo ben distinguibile dal vero pedale di sostegno), si ancora bene al pavimento grazie alla superficie gommata e ha addirittura altre due cover intercambiabili nella confezione.

Adesso colleghiamo il pedale alla porta SW2 della Kurzweil (o a qualunque altra porta jack che non sia CC).

Programmazione del pedale

Entriamo nella modalità Setup e selezioniamo con la manopola il setup Internal Voices (n.ID 126). In alternativa è possibile digitare il numero dell’ID (126) sul tastierino numerico  e premere Enter.

 

 

A questo punto premiamo il pulsante Edit (posto sotto ai pulsanti Chan/Zone su e giù) per entrare nella finestra di modifica del setup.

 

 

Adesso premiamo il softbutton CTRLS (controllers) per entrare nella pagina dei controlli.
Da questa pagina è possibile modificare qualunque controller. Vi invito, comunque a non modificare questi dati se non si è assolutamente sicuri. La procedura qui descritta, relativa al pedale DataInc, è stata testata, quindi ci si può fidare. :-D

 

 

Adesso, se non si è toccato nient’altro sarà evidenziato il termine “ModWheel”. Il campo evidenziato si riconosce in quanto presenta lo sfondo bianco e il testo azzurro.
Teniamo premuto il pulsante Enter e spingiamo e poi lasciamo il nuovo pedale di sostegno appena comprato (quello collegato alla porta SW2), fino a che la scritta “ModWheel” faccia posto a “SW Pedal 2“.

NOTA: E’ possibile che mentre il pedale è premuto compaia la scritta “CC Pedal 1″. In questo caso non c’è nessun problema: vale la scritta visualizzata quando viene rilasciato il pedale.

A questo punto ci portiamo nel campo OnControl, che gestisce la funzione da assegnare quando il pulsante viene premuto e, con la manopola DataWheel oppure con i pulsanti + e – scorriamo tutte le varie funzioni finché non arriva il tanto atteso DataInc.

Ora portiamoci nel campo OffControl, che gestisce la funzione da assegnare quando il pulsante viene rilasciato.
Digitiamo nel tastierino numerico il tasto 0 e poi premiamo Enter per disattivare la funzione (non serve una funzione quando il pedale viene rilasciato, ma, essendo un impulso, serve solamente quando il pulsante viene premuto).

 

 

Una volta controllato che la pagina aperta in questo momento corrisponda con l’immagine posta qui sopra, premiamo il pulsante Save posto subito a destra del display.
Verrà chiesto dove salvare il setup. Di default viene proposto l’ID della prima posizione di memoria libera. Facendo così, però, non si noterà alcun effetto perché il setup di riferimento per la modalità program è appunto quello con ID 126.
Occorre quindi sovrascrivere il setup: premiamo contemporaneamente i tasti + e - per far apparire nel campo evidenziato di nuovo il numero 126. A questo punto, se appare la scritta “Replace Internal Voices“, premiamo di nuovo il pulsante Save per confermare e premiamo Exit finché non usciamo dalla modalità setup.

Fine

Ora andiamo nella modalità Program e… il gioco è fatto! Premendo il pedale appena programmato passeremo al programma immediatamente successivo, potendo continuare a suonare nel frattempo!
Il bello di questa funzione è che funziona anche nella modalità Q Access, permettendo così una comodità incredibile (nella modalità Q Access è possibile memorizzare sia programmi sia setups, non dimentichiamocelo).

feb
26

Ebbene, scrivo questo articolo per preannunciare qualcosa di grandioso per tutti i possessori di Kurzweil serie PC3 (PC3, PC3LE, PC3K).

Intanto, sono in arrivo sei nuove patch da importare ed utilizzare gratuitamente, tra cui due leads e alcuni synth.
Questi ultimi suoni, a differenza di quelli già presenti nella sezione patch pc3 di questo sito, sono più elaborati e più precisi nella sintesi, sfruttando anche le funzioni (FUN della programmazione V.A.S.T.), in modo da permettere, per esempio, di modulare il suono di un lead sia agendo sulla ModWheel che agendo sull’Aftertouch.

Come seconda cosa, volevo avvisare del lancio di un progetto che probabilmente non sarà facile, ma mi cimento lo stesso nell’impresa. Realizzerò una guida completa sulla programmazione V.A.S.T., cercando di spiegare ogni funzione più remota di questo fantastico mondo, inserendo degli esempi audio e scrivendo le indicazioni su come realizzarli.
Ancora da definire se fare videoguide oppure tutorial scritti, con immagini e grafici di esempio.

Varrà la pena aspettare ancora un po’… Ne sono sicuro. :D

feb
21

Torniamo a parlare di sviluppo web. Come ormai avrete capito, non ho frequentato alcuna scuola di informatica o corsi vari, ma ho imparato per conto mio, utilizzando come risorsa l’illimitato mondo di Internet.

E sì, perché in questi ultimi anni si è ingrandito sempre di più, offrendo sempre più risorse e notizie gratuitamente a chi, come me, ha intenzione di imparare i più svariati argomenti senza acquistare un solo libro.
Infatti, grazie ai siti più importanti, che contengono guide ed esempi (tra i quali i fantastici html.it e w3schools), ma anche siti più piccoli, forum e discussioni varie, tra principianti e professionisti del settore.

Grazie a questo chiunque può ottenere qualunque informazione e diventare un abile webmaster.

Ok, dopo questo piccolo tributo alla saggezza del Word Wide Web passiamo a noi.

Quello che voglio proporre oggi è un modo (uno dei tanti) per creare dei pulsanti da utilizzare nel proprio sito, sfruttando l’interazione tra HTML e CSS.

Risultato finale

Solitamente prima si scrive il procedimento e poi si rappresenta il risultato che si otterrà alla fine, però, dato che al giorno d’oggi tutti hanno fretta (me compreso, purtroppo…), propongo subito quello che sarete in grado di fare, una volta terminata la lettura di questo articolo.

 

Che ve ne pare? A me sembrano dei pulsanti davvero professionali.
E’ possibile utilizzare anche delle icone, per far comprende ancora meglio, al visitatore, l’azione associata al pulsante.

Il suo utilizzo finale, nella pagina HTML, sarà il seguente:

<!-- Pulsante con immagine -->
<div class="button">
    <div class="OK">OK</div>
</div>

<!-- Pulsante senza immagine -->
<div class="button">
    <div>Annulla</div>
</div>

Come si può notare dall’esempio riportato poco fa, il pulsante è un contenitore, dentro al quale è possibile metterci qualunque cosa. Aggiungendo al <DIV> interno l’attributo class=”" sarà possibile indicare alla pagina HTML quale icona associare al pulsante, rendendo tutto molto più semplice in fase di creazione e stesura della pagina.

Cominciamo

Occorrono tre immagini che utilizzeremo come sfondo per i nostri pulsanti nelle tre fasi, ovvero:

  • Stato normale
  • Stato “puntato” (quando il cursore del mouse si posiziona sopra di esso)
  • Stato “premuto” (quando si clicca sul pulsante)

Devono essere immagini che abbiano una altezza di 25 pixel, mentre la larghezza non è importante (basta anche 1 pixel, perché poi l’immagine verrà ripetuta orizzontalmente per ricoprire tutto il pulsante).
Volendo è possibile utilizzare le immagini che ho usato per realizzare la demo:

Stato normale

Stato "puntato"

Stato "premuto"

Per realizzare l’immagine di sfondo per lo stato “puntato” ho sovrapposto all’immagine di sfondo normale un layer bianco opacizzato al 50%, per dare un effetto di riflesso.
Invece, per realizzare l’immagine di sfondo per lo stato “premuto” ho semplicemente invertito l’immagine dello stato normale.. un sistema un po’ banale, ma sempre efficace!

Se si vogliono realizzare dei pulsanti con immagine è possibile scaricare delle icone in formato 16 x 16 pixel. Suggerisco, per questo scopo, il sito FindIcons.com.

A questo punto cominciamo a scrivere le regole del foglio di stile CSS.

.preload
{
    display: none;
}

/* Classe per lo stato normale del pulsante */
.button
{
        display: inline-block;
        background: url("btnNormal.png") repeat-x;
        height: 25px;
        min-width: 50px;
        border: 1px solid grey;
        text-align: center;
        cursor: pointer;
        font-family: sans-serif;
        font-size: 14px;
        /* Disabilito la selezione del testo */
        -moz-user-select: none;
        -khtml-user-select: none;
        -webkit-user-select: none;
        -o-user-select: none;
    }

/* Classe per lo stato "puntato" del pulsante */
.button:hover
{
    background: url("btnHover.png");
}

/* Classe per lo stato "premuto" del pulsante */
.button:active
{
    background: url("btnPressed.png");
}
        .button > div
        {
            height: 100%;
            padding-top: 6px;
            padding-left: 10px;
            padding-right: 10px;
            width: auto;
        }

 

Le ultime quattro linee, nella definizione della classe “button”, servono per impedire all’utente di selezionare il testo del pulsante.
Logicamente dobbiamo sostituire gli url delle voci “background” con i percorsi esatti delle immagini di sfondo. Nell’esempio, siccome le mie immagini si trovano nella stessa cartella dello foglio di stile o della pagina html, ho scritto solo il nome del file con l’estensione.

A questo punto, se vogliamo, possiamo creare delle classi aggiuntive per usare i pulsanti con l’icona che vogliamo.
Seguono, quindi, le regole CSS delle classi utilizzate nell’esempio di sopra (“Yes”, “No”, “Warning”).

/* Pulsante OK */
.button > div.OK
{
    padding-left: 30px;
    background: url("btnIconOK.png") 5px 4px no-repeat;
}

/* Pulsante NO/Errore */
.button > div.No,
.button > div.Error
{
    padding-left: 30px;
    background: url("btnIconNo.png") 5px 4px no-repeat;
}

/* Pulsante Attenzione! */
.button > div.Warning
{
    padding-left: 30px;
    background: url("btnIconWarning.png") 5px 4px no-repeat;
}

 

In questo modo, possiamo aggiungere tutte le classi che vogliamo, ricordandoci di associare l’icona giusta (che, lo voglio ricordare, deve essere di dimensione 16 x 16 pixel per non generare errori grafici).

Pre-caricamento delle immagini

Potrebbe capitare che la prima volta che si porta il mouse sul pulsante, si crei un piccolo disguido grafico prima che compaia la giusta immagine (“btnHover.png”). Questo accade perché il browser carica l’immagine nel momento esatto in cui essa viene chiamata dalla pagina. Quindi, quando si porta il mouse sul pulsante, la pagina chiede al browser di visualizzare l’immagine “btnHover.png”, quindi, se non è già stata caricata, lo fa in quel momento.

Per quanto possa essere veloce il server e per quanto l’immagine possa essere piccola e facile da caricare, ci sarà sempre quell’effetto dovuto al caricamento dell’immagine, estremamente fastidioso.

Per evitare questo è sufficiente inserire in cima alla pagina (diciamo subito dopo il tag <BODY>) queste linee:

<div class="preload">
    <img src="btnNormal.png">
    <img src="btnHover.png">
    <img src="btnPressed.png">
</div>

 

Così facendo il browser sarà obbligato a caricare le tre immagini di stato del pulsante prima della visualizzazione dei pulsanti in modo tale che successivamente, passandoci sopra col mouse, non avverrà alcuno “stacco” perché l’immagine è già stata caricata precedentemente.

Inoltre, le tre immagini non verranno mostrate in quanto la classe “.preload” è stata impostata nel foglio di stile come nascosta.

Utilizzo

Una volta scritte le regole CSS che ho riportato sopra, per inserire il nostro pulsante di “errore” nella pagina HTML non dobbiamo fare altro che scrivere questo codice:

<div class="button">
    <div class="Error">Elimina</div>
</div>

 

Dopodiché possiamo associare le azioni a javascript, o ancora meglio a jQuery.

<div class="button" id="btnDelete" onclick="alert('Articolo eliminato')">
    <div class="Error">Elimina</div>
</div>

 

Codice di esempio

Ecco il codice completo della demo:

Pagina index.html

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
        <title>CSS Buttons Example</title>
        <script src="http://code.jquery.com/jquery-latest.js"></script>

        <style type="text/css">
            .preload
            {
                display: none;
            }
            .button
            {
                    display: inline-block;
                    background: url("btnNormal.png") repeat-x;
                    height: 25px;
                    min-width: 50px;
                    border: 1px solid grey;
                    text-align: center;
                    cursor: pointer;
                    font-family: sans-serif;
                    font-size: 14px;
                    /* Disable text selection */
                    -moz-user-select: none;
                    -khtml-user-select: none;
                    -webkit-user-select: none;
                    -o-user-select: none;
                }

            .button:hover
            {
                background: url("btnHover.png");
            }

            .button:active
            {
                background: url("btnPressed.png");
            }
                    .button > div
                    {
                        height: 100%;
                        padding-top: 6px;
                        padding-left: 10px;
                        padding-right: 10px;
                        width: auto;
                    }
                        .button > div.OK
                        {
                            padding-left: 30px;
                            background: url("btnIconOK.png") 5px 4px no-repeat;
                        }
                        .button > div.No,
                        .button > div.Error
                        {
                            padding-left: 30px;
                            background: url("btnIconNo.png") 5px 4px no-repeat;
                        }
                        .button > div.Warning
                        {
                            padding-left: 30px;
                            background: url("btnIconWarning.png") 5px 4px no-repeat;
                        }
        </style>
    </head>

    <body>
        <div class="preload">
            <img src="btnNormal.png">
            <img src="btnHover.png">
            <img src="btnPressed.png">
        </div>
        <div style="text-align: center">
            <div class="button" onclick="$('#showhide').fadeIn()">
                <div class="OK"><b>Mostra</b></div>
            </div>
            <div class="button" onclick="$('#showhide').fadeOut()">
                <div class="Error">Nascondi</div>
            </div>
            <div class="button" onclick="alert('Questo è un messaggio a comparsa!')">
                <div class="Warning">Alert</div>
            </div>
            <div class="button" onclick="alert('Hey, sei sempre così testardo?')">
                <div>Non provare a cliccarmi!</div>
            </div>

            <h3 id="showhide">Usa i pulsanti per visualizzarmi o per nascondermi!</h1>
        </div>
    </body>
</html>

 

Bene… ora che anche voi avete imparato questa chicca non mi resta che salutarvi e darvi appuntamento al prossimo articolo. :-D

feb
14

Ho realizzato una semplice classe in PHP per una migliore gestione dei database.

Codice sorgente

<?php

/***********************************************************************
 ************* D A T A B A S E   C L A S S *****************************
 * *********************************************************************
 *
 * Filename:	db.class.php
 * Version:		1.0
 * Author:		Mr.DoT <admin@mrdot.it>
 * License:		GNU/GPL
 * Release:		14th October 2012
 * Description:	Questo script consente una gestione più semplificata del
 * 				database MySQL da script PHP
 *
 * ********************************************************************/

// Includo il file contenente le informazioni sul database
include_once(dirname(__FILE__)."/db.config.php");

class DataBase
{
	private $connected = false; // Variabile di controllo che rileva se
								// la connessione al
								// database è attiva oppure no
	private $lastConnection;	// Variabile che identifica l'ultimo
								// collegamento al database

	// Costruttore di classe
	public function __construct()
	{

	}

	// Apre la connessione con il database
	public function OpenConnection()
	{
		global $dbhost, $dbuser, $dbpwd, $lastConnection, $connected;

		// Se è già connesso, esco dalla funzione
		if ($connected)
			return $lastConnection;

		// Effettuo la connessione al database
		$link = mysql_connect($dbhost, $dbuser, $dbpwd);

		// Se non ci sono stati errori di connessione:
		if ($link)
		{
			// Attivo la connessione
			$connected = true;
			// Memorizzo l'ultima connessione
			$lastConnection = $link;
			// Esco dalla funzione
			return $link;
		}
		// Se ci sono stati errori di connessione restituisco FALSE
		return false;
	}

	// Chiude la connessione con il database
	public function CloseConnection($link=null)
	{
		global $lastConnection, $connected;

		// Se è già disconnesso, esco dalla funzione
		if (!$connected)
			return true;

		// Se non viene specificato $link uso l'ultimo collegamento
		if (!$link)
			$link = $lastConnection;

		 // Se la disconnessione dal database è avvenuta senza errori:
		if (mysql_close($link))
		{
			// Disattivo la connessione ed esco dalla funzione
			$connected = false;
			return true;
		}
		// Se invece ci sono stati errori esco dalla funzione con FALSE
		return false;
	}

	// Seleziona un database
	public function SelectDatabase($db_name=null, $link=null)
	{
		global $dbname, $lastConnection;

		// Imposto il nome del database di default, se non specificato
		if (!$db_name)
			$db_name = $dbname;

		// Imposto la connessione di default, se non viene specificato
		if (!$link)
			$link = $lastConnection;

		// Seleziono il database. Se non ci sono errori esco dalla funzione
		if (mysql_select_db($db_name, $link))
			return true;

		// Se invece ci sono errori esco dalla funzione con FALSE
		return false;
	}

	// Esegue una query SQL
	public function Query($query, $db_name=null)
	{
		// Mi connetto al database (se disconnesso)
		$link = $this->OpenConnection();
		if (!$link)
			return false;

		// Seleziono il database
		if (!$this->SelectDatabase($db_name))
			return false;

		// Eseguo la query
		$result = mysql_query($query, $link);
		if (!$result)
			return false;

		// Mi disconnetto dal database (se connesso)
		if (!$this->CloseConnection())
			return false;

		// Infine, se non ci sono problemi, esco dalla funzione
		// restituendo il risultato della query
		return $result;
	}

	// Calcola il numero di righe di una determinata query
	public function NumRows($query)
	{
		// Esegue una query
		$result = $this->Query($query);

		// Restituisce il numero di righe della query presa in oggetto
		return mysql_num_rows($result);
	}

	// Ottiene un array di valori di una singola riga (la prima trovata),
	// in base alla query,
	// oppure un singolo valore, specificando $key (indice della riga)
	public function GetRow($query, $key=null)
	{
		// Ottengo i risultati della query
		$result = $this->Query($query);

		// Ottengo l'array della prima riga, dai risultati di prima
		$row = mysql_fetch_array($result);

		// Se è specificato il nome della colonna ($key) restituisco
		// il valore specifico, altrimenti tutta la riga ($row)
		if ($key)
			return $row[$key];
		else
			return $row;

	}
}
?>

Il file di configurazione

Per prima cosa, creare un nuovo file php e chiamarlo db.config.php. Esso conterrà le informazioni necessarie per connettersi al database.
Per funzionare è necessario che il suddetto file si trovi nella stessa cartella dello script contenente la classe (file “db.class.php”), altrimenti genererà errori.

<?php

/***********************************************************************
 ************* D A T A B A S E   C O N F I G ***************************
 * *********************************************************************
 *
 * Filename:	db.config.php
 * Description:	Informazioni per connettersi al database
 *
 * ********************************************************************/

	$dbhost = "localhost";
	$dbuser = "root";
	$dbpwd = "";
	$dbname = "myDatabase";

?>

Occorre cambiare le informazioni delle variabili $dbhost, $dbuser, $dbpwd e $dbname in base alla propria configurazione, che varia a seconda del gestore di hosting. Nel caso di connessioni in locale solitamente i dati sono sempre quelli, tranne il nome del database che va cambiato per forza di cose.
La spiegazione delle variabili da usare nel file di configurazione del database è la seguente:

$dbhost = nome del server del database
$dbuser = nome dell’utente che usa il database
$dbpwd = password per accedere al database
$dbname = nome del database

Utilizzo della classe

A questo punto, per utilizzare la classe è sufficiente:

<?php

        // Includo la classe
        require_once("db.class.php");
	// Creo l'oggetto database
	$db = new DataBase();

	// Scrivo la query e...
	$query = "SELECT * FROM miatabella WHERE active=1";

	// ... la eseguo!
	$numeroUtenti = $db->NumRows($query);

	// Produco l'output
	echo "Nella tabella ci sono ".$numeroUtenti." utenti attivi.";

	/*** Output di esempio: ***
	 * Nella tabella ci sono 28 utenti attivi. *
	 *********************************************/

?>

Metodi

La classe dispone di diversi metodi (funzioni) utilizzabili:

OpenConnection()

Stabilisce una connessione con il database.

CloseConnection()

Chiude la connessione con il database.

SelectDatabase( [ string $db_name = null ] [, resource $link = null ] )

Seleziona il database

Query( string $query )

Esegue una query e ne restituisce i risultati.

NumRows ( string $query )

Restituisce il numero di righe di una specifica query.

GetRow ( string $query  [, string $key = null ] )

Ottiene un array di valori relativi alla prima riga dei risultati di una query.
Se $key viene specificato restituisce il valore del campo $key della prima riga dei risultati della query.

<?php
	// Creo l'oggetto database
	$db = new DataBase();

	// Scrivo la query e...
	$query = "SELECT * FROM miatabella WHERE nome='Mario'";

	$cognome = $db->GetRow($query, "cognome");

	echo "Il cognome di Mario è: ".$cognome;
	   // *** OUTPUT: *** /
	   // Il cognome di Mario è: Rossi
?>

 

La classe viene distribuita con licenza GNU/GPL, quindi è liberamente utilizzabile, modificabile, pubblicabile a patto che non sia per scopi commerciali e che rimangano le informazioni sull’autore e sul codice, in testa ad esso.

Per domande o suggerimenti commentate pure qui sotto! :)

feb
08

Ancora una volta si torna a parlare di AdSense, il sistema di pubblicità online più conosciuto al mondo e proveniente, non a caso, dalla BigG, friendly name di Google.

 

Ricordiamo che Google Adsense è il servizio forse più conosciuto dagli utenti informatici, perché si riesce a trovare spesso nella maggior parte dei siti web mondiali. Affidabilità legata al nome, contenuti disponibili in moltissime lingue e fonte di guadagno adeguata con una combinazione di PPI (Pay Per Impression) e PPC (Pay Per Click) sono le caratteristiche principali che spingono la maggior parte degli utenti a scegliere Google come sistema facile per guadagnare con il proprio sito o blog.

Una cosa da non sottovalutare è anche la possibilità di usare Adsense per i siti web con pochissimi visitatori, al contrario di  molte società concorrenti che impongono almeno un certo numero di visite mensili per poter attivare il servizio (maggiori visite ha un sito, maggior affidabilità può offrire il sito alla società delle ads).
Infatti, il mix di tutti questi vantaggi mi ha portato a scegliere Google, per cercare di arrotondare con questo Blog.

Non ho molte visite, infatti questo, come già detto parecchie volte, si tratta di un blog praticamente personale, non tematico (parlo di quello che mi va quando mi va :D ) e i miei articoli vengono pubblicati con una frequenza parecchio variabile… un periodo pubblico ogni giorno… un altro ogni mese. Però per quale motivo non sfruttare questa opportunità offerta dalla major di Mountain View? Se si può recuperare parte delle spese dell’hosting e del dominio, perché rifiutare?

Dopo neanche sei mesi di affiliazione al servizio pubblicitario, il mio account è stato sospeso.
Mi è stato rivelato con un’email, probabilmente generata automaticamente, spedita al mio indirizzo personale.

Gentile publisher,

Dopo aver esaminato i dati relativi al suo account AdSense, abbiamo
stabilito che il suo account costituisce un rischio perché genera attività
non valide. Poiché è nostra responsabilità proteggere gli inserzionisti
AdWords da aumenti artificiosi dei costi dovuti ad attività non valide,
abbiamo ritenuto necessario disattivare il suo account AdSense. Il saldo
dovuto relativo all’account, nonché la quota di entrate di Google verranno
restituiti agli inserzionisti interessati.

Tenga presente che abbiamo preso questa decisione per tutelare l’efficacia
del sistema pubblicitario di Google, in particolare il rapporto tra
inserzionista e publisher. Ci rendiamo conto che ciò può causarle disagi.
La ringraziamo anticipatamente per la sua comprensione e la sua
collaborazione.

Se ha domande o dubbi circa le azioni che abbiamo intrapreso, su come può
presentare ricorso contro la decisione o sulle attività non valide in
generale, può trovare maggiori informazioni consultando la pagina
http://www.google.com/adsense/support/bin/answer.py?answer=57153.

Cordiali saluti,

Il team di Google AdSense

In sostanza pare che gli annunci sono stati utilizzati in un modo evidentemente non valido rispetto a quanto richiesto da Google nei termini di utilizzo del servizio. Il modo più probabile di violare il regolamento di Adsense sta nel cliccare sui propri annunci, generando quelli che si dicono “clic non validi“.

Accedendo al mio pannello di controllo di Adsense, quando era ancora attivo, avevo rilevato, un giorno, un numero spropositato di click (si parla di circa una cinquantina) relativi a una giornata singola. Sono rimasto sbalordito, perché non mi era mai capitato di ricevere così tanti clic in un giorno. Nonostante il mio dubbio iniziale, ben presto non ci ho fatto più caso (se non ho cliccato io su quegli annunci deduco che siano stati i miei visitatori, in modo normale).

E invece no. Il mese successivo mi ritrovo quella bella letterina che mi avvisava della disattivazione dell’account.

Ho presentato ricorso secondo l’apposito modulo, per cercare di spiegare la situazione, per provare a riottenere il mio account genuino. Dopo quasi una settimana arriva la risposta, scritta in rumeno, che ho dovuto tradurre io stesso con Google Traduttore. Non ho parole.

Bună ziua,

Vă mulţumim pentru contestaţie. De asemenea, vă mulţumim pentru informaţiile suplimentare pe care ni le-aţi furnizat, precum şi pentru interesul dvs. permanent faţă de programul AdSense. Cu toate acestea, după ce au analizat din nou cu atenţie datele contului şi după ce au luat în calcul feedbackul dvs., specialiştii noştri au confirmat că nu putem reactiva contul dvs. AdSense.

Vă reamintim că puteţi găsi mai multe informaţii la http://www.google.com/adsense/support/bin/answer.py?answer=57153, în cazul în care aveţi întrebări sau nelămuriri suplimentare despre contul dvs., despre măsurile luate sau, în general, despre activitatea nevalidă.

Cu sinceritate,

Echipa Google AdSense

 

Piccola parentesi: per capire che si trattava del rumeno ho dovuto scegliere come lingua di partenza “Rileva automaticamente”…
La traduzione è la seguente:

Ciao,

Grazie per la tua opinione. Apprezziamo anche le informazioni aggiuntive che abbiamo fornito e per l’interesse sempre AdSense. Tuttavia, dopo aver ancora una volta i dati dell’account attentamente analizzati e dopo aver preso in considerazione i vostri commenti, i nostri specialisti hanno confermato che non possiamo riattivare il suo account AdSense.

Si prega di notare che è possibile trovare ulteriori informazionihttp://www.google.com/adsense/support/bin/answer.py?answer=57153, se avete domande o dubbi sul tuo account, le misure adottate o in generale sulleattività non valide.

Cordiali saluti,

Team AdSense di Google

 

Inutile. L’account è stato demolito e non ci sono più speranze di riaverlo.
I guadagni sono stati “restituiti agli inserzionisti”, quindi in sei mesi non sono riuscito a guadagnare neanche un centesimo. Bello, davvero.
Ah, mi ero dimenticato di dire che, sempre da regolamento, gli utenti che si fanno disattivare l’account adsense non potranno più farne parte a tempo indeterminato, anche per tutti gli altri loro siti.

 

 

Meravigliato, incredulo, allibito, deluso, ho cominciato a cercare sul web situazioni analoghe alla mia, ovvero account disattivati per presunte attività non valide e sono rimasto ancora più stupito vedendo l’enorme numero di persone colpite dall’atrocità e impassibilità di Google.

Con molte probabilità la causa di disattivazione del mio account (con conseguente perdita del denaro ricavato onestamente fino a quel momento) è stata una sequenza ripetitiva di clic fatti da qualcuno, magari per ingenuità o ignoranza, o magari cattiveria.

Quindi, ricapitoliamo. Avete un sito con gli annunci pubblicitari di adsense. Il sito è perfettamente in regola, non usa contenuti illegali e compagnia bella. Voi non cliccate su alcun’inserzione, perché siete consapevoli del regolamento.
Un giorno arriva il Pinco Pallino che invidia il vostro sito, o semplicemente non ha nient’altro di meglio da fare, clicca tutti gli annunci che vede per tutta la giornata e se ne va. Dopo un mese il vostro account è disattivato e non c’è modo di riaverlo.

 

Con questi accadimenti ho capito che Google non è niente di che. E’ una società come le altre che bada a guadagnare il più possibile, andando a colpire i più deboli quando necessario.

Comincia la ricerca per trovare altre alternative affidabili. Se conoscete buoni servizi (con annunci anche in lingua italiana) potete inserirli tra i commenti. Magari più avanti pubblicherò i risultati delle mie ricerche.

gen
30

Questa sera (circa alle 22:00) stavo parcheggiando la macchina quando, per puro caso, mi sono ritrovato a guardare il cielo.
Con mio enorme stupore ho visto questo puntino luminoso che emetteva luce rossastra di intensità variabile (che rendeva l’idea di qualcosa di infuocato) e si muoveva lentamente.
Inizialmente ho pensato si trattasse di un aereo, ma ho subito escluso l’idea per via dell’estrema irregolarità della sua luminosità. Le dimensioni erano quelle di una comunissima stella.

Con molte probabilità si tratta dell’asteroide “Eros 433″, la cui data di arrivo prevista era per domani.

 

Niente paura per la Terra, però. Dovrebbe passare vicino, ma non così tanto da doverci far preoccupare…

Invito tutti a dedicare qualche minuto di tempo domani sera per ammirare la bellezza dello spazio, augurando che ciò possa essere uno spunto di riflessione sulla nostra estrema piccolezza rispetto all’universo infinito.

gen
27

Il celeberrimo colosso informatico, nato come semplice sistema operativo nel “lontano” 1997, si sta allargando sempre di più. Prima con GMail, la posta elettronica del futuro, con un limite di memoria di diversi gigabytes e un filtro antispam all’avanguardia. Poi con tutti gli altri servizi, come Maps, Earth, Documents, Picasa, eccetera.

Uno dei prodotti più interessanti è sicuramente il calendario (Google Calendar).

Esso permette di gestire una propria agenda virtuale, inserendo, modificando o cancellando i propri appuntamenti, singoli o ricorrenti (quali ad esempio anniversari, compleanni ecc.). La cosa fenomenale è che questo calendario, data la sua importanza cresciuta sempre di più negli ultimi anni, è utilizzabile non solo tramite il proprio browser, ma tramite ambienti applicativi su diversi sistemi operativi!

Per fare un esempio, iCal, l’applicazione per Mac OSX, ha la possibilità di importare ed utilizzare sia in lettura che in scrittura il proprio calendario Google. La stessa cosa è disponibile su Kontact, l’applicazione all-in-one di Kubuntu per la gestione dei contatti e delle corrispondenze personali.
Inutile dire che tutto questo è strettamente legato anche a tutti i dispositivi mobili (smartphones) che hanno installato il sistema operativo Android che, si sa, è anch’esso un prodotto di mamma Google

 

Una funzione importante introdotta da non molto in Contacts, la rubrica personale disponibile in ogni account Google, è la possibilità di inserire per ogni contatto la data di compleanno, per poter ricordarsi al momento opportuno di fare gli auguri.
L’unico inconveniente è che, come erroneamente si potrebbe pensare (ci sono cascato anche io! :D ), le date di compleanno precedentemente impostate nei contatti non compaiono nel calendario Google.
Sbagliato qualcosa? Bug colossale? Niente di tutto questo. Basta effettuare un paio di operazioni e in men che non si dica avremo il nostro calendario pululante di compleanni, così non ne salteremo più neanche uno!

Apriamo la pagina di Google Calendar.

Clicchiamo sull’ingranaggio nell’angolo in alto a destra e clicchiamo sulla voce “Impostazioni di Calendar”.
Ora clicchiamo sulla voce “Calendari” (in alto) per aprire la pagina di configurazione dei calendari visualizzati.
A questo punto occorre cliccare sulla scritta Sfoglia calendari interessanti. Lo so, non è facile trovarla all’inizio. Se posso dare un’indizio suggerirei di guardare la parte destra centrale della pagina. :D

TADAAAN!

Tramite questa pagina è possibile inserire nel proprio calendario Google tutta una serie di sotto-calendari relativi ad avvenimenti particolari, festività, eventi sportivi e molto altro ancora! C’è solo l’imbarazzo della scelta.
Comunque torniamo a noi. :D

Clicchiamo su “Altro”, a destra della categoria Sport, poi localizziamo la riga “Compleanni ed eventi dei contatti“ e clicchiamo su Iscriviti (sulla stessa riga). Adesso al posto del testo che abbiamo cliccato comparirà la scritta “Annulla iscrizione“, che indicherà il buon fine dell’operazione da noi richiesta.

Allo stesso modo, se si vogliono inserire altri calendari è sufficiente cliccare sul link con la scritta “Iscriviti”, mentre per eliminarli basta cliccare su “Annulla iscrizione”.

Conclusioni

Siamo riusciti a far apparire nel calendario di Google i compleanni di tutti i nostri contatti. Come chicca finale, la voce di calendario indicante il compleanno sarà accompagnata da una deliziosa torta, per dare un rapido impatto del tipo di evento. Inoltre questi tipi di evento saranno contrassegnati come “Tutto il giorno“, quindi saranno sempre visibili anche scorrendo la pagina in verticale (vista settimanale).

Cosa centra Android? Siccome esso sfrutta un’agenda che si sincronizza con Google Calendar saranno visibili nell’agenda del cellulare tutti gli eventi dei contatti personali. Questo perché l’agenda di Android preleva tutti gli eventi di Google Calendar, dividendoli in base al tipo di calendario a cui appartengono.
Per esempio andando nelle impostazioni del programma “Calendario” di Android e aprendo la finestra di scelta dei calendari da visualizzare apparirà il nuovo calendario “Compleanni ed eventi dei contatti”. Per nascondere sul cellulare i compleanni basta togliere il segno di spunta ed il gioco è fatto.

L’unica pecca è che la torta sul telefonino non c’è. :)

gen
26

Stanco di utilizzare il servizio di hosting ImageShack (che comunque continua a svolgere il suo lavoro abbastanza decentemente) ho pensato di creare un nuovo sottodominio, su questo server, per ospitare le userbar che ho creato.

 

Esempio di userbar.

Ci sarebbero diversi modi e soluzioni per realizzare tutto ciò.
La cosa più “ovvia” sarebbe impiegare un bel database che registri le userbar una per una, in modo da avere tutti i vantaggi derivati (ricerca veloce, divisione per categoria, informazioni varie, ecc.). Siccome però non avevo la benché minima voglia di stare a impazzire per delle semplici userbar, ho pensato di cacciare tutte le barrette in maniera assolutamente confusionaria e senza troppi frondoli, tutte nella stessa pagina.

Sotto ogni userbar sarà presente anche il codice BBCode da utilizzare per inserirla nei forum.

Userbar Archive

gen
24

 

Eccoci qui con un altro tutorial per le tastiere Kurzweil serie PC3.

Hai realizzato un program (patch) incredibile e vuoi esportarlo, per salvarlo in qualche unità rimovibile oppure per passarlo a parenti o amici che hanno la stessa serie di workstation Kurzweil?

Vuoi installare nella tua workstation un program (patch) che è stato realizzato da un’altra persona?

Il bello delle PC3 è che, oltre all’enorme panorama di possibilità che offre nel campo del sound editing, è possibile caricare  ed esportare i suoni. A differenza delle K2000, però, la tecnologia moderna ha permesso di sfruttare le comunissime pendrive USB come dispositivi di archiviazione.

Vediamo come effettuare queste semplici operazioni, per sfruttare ancora di più questa meraviglia.

Tastiere supportate:

  • PC3LE (PC3LE6, PC3LE7, PC3LE8)
  • PC3 (PC361, PC3, PC3X)
  • PC3K (PC3K6, PC3K7, PC3K8)

Esportare un programma

Posizioniamoci in modalità Program e scegliamo il programma che vogliamo esportare.

 

 

A questo punto inseriamo una chiavetta USB nella apposita presa posteriore e premiamo il pulsante Storage (si trova nel gruppo “Mode”) per accedere al dispositivo.
Il sistema controllerà molto velocemente il dispositivo USB per stabilirne la compatibilità.
Se tutto va bene dovrebbe presentarsi una schermata uguale, o perlomeno simile alla seguente:

 

 

A questo punto premiamo il softbutton |STORE| per aprire la maschera di memorizzazione, dalla quale è possibile scegliere cosa salvare nella chiavetta USB.

 

 

Per scegliere il programma da salvare occorre spingere il softbutton |Select|.

 

 

A questo punto è possibile scegliere con la DataWheel il programma che vogliamo esportare.
Nell’esempio ho scelto la patch “ROSANNA AllSolo” (disponibile, tra l’altro, nella sezione PATCH PC3 di questo sito).
A questo punto si può premere il softbutton |Store| per proseguire.

Verrà ora mostrato l’elenco delle cartelle presenti sulla chiavetta USB collegata alla tastiera.

 

Da questa maschera è possibile scegliere la posizione di salvataggio. E’ possibile decidere di salvarla nella radice della pendrive (cartella principale) oppure selezionare con la Data Wheel le cartelle (premendo il softbutton |Open| per entrarci). Per scegliere la cartella radice della pendrive premiamo |Parent|.

Una volta scelta la posizione di salvataggio, controllandone il percorso nel rettangolo con la scritta “Path:” premiamo il softbutton |OK| per accedere alla schermata successiva.

 

 

In questa finestra sarà possibile scegliere un nome per il file che verrà creato e salvato sulla memoria rimovibile.
E’ possibile assegnare un nome scegliendo la lettera con la Data Wheel oppure con i pulsantini, proprio come se si trattasse di un telefono cellulare nella scrittura di un SMS, scorrendo a destra e a sinistra il cursore con le frecce direzionali.

Una volta dato il giusto nome identificativo (che è limitato a otto caratteri) premiamo |OK| per andare avanti.

 

 

Questa è la fatidica domanda… Salvare gli oggetti dipendenti?

Con questo quesito il sistema chiede se si vogliono salvare tutti gli oggetti che sono legati al programma in via di esportazione, ad esempio combinazioni di effetti, keymap, altri programmi, ecc.
Nel dubbio è sempre meglio includere nel programma tutti gli oggetti dipendenti.

Premiamo |Yes|.

Attendiamo un po’ e……

 

 

ecco fatto!
Adesso è possibile rimuovere la pendrive dalla porta USB posteriore.
Collegandola ora ad un computer sarà possibile chiaramente notare il file del program, con estensione diversa a seconda della workstation utilizzata (ad esempio, usando una Light Edition verrà creato un file con estensione .PLE).
In quel file di pochi Kb è racchiusa tutta la magia di un program nato dalla fantasia e passione del musicista.

 

Importare un programma

 

Abbiamo visto come esportare un programma, salvandolo dalla tastiera alla chiavetta USB, per utilizzarlo, molto comodamente, come backup o passandolo ad altri possessori di workstation PC3.
Vediamo ora come importare un programma di origine propria o estranea. Dovrebbero essere compatibili quasi tutti i programmi tra le varie tastiere della serie PC3 (PC3, PC3K, PC3LE).

Per provare questa procedura è possibile utilizzare le patch presenti nella sezione “Patch PC3″ di questo sito.

Colleghiamo la pendrive contenente il file che desideriamo importare (esempio: PATCH.PLE) e premiamo il pulsante Storage (gruppo “Mode”) per aprire la schermata relativa all’unità rimovibile.

 

 

Attendiamo la scritta “USB device: ready”, che indica la corretta compatibilità del dispositivo appena collegato, e premiamo il softbutton |LOAD|.
Verrà aperta la finestra di importazione.

 

 

Tramite questa schermata è possibile scegliere il file da importare.
Nel caso in cui esso si trovi nella radice della pendrive (ovvero la cartella principale) è sufficiente scegliere con la Data Wheel o con le frecce il file (nel nostro caso il file PATCH___.PLE) e poi premere il softbutton |Ok|. Nel caso in cui il file si trovi in sottocartelle è possibile navigare all’interno della chiavetta con le freccette o con la Data Wheel premendo il softbutton |Open| per aprire la cartella selezionata.

Al termine, una volta evidenziato il file da importare, premiamo il softbutton |Ok| per andare avanti.

 

 

ATTENZIONE! Questo passo è molto importante. Occorre pigiare il softbutton |Append| in modo tale da caricare l’oggetto nel disco della workstation, sfruttando lo spazio disponibile. Premendo il pulsante |OvWrte| (Overwrite) si elimineranno tutti gli oggetti creati presenti sulla workstation per far spazio all’oggetto importato.

 

 

Ecco fatto. Adesso, premendo Exit fino a tornare alla modalità Program sarà possibile trovare, magari scegliendo la categoria “User”, il programma appena importato.
E’ possibile, inoltre, rimuovere la pendrive dal retro tastiera.

 

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera