Links da Google Reader

Come al solito inizio la giornata spulciando brevemente Google Reader,quindi condivido con voi i pezzi che ho trovato interessanti:

  • Hyperwords: trattasi di un'ottima estensione per Firefox in cui una volta installata,con un semplice click con il destro su una parte del testo selezionata,possiamo fare una serie di azioni come :
    - ricerche su Google,Wikipedia,flickr,ecc;
    - traduzioni istantanee del testo e resa visiva immediata senza lasciare la pagina;
    - funzionalità di rete whois,ip2location,ecc);
    e molto altro ancora (vedi recensione di WeWorldWeb);
  • ClipX: programma per una clipboard avanzata,memorizzata su disco,quindi fa sopravvivere ciò che si copia incolla al reboot del sistema; (via CodingHorror);
  • DeltaCopy: software per backup incrementale,una sorta di rsync per windows sebbene non sia un suo porting naturale (come potrebbe esserlo attraverso Cygwin);
    - Robocopy: utility robusta presente di default su Windows Vista (merita un articolo a parte). Tutto via CodingHorror;

Programmare con le Socket per PDA: atto I

Se sei un programmatore esperto di C++ e conosci bene i meccanismi di Visual Studio,prova a tornare ai tempi in cui non ci capivi un cazzo e alle frustrazioni che ti dava il linker che non ne voleva sapere di "risolvere" certe funzioncine a te care.

Beh in questi due giorni mi son sentito così,finchè finalmente qualche anima pia ha saputo indicarmi la "cosa giusta".

Ormai mi incollerò come una zecca al forum Smart Devices Native C++ Development.

Quindi in parole povere per lavorare con le Socket su Pocket PC:

  • mettete un bell' #include <winsock.h> in cima al file;
  • Linkate la liberia "ws2.lib" nelle proprietà del vostro progetto oppure usando l'istruzione
    #pragma comment (lib, "WS2.lib")

Per il momento è tutto quello che c'è da sapere. Una buona guardata all'SDK Documentation credo sarà di rigore. Tale documentazione riguarda:

The documentation applies to the following Windows Mobile software platforms:

  • Pocket PC 2003 Second Edition
  • Smartphone 2003 Second Edition
  • Pocket PC 2003
  • Smartphone 2003
  • Pocket PC 2002
  • Smartphone 2002
  • Pocket PC 2000

Con questo chiudo e che Dio me la mandi (buona!!).

.pureftpd-upload.47a0a5ed.15.da9.8fb20c33

Se vi trovate d'improvviso un file di questo tipo in una vostra directory remota presso il vostro hosting server,non vi intimorite.

In teoria dovrebbe essere un file temporaneo generato da Pure-FTPd:

Pure-FTPd is a free (BSD), secure, production-quality and standard-conformant FTP server.

Se state facendo come me un upload di un file un po' pesantino e vi cade la connessione sembrando che FileZilla ricominci da capo,in realtà quanto abbiamo trasferito viene immagazzinato in file temporanei (non cancellabili da noi,ma automaticamente cancellati dal demone). Potete sfruttare la funzione "Ripristina" di FileZilla per fare l'upload di quanto resta.

Recuperare la password di Windows Live M.

Volendo sfruttare i forum di MSDN mi serviva la password del mio account hotmail. Se l'avete salvata tramite il programma di Instant Messanging di Microsoft,questo tool ve la recupera in un batter d'occhio.

Non servirebbe dirlo ma... NON è un programma per recuperare la password degli account altrui. :)

Windows Mobile Developer Power Toys

Fra questi tool molto efficaci e visti in questo blog,avevo solo sperimentato la PPC command shell,che permette di mettere su Pocket PC una comune shell dos (non son sicuro se definirla così, comunque è in grado di interpretare i classici comandi DOS).

Mi era sfuggito invece l'importantissimo Active Sync Remote Display: questo tool mi permette di vedere in real time la rappresentazione del mio VERO Pocket PC connesso via USB tramite Windows Mobile Device Center.

Quindi lanciare un'applicazione console diventa molto semplice tramite il proprio pc: basta chiamare la shell, navigare verso la directory dove si è piazzato il nostro eseguibile ed eseguirlo!

module

La cosa incredibile è che il tutto funzioni sotto Vista nonostante il nome ActiveSync lasciasse presumere il contrario :D

I soliti copioni

Notate qualche somiglianza tra quest'articolo e questo? Se non fosse per un link relativo ai links esterni all'interno del testo pedissequamente copiato come tutto il resto,non sarei venuto a conoscenza del solito plagio di turno.
Ragazzi,con la licenza che uso in quel sito (e in questo) potete fare tutto quel cazzo che vi pare,ma per piacere,mettere un link alla fonte no? Costa tanto? Volete che diventi tutto magicamente farina del vostro sacco?

Update: l'autore si è impegnato a metter la fonte :) Poi ricontrollerò.

2ndUpdate (29/1): no ho capito male,ha riservato l'articolo per i membri registrati....va beh andate affanculo allora :-D

ESP (Emule Switcher Port)

Intro


ESP è un programmino in java che ho scritto per la mia ragazza. Lei vive a Prato ma studia a Pisa. A Prato lei usa le porte standard (4662 per tcp,4672 per udp) mentre a Pisa l'ingegnere informatico della casa ha deciso di usare 4762 e 4772.

Ci si trova quindi nella scomoda situazione di dover cambiare le porte ogni volta che ci si trova in una città diversa e di doversele ricordare o segnare su un fogliettino.

Nasce quindi sto programmino così risolve il problema in poco tempo.

Il programma

Il programma è scritto in java. Fa uso di un file properties strutturato in questa maniera:


# il primo numero è la porta TCP,il secondo la porta UDP
bergamo = 35393,\57264
prato = 4662,\4672
pisa = 4762,\4772

La prima linea è un commento che spiega come sono strutturati i valori delle chiavi. I file properties sono molto utili come files di configurazione per i programmi in java (leggere la documentazione del metodo load per saperne di più).

E' un programma a linea di comando (anche perchè oltre a non esser in grado di fare interfacce grafiche non ne vedo manco la necessità per un'inezia del genere),quindi per rendere la cosa alla portata della mia ragazza,ho creato un file batch con una linea dentro:
@echo off
java -jar esp.jar


Cliccando sul file .bat s'avvierà il programma che chiederà in quale città ci si trovi e riscriverà il file preferences.ini di Emule con le corrette porte. Alla fine chiederà anche se si vuole avviare il mulo.



Nota sulla lettura/scrittura di files


In questo caso si necessitava di editare solo due linee di un file di oltre 300 linee. Siccome in generale le API java mi sembra che permettano solo di scrivere un nuovo file,leggere un file o appendere ad un file esistente nuove linee,ho deciso di immagazzinare ogni linea del file in un ArrayList e modificare le linee che mi interessano quando le incontro,immagazzinando nell'ArrayList le linee modificate.

Alla fine riscrivo il file usando le linee presenti nell'ArrayList:

BufferedReader in = new BufferedReader(new FileReader(pref));
String str;
boolean tcpfound = false;
boolean udpfound = false;
// appena trova la prima occorrenza di port e udpport
// non richiama più il metodo per i lsettaggio della porta
while ((str = in.readLine()) != null) {
if(str.toLowerCase().startsWith("port") && !tcpfound) {
str = esp.setTCPport(prop);
System.out.println(str);
tcpfound = true;
}
if(str.toLowerCase().startsWith("udpport") && !udpfound){
str = esp.setUDPport(prop);
System.out.println(str);
udpfound = true;
}
lines.add(str);
}
in.close();

Qualcuno conosce un metodo più rapido per editare solo delle specifiche linee di un file senza doverselo immagazzinare in una struttura dinamica temporanea per poi riscrivere il file da capo? Mi farebbe piacere sapere cosa fareste voi.



Nota sui files .bat



Sul Pc della mia ragazza i batch files erano associati a Notepad++. come fare per riassociare l'estensione bat agli script per shell? Non è così semplice,perchè Windows XP non mette a disposizione alcun meccanismo grafico per fare ciò (che io sappia).

