Ottenere il massimo zoom per Google Maps

Mi è capitato spesso, lavorando con le API di Google Maps, di dover impostare il massimo zoom disponibile per una certa località. Questo è un problema perchè Google Maps non offre lo stesso dettaglio per tutte le zone del mondo. La spiaggia di Bondi di Sydney, per esempio, arriva al livello di zoom 22, mentre nelle zone interne dell’Oceano Pacifico arriviamo al massimo al livello 9. Fino ad oggi non ci era fornito il massimo livello di zoom disponibile e di conseguenza si doveva scegliere un livello “politico” che potesse statisticamente andar bene alla gran parte dei luoghi.

massimo-zoom-google-maps

Continua a leggere

12 Trucchi da sapere per usare jQuery

Quando si scrive in jQuery si impara facilmente che esistono diverse maniere di implementare la stessa cosa. La tendenza è di migliorare sempre più scrivendo meno righe di codice per ottimizzare il sorgente. Spesso si cerca di trovare anche la strada più elegante per risovere un problema. Ecco quindi un elenco di trucchi che potrebbero esservi utili

trucchi per jquery

1. jQuery cheatsheets

Prima di tutto è sempre meglio avere qualche cheatsheet sotto mano. In rete ne ho trovati 3:

jQuery Cheatsheet da ColorCharge
jQuery Cheatsheet from ColorCharge WebBlog

jQuery Cheatsheet da Gscottolson WebBlog
jQuery Cheatsheet from Gscottolson WebBlog

jQuery Cheatsheet da From Far East WebBlog
jQuery Cheatsheet from From Far East WebBlog

2. Una scorciatoia per jQuery: $(document).ready

Questo è un ottimo suggerimento, perchè non mi ricordo mai come si scrive questo:

