RSS
 

Android Usefull Docs

27 lug

Today i surfed the web searching about guidelines and best practices on writing android apps. In this in-depth search i found some useful slides and tips:

1. Android Ui Design Guidelines

A slideshare with some usefull tips about android ui design:

2. Android Ui Stencil and PSDs

I also found a great resource where there are some other stencils and psds to download.

Link

3. Android icon templatepack

I also noticed the Google Android team released the icon template pack so you can easily design you’r own menus and icons using their psd with a lot of presets.

Link

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 

How to use codeigniter with eclipse helios

24 giu

Codeigniter is a great framework. Eclipse is a very nice IDE. Why not using them both when writing our own apps ?

After some googling i found a way to get auto-completion with codeigniter on eclipse.

Requirements:

  1. Xampp : I suggest using xampp lite.
  2. Codeigniter: Obviously
  3. Eclipse Helios for PHP Development : :)

Read the rest of this entry »

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 
 

How to manage custom post type category template on wordpress 3.0

18 giu

Today wordpress 3.0 has been released. Since i started to play with it almost immediately i found some troubles when i was trying to display all the post in the new wordpress custom type into one single page.

The goals:

  1. I wanted to create a custom template for these custom posts.
  2. I wanted to create a custom archive template for these custom posts

I found immediately the solution for the first “issue” . WordPress 3.0 templating system would search for a file named single-[custom post type name].php inside the theme directory so i simply copied and pasted the single.php into the new file and made some tiny modifications.

The second goal was a little bit difficult to achieve. I googled it and i found some articles talking about this issue but none of them gave  ma an easy and working solution.

So i decided to take some parts from them and make my own solution.

Note: The custom post type name is “androidapps”

I did create a new useless plugin that fixed my issues. the source coude is the following:

/*
Plugin Name: Androidapss
Plugin URI: http://i love you.com
Version: 1.0.78
Description: A very useless plugin
Author: Baccega Andrea
Author URI: http://www.andreabaccega.com
Tags: seo,google,link,optimization
*/
add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');
add_action("template_redirect",'buch_template_redirect');
// Remember to flush_rules() when adding rules
function flushRules(){
	global $wp_rewrite;
   	$wp_rewrite->flush_rules();
}

// Adding a new rule
function wp_insertMyRewriteRules($rules)
{
	$newrules = array();
	$newrules['androidapps/feed/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?&feed=$matches[1]&post_type=androidapps';
	$newrules['androidapps/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?&feed=$matches[1]&post_type=androidapps';
	$newrules['androidapps/page/?([0-9]{1,})/?$'] = 'index.php?&paged=$matches[1]&post_type=androidapps';
	$newrules['androidapps/?$'] = 'index.php?paged=1&post_type=androidapps';
	return $newrules + $rules;
}

// Adding the id var so that WP recognizes it
function wp_insertMyRewriteQueryVars($vars)
{
    array_push($vars, 'id');
    return $vars;
}

function buch_template_redirect()
{
	global $wp;

	$muley_custom_types = array("androidapps");

	if (in_array($wp->query_vars["post_type"], $muley_custom_types))
	{
		if ( is_robots() ) :
			do_action('do_robots');
			return;
		elseif ( is_feed() ) :
			do_feed();
			return;
		elseif ( is_trackback() ) :
			include( ABSPATH . 'wp-trackback.php' );
			return;
		elseif($wp->query_vars["name"]):
			include(TEMPLATEPATH . "/single-".$wp->query_vars["post_type"].".php");
			die();
		else:
			include(TEMPLATEPATH . "/".$wp->query_vars["post_type"].".php");
			die();
		endif;

	}
}

Well all the trick is done by two functions

  • buch_template_redirect
  • wp_insertMyRewriteRules

The first one buch_template_redirect would hack the template functions and would tell wordpress to search for

  • single-androidapps.php for single posts
  • androidapps.php for archive

The second wp_insertMyRewriteRules which is copied from the wordpress codex website would add some rewrite rules to wordpress so he will knows how to route the requests :) .

Now if you navigate through http://www.andreabaccega.com/androidapps you’ll see the archive template dedicated to the posts inside the “androidapps” type.

How would you use my code for your meanings?

Simply create a new plugin with the code above, then replace all those androidapps instances with your custom post type name.

Enjoy :)

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 

No Comments

Posted in Seo

 

Cpu al 100% e non trovate il motivo? Eccone uno

29 apr

Premetto che parlo da profano e quello che scriverò in quest’articolo potrebbe essere errato però io ho risolto il mio problema nel modo che andrò scrivendo perciò voglio raccontarvelo.