Windows IT Pro però ci dice i comandi per farlo e han funzionato egregiamente su Windows XP home edition:

ftype batfile="%1" %*
assoc .bat=batfile

Download


Chi volesse scaricare il programma,lo può fare cliccando qui.  Nel file jar è presente anche il sorgente (saprete ovviamente come estrarlo no? :-D ). Un saluto,torniamo alla tesi.

Emule,id basso e Vista

Ho un problema con emule (utilizzo Vista) che vorrei risolvere,se qualche mente geniale fra voi mi illumina mi farebbe piacere:

  • quando sono a casa mia a Bergamo,ho un router Alice Gate Plus Wifi (quello fornito con alice tutto incluso),mi connetto via wireless e ho sempre ID alto,anche con Windows firewall attivo,senza metter mano nè ad emule nè al router (che è intoccabile a quanto ne so,a meno di smontarlo o fargli qualche altra diavoleria);
  • quando sono a Pisa (stesso computer ma router diverso) mi collego tramite Ethernet settando le porte corrette che un tizio ha aperto sul router. Nonostante questo l'ID è irrevocabilmente basso,mente su XP della mia ragazza,l'ID è alto. Questo succede indipendentemente dall'attività o meno di Windows Firewall.

Ora magari è una cazzata ma...DOVE STA IL PROBLEMA???

Attendo con ansia una risposta. Grazie :)

Hello World per Pocket PC

Non poteva mancare l'immancabile appuntamento dell'"Hello World" con il giocattolo con cui gioco al momento.

I passi per ottenerlo

Prima di tutto sto utilizzando Visual Studio 2005 Professional (che possiede gli emulatori per Pocket PC 2003 e Smartphone) e Windows Vista.

  • Aprire Visual Studio 2005 Professional e fare File > New > Project;
  • Ampliare Visual C++ e selezionare Smart Device;
  • Ci si presentano dei template per Smart Device:
    - ATL: a project for Windows Mobile and other Windows CE-based devices that uses the Active Template Library;
    - MFC: an application for Windows Mobile and other Windows CE-based devices that uses the Microsoft Foundation Class Library;
    - Win32: a Win32 or Console project for Windows Mobile and other Windows CE-based devices;
    - MFC ActiveX: an ActiveX control for Windows Mobile and other Windows CE-based devices that uses the Microsoft Foundation Class Library;
    - MFC DLL: a dynamic-link library for Windows Mobile and other Windows CE-based devices that uses the Microsoft Foundation Class library;
  • Sclego Win32 Smart Device - e flaggo Window come tipo di applicazione;

A questo punto siccome abbiamo selezionato "Window",VS ci sparerà dentro il nostro progetto una vagonata iniziale di codice per la gestione degli eventi,le finestre,ecc. Ma all'osso com'è un programma per dispositivi Windows CE based?



#include "stdafx.h"
#include "ppc-hello5.h"
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstan,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
/* printf ("Hello World\n"); verrebbe visualizzato solo su console
non dall'emulatore nè dal pocket pc */
MessageBox (NULL, TEXT ("Hello World"), TEXT ("Hello2"), MB_OK);
return 0;
}


Potete riconoscere una specie di main e una funzione intuitiva: aprirà una finestrella con scritto "Hello World" e un bottone OK per chiuderla:





helloworld




Note



Se notate ho commentato una printf. Se usate funzioni per stampare in output su Consolle (così come cout) il Pocket PC (e l'emulatore stesso non daranno segni di vita al suo avvio. Questo perchè non c'è il supporto per la consolle. Ma se vi scaricate i Windows Mobile Developer Power Toys potete installare una shell sul vostro pocket pc. E' scritto tutto nel readme,basta spostare una dll nella directory di Windows e due eseguibili dove volete e cliccare su cmd.exe per aprire una shell posizionata in partenza sulla root del dispositivo.

Putiferio programmatoriale

OK dai piani alti non arrivano sempre direttive molto chiare,per cui oggi ho proposto ai miei relatori di proseguire sostanzialmente per passi:

  • realizzazione di un'applicazione client/server java in J2ME Personal Profile (a dopo per le spiegazioni);
  • realizzazione di un client/server in Visual C++;
  • ovviamente i due devono comunicare tra loro bel seguente modo: l'applicazione java devespedire dei comandi al server il quale li rigirerà al TomTom tramite le API fornite nel suo SDK. Ricevuta la risposta la porterà di nuovo all'attenzione dell'applicazione java.

Facile no? :-D Insomma,partiamo per punti:

  • J2ME è sostanzialmente strutturato secondo 3 elementi principali:
  • 1 - le configurazioni (CDC e CLDC): CDC è orientata per dispositivi con capacità di calcolo maggiori come smatphone e PDA,mentre CLDC il contrario. Forniscono un set di API comuni per un vasto range di dispositivi;
    2 - i profili: sono delle API più specifiche. Ogni configurazione ha i suoi profili,per esempio CLDC ha MIDP (le famose MIDlet) mentre CDC ne ha 3 tra cui quello a cui sono interessato ossia Personal Profile;
    3 - package opzionali per tecnologie specifiche;

javame_components

Il bello comunque è che quanto già conosci per J2SE può esser in qualche modo sfruttato anche per il Personal Profile poichè supporta tutte le API del JDK v.1.2 e le AWT 1.1. Quindi supporta sockets,StringTokenizer e altre amenità non presenti per MIDP.

Quanto al programma in C++: io devo creare un applicazione che vada su un Pocket PC con Windows Mobile 2003 SE (il cui cuore se non erro è comunque Windows CE). Devo trovare come aprire le socket sui palmari. Non è importante abbia interfaccia grafica,anzi penso proprio non freghi a nessuno.

Fatti questi due punti si potrebbe lanciare l'eseguibileda java direttamente come server in ascolto  e passargli tutti i nostri sporchi comandi.
E posso usare tranquillamente J2SE v. 6 credo,basta usare le API supportate dalla vecchia versione,anche perchè l'installer JDK 1.2 su Vista non ne vuol sapere di esser eseguito (un workaround è farselo installare da qualcuno con XP e farsi tornare indietro il contenuto della cartella,il problema sta nell'installer,non nel contenuto!)
Quindi non credo ci siano particolari configurazioni da fare per Eclipse ( se non l'impacchettamento in un file jar suppongo...mi devo informare).

I link d'oro sono:

  • PersonalJava Compatibility Classes: classi addizionali disponibili nelle API PersonalJava API ma non disponibili nel corrispondente JDK. Tali classi permettono alle applets e applicazioni sviluppate con PersonalJava di esser eseguite in un ambiente basato su JDK.
  • JavaCheck: tool per testare se l'applicazione sarà compatibile con un particolare ambiente Java e perciò se possa essere eseguita su tutti i dispositivi che implementano tale ambiente Java. analizza i file .class per cercare dipendenze non incluse in particolari APIs. Ciò permette agli sviluppatori di creare applicazioni che vengano eseguite in modo sicuro su differenti implementazioni Java . JavaCheck legge i platform specification files (.spc), files specifici per certe API i quali sono stati codificati (disponibile solo per PersonalJava);
  • PersonalJava Emulation Environment: verifica che le applicazioni scritte possano girare in un ambiente che supporta Personal Java. (NON VISTA COMPATIBILE: un workaround è farselo installare da qualcuno con XP e farsi tornare indietro il contenuto della cartella,il problema sta nell'installer,non nel contenuto!)
  • Writing an application for the J2ME Personal Profile: la domanda che ho posto a google e che mi ha fatto trovare tutto quello che mi servivia :-D

  • Java ME Technologies Personal Profile forum;

Qualcuno ha idee,link,conosce libri su come sviluppare un'applicazione per Pocket PC che:

  • abbia funzionalità di rete;
  • utilizzi classi C++ (quindi niente metodi particolari del .NET Framework);

Any help is appreciated thanks ;)

TomTom: raccolta appunti

Ho aperto una pagina sul mio sito d'appunti per raccogliere tutto il materiale di lavoro per la tesi inerente all'uso di TomTom Navigator 6 e del suo SDK.

Inutile dire che se conoscete siti in cui si parla di programmazione con questo SDK,avete a disposizione qualche materiale a riguardo o volte darmi un qualsiasi tipo di aiuto,SIETE PIU' che benvenuti :-)

Del resto io mi sto approcciando all'argomento da TOTALE inesperto quanto a programmazione C++/Visual C++ e all'uso di Visual Studio stesso.

Catene si S.Antonio: fai girare questa,non la solita m***a

Non è mai troppo tardi per aprire la mente del "bovino". Sinceramente esordire così mi dispiace per i bovini,che rispetto. Però il bovino rumina tutto quello che gli dai da mangiare,così l'utente pigro e idiota inotra tutte le c****e che gli arrivano via mail.

Oggi per esempio,un giorno come un altro per gli spammer e i suoi devoti affezionati, è il turno di Rachele,povera bimba di 10 anni affetta da un cancro al cervello operabile sono con sa Dio quanti soldi. Ma se invii la mail "AOL rileverà la traccia di Questa e-mail e calcolerà quante persone la riceveranno."  Solo per questa perla,voi che inviate,meritereste il mongolino d'oro.

L'ho ricevuta via mail da uno dei soliti ignoti fra i miei contatti universitari. Si sa,chi fa l'università è dotto. Ed è anche molto bravo nel pigiare i bottoni,specialmente "inoltra",quello a loro piace tanto.

Tutto ciò è smentito come al solito dall'implacabile Paolo che credo leggano solo le persone consapevoli. I COGLIONI (perdonatemi il purismo lessicale) invece,dal momento che non leggono manco ciò che inoltrano,figuriamoci se si mettono a leggere Paolo Attivissimo.

Qualcuno appartenente ad un LUG si è pure azzardato a postarci dentro questo ciarpame ed è stato prontamente redarguito a suon di link. Link che non leggerà probabilmente. Fare una cosa così in una mailing list è come spararsi sui piedi ragazzi :)

