Apple Black Friday!

Come avevo annunciato con largo anticipo, anche quest’anno il primo venerdì dopo il giorno del ringraziamento (festa americana), Apple lancia il venerdì nero. Giornata di sconti su prodotti e accessori apple e di terze parti. Lo scorso anno per i prodotti apple c’era uno sconto che variava tra il 5% e l’8% mentre gli sconti sugli accessori di terze parti era un po’ più generoso.
Gli sconti inizieranno venerdì notte(27 novembre 2009) all’1 e termineranno alla stessa ora di sabato notte(28 novembre 2009)… Datevi da fare!

Ecco il link alla pagina dell’apple store dedicata al black friday

Successivamente ci sarà un’altra giornata speciale sull’apple store, che sarà il Digital Monday, ovvero il lunedì in cui tutti i prodotti acquistati online, verranno spediti gratuitamente.

Fonte: macitynet
[ad]

Google Chrome OS in dirittura d’arrivo?


Stando ai rumors delle ultime ore, domattina (ora del pacifico) Google terrà un evento presso il suo quartier generale, in cui presenterà al pubblico il suo nuovo sistema operativo. Sicuramente ci stupiranno con qualcosa di nuovo e intuitivo, sperando (ma non ho il minimo dubbio) che rispetti gli standard di qualità, ai quali da sempre Google ci ha abituati per i suoi prodotti… Le voci sostengono che sarà inizialmente un sistema per i netbook, per permettere a Big G di iniziare a tastare il terreno e valutare un suo rilascio su più larga scala…
Secondo me domani ne sentiremo parlare, voi che dite? ;-)

Questa è la fonte “originale”

Mentre questa è la fonte tradotta nei versi a noi più comuni… :-P
[ad]

SPDY alias Speedy

SPDY

Tanto per cambiare Google ne ha tirata fuori un’altra… Ora diventano quasi monotoni quelli di Big G a forza di sfornare cose nuove

Questa volta hanno in progetto di rivoluzionare il protocollo HTTP. Come da titolo infatti stanno lavorando a SPDY che si legge SPEEDY. Una nuovo protocollo che dovrebbe continuare a sfruttare HTTP eliminando tutto ciò che fa perdere tempo. Dovrebbe sfruttare un singolo canale e una singola sessione TCP e usando il protocollo sicuro SSL come base per il trasporto dei dati. SPDY utilizzerà tecniche di priorità e di compressione degli header per evitare eccessi di tempo e banda quando i clients contattano i servers.

Gli ingengeri di Mountain View hanno già sviluppato un server web (open source) e una versione ad hoc di chrome per la fase di testing. Dal blog si legge che i primi esperimenti indicano risultati significativi, con le pagine caricate il 55% più rapidamente rispetto allo standard HTTP.

Cosa ne dite? Un’altra rivoluzione nel web, che porterà bandiera googleggiante?

In ogni caso se volete leggere approfondimenti in italiano, vi lascio il link su macitynet, dove io ho letto la notizia.
[ad]

Effettuare un redirect da un vecchio dominio ad uno nuovo

Come tutti voi ben sapete, questo blog in precendenza aveva un altro indirizzo. Quando sono poi passato al nuovo dominio ho scritto un articolo per informare i lettori del cambiamento di dominio.

Per le persone basta questo, ma per un blog indicizzato dai motori di ricerca, tutto ciò non è sufficiente, così ho scoperto come effettuare un redirect senza che l’utente neppure se ne accorga.

Inserendo (o modificando) il file .htaccess all’interno della cartella dal quale si vuole effettuare il redirect, con una regola specifica si può fare in modo che qualsiasi indirizzo relativo al vecchio dominio venga riscritto con il nuovo dominio. La regola da inserire è questa:

redirectMatch 301 ^(.*)$ http://www.tuo-nuovo-dominio.com$1

Ecco fatto, potete verificare andando sul mio vecchio blog http://ilferre.setupstat.com/. Tornerete a http://blog.davideferrero.com.