Cominciamo con il dire che ho avuto non pochi problemi con la riproduzione di video in alta qualità. Infatti, video in 720p erano diventati off-limits per me. Iniziai a pensare che il problema fosse relativo alla scheda video, che per inciso ha subito un operazione di esportazione della sua ventola di raffreddamento, perciò come prima soluzione logica andai subito in uno store e comprai una ati qualsiasi ( Tanto per quello che ne devo fare io ).

Una volta tornato a casa e dopo aver montato la scheda rimasi sorpreso come nulla cambiò. Perciò dopo essermi masturbato la mente con qualche pippa mentale arrivai alla conclusione che forse il mio pc era infetto da qualche virus che oltre ad infettare rompesse le palle alla cpu.

La soluzione fù quella di scaricare avg free e far partire una scansione che ovviamente diede risultati ( in tempi epici ) deludenti: Nel senso che non trovai nulla  di particolarmente significativo.

Perciò, rassegnato e con la convinzione di aver bisogno di un bel upgrade hardware spesi circa 450euro di nuovo hardware ( Per la cronaca: intel i5 750 , Asus P7H55-M Pro , Corsair 3x2GB 1600Mhz ).

Ma nel frattempo il mio pc diventava sempre più lento e inutilizzabile perciò decisi di comprare una bombola di aria compressa per pulirlo un po’ da quella polvere che nel tempo si accumula inesorabilmente sulle ventole e i dissipatori dei nostri pc.

Torno a casa , lo pulisco, lo riaccendo ed ecco che si presenta la sorpresa…. Quasi subito mi accorgo della differenza di velocità. Ora non solo posso guardare i video in 720p . Ma posso guardarne 3 contemporaneamente senza rallentamento alcuno … perciò ecco la spiegazione che mi sono dato:

Considerato il fatto che la polvere aveva fatto delle mie ventole e dissipatori la sua nuova casa,  le vie resipiratorie della cpu erano praticamente inesistenti e portavano i due core a temperature veramente impraticabili; quest’innalzamento della temperatura della cpu probabilmente causava uno scaling forzato della frequenza di clock ( Effettuato automaticamente dall’hardware nel tentativo di ridurre la temperatura della cpu ) . Perciò il mio pc, operando su ben altre frequenze da quelle alle quali ero abituato , era divenuto lentissimo.

Conclusione:

Prima di comprare del nuovo hardware, date una pulita a quello che avete già . Potrebbe, incredibilmente, aumentare le prestazioni del vostro pc.

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 
1 Comment

Posted in Varie

 

Come configurare Nginx davanti ad apache per ottimizzare e velocizzare il caricamento dei vostri siti web

07 apr

Per prima cosa dovete aver già installato nginx e spostato apache su un altra porta/ip. Una volta fatta questa procedura bisognerà semplicemente configurare nginx in modo da istruirlo sul da-farsi.

Premetto che su quest'esempio che porterò ho spostato apache vero in localhost 127.0.0.1. Il mio obiettivo era quello di utilizzare nginx per servire tutte le immagini e apache per servire le richieste dinamiche in php o altro.

Perciò , facendo risiedere nginx e apache sulla stessa macchina, ho potuto evitare di utilizzare il modulo di caching di nginx ( dato che accederà direttamente ai files tramite il filesystem ).