Testo da inviare

Hey TU,che invii con indomita e puntuale precisione tutte le e-mail senza manco leggere il contenuto perchè "fa fatica",quando ricevi una mail in cui c'è un appello di solidarietà,spendi 5 minuti della tua preziosa esistenza per verificare che tale appello sia vero.
E' semplice: basta copiare (selezioni la frase e poi fai CTRL+C oppure selezioni la frase e poi click col tasto destro e fai click su copia - lo dico per gli universitari,sapete come sono -) una frase,un nome o un qualsiasi estratto e incollarla in un campo (non di grano,universitari attenti!) di un motore di ricerca e pigiare sul bottone invia oppure vai o una freccina magari (o battere INVIO): vi usciranno cose interessanti,molto spesso potrebbe uscirvi come risultato Paolo Attivissimo,un tipo che si diverte a smentire il ciarpame che tu ti ostini ad inviare.
Omaggi e a risentirci sperando di ricever da te mail più costruttive e divertenti :)

Inviate questo ai vostri migliori contatti,soprattutto se sono universitari,mi raccomando,quelli a forza di studiare hanno consumato tutta la materia grigia :-D

[PHP] Script per mostrare il codice sorgente di una pagina,includendo codice lato server

Introduzione

Questo tema che vado a trattare non è certo dei più nuovi:

  • ho scritto a suo tempo quest'articolo su Delfins Blog,mostrando alcune tecniche per visualizzare il codice sorgente;
  • ho scritto quest'altro che mi è stato molto utile per mostrare il codice qui su Blogger;

Mi mancava l'esplorazione delle funzioni native di PHP: highlight_string e highlight_file.

Gli script

Il codice che ho creato/modificato/copiatoETincollato fa uso di:

  1. un suggerimento di un lettore di php.net, per quanto concerne l'evidenziazione del codice php attraverso la funzione highlight_file mostrando il numero di linee usando una tabella e il commento di quest'altro per una funzione che usa invece una lista ordinata,distinguendo tra la funzione precedentemente menzionata e highlight_string, più conveniente nel caso vogliate mostrare il codice di poche righe o una riga soltanto;
  2. l'uso modificato di questo script javascript per aprire una finestra con il codice evidenziato. Notare che lo script originale così com'è,è piuttosto pericoloso perchè permette l'esecuzione arbitraria di una qualsiasi funzione passandogli dei parametri,il tutto via GET;
  3. in questo caso ho usato la direttiva $_SERVER['PHP_SELF'] perchè interessato a mostrare il codice del file correntemente letto. Nel caso si voglia leggere un altro file,considerate l'uso di funzioni quali fopen / fread,file_get_contents e file. Leggiti quest'articolo che spiega con degli esempi pratici l'uso di queste funzioni;

Quindi se vi intyeressa,bando alle ciance e recatevi su questa pagina per vedere la demo,cliccando sul link in fondo.

[Javascript]Aggiungere ai favoriti una pagina

Ho cercato in lungo e in largo uno script cross browser per aggiungere una pagina tra i favoriti,ma la panacea di tutti mali non c'è. O almeno io non l'ho trovata.

Così notando che la finestrella dei segnalibri in Firefox e Opera si apre cliccando semplicemente su un link che abbia un attributo "rel" di valore "sidebar",ho reso ultrasemplice lo script che andrò a presentare.

EDIT: ho poi scoperto che un link siffatto in Firefox apre la pagina nella sidebar come intuitivamente si poteva pensare (questa discussione sembra indicare che addirittura non ci sia una funzione adeguata) ,per IE nessun problema mentre Opera mette un flag sull'apertura della pagina nella sidebar,che si può facilmente togliere.

Le fonti a cui mi sono ispirato (le migliori che sia riuscito a trovare) sono:

Lo script

Mettere un riferimento allo script sottostante nell'header della pagina:

// scegli tu titolo e URL
function bookmarksite(title,url){
if (window.sidebar) { // firefox
window.sidebar.addPanel(title, url, "");
} else if(document.all){ // ie
window.external.AddFavorite(url, title);
}
}

// usa quelli presenti
function bookmarksite(){
var title = document.title;
// Blogger - Replace with <$BlogItemTitle$>
// MovableType - Replace with <$MTEntryTitle$>

var url = document.URL;
// Blogger - Replace with <$BlogItemPermalinkURL$>
// MovableType - Replace with <$MTEntryPermalink$>
// WordPress - <?php bloginfo('url'); ?>
if (window.sidebar) {// firefox
window.sidebar.addPanel(title, url, "");
} else if(document.all) {// ie
window.external.AddFavorite(url, title);
}
}


Creare poi un link del genere:



<a href="#" title="Metti tra i preferiti questa pagina!" onclick="if(document.all) bookmarksite();" rel="sidebar">

In pratica richiamiamo la funzione bookmarksite solo se si tratta di Internet Explorer. Notare che ad ogni modo,la funzione bookmarksite() può funzionare anche per Firefox. Una DEMO qui.

A mio avviso è il metodo più semplice per ottenere ciò che vogliamo ottenendo compatibilità con i 3 maggiori browser (IE - Firefox - Opera). non ho potuto sperimentarlo su Safari (dove immagino non andrà). Se qualcuno volesse farmi sapere una funzione per adattarlo al Mac ne sarei felice :) Lasciate pure un commento qui sotto o scrivetemi una mail!

Zippare una directory con PHP

Avrei voluto utilizzare le zip file functions (di cui trovate un ottimo tutorial su Zend Developer Zone) ma guardando il phpinfo di Aruba si nota che non hanno compilato PHP usando l'ozione di configurazione --with-zip[=DIR].

Ad ogni modo leggebndo fra i commenti presenti in corredo alle zip file funcions,incappo in questo commento di Lennart Poot: l'idea è usare la librearia di "zippaggio" di phpMyAdmin,un semplice file denominato zip.lib.php nella directory "libraries".