Prestate però attenzione a dove posizionate il file .htaccess. Se siete in una situazione come la mia, in cui sul vecchio dominio avevo anche un altro sito, il file contenente la regola dovrà essere posizionato nella cartella del sottodominio e non nella root, altrimenti qualsiasi indirizzo contenente il vecchio dominio rimanderà al nuovo indirizzo.
[ad]

Workin’ @

Tanto per cambiare cazzeggiando ho fatto una nuova scoperta…

Partiamo come si usa fare, dall’inizio: da qualche giorno mi sono iscritto all’rss dell’Official Google Blog perchè spesso escono notizie interessanti soprattutto per gli appassionati di Big G… dopo qualche articolo letto ho notato un link ad una “directory” che contiene tutti i blog ufficiali di google (prodotti, servizi, ecc ecc…)… Dopo averne visitato qualcuno, e averne visti di quelli di cui conoscievo già la loro esistenza, ho trovato il blog ufficiale di YouTube. L’ultimo post diceva che l’azienda in questione (youtube.com appunto) è alla ricerca di ingegneri da assumere. Cliccando sulla pagina delle informazioni relative a questo annuncio, ho trovato il video intitolato working@youtube:

Ovviamente inutile dirvi che come i video degli uffici di facebook, anche questi fanno venire parecchio l’acquolina in bocca…

Ho anche scoperto il canale di youtube dedicato alla vita all’interno di google, lifeatgoogle, ovvero come si lavora-vive (il confine tra i due termini credo sia molto sottile per Big G, ma d’altronde chi non lo farebbe?!). Date un’occhiata ad esempio di come si lavora a Google Zurigo:

Figo no? :-D
PS: invece questo è un tipico job meeting a Facebook :-P (il giorno di halloween)

Se volete vedere la gallery completa del giorno di halloween a facebook, qui c’è l’album

[ad]

Ubuntu 9.10 Karmic Koala: prime impressioni

Dopo più di una settimana di utilizzo, posso finalmente dire che la nuova versione di Ubuntu (9.10, ndr) mi soddisfa.

Non ci sono nuove features sbalorditive ma è tutto l’insieme che lo rende, a mio parere, un buon sistema.

Con queste ultime parole appena scritte, scatenerò l’ira di qualcuno che non ama ubuntu (a favore di sbrindosw 7, che non ho ancora avuto il piacere di provare, ma dal quale non mi aspetto nulla di buono, per partito preso… ;-) ) o di altri che (beati loro) vivono nel giardino dell’eden (spero di raggiungervi presto ;-), ma temo non prima di gennaio/febbraio 2010 ).

Dicevo… E’ un buon sistema perchè è stabile, veloce e intuitivo… Come chiunque di voi abbia provato almeno una volta ad installare ubuntu sa, il setup (formattazione, partizionamento e installazione del nuovo sistema) è una cosa molto rapida ed indolore. In pochi minuti (non li ho contati perchè durante l’installazione facevo altro, ma credo siano stati circa 15-20) ho fatto backup dei miei vecchi dati, lanciato la live da usb e lanciato il setup.

Avvio:

Schermata davvio di Ubuntu 9.10

Schermata d'avvio di Ubuntu 9.10

Buone sensazioni, nuova versione di grub (cambia poco, cenni di qualche colore in più, ma lo sostanza è sempre quella e funziona) e nuova grafica all’avvio. In davvero pochi istanti il sistema si avvia e ci si presenta senza troppa fatica la schermata di login. Questa forse è la prima piccola novità che non mi piace: infatti per accedere bisogna cliccare sul nome dell’utente e poi digitare la password, mentre essendo l’unico utente, vorrei non dover usare il mouse o comunque “scegliere” tra una sola opzione e scrivere direttamente solo più la password (ma son dettagli e forse son troppo pignolo…). In sostanza il passaggio ad upstart, va a favore dell’avvio più rapido di questa versione. GOOD.

Grafica:

Giudizio anche qui molto positivo. Nuovo tema grafico, comprensivo di nuove icone nella barra superiore, che ricordano un po’ la barra superiore del mac e tutto sembra molto sciccoso…

Nuove icone di sistema

Nuove icone di sistema

