Questo piccolo snippet mostra come creare una struttura dati dinamica, per l’esattezza una lista, le due funzioni permettono di inserire un elemento in coda alla lista e l’altra permette di stampare tutti gli elementi presenti all’interno di essa.
#include <iostream>
using namespace std;
struct list {
int data;
list* next;
};
void insert_back(list* &first, int data);
void print(list* first);
int main() {
list* first = NULL;
int i;
do {
cout< <"Inserisci un numero da aggiungere alla lista, metti una lettere per terminare: ";
if((cin>>i).good())
insert_back(first, i);
}while(cin.good());
cout< <"Lista inserita: n";
print(first);
return 0;
}
void insert_back(list* &first, int data) {
list* n = new list;
n->data = data;
n->next = NULL;
if(first == NULL) {
first = n;
}else {
list* app = first;
while(app->next != NULL)
app = app->next;
app->next = n;
}
}
void print(list* first) {
list* n = first;
while(n != NULL) {
cout< <n->data< < " ";
n = n->next;
}
}
</iostream>
Posto un piccolo script per il whois fatto in PHP.
<?php
/*
example: page.php?s=yahoo.it
*/
$server = array(
"asia" => "whois.nic.asia",
"biz" => "whois.biz",
"com" => "whois.verisign-grs.com",
"coop" => "whois.nic.coop",
"info" => "whois.afilias.net",
"jobs" => "jobswhois.verisign-grs.com",
"mobi" => "whois.dotmobiregistry.net",
"name" => "whois.nic.name",
"net" => "whois.verisign-grs.com",
"org" => "whois.pir.org",
"pro" => "whois.registrypro.pro",
"tel" => "whois.nic.tel",
"travel" => "whois.nic.travel",
"gov" => "whois.dotgov.gov",
"edu" => "whois.educause.edu",
"int" => "whois.iana.org",
"museum" => "whois.museum",
"ac" => "whois.nic.ac",
"ae" => "whois.nic.ae",
"ag" => "whois.nic.ag",
"am" => "whois.amnic.net",
"at" => "whois.nic.at",
"au" => "whois.aunic.net",
"be" => "whois.dns.be",
"bg" => "whois.register.bg",
"bj" => "whois.nic.bj",
"br" => "whois.registro.br",
"ca" => "whois.cira.ca",
"ch" => "whois.nic.ch",
"ci" => "whois.nic.ci",
"cl" => "whois.nic.cl",
"cn" => "whois.cnnic.net.cn",
"cx" => "whois.nic.cx",
"cz" => "whois.nic.cz",
"de" => "whois.denic.de",
"dk" => "whois.dk-hostmaster.dk",
"ee" => "whois.eenet.ee",
"fi" => "whois.ficora.fi",
"fr" => "whois.nic.fr",
"gd" => "whois.adamsnames.com",
"gg" => "whois.channelisles.net",
"gi" => "whois2.afilias-grs.net",
"gs" => "whois.nic.gs",
"gw" => "whois.nic.gw",
"gy" => "whois.registry.gy",
"hk" => "whois.hkirc.hk",
"hn" => "whois2.afilias-grs.net",
"ie" => "whois.domainregistry.ie",
"il" => "whois.isoc.org.il",
"in" => "whois.inregistry.net",
"io" => "whois.nic.io",
"ir" => "whois.nic.ir",
"is" => "whois.isnic.is",
"it" => "whois.nic.it",
"je" => "whois.channelisles.net",
"jp" => "whois.jprs.jp",
"ke" => "whois.kenic.or.ke",
"kg" => "www.domain.kg",
"ki" => "whois.nic.ki",
"kr" => "whois.nic.or.kr",
"kz" => "whois.nic.kz",
"la" => "whois.nic.la",
"li" => "whois.nic.li",
"lt" => "whois.domreg.lt",
"lu" => "whois.dns.lu",
"lv" => "whois.nic.lv",
"ly" => "whois.nic.ly",
"ma" => "whois.iam.net.ma",
"mg" => "whois.nic.mg",
"mn" => "whois.nic.mn",
"ms" => "whois.adamsnames.tc",
"mx" => "whois.nic.mx",
"my" => "whois.mynic.net.my",
"na" => "whois.na-nic.com.na",
"nl" => "whois.domain-registry.nl",
"no" => "whois.norid.no",
"nu" => "whois.nic.nu",
"nz" => "whois.srs.net.nz",
"pl" => "whois.dns.pl",
"pm" => "whois.nic.pm",
"pr" => "whois.uprr.pr",
"re" => "whois.nic.re",
"ro" => "whois.rotld.ro",
"ru" => "whois.ripn.net",
"sa" => "whois.nic.net.sa",
"sb" => "whois.nic.net.sb",
"sc" => "whois2.afilias-grs.net",
"se" => "whois.iis.se",
"sg" => "whois.nic.net.sg",
"sh" => "whois.nic.sh",
"si" => "whois.arnes.si",
"st" => "whois.nic.st",
"tc" => "whois.adamsnames.tc",
"tf" => "whois.nic.tf",
"tk" => "whois.dot.tk",
"tl" => "whois.nic.tl",
"tm" => "whois.nic.tm",
"tr" => "whois.nic.tr",
"tw" => "whois.twnic.net.tw",
"ua" => "whois.net.ua",
"ug" => "whois.co.ug",
"uk" => "whois.nic.uk",
"us" => "whois.nic.us",
"uz" => "whois.cctld.uz",
"vc" => "whois2.afilias-grs.net",
"ve" => "whois.nic.ve",
"vg" => "whois.adamsnames.tc",
"wf" => "whois.nic.wf",
"ws" => "whois.website.ws",
"yt" => "whois.nic.yt");
$s = getDomain
($_GET['s']);
if($s != NULL && $server[$s[1]] != "") {
$connection = fsockopen($server[$s[1]], 43);
if (!$connection)
echo "Errore";
else {
$msg = "";
fputs($connection, $s[0].".".$s[1]."\r\n");
while (!feof($connection))
$msg .= fgets($connection, 4096);
fclose($connection);
echo "<pre>".
$msg
."</pre>";
}
}else
echo "URL non valido";
function getDomain
($url) {
$arrU = explode(".", $url);
if(count($arrU) >= 2)
return array($arrU[count($arrU)-2], $arrU[count($arrU)-1]);
else
return NULL;
}
?>
Avete mai sentito parlare dei commenti XML? Quelli che permettono a Visual Studio di creare la documentazione ‘al momento’. Per esempio prendiamo la classe WebClient, questo è un esempio di quello che intendo