A questo punto ecco il codice che crea un archivio al volo specificando la cartella contenente i files e settando gli header per spedirlo direttamente al browser. Il seguente codice NON archivia le directory (if (!is_dir($file) && $file != "." && $file != ".." ) {) e non crea una cartella nell'archivio contenente i files  ma semplicemente archivia tutti i files che trova.

Ecco il codice,con qualche modifica rispetto al commento e con l'aggiunta di ciò che altri lettori di php.net han fatto notare:

require_once('zip.lib.php');
$zipfilename = 'chris_sorgentic++.zip'; // nome del file da creare
$ad_dir = 'sorgenti'; // path alla directory contenete i files

$zipfile = new zipfile();

if ($handle = opendir($ad_dir)) { // apre la direcotry
while (false !== ($file = readdir($handle))) {
if (!is_dir($file) && $file != "." && $file != ".." ) {
$f_tmp = @fopen( $ad_dir . '/' . $file, 'r'); // apre in lettura il file

if($f_tmp){
$dump_buffer=fread( $f_tmp, filesize($ad_dir . '/' . $file)); // prende il contenuto
$zipfile -> addFile($dump_buffer,$file); // aggiunge il file allo zip
fclose( $f_tmp );
}
}
}
} else {
echo "Non riesco ad aprire la directory $ad_dir.";
exit;
}

$dump_buffer = $zipfile -> file(); // dump del file
// write the file to disk:
/*
$file_pointer = fopen('newzip.zip', 'w');
if($file_pointer){
fwrite( $file_pointer, $dump_buffer, strlen($dump_buffer) );
fclose( $file_pointer );
}
*/

// response zip archive to browser:
header('Pragma: public');
header('Content-type: application/zip');
header('Content-length: ' . strlen($dump_buffer));
header('Content-Disposition: attachment; filename="'.$zipfilename.'"');

echo $dump_buffer; // stampo il contenuto del file

Rinnovo dei loghi

Finte le feste è ora di togliere il cappello di natale,le palline e i fiocchi di neve che scendono dai nostri siti.

Ringrazio di cuore la mia ragazza che ha avuto la premura di ristrutturare gli header di Chris'Site (da ribattezzare "Chris on Fire!") con questa bella immagine e l'header del coro con quest'altra immagine (che mi ricorda un po' l'album dei metallica "Ride The Lightning").

Già che ci siamo "cavalchiamo insieme il fulmine"!

 

coComment: segui i tuoi commenti nella blogosfera

commentSicuramente avrete notato quanto sia difficile ricordarsi di tutti i siti dove passiamo e lasciamo un commento. Molto spesso ci viene incontro qualche plugin che ci manda una mail per avvisarci di un nuovo commento,altre volte più sfortunate invece bisogna ricordarsi i siti a memoria.

ViK mi segnala il servizio web 2.0 coComment. Una volta registrato un account e scaricata l'estensione per Firefox,questa terrà traccia per noi di tutti i commenti che lasciamo in giro per la rete.

Io mi son già registrato e ho intenzione di sfruttarlo moltissimo. Per fortuna c'è sempre qualcuno che crea qualcosa per turare alcune falle,in questo caso i vuoti di memoria :)

Visual Studio e le espressioni regolari

Visual Studio non sembra seguire gli standard per le espressioni regolari ma ha dei suoi shortcuts particolari. Nei link sottostanti viene esteso l'argomento:

I bergamaschi di BlogItalia

Intro

Guardo alle classifiche con divertimento e semplicità. Non ne faccio una malattia e se scendo di 20 posizioni o ne salgo di 30 non mi frega quasi niente. Se sono iscritto a certi "calderoni" come BlogItalia o BlogBabel è solo per spargere la voce e farsi trovare,quello che vogliono un po' tutti insomma.

I bergamaschi su Blog Italia

Così per sfizio mi son appuntato i link alle directory web / aggregatori sociali a cui sono iscritto per farci un salto ogni tanto e oggi è il turno di Blog Italia,dopo secoli che non ci guardavo.

Siccome sono un pesce piccolo del mare magnum della blogosfera,ho ristretto il campo ai blog di Bergamo che trattano argomenti di informatica e Internet. Risultati in ordine decrescente:

  1. The blog's book - chutzpah da Treviglio (BG): se non erro devo aver letto anche qualche suo commento su Napolux, e visto che è anche presente nel suo blogroll la cosa è ancora più probabile :-D;
  2. Pensieri di Antuana - antuana da Bergamo (BG): non mi sembra tratti d'informatica...chissà cosa ci farà qui dentro :?
  3. Il blog di David Orban - Davidorban da Bergamo (BG): sembra che neanche lui sia rimasto soddisfatto da Vista.
  4. .commEurope - Giuseppe Mazza da Bergamo (BG): ora il sito funziona e mi sembra anche molto ben curato.
  5. Ci sono io :D

Gli altri a qeusta pagina.

Bergamasco ancora per poco,Pisa mi attende e forse qualche altro stato estero ;)

AnyBrowser Campaign: uso il browser che mi pare!

Perchè aderire a questa campagna?

I know I can't change the web by myself, but every little bit counts, and this is my vote for a platform independent, non-browser specific World Wide Web. So, I have displayed the "Viewable With Any Browser" button to emphasize that I try to create my web sites to be viewable in all browsers, and totally functional. Some pages may look better in some browsers than others, but they should all be readable by any browser.

Vi sarà capitato migliaia di volte di finire in siti Web e vedere una delle scritte "Ottimizzato per X" oppure "Si consiglia vivamente l'uso di X".

Le guerre di religione (ma non solo) fra browser poi,non sono certo una novità. C'è sempre chi è pronto ad osannare Firefox e gettar mota su IE e viceversa. Si vuole evitare cose come Explorer Destroyer.

La campagna Any Browser vuole un Web accessibile a tutti con la tecnologia che più ci piace,mettendo a dispisizione linee guida e links interessanti.

w3c_ab

Win-get: uso e creazione di un repository

Introduzione

Win-get è un packet manager a linea di comando per windows che sfrutta le funzionalità di wget,un porting per Windows del programma omonimo per Linux.

wget

Presenta una lista di programmi via Web (quelli accessibili anche dall'applicazione) e se ci si registra si ha il vantaggio di poter cliccare su dei "+" a fianco dei nomi dell'applicazione e associare l'applicazione stessa al nostro account. In questa maniera sfrutando l'opzione "restore" di win-get,è possibile installare tutti i programmi associati al nostro profilo (specificando le credenziali di autenticazione o nel file di configurazione o come opzioni da linea di comando).
Esiste anche un ' estensione per Firefox (non ancora provata quindi non vi so dire nulla in termini di utilità e compatibilità tra le varie versioni) che permette di segnalare un'applicazione. Fate attenzione che il server non è configurato per le estensioni firefox quindi vi verrà chiesto di scaricarla. Dovrete poi installare tale estensione con "Apri con" e scegliendo Firefox o da linea di comando "firefox estensione.xpi".

Trovate un'altra recensione di questo software su newstechnology.

Funzionamento tecnico

Questo è un pogetto open source,quindi sono disponibili i sorgenti per poterci creare il nostro repository, ma NON l'interfaccia amministrativa e "perlustrativa" del sito ufficiale (in attesa di chiarimenti).

Win-get farà delle query come questa ad uno script PHP (notate i parametri inviati via GET) e si otterrà un file XML descrittivo che verrà poi gestito da Win-get e presentato nel prompt dei comandi.

xml

Come illustra questa query e quella nella foto,sembra che questo progetto sia un repository di collegamenti alle applicazioni da scaricare e che sul server Sourceforge non abbiano messo alcun software (molto probabilmente perchè non si può nemmeno fare). Quindi se guadate al file XML ritornato dalla precedente query,l'indirizzo del file zip verrà dato in pasto a wget presumo.

Creazione di un proprio repository

Ho intenzione di creare un repository su Aruba sfruttando i files forniti,ma permettendo anche di scaricare direttamente dal server Aruba i software,dal momento che godo di spazio illimitato :-D (ma non banda illimitata presumo!). Chi è su Aruba sa che si hanno a disposizione solitamente 5 database predefiniti per un hosting da 30 sacchi l'anno (mi pare,a me hanno regalato il sottodominio quindi non ricordo :-D). Quindi l'istruzione CREATE DATABASE `w154283_winget` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; non sarà possibile. Possiamo:

  • rinominare uno dei database predefiniti,azione possibile dal pannello di controllo selezionado "Operazioni";
  • semplicemente modificare USE w154283_winget; con il nome del nostro database e cancellare o commentare la creazione del database.

Prendiamo quindi il dump del database e imbocchiamolo a PHPMyAdmin presente su Aruba. Il database è composto da 5 tabelle:

  • applications: contiene i dati generali di un'applicazione e il link dove risiede;
  • dependencies: le dipendenze per una determinata applicazione;
  • errors: gli errori in riferimento alle applicazioni;
  • mirrors: eventuali mirrors per una certa applicazione;
  • requests: identica ad applications,mi è ancora sconosciuto il significato della sua ridondante esistenza;

Fatto questo basta caricare i file winget.php e db.php sul proprio server. L'indirizzo del proprio repository sarà quello rappresentato dalla locazione del file winget.php.

A questo punto manca tutta l'interfaccia amministrativa che il sito ufficiale presenta. Ho chiesto a Ryan se è possibile avere tali files,dal momento che su CVS di sourceforge presenta solo i 3 files menzionati.

Nel caso non fosse possibile ne costruirò una mia non appena avrò tempo :)