Sono poi stati creati altri temi davvero interessanti e volendo (ma io non ho voluto) ce n’è uno davvero molto mac-like… Personalmente sono un po’ contro il far assomigliare un sistema non mac ad uno pseudo melacomputer che non lo è per nessun motivo. Per cui accetto di buon grado questo nuovo tema predefinito, e il suo color marrone-koala-col-mal-di-pancia (per stare in tema di koala) perchè nonostante tutti dicessero che gli faceva schifo sto colore, ubuntu continua ad andare per la sua strada, migliora il “marrone” e riesce quasi a farlo piacere in questa versione. NB: l’ho usato per qualche ora, poi come faccio dalla 6.06 vado in Sistema->Preferenze->Aspetto e modifico il marrone con un bel blu, che preferisco… ;-)

Il mio desktop

Il mio desktop (clicca per ingrandire)

Software Center:

Nothing of new… Niente di nuovo per i non anglofoni… è semplicemente il vecchio “Aggiungi/Rimuovi”, probabilmente con qualche software in più, probabilmente si vuole portare l’idea dell’apple store anche nella comunità ubuntista… Anche se non credo in una sua esplosione o in una comparsa di applicazioni a pagamento direttamente in questo store… In ogni caso funziona bene da parecchie versioni ed è un’aggiunta positiva di questo sistema… In pochi istanti si cerca, si trova e si incomincia ad usare il software di cui si ha bisogno…

Effetti grafici:

Qui arrivano le note dolenti… Sul mio pc funzionano, senza problemi, sono già attivi dalla live e funzionano senza installare nulla, niente, nada e sono parte integrante del sistema base… ma io li ho disattivati… :-) Quando il sistema deve fare qualcosa di pesante viene rallentato, e questo non dovrebbe succedere… Si vorrebbe imitare il mac, ma os x ha qualcosa di magico (hardware chiuso?) per cui quegli effetti grafici sono davvero parte integrante del sistema e non influiscono negativamente sulle prestazioni. Non ho provato gli effetti avanzati, ma il famoso “cubo” dovrebbe esserci, per gli affezionati…

Applicazioni:

Nessuna novità eccezionale, qualche piccolo cambiamento come ad esempio Empathy al posto Pidgin… Proprio Empathy diventa parte integrante del sistema, tra le icone in alto a destra c’è la busta che fornisce facile accesso al client di posta (Evolution) e quello di messaggistica appunto. Altra nota positiva l’ottimo punto raggiunto da google-chrome-unstable ovvero la beta in fase di sviluppo del browser di casa Big G, arrivato ad una versione davvero accettabile ed usabile. Per il resto, tutto come prima. ;-)

In sostanza il sistema è funzionale e non è da disdegnare soprattutto se si pensa che non si deve scucire un euro per avere tutto che funziona… Funziona per lavorarci su? Al solito, se uno non lavora sulla grafica pesante, può essere una buona fonte di risparmio… Come sostengo da un po’ di tempo, se certe aziende o il sistema pubblico provasse ubuntu per le proprie segretarie (la maggior parte usa word ed excel e stop) si potrebbero risparmiare un bel po’ di dindi… pensateci…

Come si può capire sono ampliamente soddisfatto di questo SO e vi consiglio di provarlo :-)
[ad]

Nato di domenica…

Ho scoperto oggi un trick davvero interessante, che permette in php di creare delle variabili con nomi dinamici… :-O Cosa vorra mai dire tutto ciò? Semplice:
Se io voglio che una variabile prenda il nome del contenuto di un’altra variabile, posso farlo così:

$a="pippo";
${$a}="pluto";
echo $pippo;//a video verrà visualizzato: pluto

Mi sono trovato di fronte a questo problema, quando stamattina dovevo leggere dei records da un db, e creare delle variabili che si chiamassero come i campi del db.

Siccome sono pigro (e da qui il titolo di questo post, infatti mio papà dice che sono nato di domenica :-P), per semplificarmi la vita i campi letti dal db sono all’interno di un array associativo del tipo $array[0][‘campodb’] e scorro i risultati con un:

foreach(array_keys($array[0]) as $k){ ... }