CODE:
  1. http {
  2.     include       mime.types;
  3.     default_type  application/octet-stream;
  4.     sendfile        on;
  5.     large_client_header_buffers 4 8k;
  6.     client_header_buffer_size 4k;
  7.     keepalive_timeout  65;
  8.     #proxy_cache_path /tmp/nginx levels=1:2:2 keys_zone=cache:100m max_size=1024m;
  9.  
  10.     server {
  11.         listen       123.123.123.123:80;
  12.         server_name  www.example.com;
  13.         error_log  /usr/local/nginx/logs/error_example.log;
  14.        
  15.         location ~* ^.+.(jpg|jpeg|gif|png|ico|css|txt|js)$ {
  16.             root /var/www/example.com/web;
  17.         }
  18.         location / {
  19.             #proxy_cache cache;
  20.             #proxy_cache_valid any 1m;
  21.  
  22.             if ($http_user_agent ~* .*(Android|2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile|iPhone|iPod|KYOCERA/W$
  23.                 rewrite ^(.*)$ http://m.example.com$1 permanent;
  24.             }
  25.             proxy_buffer_size 8k;
  26.             proxy_pass http://127.0.0.1:80;
  27.             proxy_set_header X-Real-IP $remote_addr;
  28.             proxy_set_header Host $host;
  29.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  30.  
  31.  
  32.  
  33.         }
  34.     }
  35. }

Come potete vedere la configurazione è abbastanza semplice. Una piccola nota: Le righe con il # sono dei commenti. Li ho volutamente lasciati perchè quelle direttive, qualora decommentate, abiliterebbero il caching dell'intero sito tramite il modulo di nginx.

Ho lasciato anche uno statement condizionale che verifica se la richiesta proviene da un browser mobile . In quel caso nginx effettua un redirect a m.example.com. Ho pensato di lasciarlo perchè a qualcuno potrebbe effettivamente servire una configurazione simile.

Tuttavia c'è un altro problema che ho dovuto risolvere. Infatti apache deve essere in grado di riconoscere l'ip del visitatore e non l'ip del proxy nginx. Il motivo ? Alcuni programmi come vbulletin fanno alcuni controlli di sicurezza sugli ip.

Questo problema l'ho risolto installando su apache un modulo chiamato rpaf che fa proprio al caso nostro. Ovviamente in questo howto non spiegherò come installarlo ma vi darò la mia configurazione corretta per nginx :)

CODE:
  1. LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.so
  2. RPAFenable On
  3. RPAFsethostname On
  4. RPAFproxy_ips 127.0.0.1 123.123.123.123
  5. RPAFheader X-Forwarded-For

L'unica direttiva alla quale stare attenti è sicuramente RPAFproxy_ips dove dovete specificare tutti gli ip del vostro proxy nginx :)

I risultati

I risultati sono sbalorditivi, utilizzando Apache Benchmarking ( ab in console ) con 2000 richieste ( 100 concorrenti ) il numero di richieste al secondo completate raddoppia passando da 5000ca a 11000ca. Senza contare che il footprint di memoria utilizzato da nginx è veramente più basso.

Vale la pena provarlo ;)

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 
No Comments

Posted in Varie

 

Come Controllare se datePicker di jQuery è caricato

06 apr

Penso sia più di una vita che non scrivo un articolo di programmazione.

Beh oggi, per lavoro, ho dovuto scrivere del codice javascript e per motivi che trascendono dallo scopo di quest'articolo ho dovuto , ad un certo punto della programmazione, controllare se datePicker era caricato.

Ci sono dei casi, infatti, che il javascript viene caricato da altri javascript e non sempre abbiamo la certezza ( Sopratutto cross-browser ) di sapere se il file js caricato progrmamaticamente è stato effettivamente "accettato" dal browser o meno.

Perciò mi son dovuto armare di pazienza e trovare un modo per vedere se datePicker era caricato o meno.

Per completezza, nel momento in cui scrivo, ho utilizzato il datepicker v2 che trovate a questa pagina.

Ebbene, il barbatrucco è contenuto nella seguente riga di codice:

JAVASCRIPT:
  1. function startX() {
  2.    if ( typeof jQuery().datePicker != 'function') {
  3.       setTimeout('startX()', 200);
  4.       return;
  5.    }
  6.    // Altro codice da inserire in caso datePicker sia stato correttamente caricato
  7.  
  8. }

Ebbene, non faccio altro che controllare ogni 200 ms se datePicker è stato correttamente caricato e in caso positivo eseguo il codice dopo l'if.

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 

Simple Gps Info for Android

20 mar

Simple Gps Info is a simple android application that would help you know and share your gps coordinates with your android smartphone. The code is really fast and efficient and the app consist on a simple to understand layout without any kind of menu.