A cup of coffee

Una tazza di caffè e uno sguardo alla caffeina :-D (autore: ignoto). Foto pervenutami dai meandri del corso di Chimiche e tecnologie farmaceutiche di Pisa.

coffea

Macro in Visual Studio per formattare e pulire sorgenti importati da fonti esterne

Preambolo

Come già detto forse in alcuni post,mi sto leggendo "Teach yourself ANSI C++ in 21 days", ISBN 0-672-30887-6 , J.Liberty, J.Hord - SAMS Publishing (1996).
In questo libro ben fatto sono presenti numerosi programmi (trovate la lista di quelli che ho fatto io qui),ma dal momento che il libro è in formato PDF,mi tocca andare di CTRL+C per copiare il codice dal PDF e importarlo in Visual Studio.
Qui sorge lo sbattimento di ripulire il codice sorgente da alcune cosette presenti nella versione PDF. A seguire una macro che farà proprio questo,dovrete poi modificare solo l'espressione regolare a seconda di quello che dovete fare.

Presentazione del problema

Un programma nel PDF menzionato sopra,si presenta così:

code
Fig 1

Quando viene importato in Visual Studio si presenta così:

code2

Fig 2

L'immagine Fig 2 non è il corrispettivo di Fig 1 ma rende l'idea dello schifo generato: un codice non formattato,con la presenza di numeri di linea da scartare e con la possibile presenza di caratteri spurii come ” e via dicendo.

Creazione della macro

Siccome non conosco il Visual Basic e le svariate API che regolano l'uso delle macro in Visual Studio,ho usato lo strumento di registrazione delle macro (Tools -> Macros -> Record Temporary Macro oppure Ctrl+Shift+R).

I comandi che seguono verranno registrati dalla macro:

  • Edit -> Find and Replace -> Replace in Files. Cliccare sul + di Options e flaggare "Use" scgliendo dal menu a tendina "Regular Expression". In "Look In" scegliere "Current Document";
  • In "Find what" inserire l'espressione regolare che ci serve. Per me: prima tratto i numeri di linea inserendo in "Find What" ^:z\: e in "Replace with" nulla. Se ci sono altre sostituzioni da fare ripetere il passaggio.
  • Chiudere la finestra di "Find and Replace";
  • Riportiamo il focus sul codice sorgente e premere CTRL+A e poi CTRL+F / CTRL+K in sequenza uno dopo l'altro. Questi comandi rispettivamente selezionano tutto il codice e lo indentano per bene (ci sono ovviamente le rispettive voci di menu). Salviamo il file.
  • Stoppare la macro;

In questo modo abbiamo il codicep rincipale per una macro funzionante su UN SOLO E BEN PRECISO FILE: quello su cui stavamo lavorando. Ma se volessimo che la macro funzionasse per tutti i file su cui stiamo lavorando?

Purtroppo Visual Studio registra che abbiamo reso attiva la finestra con il codice del nostro programma e traduce pedissequamente. Dobbiamo editare la nostra macro. Io non conoscendo bene le API ho fatto si che venisse richiesto il nom del file da editare e in questo modo la macro funziona. Ecco la macro finale:

Sub PulisciCodice()
Dim nomefile As String
nomefile = InputBox("Come si chiama il file da pulire?", "MACRO PULIZIA FILE")
If nomefile = "" Then
MsgBox("Non hai immesso alcun valore,la macro esce.")
Exit Sub
End If
DTE.ExecuteCommand("Edit.ReplaceinFiles")
DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Activate() 'Find and Replace
DTE.Windows.Item(Constants.vsWindowKindMacroExplorer).Activate()
DTE.Find.FindWhat = "^:z\:"
DTE.Find.ReplaceWith = ""
DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
DTE.Find.MatchCase = False
DTE.Find.MatchWholeWord = False
DTE.Find.MatchInHiddenText = True
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResults1
DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
Throw New System.Exception("vsFindResultNotFound")
End If
DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Close()
DTE.Windows.Item(nomefile).Activate()
DTE.ActiveDocument.Selection.SelectAll()
DTE.ExecuteCommand("Edit.FormatSelection")
DTE.ActiveDocument.Save()
End Sub
Salvate pure questa macro. L'unica cosa che non son riuscito a fare è l'uso dell'espressione regolare per il carattere “ poichè Visual Studio lo interpreta come un uguale. Chiederò su GoogleGoups. Si ringrazia Guido per il breve consulto su Visual Basic.

Fence post errors e Visual Studio

Dicesi "Fence post errors" quegli errori comuni nella gestione errata di un array,nella fattispecie quando assegniamo un valore ad un indice dell'array fuori dai suoi limiti. Esempio pratico:


long TargetArray[25]; // array to fill
TargetArray[25] = 20; // out of bounds!!

Nell'esempio soprastante,Visual Studio farà tranquillamente l'asseegnamento e stamperà pure 20 in fase di esecuzione. Qualcuno un po' più perito di me in C++ e Visual Studio 2005,mi chiarisce perchè Visual Studio non lancia errori o avvertimenti di sorta ma tratta un array quasi come fosse uno stack? Grazie.

Test di S.Antonio per vedere se sei "a posto"

Preambolo

Chiamo così quei test che l'amico di turno ci invia via mail e ci invita ad inoltrarlo ad altra gente (in uqesto caso è Kia a mandarmelo). E questo di solito vale per presentazioni powerpoint accattivanti,barzellette e via dicendo. Sono drasticamente in calo invece gli inoltri dei classici hoax di persone bisognose,morenti o campagne varie.

Ma puntualmente quando questa roba mi arriva,bella o brutta che sia,si blocca. Giustamente. Non posso contribuire a smerdare le caselle degli altri. La spazzatura va gestita,cosa che purtroppo non succede a Napoli.

Ma veniamo ai test

Ecco la serie di test che mi è pervenuta per stabilire la "normalità" di una persona. I test riguardano calcoli matematici e associazioni mentali. Se rispondi come previsto sei "normale" altrimenti sei quello che sei :-D :

TEST n° 1

Eseguire mentalmente i calcoli ed esporre il risultato:

Hai 1000, aggiungi 40.
Aggiungi ancora 1000.
Aggiungi 30,
e di nuovo 1000.
Aggiungi 20.
Aggiungi ancora 1000 e poi 10.
Qual è il totale?

La risposta sta più in basso
Il tuo risultato È forse 5000?

La risposta esatta è 4100!

Esito mio: ho risposto 4100. Dal primo test risulto anormale :D Andiamo avanti.

TEST n° 2

Conta quante lettere 'F' ci sono nel testo seguente senza usare il mouse.

FINISHED FILES ARE THE
RESULT OF YEARS OF SCIENTIFIC
STUDY COMBINED WITH
THE EXPERIENCE OF YEARS

Quante sono?

Sono 6!!!

Esito mio: cazzo ho detto 2! Da questo test invece risulto rincoglionito :-D Ho praticamente saltato tutti gli OF. Ho visto solo le F nella prima riga.

TEST n° 3