Quindi sfruttando questa piccola scoperta in poche righe mi sono letto i valori dal db e creato le variabili contenenti i valori letti dal db.

Il codice finito risulta una cosa del tipo:

$q="SELECT campo1,campo2,...,campo20 FROM tabella WHERE condizioni";
$db->query($q); /**/
if($db->numRows>0){
   foreach(array_keys($db->rows[$i]) as $k){
      ${$k}=$db->rows[$i];
   }
}

Alla fine della fiera avrò una variabile per ogni campo presente nella SELECT con all’interno il valore letto dal db ($campo1, $campo2, … , $campo20).
In alternativa qui sotto ci sono alcuni esempi dell’utilizzo di questa features in php (direttamente da php.net)

define('ONE', 1);
function one() {
    return 1;
}
$one = 1;

${"foo$one"} = 'foo';
echo $foo1; // foo
${'foo' . ONE} = 'bar';
echo $foo1; // bar
${'foo' . one()} = 'baz';
echo $foo1; // baz

Sapevate già tutto? D’oh! Sono sempre l’ultimo a scoprire le cose interessanti! ;-(
[ad]

Istruzioni per l’uso…

Da alcuni giorni discuto con alcuni di voi (Denny e Axel), su come avvisarvi ogni volta che qualcuno posta un nuovo commento ad un mio articolo…

In particolare, come diceva Alex sarebbe comodo ricevere una mail per ogni commento su ogni post del blog. Questo avviene per i proprietari di un blog ma non per tutti gli altri. Dopo aver cercato varie soluzioni ho deciso di installare questo plugin Subscribe To Comments.

Sembra il meno “invasivo” di tutti e lascia alla volontà del lettore la decisione di ricevere una mail per ogni commento oppure no…

L’unica cosa da fare è spuntare la voce “Notificami via mail i prossimi commenti a questo post” al momento dell’inserimento del primo commento, e si riceveranno tutti gli aggiornamenti del post.

Spero sia la soluzione più giusta, ma se avete suggerimenti o idee come sempre sono le benvenute…

Tra l’altro ho anche aggiunto un plugin per Google Friend Connect, così potete usare il vostro account google per commentare :-)
[ad]

Non ci credi che lavoro a facebook? guarda qui! ora ci credi?

Un’azienda vincente si vede anche dalle piccole cose, e questa è una di quelle piccole cose che rendono grande una società…
Ovviamente sto di nuovo parlando di Facebook e questo video è davvero divertente a mio parere…
Pratica comune dei fratelli minori (anche se non ne ho uno, ma ho amici che lo sono) è quella di raccontare frottole ai loro amichetti per vantarsi… Bene cosa va dicendo il fratello di un certo “Dan Muriello”? “Mio fratello lavora a Facebook!”… nessuno gli crede, perciò decide di intervenire il fratellone, pubblicando questo simpatico video:

Che c’è di strano? Be’ in un’azienda di 900 persone, non vi pare anomalo che il CEO della società “perda” 1 minuto per uno stupido video?