Once started, Simple Gps info for Android will start automatically your android gps ( Even if it's disabled by you ) and then it will start seeking for a gps-fix.

In the meanwhile you could also look at the radar that would rotate following  the north pole. You can try and see where is the north-pole by simply rotating your smartphone. Furthermore the radar will show you the satellites you're smartphone is receiving.

When the Gps sensor get the fix you'll start to see the coordinates changing and you'll be able to share your location with your android phone.

In order to accomplish this task you've to push the bottom-placed button and then choose how to share it.

Right now Simple Gps info will support the following way to share the location:

  • Facebook
  • Twitter
  • Sms
  • Gmail
  • Others activity implementing text/plain content-type intent receiver.

Here are some screenshots of the first version. ( Now improved with better graphics )

If you've installed Barcode Scanner on your android phone you can scan this:

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 
 

Il Vincitore di Xfactor preannunciato da Google

02 dic

Come feci qualche anno fa per le elezioni italiane, mi ritrovo qualche ora prima dell'annuncio del vero vincitore di xfactor a fare una previsione sul candidato papabile.. come? E' semplice: Uso google.

Come moltissimi di voi sapranno, google è il motore di ricerca più utilizzato al mondo. Questo permette a google di prevedere cose semplicemente analizzando il trend delle ricerche effettuate attraverso il suo box di ricerca.

Ebbene, nel momento in cui scrivo, 23.23 di mercoledi 2 dicembre, google fornisce questi dati:

xfactor-previsione-google

marco mengoni, yavanna, giuliano rassu

Il grafico sopra potrebbe apparire un pochino illeggibile . Partiamo con lo spiegare i colori:

  • marco mengoni
  • yavanna
  • giuliano rassu

Intuitivamente, per chi non sa leggere questo tipo di grafici, abbiamo sull'asse orizzontale il tempo e su quello verticale un numero indicativo che suggerisce il volume di ricerca su google per quella kw.

Detto questo è facile intuire che marco mengoni sia quello che desta più interesse su google.

Conclusioni

La mia previsione, basandomi sui dati di google, è ovviamente la vincita di marco mengoni. Basta aspettare qualche altro minuto per vedere se avevo ragione.

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 
1 Comment

Posted in google

 

Come creare una richiesta di scambio link efficace

02 ott

scambio-link

Esiste un modo, una forma, un modello per creare delle richieste di scambio link più efficace? La risposta è Si.

Premetto con il dire che non ho alcun test, ne alcuna statistica che supporti le mie teorie, però per esperienza personale alcune richieste che ricevo non le leggo nemmeno e altre invece le valuto con maggiore interesse e attenzione. Perchè?

Normalmente, infatti, le richieste di scambio link che mi arrivano assomigliano a qualcosa tipo:

Ciao,

mi piacerebbe scambiare un link con te.

Alcuni addirittura si dilungano con lo spiegarmi che fare queste procedure di scambio link mi faranno salire maggiormente nei motori di ricerca.. ( LOL :) ).

Ebbene, queste richieste, un po' piatte nel loro essere, le boicotto senza nemmeno andare a vedere il sito richiedente.

Esistono invece delle richieste meglio formate, delle richieste che leggo volentieri e che sono molto più propenso nell'accettare.

Pensieri e teorie assolutamente riconosciute ma che vanno riportate:

1. Fattore : scrivere il nome del sito o considerazioni di questo nel testo

Ho osservato, un po per caso, che le richieste che mi destavano maggiore interesse erano quelle che riportavano il mio nome o che scrivevano qualcosa che centrasse con il sito dove ricevevo la richiesta.

Infatti, inserire il mio nome o qualcosa che mi facesse capire che la richiesta non era automatizzata mi dava un impressione del tipo:

Cazzo, questa persona ha perso veramente del tempo sul mio sito e se mi scrive significa che le è piaciuto il contenuto

La differenza dalle richieste piatte e senza nome riportate ad inizio articolo e queste è proprio la percezione che ha il destinatario che si sente, in qualche modo, veramente preso in causa e capisce che il mittente è in qualche modo realmente interessato al proprio sito.

2. Fattore: Oggetto con il mio nome e nome del sito

Anche questo è un fattore riconosciuto nell'e-mail marketing. Scrivere il nome della persona da contattare ( se lo si conosce ) oppure il nome del sito internet nell'oggetto dell'e-mail aumenta positivamente non solo la risposta delle persone, ma anche porta molte più persone a compiere una determinata azione. ( in questo caso effettuare uno scambio link)

Una richiesta fatta bene.

Tenendo a mente quanto detto fin'ora vorrei analizzare il corpo di un e-mail che mi è arrivata di richiesta dove il soggetto conteneva il mio nome e il body delle-mail era circa questo:

Ciao, ho visto il tuo sito internet e lo trovo veramente interessante. Complimenti !

Volevo proporti uno scambio link con il mio sito. Nel frattempo ti ho già inserito nel mio sito a questa pagina : http://www......

Nell resto dell'articolo spezzo in parti il precedente messaggio e lo analizzo in alcuni dettagli:

Normalmente le richieste che si ricevono, essendo piatte, non inducono nessuna "sensazione" nel lettore; questa proposta, invece, è completamente differente e induce nel lettore, in questo caso io, una sensazione di debito . Il messaggio in questione può essere suddiviso in 3 parti diverse:

1. Parte smielosa ( ma che non fa mai male )

Ciao, ho visto il tuo sito e mi pare interessante.

Scrivendo questa semplicissima frase, peraltro comune per tutte le richieste di scambio link, si cerca di portare il proprio apprezzamento al destinatario che probabilmente gradirà maggiormente la parte restante del messaggio aumentando in questo modo le possibilità di scambio link :)

2. Il nocciolo della questione

Volevo proporti uno scambio link con il mio sito.

Questa parte della richiesta non credo necessiti ulteriori approfondimenti :)