Segui le istruzioni e rispondi alle domande, una per volta,MENTALMENTE e il più rapidamente possibile, ma non andare
avanti senza aver risposto alla precedente. E sorprenditi con la risposta!!! (recita il test)

Adesso rispondi, una per volta. Quanto fa:

15+6
3+56
89+2
12+53
75+26
25+52
63+32

Si, i calcoli mentali sono difficili, ma adessso viene il bello. Sii persistente e prosegui.

123+5

Adesso:
PENSA SUBITO AD UN ATTREZZO E AD UN COLORE!

Continua ancora a pensare ad un attrezzo ed un colore....pensa intensamente...


Hai pensato ad un martello rosso, non è vero?

Esito mio: non ci posso credere gente. La cosa che mi ha indotto a postare questa stronzata è stato proprio questo test. Voi avrete pensato a palmari,mele,sedie o quadri. Io,purtroppo devo ammettere di aver pensato un maledettissimo martello rosso! Sono totalmente normale e prevedibile,che sconforto :-D

Chi non ha niente da fare,mi dica un po' i suoi risultati.

Timer: scrivi un programma idiota in java più in fretta che puoi

866529_feedback_form_excellent

Torno a casa stanco da una giornata persa a far litigare fra loro il ricevitore GPS Qstarrz,Windows Mobile 2003 SE e TomTom Navigator 5,apro Google Reader e apro un post di Paperino.

Sono contento per lui che abbiano "tappato il buco" nella sua azienda. Risulta interessante notare dal post (oltre al loro ferreo filtering di assunzione) il fatto che programmatori con qualche qualifica imortante (laurea,PhD che credo stia per dottorato...non son sicuro) non sappiano poi risolvere velocemente semplici quesiti.

Continuando a leggere il post mi imbatto in un post a Coding horror,in cui Jeff asserisce di selezionare i candidati con dei "FizzBuzz Questions",stanco di trivarsi di fronte gente inetta con il curriculum gonfiato:

Il quesito

Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".

Traduzione per chi avesse problemi:

Scrivi un programma che stammpi i numeri da 1 a 100. Ma per i multipli di 3 stampi "Fizz" invece del numero e per i multipli di 5 stampi "Buzz". Per i numeri i quali sono multipli sia di 5 sia di 3 stampi "FizzBuzz".

E' evidentemente un programma cazzuto da fare,di quelli che ti danno ai corsi di informatica generale,per intenderci,quando ancora devi capire cos'è una variabile.

Tuttavia volevo vedere in java quanto ci mettessi a scriverlo,anche se un linguaggio di scripting per questo genere di cose sarebbe più indicato.