$(document).ready(function() {  
//write your code here
}

Si può scrivere equivalentemente attraverso una funzione anonima, sono funzionalmente uguali:

$(function(){
//write your code here
}); 

3. Aprire in una nuova finestra

L’attributo "target" nei collegamenti "<a>" non è un attributo valido per lo standard STRICT W3C. Possiamo aggirare il problema utilizzando l’attributo REL e un po’ di codice jQuery per ricreare l’attributo TARGET in modo dinamico mantendo sempre valido il nostro sorgente HTML. E’ troppo semplice per funzionare, eppure è così:

	$('a[rel=external]').attr('target','_blank');
<a href="http://www.queness.com" rel="external">Queness in new window</a>

4. Rendere l’intero LI cliccabile

Questo trucco è veramente utile quando usi i punti elenco (LI) per creare menu. Quello che fa è rendere cliccabile l’intera area coperta dal LI (anche fuori da eventuali link A) e cerca automaticamente l’indirizzo di destinazione  tra i link contenuti nel LI.:

	$("ul li").click(function(){
	  //get the url from href attribute and launch the url
	  window.location=$(this).find("a").attr("href"); return false;
	});
<ul>
	<li><a href="home">home</a></li>

	<li><a href="home">about</a></li>
	<li><a href="home">contact</a></li>
</ul>

5. Cambiare tra diversi fogli di stile

Vuoi avere design diversi all’interno del vostro sito e devi cambiare dinamicamente tra diversi fogli di stile. Puoi farlo con jQuery facilmente:

	$("a.cssSwitcher]").click(function() {
		//swicth the LINK REL attribute with the value in A REL attribute
		$("link[rel=stylesheet]").attr({href : this.attr(rel)});
	});
<link rel="stylesheet" href="default.css" type="text/css">
......
<a href="#" class="cssSwitcher" rel="default.css">Default Theme</a> 

<a href="#" class="cssSwitcher" rel="red.css">Red Theme</a> 
<a href="#" class="cssSwitcher" rel="blue.css">Blue Theme</a>

6. Disabilitare il click destro del mouse

Qualche nostro cliente ci chiede di poter disabilitare sul loro sito il click destro del mouse per occultare le funzioni messe a disposizione o per creare un proprio menu contestuale. Ecco come farlo in jQuery:

$(document).bind("contextmenu",function(e){
	//you can enter your code here, e.g a menu list
		
	//cancel the default context menu
    return false;
});

7. Leggere le coordinate x e y del puntatore del mouse

Questo script catturerà le coordinate x e y del puntatore del mouse e le mostra sulla pagina.

$().mousemove(function(e){
	//display the x and y axis values inside the P element
    $('p').html("X Axis : " + e.pageX + " | Y Axis " + e.pageY);
});
<p></p>

8. Impedire il comportamento di default

Può capitare di usare il tag A per altri scopi che condurre l’utente ad un link. Succede però che quando si clicca, il browser ci porta ad inizio pagina perchè l’attributo HREF è valorizzato con il cancelletto (#). Per risolvere questo problema, dobbiamo disabilitare il comportamento di default dei link A:

$('#close').click(function(e){  
     e.preventDefault();
}); 

/* OR */

$('#close').click(function(){  
    return false;
}); 
<a href="#" id="close"></a>

9. Il bottone "torna su"

Un utile bottone "torna su" è possibile implementarlo attraverso uno specifico plugin. Con scrollTo si creerà un simpatico effetto di risalita della pagina. Scarica il plugin jQuery scrollTo
$(‘#top’).click(function() {
$(document).scrollTo(0,500);
}

<script type="text/javascript" src="js/jquery.scrollTo-min.js"></script>
......
<a id="top" style="cursor:hand;cursor:pointer">
Back to top

10. Colonne di altezza uguale

Questo script è abbastanza utile anche se non ho ancora avuto modo di provarlo. Se vuoi colonne della stessa altezza, questo script risponderà alle vostre esigenze:

$(document).ready(function() {
    setHeight('.col');
});

//global variable, this will store the highest height value
var maxHeight = 0;

function setHeight(col) {
	//Get all the element with class = col
	col = $(col);
	
	//Loop all the col
    col.each(function() {        
	
		//Store the highest value
		if($(this).height() > maxHeight) {
            maxHeight = $(this).height();;
        }
    });
	
	//Set the height
    col.height(maxHeight);
}
<div class="col" style="border:1px solid">Column One<br/>
With Two Line<br/>
And the height is different<br/><br/>

</div>
<div class="col" style="border:1px solid">Column Two<br/><br/></div>

11. Scrivere il vostro selettore personale

Questo è un trucco per utenti avanzati:

//extend the jQuery functionality
$.extend($.expr[':'], {  
	
	//name of your special selector
    moreThanAThousand : function (a){
		//Matching element
		return parseInt($(a).html()) > 1000;
	}
});  
	
	
$(document).ready(function() {
	$('td:moreThanAThousand').css('background-color', '#ff0000');
});

12. Ridimensionamento del font

Questo trucco si trova spesso nei siti e vi permentte di ridimensionare il corpo del carattere per adattarlo meglio alle vostre esigenze di lettura:

$(document).ready(function(){

	//ID, class and tag element that font size is adjustable in this array
	//Put in html or body if you want the font of the entire page adjustable
	var section = new Array('span','.section2');
	section = section.join(',');

	// Reset Font Size
	var originalFontSize = $(section).css('font-size');  
		$(".resetFont").click(function(){
		$(section).css('font-size', originalFontSize);
	});
	// Increase Font Size
	$(".increaseFont").click(function(){
		var currentFontSize = $(section).css('font-size');
		var currentFontSizeNum = parseFloat(currentFontSize, 10);
		var newFontSize = currentFontSizeNum*1.2;
		$(section).css('font-size', newFontSize);
		return false;
	});
  
	// Decrease Font Size
	$(".decreaseFont").click(function(){
		var currentFontSize = $(section).css('font-size');
		var currentFontSizeNum = parseFloat(currentFontSize, 10);
		var newFontSize = currentFontSizeNum*0.8;
		$(section).css('font-size', newFontSize);
		return false;
	});
});
<a class="increaseFont">+</a> | 

<a class="decreaseFont">-</a> | 
<a class="resetFont">=</a>


<span>Font size can be changed in this section</span>
<div class="section1">This won't be affected</div>

<div class="section2">This one is adjustable too!</div>

(tratto da Queness)

Riuscirà il Javascript a sostituire il Flash? Google ci sta provando

Quando un cliente chiede un sito con "effetti speciali" come animazioni, suoni o con interattività particolari, noi programmatori web pensiamo subito, nostro malgrado, ad un’applicazione Flash. Lo svantaggio è quello di avere una scatola nera che gli spider non riescono a indagare e ovviamente si è limitati ai browser che supportano il player di Adobe.

Con l’avvento dei framework per Javascript, come jQuery, YUI o Mootools si è spostato l’ago della bilancia verso il Javascript a discapito del Flash. Questa tendenza si rafforza sempre più. Guardate qua. Si chiama ChromeExperiments ed è un sito supportato da Google che raccoglie tutti gli script "edge", ovvero di confine, script spinti all’estremo, per valorizzare la potenza di Javascript.

esperimenti javascript

Sono chiamati "esperimenti" e funzionano solo con l’interprete Javascript integrato in Google Chrome, il browser fatto su misura per il grande motore di ricerca  di Mountain View. Serve molta fede per poter credere che siano stati fatti con Javascript ma questo lo certifica Google, una garanzia.

We think JavaScript is awesome. We also think browsers are awesome. Indeed, when we talk about them, we say they are the cat’s meow – which is an American expression meaning AWESOME.

In light of these deeply held beliefs, we created this site to showcase cool experiments for both JavaScript and web browsers.

These experiments were created by designers and programmers from around the world. Their work is making the web faster, more fun, and more open – the same spirit in which we built Google Chrome.

Naturally, if you’ve made something fun and fast with JavaScript, please send it in. We can’t post everything, but we’d love to see it.

Thanks for visiting, and happy experimenting.

Un framework per Indesign

In questi giorni sto lavorando su un nuovo progetto che ha l’obiettivo di creare un framework per Adobe Indesign. Il progetto è ambizioso e stiamo già vedendo i primi risultati.

un framework per indesign

Nel dettaglio, l’idea è di creare un insieme di comandi, un framework appunto, che possa aiutare lo sviluppatore a creare script per l’impaginazione automatica di listini prezzi, cataloghi, libri, ecc… Se poi aggiungiamo anche la lettura dei dati da un database il gioco è fatto. Le pubblicazioni saranno così automatizzate e l’utente potrà, per esempio, rigenerare quante volte vuole il proprio listino prezzi semplicemente rilanciando lo script .

Forse non tutti sanno che Adobe Indesign oltre ad avere un’interfaccia grafica per l’impaginazione visuale, ha anche un’API che consente di lanciare comandi attraverso del codice sorgente. Interpreta 3 linguaggi: Javascript, VB e AppleScript. Visto la tendenza, abbiamo deciso di intraprendere la strada del Javascript e di creare un framework tipo jQuery per il web.

In questo articolo vorrei solamente segnalarvi una pagina che abbiamo trovato interessante perchè fornisce alcune indicazioni utili per “programmare ad oggetti” in Javascript, argomento che non avevo mai approfondito fino a questo momento. Devo dire che il supporto al programmazione ad oggetti è quanto meno deludente in Javascript, soprattutto quando si arriva da un’esperienza di Ruby on Rails. Su questa pagina vengono indicati i sistemi per definire variabili e metodi statici, privati e pubblici.

Se siete interessati a questo framework scrivetemi, vi terrò aggiornati sugli sviluppi!
Leggi la seconda parte dell’articolo con il video dimostrativo dei primi risultati ottenuti.

Anyterm, per avere una shell ovunque ti trovi

Anyterm é uno strumento per portare l’accesso SSH ai tuoi server ovunque ti trovi, magari in un internet cafe’ dall’altro capo del mondo, oppure dietro un firewall cattivissimo o sul tuo cellulare.

Funziona con tecnologia web: a lato client, abbiamo una pagina web con Javascript che invia i tasti premuti tramite AJAX al server web, per la precisione ad APACHE dove ci sará un modulo appositamente installato che invierá il comando. La risposta poi sará ritornata al Javascript in attesa.

É quindi necessario avere un server a disposizione dove poter installare questo modulo di APACHE. Il risultato é ottimo e lo si puó notare dalle schermate di esempio sul sito ufficiale. La velocitá di risposta é ragionevolmente discreta e comunque sufficiente per rendere fruibile il servizio.

Snipprl: raccolta di codice 2.0

snipplr 
Snipplr è una raccolta di codice pubblico. L’idea di questo sito è dare un posto per archiviare e mettere a disposizione tutti quei pezzi di codice che si usano tutti i giorni. Inoltre potrete condividere il vostro codice on altri programmatori e designer.

Direi che è un’ottima occasione per imparare cose nuove e contemporaneamente farsi conoscere. Lo sapevate per esempio come far funzionare i PNG su Internet Explorer 6?  O state cercando una classe già fatta in PHP per l’autenticazione utente o il codice per creare un file RSS? Con Snipplr troverete le risposte a tutte queste domane e a molte altre!raccolta di codice 2.0

Google Maps pubblica le API per la luna, Marte e le stelle

google maps apiE’ fresca fresca la notizia della pubblicazione di nuove API che consentono di mostrare su Google Maps le stelle della volta celeste. I dati erano belli pronti visto che erano già presenti su Google Earth. L’integrazione anche sul framework web si è conclusa proprio in questi giorni e appunto oggi Google ne ha dato notizia.

Quindi oltre al layer "cielo" (così viene chiamato su Google Earth), sono stati incluse altre mappe da poter utilizzare tramite le API. Per chi ha un po’ di pratica con il javascript di Google Maps, solitamente il tipo di mappa (GMapType) poteva essere la cartina stradale o la vista fotografica dal satellite (G_NORMAL_MAP o G_SATELLITE_MAP ). Ora ci ritroviamo anche queste altre tipologie:

  • G_MOON_ELEVATION_MAP
  • G_MOON_VISIBLE_MAP
  • G_MARS_ELEVATION_MAP
  • G_MARS_INFRARED_MAP
  • G_MARS_VISIBLE_MAP
  • G_SKY_VISIBLE_MAP

Queste mappe sono per:

  • mappa altimetrica della luna,
  • mappa del visibile sulla luna,
  • mappa altimetrica di Marte,
  • mappa all’infrarosso di Marte,
  • mappa del visibile di Marte, 
  • la mappa del cielo.

Google ha già predisposto una pagina di esempio che mostra le mappe in funzione. La notizia è veramente interessante. Non aspetto altro di vedere le prime applicazioni fatte alla luce di queste novità.

Google Maps API per il cielo, marte e la luna

Slideshow: presentare le fotografie con classe

SlideShow in javascriptSlideshow è una classe in Javascript che mostra le proprie fotografie in sequenza e con effetti animati da poter utilizzare sui propri siti web. Sviluppata dal 2006, fa uso di MooTools ed ora è una libreria completa e stabile arricchita da una miriade di opzioni che col tempo sono state aggiunte.

Tra le opzioni di SlideShow, evidenziamo:

  • Dimensioni variabili dello slideshow
  • Effetti combinati di dissolvenze, traslazioni e zoom
  • Durata delle transizioni 
  • Navigazione a freccie
  • Navigazione a miniature
  • Navigazione veloce
  • Caption dello slideshow

L’effetto che si vede dalla demo sul sito ufficiale è spettacolare. Ricorda molto un salvaschermo di OSX, che contemporaneamente zooma, trasla e dissolve le immagini.

Visto che parlo di fotografia, vi segnalo queste due photogallery d’autore che mi hanno colpito:

  • Robert and Shana Parkeharrison: sono fotografie eleganti, talvolta inquietanti, che trasmettono chiari messaggi contro la violenza, l’inquinamento e l’odio.
  • Matt Stuart: ironia, genialità e vita quotidiana stanno alla base delle sue foto. A prima vista sembrano normali fotografie, invece nascondono situazioni o coincidenza ironiche al limite del surreale.

farfalle - Robert and Shana Parkeharrison

matt stuart

Image Menu: un’idea originale per un menu d’effetto

Image Menu Oggi vi segnalo una libreria javascript che vi consente di creare un originale menu di navigazione di sicuro impatto visivo. Image Menu crea un menu orizzontale composto da immagini che al passaggio del mouse scorrono allargando la voce di menu selezionata.

La sintassi per includere un tale script è molto semplice:

var myMenu = new ImageMenu($$('#kwick .kwick'),{openWidth:200, onClick:demo});

dove onClick indica l’azione da intraprendere al click e openWidth la dimensione dell’apertura. Queste sono solo alcune delle opzioni impostabili. Image Menu è un’idea originale che sicuramente potrà interessare i molti web designer che leggono DynamicK.