3. Il vero trucco

Nel frattempo ti ho già inserito nel mio sito a questa pagina : http://www......

Questa frase è proprio una bomba atomica secondo me e vi voglio spiegare perchè:

Ormai il 90% dei proprietari di siti internet hanno un idea, più o meno vaga di come sia importante sviluppare la sfera off-page dei fattori seo. 9 volte su 10 quando richiederete uno scambio link il destinatario conoscerà già dei mezzi per comparare  l'importanza del vostro sito e quindi sarà in grado di capire se la vostra richiesta possa effettivamente portargli dei benefici.

Appurato che quando andiamo a scrivere una richiesta di scambio link ci troveremo di fronte qualcuno che sa di cosa parliamo e come comportarsi, la frase sopracitata è un barbatrucco per indurre queste persone a pensare che sono in debito con voi. Per fare questa piccola mossa astuta basta fare il primo passo e inserire il link del destinatario precedentemente all'invio della mail dando loro anche la possibilità di controllare l'effettivo inserimento (inserendo il link ).

Il destinatario, pensando di essere in debito con voi,  sarà maggiormente portato a contraccambiare il vostro link ( magari anche di pagerank/trustrank maggiore).

Conclusioni

Se dovete fare una campagna di scambio link, utilizzare dei mezzi automatici potrebbe non rendere quanto spendere del tempo per ogni sito target e creare una richiesta ad hoc per ogni sito web.

PS: Tutte le riflessioni e le considerazioni riportate in quest'articolo sono mie e non hanno base scientifica e/o statistica. Mi pareva giusto condividere con quei pochi che mi leggono le mie riflessioni! :)

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 
1 Comment

Posted in Seo

 

Nuovo strumento Seo: Il link semi-reciproco

02 ott

Alcuni giorni fa, forse settimane, ho ricevuto una richiesta di scambio link apparentemente corretta.

Il ragazzo che proponeva lo scambio link mi aveva addescato con una frase del tipo:

Ciao, ho visto il tuo sito e mi pare interessante.

Volevo proporti uno scambio link con il mio sito. Nel frattempo ti ho già inserito nel mio sito a questa pagina : http://www......

Secondo la mia visione della SEO un link reciproco non ha moltissimo senso negli ultimi tempi, però ho deciso di valutare lo stesso la richiesta e verificare  se effettivamente mi aveva inserito effettivamente nella pagina linkatami. ( e poi mi sono anche accorto perchè mi sono interessato particolarmente a questa richiesta).

Una volta entrato nel sito mi sono meravigliato del fatto che il link al mio sito effettivamente era presente ma qualcosa mi suonava strano così ho deciso di indagare a fondo sul sorgente della pagina se percaso il link aveva un bel rel=nofollow; purtroppo la mia sensazione ( un po diffidente ) era del tutto sbagliata..

Dopo alcuni minuti mi sono deciso a navigare il link senza il supporto al javascript ed ecco che l'arcano era svelato! nessun link presente nella pagina senza il supporto al js.

In questo modo , un utente un po' meno attento, poteva essere indotto a pensare che il link fosse effettivamente presente nella pagina e quindi portato a "restituire il favore" inserendo quel bel sito in una blogroll "normale" . Il risultato? Era un link diretto al sito web.

Eh già.. nonostante google abbia affermato e confermato che riconosce un link generato in javascript (con particolari parametri), questo non era sicuramente uno di quei casi, dato che il link era estrapolato dai feed json della blogroll di delicious.

A questo punto, vi sarà chiaro il perchè del nome "Link semi reciproco" :)

Come mettere in piedi un sistema di link semi-reciproco?

Lungi da me darvi il codice javascript per creare questo barbatrucco. Vi basti sapere che il tutto può essere messo in piedi con una 20na di righe js/jquery e un file txt(se proprio si vogliono fare le cose fatte bene :)  ).

Una volta fatto il codice js che prende il contenuto del txt, vi basterà lanciare la vostra funzioncina js alla fine del caricamento della pagina. Meglio ancora se si utilizza la funzione .ready()  di jQuery .

Conclusioni:

Penso che questi trucchetti da strapazzo possano aiutare a far salire nelle serp un sito ( sopratutto se i siti scelti come "vittime" sono coerenti con il target del sito ) , ma sicuramente fanno perdere un botto di reputazione... Ne vale la pena? Può essere :)

Dopo tutta questa storia, c'è anche la componente marketing che però ho deciso di dividere in un secondo post disponibile qui:

http://www.andreabaccega.com/seo/come-creare-una-richiesta-di-scambio-link-efficace/

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx
 
1 Comment

Posted in Seo

 
 

wp