Prendete un timer (io ho scelto Dinner Timer Lite,un programma creato per ricordarsi che abbiamo le pentole sul fuoco,dateci un'occhiata non è niente male :D) e settiamolo a 2 minuti,il tempo ragionevole secondo Jeff (o anche meno di due minuti) per scrivere il programma. Ma qui lo scriviamo in Java.

public class togliinetti {

public static void main(String[]args){

for(int i=1;i<=100;i++)
if(i%3==0 && i%5==0)
System.out.println("FizzBuzz");
else if(i%3==0)
System.out.println("Fizz");
else if(i%5==0)
System.out.println("Buzz");
else System.out.println(i);
}

}


Purtroppo ci ho impiegato 2 minuti e 42 secondi. Sarei curioso di sapere cosa combinerebbero Teo e Federico,magari conoscono metodi un po' più agili :-D. Mi scuso con i lettori per la trivialità del post,vi prometto più serieta nei prossimi mesi,visto che mi dovrei laureare :-D

Ti presento Micio - Bau

logomi10

Ovunque batte un cuore animale vive una parte di noi. Anche se guardiamo altrove il loro amore ci accompagna,anche dopo aver smesso di amarli, anche dopo aver girato loro le spalle NON abbandonare chi TI AMA ma abbandona GLI ABBANDONI:Vacanze con noi

Questo post è dedicato agli animali chiusi in gabbia: se guardate bene nei loro occhi ci vedrete tanta tristezza,alcune volte diffidenza nei confronti dell'uomo (per via di maltrattamenti),altre volte il desiderio anche inconscio di poter correre via da quei posti,talvolta orrendi,definiti canili.

Oggi presento il portale dedicato agli animali Micio - Bau. Dispone di un forum e di un blog. Se avete un annuncio di adozione da fare oppure siete interessati ad adottare una creaturina bisognosa d'affetto,quello è il posto giusto!

Ma questo post non finisce qui: vuole essere un aggregatore di siti che promuovono l'adozione di animali randagi. Invito per cui i lettori a segnalarmi altri siti e portali simili,provvederò a riempire una lista!!!

Lista

Il cuccioletto

Per la serie "quando meno te l'aspetti..." ecco un altro video di Lasse,il mio mito su Youtube:

Campagna "No al preambolfeed"

Oh lettore che capiti qui da remoti nodi della rete,trasportato dai rami tentacolari e monopolistici di Zio G oppure da qualche trackback di un blog a me ignoto,forse sarai interessato alla campagna No al preambolfeed.

scissors2 copy

Di fatto quel che chiedo per "un feed come Dio comanda (INTERO!)" è che questo sia un feed maledettamente,interamente,del tutto e completamente ma anche un po' fottutamente INTERO. Si,INTERO,lo voglio TUTTO e INTERO :D

Non mi interessa se vuoi guadagnare 1 dollaro ogni tre mesi inserendoci AdSense (ah guadagni di più? Dimmi chi sei!),puoi inserire tutte le zozzerie pubblicitarie che vuoi (e qui qualcuno avrà da ridire dicendo "tagliamelo ma non metterci zozzerie" o qualche altra variante).

Quel che vorrei è che l'utilità di un feed non fosse svilita dal magico flag che la piattaforma/applicazione di turno (vuoi Blogger,Wordpress o FeedBurner) offre,permettendo di mostrare una porzione dell'articolo. Che me ne faccio io di una porzione se il 90% dei blogger partono ragionevolmente con un preambolo? Mi leggo i preamboli via feed? Preambolfeed chiamiamoli allora. Mi tocca fare dei click per leggermi il preambolfeed e poi se proprio mi interessa la cosa (desumendola più dal titolo dell'articolo che dal preambolo) mi tocca fare altri click per leggere la notizia aspettando che si apra Firefox (che ora è bello grasso,con tutte le sue estensioni e gli oltre 2000 bookmarks).

E allora convoco tutti i bloggers a divulgare,diffondere e distribuire in tutte le salse del Web 2.* (ma anche 1.0 va più che bene) questo messaggio,infilando in una delle vostre sidebar un bel talloncino, detto altresì antipixel,creati ad-hoc con i "famosi" (?) servizi Button Maker,Pixel Button e via dicendo e linkando quest'articolo.

PixelButton

feed-interi!!!

 

Se vi fan schifo questi antipixel,cosa anche ragionevole visto che il testo non è manco allineato per bene,potete crearvene degli altri a vostro piacimento linkando l'articolo. Quel che conta alla fine è il messaggio: FEED COMPLETI. :D

Scherzi della domenica con software free

MorphVOX Junior 2.6.1 è un bel software (per Windows 2000/XP/XP64/Vista) che ho trovato via AB Techno Blog per modificare la propria voce dopo un breve wizard lanciato dal programma. Le modificazioni possibili sono quelle (nel mio caso):

  • voce da accanito fumatore;
  • vocina stile maniaco oppure quella provocata dall'elio;
  • voce di donna (direi un contralto o meglio un contraltone,perchè la voce è bella profonda);
Ecco come si presenta l'interfaccia:


Fate click su "Morph" cerchiato in blu per modificare la vostra voce e selezionate il morphing tramite il menu a tendina indicato dalla freccia blu. Potete anche immettere effetti sonori quali allarmi,sgommate e via dicendo (freccia blu in basso).
All'atto dell'installazione potete installare il driver e renderlo predefinito. Fatto ciò aprite il vostro client Voip (nel mio caso VoipStunt) e mettete come driver non quello di default bensì quello fornito dal programma (vedi foto qui in basso):

In questo modo la vostra voce arriverà modificata all'interlocutore. Ho provato anche a cambiare il morphing più volte durante una chiamata,con il risultato di mandare in tilt la persona con cui parlate.
Le features della versione PRO permettono molte altre cose,il costo del software è sui 40 dollari. Da provare eheheh

Appuntamento con OilProject: DBMS a confronto

Preambolo

Stasera volevo vedermi un film,per cui ho iniziato a prenderne uno a caso dalla mia raccolta: "Un ponte per Terabithia". Beh a metà film ho smesso. Trattasi di ragazzini dalla fervida immaginazione,fervida a tal punto da arrivare a crearsi un mondo tutto loro.
Deciso a non arrendermi ho optato per "Fascisti su Marte",del buon Guzzanti. Sebbene possa sembrare carino per i primi 5 minuti,dopo diventa anch'esso schifosamente noioso. Dunque mi son detto che non era serata per i film e ho deciso di apporfondire un po' le mie conoscenze con qualche lettura che avevo a disposizione.

DBMS a confronto

Si intitola così la presentazione (disponibile in PDF o ODP,ma c'è anche l'MP3 che presenta i suoi lavori) di Nello Coppeto (aka NeCoSi),autore del sito web Geekplace e mebro della oilprojectcommunity di OilProject.
Il suo lavoro mette a confronto da un punto di vista generale e scarsamente tecnico i tre principali DBMS in circolazione:

- MySQL;
- Oracle;
- PostgreSQL;


Oracle

Nasce dal '77 e prosegue la sua evoluzione fino ad arrivare alla versione 10g del 2003,ora surclassata dalla 11g come mi fa notare un lettore. Esistono ben 5 versioni di Oracle che con mia grande sorpresa costano migliaia di dollari: si va dai 18 mila ai 275 mila dollari per licenze della versione enterprise edition a tempo indeterminato con supporto e aggiornamenti,senza contare che gli optional sono anch'essi a pagamento.
La versione liberamente scaricabile è la Express Edition,che nell'aprile del 2006 viene premiato da non ricordo chi come miglir database. Viene delineato un tratto monopolista di Oracle,che fa addirittura proposte d'acquisto di MySQL e JBoss.
Essendo software chiuso e basando la sua sicurezza su ciò che non si conosce (la più bassa forma per intenderci) ha avuto un record di inefficienza nella bug correction: quasi 2 anni per una patch!!

MySQL

Sviluppato a partire dal '95,viene usato nell'architettura LAMP e da Wikipedia,chi non lo conosce? Quel che non sapevo è che avesse due licenze:

  • GPL;
  • commerciale: se acquisto questa licenza e se modifico e distribuisco il software posso scegliere anche questa licenza e venderlo,annullando la viralità della GPL;

Scitto in C/C++,ha estensioni per altri DBMS come PostgreSQL. Questo non so a che livello si estenda. Supporterà le stored procedure e le funzioni trigger di PG?
Vanta numeri per 30 mila download al giorno su 5 milioni di installazioni globali.

PostgreSQL

La prima versione risale all'89 e questo DBMS open source arriva ad oggi alla versione 8. Ha una licenza BSD,quindi molto flessibile.
PostgreSQL ho avuto modo di studiarlo e approfondirlo un pochino quest'anno nel corso di basi di dati (mentre per Nello è toccato Oracle). Potete vedere i miei appunti su PotsgreSQL a questa pagina.

Conclusioni

Ho trovato la sua esposizione interessante,tant'è che ve ne sto parlando e vi invito a dargli una buona lettura (e ascolto) soprattutto se siete indecisi su quale DBMS scegliere per i vostri tornaconti e volete farvi una panoramica,anche perchè alla fine dei fatti potete scaricare liberamente dalla rete una versione di qualsiasi di questi tre DBMS.
Potete trovare i lavori di Nello su Oilproject oppure da me nella sezione riservata alle letture libere.

Software e mp3 per il relax da stress digitale

Volevo trovare un software per Windows simile a KAlarm,il timer di KDE per Linux,ma cercando in google per similitudine non ho trovato gran che. Mi sono poi ricordato di un post che io stesso avevo fatto e allora ho deciso di provare il programma che oggi vi presento.
Workrave è un software che,preventivamente settato,è in grado di gestire il nostro tempo lavorativo al computer. La finestrella qui a fianco è tutto ciò che vi si presenta. Il tempo a fianco alla tazzina di caffè è il tempo rimanente alla prossima pausa mentre il tempo sotto sono le ore lavorative giornaliere che avete stabilito per voi.
Il software non si limita a questo: prima di tutto è da notare che se vi allontanate dal pc dopo alcuni secondi il contatore si blocca poichè non rileva nè l'uso del mouse nè della tastiera deducendo che non siete al pc,quindi non conteggerà come tempo lavorativo questo momento.
Secondariamente il programma vi offre degli esercizi di stretching e rilassamento dei muscoli e degli occhi da fare durante la pausa (questi io li salto). Allo scoccare della paus venite avvisati con una finestra che vi invita a riposarvi :)



Come altro sollievo vi propongo invece Fullmind. Cos'è FullMind? E'
"un sistema per imparare da soli o con l'aiuto di un esperto a superare i problemi d'ansia di tutti i giorni e aiutare ad affrontare i problemi d'ansia più importanti, come gli attacchi di panico o stati ansiosi generalizzati."
Ma quello che ci viene offerto praticamente e gratuitamente sono delle registrazioni audio che,tramite l'inotica voce dello psicologo D'Alessandro,dovrebbero aiutarci a dimenticare ciò che ci circonda e a concentrarsi su noi stessi. Queste registrazioni sono disponibili previa registrazione (niente bugmenot mi dispiace) e in teoria si rivolgono anche per chi è affetto da disturbi d'ansia più complessi come ansia generalizzata o attacchi di panico.
Ad ogni modo io ne ho ascoltata una in treno e quando ho aperto gli occhi mi sono sentito vagamente intorpidito,come appena svegliato,comunque mi sentivo veramente tranquillo. Dateci un ascolto anche voi magari ;)

[PHP]Listato di una directory e sua dimensione

Siccome gestisco un sito d'appunti in cui sono presenti molti sorgenti liberamente scaricabili e raggruppati in directory,sarebbe carino poterli elencare tutti insieme in una pagina sola. A tal fine ho combinato e modificato alcune funzioni dei commentatori di php.net al mio scopo. Ecco le funzioni: la prima permette di dare un output più umanamente leggibile al numero di bytes forniti in input come parametro alla funzione.


function size_readable($size, $retstring = null) {
// adapted from code at http://aidanlister.com/repos/v/function.size_readable.php
$sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
if ($retstring === null) { $retstring = '%01.2f %s'; }
$lastsizestring = end($sizes);
foreach ($sizes as $sizestring) {
if ($size < 1024) { break; }
if ($sizestring != $lastsizestring) { $size /= 1024; }
}
if ($sizestring == $sizes[0]) { $retstring = '%01d %s'; } // Bytes aren't normally fractional
return sprintf($retstring, $size, $sizestring);
}


La seconda funzione scansiona una directory e fornisce in output i files e directory ivi contenuti,omettendo la directory corrente (".") e quella superiore (".."). Dà altresì come risultato il numero di files la loro dimensione,così come la dimensione totale dei files che occupano la cartella. Usiamo la funzione precedente per l'output sulla dimensione dei files.

function scan_dir($path) {
$dir = $path;
$counter_files = $size = 0;
$string = "";
// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($file == "." || $file == "..") continue;
$counter_files++;
$string.= "- $file - ".filetype($dir."/".$file)." ".filesize($dir."/".$file)." bytes
";
$size+=filesize($dir."/".$file);
}
closedir($dh);
}
echo "Directory contenente $counter_files files e occupante ".size_readable($size)."
Lista:
";
echo $string;
}
}

Il risultato dell'uso di queste due funzioni lo potete vedere qui.
Se invece volete qualcosa di molto più fico,vi suggerisco snif (simple and nice index file). Potete vedere la demo qui e il suo codice sorgente qui.

Clipperz alla prova

Clipperz è un password manager online realizzato in javascript. Basta fare una breve ricerca online per trovare un sacco di recensioni,anche e soprattutto in italiano,visto che gli sviluppatori sono italiani.