Molto probabilmente è proprio questa propensione alla normalità dei suoi fondatori, che facebook è diventato quello che è oggi…
[ad#ad-1]

Indici Full Text in MySQL

Post da nerd, astenersi perditempo… :-P

[NERD MODE ON]

Alcuni giorni fa sul lavoro mi sono cimentato in un nuovo esperimento.

Tutto è partito dal problema di dover indicizzare dei contenuti, sui quali poi eseguira una ricerca “generica” in stile google (ovvero un unico campo che riceve un insieme di parole, che possono corrispondere a diversi campi del db).

Bene non voglio stare qui a spiegare nei dettagli la soluzione che abbiamo deciso di adottare, ma in sostanza mi sono ritrovato con un campo testuale con dentro tutte le parole che corrispondono ad una chiave.

Ok, e ora? L’idea iniziale è stata quella di eseguire una query con ” LIKE ‘%parola%’ ” in OR con altre LIKE simili, per ogni parola inserita dall’utente. Una volta implementata, tutto funzionava (avevo 3 record in quella tabella). Siccome per scrupolo avevo anche implementato un timer che misurasse il tempo di esecuzione, ho provato a fare un test pesante… Con python mi sono creato un programma per scrivere su file qualche centinaia di query di inserimento su quella tabella, lo eseguo e popolo il db. Ora ci sono 1000 record (non sono ancora abbastanza ma rende già l’idea), rilancio la ricerca e il timer segna 0,3 secondi. Buono no? sì ma sono 1000 record, se mai i record dovessero essere 100K o ancora di più? Mmm non mi soddisfa questa cosa. *Googleing*….*Googleing*….*Googleing* FULL TEXT INDEX

Cos’è? In MySQL è possibile definire su un campo di una tabella, un indice FULL TEXT, ovvero una struttura che indicizza in maniera ottimale tutte le parole presenti in uno o più campi. Ci sono alcune restrizioni però. Quella più importante è che la tabella non può essere creata con il motore InnoDB (il più comune perchè supporta query multiple in una singola transazione). Inoltre le stringhe da cercare con le query dovranno avere più di 3 caratteri (altrimenti bisogna andare a modificare le impostazioni di MySQL, cosa impossibile se non si ha accesso al server, e comunque relativamente complicata da fare).

Detto ciò i passi da fare sono i seguenti:
Definiamo la tabella e l’indice:

CREATE TABLE test (
id INT UNSIGNED   AUTO_INCREMENT NOT NULL PRIMARY KEY,
keywords TEXT,
[keywords2] VARCHAR(255),
FULLTEXT (keywords[,keywords2])
);

[Tra le parentesi quadre ho messo il secondo campo, spero si capisca che è opzionale…]

Fatto questo e dopo aver popolato la tabella, possiamo provare la nostra ricerca con la seguente query:

SELECT * FROM test WHERE MATCH(keywords) AGAINST('pippo')

In questo modo andremo a dire a MySQL di cercarci l’esatta parola ‘pippo’ all’interno del campo keywords.

Una cosa che non si trova facilmente nelle guide che ho seguito (ho fatto perciò riferimento alla documentazione ufficiale di MySQL) è che così facendo si effettua una ricerca in linguaggio naturale, che è ottimale per indicizzare frasi di senso (più o meno) compiuto. Il “difetto” se può definirsi così, è che con questo tipo di ricerca alcune parole non verranno trovate, infatti MySQL utilizza un array di stopwords che verranno saltate a piè pari dalla ricerca. Per effettuare una ricerca su tutte le parole e utilizzando operatori logici (ad esempio “+” significa OR mentre “-” esclude la parole che segue questo simbolo) bisogna effettuare una ricerca IN BOOLEAN MODE, più lenta, ma più efficace. La nostra query dovrà quindi essere modificata in:

SELECT * FROM test WHERE MATCH(keywords) AGAINST('*pippo*,*pluto*' IN BOOLEAN MODE)

In questo modo si effettua una ricerca all’interno del campo keywords, delle parole che contengono al loro interno “pippo” o “pluto”. Il carattere “*” funziona un po’ come il “%” nelle LIKE.

A questo punto manca un ultima chicca. La funzione MATCH (..) AGAINST(..) ritorna un valore che rappresenta la pertinenza delle parole cercate nel campo. Nel BOOLEAN MODE sarà il numero di parole trovate nel campo, mentre con la ricerca in linguaggio naturale ci sarà un algoritmo che calcola la pertinenza con delle regole strane ma che funzionano ;)

Quindi per sfruttare al massimo questo algoritmo bisognerà scrivere la query con:

SELECT *, MATCH(keywords) AGAINST('*pippo*,*pluto*' IN BOOLEAN MODE) as pertinenza FROM test WHERE MATCH(keywords) AGAINST('*pippo*,*pluto*' IN BOOLEAN MODE) ORDER BY pertinenza DESC

Così facendo ordiniamo i risultati dal più pertinente, a quello meno.

Risultato? sui miei 1000 records il tempo si è dimezzato, nel caso peggiore… Risultato accettabile no? :-)

Non vi resta che provare per credere, buon divertimento!

[NERD MODE OFF]
[ad#ad-1]