quel suggerimento c’è grazie ai commenti XML, che possiamo aggiungere anche noi al nostro codice per esempio. Prendiamo in considerazione questa classe
Continua a leggere…
Questo codice che vi sto per mostrare serve a mandare le email tramite un programma in C#.
/// <summary>
/// Invia una email
/// </summary>
/// <param name="to">Il destinatario dell'email</param>
/// <param name="from">Il mittente</param>
/// <param name="titolo">Il titolo dell'email</param>
/// <param name="corpo">Il messaggio dell'email</param>
/// <param name="server">Il server smtp da cui spetire l'email</param>
private void sendEmail
(string to,
string from,
string titolo,
string corpo,
string server
)
{
try
{
MailMessage mail
= new MailMessage
();
SmtpClient client
= new SmtpClient
();
mail
.To.Add(to
);
mail
.From = new MailAddress
(from);
mail
.Subject = titolo
;
mail
.Body = corpo
;
client
.Host = server
;
client
.Send(mail
);
}
catch (Exception ex
)
{
MessageBox
.Show(ex
.Message,
"Error");
}
}
Questa è la versione semplificata del codice, che invia semplicemente un email senza allegati al destinatario specificato quando si va a richiamare la funzione. Il codice viene richiamato semplicemente in questo modo
sendEmail("destinatario@gmail.com", "mittente@libero.it", "Prova messaggio", "Ciao sono io!", "localhost");
I parametri sono abbastanza eloquenti, l’unico su cui bisognerebbe prestare attenzione è l’ultimo. L’ultimo parametro specifica il server SMTP da usare per mandare il messaggio.
Ora sarebbe bene poter mandare un’email a n destinatari e con n allegati.
Continua a leggere…
Ebbene si.. voglio pubblicizzare questo plugin per WordPress veramente interessante. Il primo motivo per cui lo pubblicizzo è l’utilità, insomma, per chi ha un blog come il mio è indispensabile avere un plugin per postare il codice in maniera corretta. CodeColorer si appoggia a Geshi per evidenziare la sintassi, uno dei migliori syntax highlighter in circolazione e, dopo aver provato vari plugin di questo tipo per WordPress, CodeColorer è quello che si avvicina più di tutti a quello che desideravo avere e quindi ho deciso di usarlo.
Il secondo motivo (e non meno importante) per il quale pubblicizzo questo plugin è che, avendoci a che fare tutti i giorni, ho collaborato con l’autore (Dmytro Shteflyuk) in un primo momento scovando dei piccoli errori che prontamente ha corretto, e, in un secondo momento, proponendo la traduzione in Italiano per il plugin che è stata aggiunta alla nuova versione appena pubblicata.
Se trovate errori nella traduzione contattatemi, provvederò a fixare gli errori e a parlare con l’autore per ripubblicare la versione corretta.
Spero vi sia utile. Alla prossima.
Una valida alternativa Open Source a Google analytics può essere Piwik. Ci sono molti contatori i più noti sicuramente sono Histats e shinystat, oltre al su citato analytics. Piwik però è diverso da tutti gli altri, intanto ha molte più opzioni, come si può vedere dalla demo. L’interfaccia, in Ajax, è semplice e simile a quella di analytics, però, a mio avviso, molto più intuitiva e semplice. I dati delle statistiche si possono esportare e sono visionabili in diversi formati: in tabella o sui grafici (a torta o a barre). Piwik nasce praticamente come l’evoluzione di un altro contatore Open Source molto famoso, phpmyvisites. Per funzionare ha bisogno di una versione PHP maggiore di 5.1.3, una versione MySQL uguale o superiore a 4.1 e le estenzioni PDO e PDO MySQL.
Navigando per internet ho trovato una classe in PHP molto interessante. Si chiama FeedCreator permette di creare Feed RSS o Atom in maniera semplice e veloce. Questo è l’esempio riportato dentro all’archivio della classe che mostra il suo utilizzo:
<?php
include("include/feedcreator.class.php");
$rss = new UniversalFeedCreator
();
$rss->useCached();
$rss->title = "PHP news";
$rss->description = "daily news from the PHP scripting world";
$rss->link = "http://www.dailyphp.net/news";
$rss->syndicationURL = "http://www.dailyphp.net/".$PHP_SELF;
$image = new FeedImage
();
$image->title = "dailyphp.net logo";
$image->url = "http://www.dailyphp.net/images/logo.gif";
$image->link = "http://www.dailyphp.net";
$image->description = "Feed provided by dailyphp.net. Click to visit.";
$rss->image = $image;
// get your news items from somewhere, e.g. your database:
mysql_select_db($dbHost, $dbUser, $dbPass);
$res = mysql_query("SELECT * FROM news ORDER BY newsdate DESC");
while ($data = mysql_fetch_object($res)) {
$item = new FeedItem
();
$item->title = $data->title;
$item->link = $data->url;
$item->description = $data->short;
$item->date = $data->newsdate;
$item->source = "http://www.dailyphp.net";
$item->author = "John Doe";
$rss->addItem($item);
}
$rss->saveFeed("RSS1.0", "news/feed.xml");
?>
Ecco un semplice esempio di conto alla rovescia in JavaScript. Il countdown viene mostrato in giorni, ore, minuti e secondi mancanti alla data specificata. Nel codice ci sono i commenti, dove modificare il valore di iniData mettendo quello che desiderate, io ho inserito in 25 dicembre 2010.
Ecco qui il codice:
<html>
<head><title> Esempio countdown</title>
<script tpye="text/javascript">
function countdown() {
iniData= new Date(2010,12,25,0,0,0);
/*
Data dell'inizio dell'evento, espressa in: anno, mese, giorno, minuti, secondi, millisecondi
*/
oggi= new Date();
milDif=(iniData-oggi);
giorni=parseInt(milDif/86400000);
milDif=milDif-(giorni*86400000);
ore=parseInt(milDif/3600000);
milDif=milDif-(ore*3600000);
minuti=parseInt(milDif/60000);
milDif=milDif-(minuti*60000);
secondi=parseInt(milDif/1000);
milDif=milDif-(secondi*1000);
if (giorni < = "0" && ore <= "0" && minuti <= "0" && secondi <= "0")
/* se è già arrivata la data scrive che siamo arrivati, altrimenti dice i giorni mancanti */
testo='Olè siamo arrivati';
else
testo='Mancano ancora '+giorni+' giorni '+ore+' ore '+minuti+' min '+secondi+' sec';
if (document.getElementById)
document.getElementById("countdown").innerHTML=testo;
else
document.all.countdown.innerHTML=testo;
setTimeout("countdown()",1000)
}
</script>
</script></head>
<body onload="countdown()">
<p id="countdown"></p>
</body>
</html>
Il tag con l’id uguale a countdown sarà quello usato per mostrare la data.
A quasi tutti i webmaster del mondo sarà capitato almeno una volta di voler arrotondare i bordi di un div. Per arrotondarli si usano i metodo più disparati. Molti si affidano alle immagini, altri usano i css. Io invece consiglio un plugin per jQuery di nome Query Corner, diciamo che non serve solo ed esclusivamente per arrotondare i bordi, in generale permette di dare uno stile diverso agli angoli di un div, gli stili tra cui si può scegliere sono veramente molti, basta dare un’occhiata al sito linkato per rendersene conto.
Oltre a quello, nel sito, ci sono altri plugin interessanti che potrebbero tornare utili.
Ho trovato un plugin per jQuery molto utile. E’ uno script che serve per votare degli articoli, è il cosiddetto star rating.

Il plugin è molto configurabile e veramente ben fatto. Lo trovate a questo indirizzo.