Mi sono creato un account e mi sono iscritto alla mailing list via Google Groups per domandare alcune cosette.
Sono un felice utilizzatore di KeePass Password Manager,ancora più felice quando ho scoperto dell'esistenza di KeePassX,il cui formato di database è compatibile con la versione Windows.
Ad ogni modo avere un gestore online sarebbe ancora più comodo,sebbene esista perfino la versione portabile di KeePass. Quindi tornando a Clipperz,la prima cosa che mi premeva era trasportare i miei dati (un centinaio forse,anche meno) in Clipperz. A tal fine Clipperz permette l'importazione di dati in vari formati,anche da quelli esportati da KeePass. Peccato che questa importazione talvolta fallisca,poichè per ammissione stessa degli svviluppatori i test non sono stati moltissimi e quando ci sono stati è per merito di alcuni volontari che hanno fornito il database di KeePass. Ad ogni modo spippolando un pochino e togliendo alcuni campi si riesce ad esportare sostanzialmente quello che ci serve: username e password.
Come seconda cosa direi che l'interfaccia grafica non permette molte manipolazioni delle 'cards' (le schede che contengono i dati di un account): per esempio non è possibile la selezione multipla di più cards e se volessi cancellare in massa 3 o 4 cards dovrei farlo a mano. A questo si aggiunge che non c'è il benchè minimo raggruppamento delle cards: quando sono state importate da KeePass,le cards erano contenute in una lista,di non facile lettura nel caso di centinaia di elementi,quindi rendendo l'applicazione adatta a meno dati.
Il punto di forza sicuramente sono:
  • possibilità di lanciare Clipperz in versione compatta in una sidebar (solo per firefox);
  • i bookmarklet: permettono di avere un link diretto ad un'applicazione web che ci assicura l'autenticazione automatica. Nel caso non avessimo già inserito il sito fra le nostre cards,si segue questa procedura,altrimenti questa. Il risultato è eccellente,poichè potete caricare sempre Clipperz in versione compatta nella sidebar di Firefox e avere link diretti ai siti Web che automaticamente vi autenticano,evitando in questo modo di salvare le password in Firefox (ci sarebbero solo i vostri cookie a tradirvi se scegliete il login automatico). La foto qui accanto è il risultato.

Cambio Feed

D'ora in poi userò Feed Burner come tutti i cristiani. Per i pochi lettori abbonati al blog (almeno due via Google reader :D) usate questo.

Alien Vs Predator - requiem

La saga di queste due figure storiche della fantascienza sembra non avere termine. Sicuramente i primi episodi delle due saghe di Alien e Predator sono delle perle assolute,sebbene non abbia disprezzato anche Alien 2 e 4 (il terzo capitolo direi nulla di speciale).
Per quanto riguarda Predator,il numero due non è stato davvero un gran che: è stato bello poter vedere più particolari del personaggio ma certe scene erano risibili.
Alien Vs Predator,già dal nome,non presagiva niente di buono,se non una trovata cinematografica,un tentativo di amalgamare e far incontrare le due figure per vedere chi la spunta. Ero andato al cinema con il presentimento di vedere una cazzata (e di vedere Roul Bova fra le prime vittime!!) ma alla fine sono rimasto comunque incollato alla sedia,perchè questi due mostri hanno veramente una grande presa nella mia immaginazione.
Per questo motivo non mi perderò certamente l'ultimo (??) episodio: Alien Vs Predator - Requiem presumibilmente il 25 gennaio in Italia (negli States hanno avuto la pensata di metterlo come film di Natale :D). Il film si preannuncia molto più splatter del previsto! Sotto il trailer "a fascia protetta" per così dire,cioè dovete immettere la vostra data di nascita per vederlo (sarà vietato ai minori di 14 anni?)

RealPlayer scarica i video di Youtube

Recentemente tramite FileHippo,ho aggiornato RealPlayer sul mio laptop. Breve inciso: ritengo opportuno avere installati più player sul proprio computer,sebbene esistano vari programmi fac totum,questo perchè:
  • talvolta quello che non apre uno,lo apre quell'altro;
  • esistono formati che vengono gestiti meglio o nativamente da alcuni player;
Così ho aggiornato RealPlayer all'ultima versione e ho notato una cosa interessante passando il cursore sopra un video di Youtube (vedi immagine qui sotto).

Cliccando su Download This Video verrà scaricato il filmato flash (formato .flv) sul proprio sistema (potete trovare i vostri filmati al percorso C:\Users\Nome\Videos\RealPlayer Downloads in Vista). La conversione in altri formati è valida solo per la versione a pagamento del programma,tuttavia se cliccate con il destro all'interno di RealPlayer sul filmato salvato nella vostra libreria e selezionando la voce "Copy To",se avete una periferica USB collegata,potete selezionarla e RealPlayer voi salverà l'audio del video in formato WMA. Non male come cosa.

Aggiornamenti Wordpress

Non fai a tempo ad aggiornare Wordpress,che viene sfornata la release correttiva di fine anno. Gli errori delle versioni precedenti la 2.3.2 sono:
Intanto comee consiglio generale direi di disabilitare l'esposizione della versione della propria piattaforma sia nei metatag sia nel footer. E' sufficiente commentare "php bloginfo('version');" ovunque compaia. Non ho idea se esistano metodi per capire la versione estatta di Wordpress. Sicuramente è possibile escludere delle versioni provando vecchi exploit.

Retourné de Paris

Rieccoci in patria dopo 4 giorni in quel di Parigi. Sono stati dei bei giorni nonostante fossi complito dall'influenza che non mi permetteva di godermi sul serio le bellezze della città.
Mi sarei aspettato maggir casino sotto la Tour Eiffel,invece devo dire che la gente è rimasta piuttosto composta (probabilmente non sufficientemente ubiraca a quell'ora). Pensavo altresi che la città avesse provveduto a qualche spettacolo,ma in quella zona non è successo nulla,solo languidi fuochi d'artificio sparati in aria da alcuni francesi.
Mi pare di aver visto nella tv locale che c'è stata una parata in alcune vie della città,ma me la sono evidentemente persa.
Per il resto che dire?
  • Gli hotel francesi fanno pratica dell'overbooking: prenotano più camere di quelle che hanno per pararsi le chiappette nel caso qualuno molli alla fine. Ma se non molla? Ci si ritrova come noi,a ricevere una mail in cui si dice che per alcuni problemi informatici è saltata la nostra prenotazione :D
    Prenotando un altro hotel è successa la medesima cosa ma stavolta non hanno fatto in tempo a spedirci una mail,eravamo per strada ormai. Arrivati lì però sono stati abbastanza cortesi a piazzarci in un altro hotel della loro catena e a trasportarci in taxi a loro spese. Trattamento non sempre riservato.
  • La cucina francese non è davvero niente male: ho gustato delle maxi insalate guarnite da varie specialità di carne e salsine varie,mi sono abbuffato con le blasonate crepes,talvolta pagate a peso d'oro a seconda del locale in cui finivi (sempre meglio mangiarsele nei baracchini per strada o in locali appositi);
  • Le patisserie/boulangerie spaccano davvero! I dolci,i beignet framboise,le torte,i croissant, le eclaire au chocolat e via dicendo...un tripudio di sapori!
  • La gentilezza di crti francesi: mentre eravamo per strada con l'amata guida della Loonley planet,una signora ha avuto premura di chiederci se avevamo bisogno d'aiuto. Ve lo iummaginate a Milano una cosa del genere? Al massimo riesco ad immaginare un "Levati dalle palle" o una bella strombazzata di clacson,tanto amato dai guidatori milanesi,che danno il peggio di sè alla guida;
Queste son le prime cose che mi vengono in mente. Evito di raccontare l'apocalittico viaggio di ritorno da Parigi,in cui la perizia italiana ci ha schiaffeggiato in faccia la sua negligenza verso l'una di notte alla stazione di Milano Centrale sotto la copiosa neve che scendeva...

Byte Strike Blog - Designed by Posicionamiento Web | Bloggerized by GosuBlogger