Como nasceu o nome Google?

GoogleO nome Google foi escolhido devido a expressão googol, que representa o número 1 seguido de 100 zeros, para demonstrar assim a imensidão da Web.

A expressão googol surgiu de um fato um tanto curioso. O matemático Edward Kasner questionou o seu sobrinho de 8 anos sobre a forma como ele descreveria um número grande – um número realmente grande: o maior número que ele imaginasse. O pequeno Milton Sirotta emitiu um som de resposta que Kasner traduziu por “googol”. Mais tarde, Kasner definiu um número ainda maior: o googolplex.

Segundo o documentário do Biography Channel sobre os criadores do Google, quando o primeiro investidor da empresa passou um cheque de 100 mil dólares perguntou a que ordem o devia passar. Brin e Page disseram que estavam a pensar dar o nome de “Googol” à empresa, mas o empresário, possivelmente por ignorância, escreveu “Google”, obrigando, assim, a que a empresa tivesse este nome.

Parece aquelas pessoas com nomes escritos totalmente errados porcausa da incompetência da “mulher do cartório”. 🙂 Mas no caso do Google, isso pode ter sido a causa da sua grandesa, pois o nome “Google” parece mais universal do que “Googol”. Vai saber…

fonte: Wikipédia

Traçar rota do endereço mais próximo com a API do Google Maps

Fala amigos, estive precisando de um script que traçava a rota do endereço (previamente marcado) mais próximo com o endereço que eu digitei.

Eu encontrei um script no blog andafter.org e melhorei ele, segue o script:

observação: A distância que a API utiliza para calcular é uma distância reta do ponto A para o ponto B. Se você quer saber a distância da rota, deverá utilizar o método getDistance(). Se eu ver que muita gente precisará disso eu criarei um post ensinando como faz.


< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Endereço mais próximo utilizando a API do Google Maps | Por Lucas Martins</title>
<script src="<a href="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAh-4-WXT7vryB4zWcSDKIThSuBLcACnbYAIBxS9eHfruCpUv1BBRZi-GSNoVlnTofbgShokT-TgG8BA">http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAh-4-WXT7vryB4zWcSDKIThSuBLcACnbYAIBxS9eHfruCpUv1BBRZi-GSNoVlnTofbgShokT-TgG8BA" type="text/javascript"></script>
<script type="text/javascript">
/*
variáves globais / globals vars
*/
var geocoder = new GClientGeocoder();
var map;
var directionsPanel;
var directions;
var gdir = new GDirections();
var addr = new Array(3);
var distances = new Array(3);

// Ao carregar / After load
window.onload = function() {

// Seta o país que será usado na API / Set the country that will be used in the API
geocoder.setBaseCountryCode("pt_BR");

map = new GMap2(document.getElementById('map'), { size: new GSize(710,480) })
map.addControl(new GLargeMapControl());
map.setCenter(new GLatLng(-23.547779, -46.639366), 12); // São Paulo / Sao Paulo (brazilian city)

// Adiciona marcação dos endereços das bibliotecas públicas de São Paulo / Add marks of addresses of public libraries in Sao Paulo
showAddress("Rua Cisplatina, 505 - Ipiranga, São Paulo - SP, 04211-040", 1);
showAddress("Rua Arsênio Tavolieri, 45 - Jabaquara, São Paulo - SP, 04321-030", 2);
showAddress("Rua Sena Madureira, 298 - Vila Mariana, São Paulo - SP, 04021-050", 3);

// No clique do botão / On click of button
document.getElementById("trace_route").onclick = function() {

// Verifica o endereço digitado pelo usuário / Check the address entered by the User
geocoder.getLocations(
document.getElementById("myAddress").value,
function(point) {
// Verifica se o endereço que o usuário digitou é válido e existente / Check if the address that the user entered is valid and existing
if(point.Placemark) {

// Cria o objeto GLatLng e grava a latitude e longitude do endereço digitado pelo usuário
// Creates the GLatLng object and records the latitude and longitude of the address entered by the User
var a = new GLatLng(point.Placemark[0].Point.coordinates[1], point.Placemark[0].Point.coordinates[0]);

/*
usa método da classe GLatLng() que retorna a distância, em metros, entre
duas coordenadas de latitude/longitude

use method of the GLatLng() which returns the distance in meters between
two latitude / longitude
*/
var b = new GLatLng(addr[0][1], addr[0][0]); // inicia no primeiro ponto / start in the first point
var x = b.distanceFrom(a);

/*
variáveis que serão usadas para comparar distâncias entre coordenadas
de latitude e longitude

variables that will be used to compare distances between coordinates
latitude and longitude
*/
var smallestDist = x;
var smallestDistId = 0;

//
for(var i = 0; i < 3; i++) {

b = new GLatLng(addr&#91;i&#93;&#91;1&#93;, addr&#91;i&#93;&#91;0&#93;);
x = b.distanceFrom(a);

// Verifica qual dos endereços tem menor distância entre um ponto e outro
// Check It addresses which is less distance between one point and another
if(x < smallestDist || i == 0) {
smallestDist = x;
smallestDistId = i;
}
}

/*
cria um array de dois objetos GLatLng, com as coordenadas do endereço digitado pelo
usuário e o endereço do ponto mais próximo a esse endereço

creates an array of two GLatLng objects, with the coordinates of the address entered by
User and address of the nearest point to this address
*/

var pointsArray = &#91;a, new GLatLng(addr&#91;smallestDistId&#93;&#91;1&#93;, addr&#91;smallestDistId&#93;&#91;0&#93;)&#93;
directions = new GDirections(map); // instancia objetos / instance objects
// usa o array de pontos para traçar a rota entre os dois endereços / uses the array of points to trace the route between two addresses
directions.loadFromWaypoints(pointsArray, {"locale":"pt_BR"});
}
}
);
}
}

/*
função que será usada para manipular endereços
function that will be used to manipulate addresses
*/
function showAddress(address, k) {
geocoder.getLocations(
address,
function(point) {
addMarker(point, k);
}
);
}

/*
função que será usada para marcar o mapa
function that will be used to mark the map
*/
function addMarker(response, k) {
if(!response.Placemark) { return; }
place = response.Placemark&#91;0&#93;;
if(k) {
// salva a latitude/longitude do endereço / save the latitute/longitude of address
addr&#91;k-1&#93; = place.Point.coordinates;
}
point = new GLatLng(place.Point.coordinates&#91;1&#93;, place.Point.coordinates&#91;0&#93;);
var marker = createMarker(point, place.address, k); // cria o marcador no mapa / creates the marker on the map
map.addOverlay(marker); // adiciona o marcador no mapa / adds the marker on the map
}

/*
função que será usada para criar os marcadores
function that will be used for creating markers
*/
function createMarker(point,html, k) {
var marker = new GMarker(point, false);
return marker;
}
</script>
</script></head>

<body>
<form action="#" method="POST">
<fieldset>
<label for="from">Seu endereço:</label>
<input type="text" name="myAddress" id="myAddress" />
</fieldset>
<input type="button" id="trace_route" value="Encontrar biblioteca próxima" />
</form>
<div id="map"></div>
</body>
</html>

Com algumas modificações desse código você também poderá obter todos os locais num raio de 100 metros de um endereço digitado. Ou um monte de outras situações.

Abraços!

Como buscar informações detalhadas de um endereço como a Latitude e Longitude com a API do Google Maps

Este é um exemplo de extração de dados da geocodificação utilizando a API do Google Maps

Este é um exemplo de extração de dados da geocodificação utilizando a API do Google Maps
Este é um exemplo de extração de dados da geocodificação utilizando a API do Google Maps

Fala galerá, esta API do Google Maps é muito boa quando você precisa trabalhar com mapas, endereços, ceps, etc. Vou mostrar para vocês um exemplo de código que traz informações detalhadas sobre um endereço.

Vou utilizar como exemplo o endereço:

Rua Vergueiro, 1000 (é o endereço do Centro Cultural de São Paulo que fica na Vergueiro)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>">
<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Buscar Informações detalhadas do endereço</title>
<script src="<a href="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAh-4-WXT7vryB4zWcSDKIThSuBLcACnbYAIBxS9eHfruCpUv1BBRZi-GSNoVlnTofbgShokT-TgG8BA">http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAh-4-WXT7vryB4zWcSDKIThSuBLcACnbYAIBxS9eHfruCpUv1BBRZi-GSNoVlnTofbgShokT-TgG8BA</a>" type="text/javascript"></script>
<script type="text/javascript">
var map = null;
var geocoder = null;

function initialize() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("mapa"));
map.setCenter(new GLatLng(34, 0), 1);
geocoder = new GClientGeocoder();
}
}

function showAddress(address) {
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert(address + " não encontrado");
} else {
map.setCenter(point, 13);
var marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(address);
}
}
);
}
}

// addAddressToMap() é chamado quando o geocoder retorna uma
// resposta.  Ele adiciona um marcador no mapa com uma janela aberta
// mostrando uma boa formatação do endereço, o código do país, latitude, longitude e o CEP.
function addAddressToMap(response) {
map.clearOverlays();
if (!response || response.Status.code != 200) {
alert("Desculpe, não fomos capazes de geocodificar o endereço");
} else {
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(place.address + '<br>' +
'<b>Código do páis:</b> ' + place.AddressDetails.Country.CountryNameCode + '<br>' +
'<b>Latitude:</b>' + place.Point.coordinates[1] + '<br>' +
'<b>Longitude:</b>' + place.Point.coordinates[0] + '<br>' +
'<b>CEP:</b>' + place.AddressDetails.Country.AdministrativeArea.Locality.PostalCode.PostalCodeNumber);
map.setCenter(point, 13);
}
}

// showLocation() é chamado quando você clica no botão de buscar
// no formulario.
function showLocation() {
var address = document.getElementById('address').value;
geocoder.getLocations(address, addAddressToMap);
}
</script>
</head>

<body onload="initialize()" onunload="GUnload()">
<form action="#" onsubmit="showLocation(); return false">
<p>
<input type="text" size="60" name="address" id="address" value="Rua Vergueiro, 1000" />
<input type="submit" value="Go!" />
</p>
<div id="mapa" style="width: 500px; height: 300px"></div>
</form>
</body>
</html>

Foi testado e está funcionando, você só precisa trocar a key de uso da API do Google Maps acessando este link: http://code.google.com/intl/pt-BR/apis/maps/signup.html

Para mais detalhes deste recurso da API do Google Maps, veja este link:

http://code.google.com/intl/pt-BR/apis/maps/documentation/services.html#Geocoding_Structured

Abraços!

Google confirma os ataques de phishing

Número chega a 30 mil e-mails, segundo lista encontrada pela rede BBC.
Na segunda, site revelou que contas do Hotmail e MSN foram expostas.

gmail

O Gmail, serviço de correio eletrônico do Google, está sendo alvo de “grande esquema de phishing”, segundo > Continue lendo “Google confirma os ataques de phishing”

Google Wave: O que é ?

Logo Google WaveO Google Wave é um projeto anunciado pela Google durante a conferência “Google I/O”, realizada no dia 28 de maio de 2009. Trata-se de uma plataforma para web cuja intenção é unir serviços como e-mail, instant messaging, wiki e social networking em um ambiente único, funcionando a partir de qualquer browser, em qualquer sistema operacional. Algumas de suas características mais interessantes são os avançados sistemas de correção ortográfica e tradução instantânea durante bate-papos virtuais. O Google Wave deverá ser lançado ainda no ano de 2009.

Protocolo e API

A empresa anunciou em seu website que o serviço utilizará um protocolo aberto, o Google Wave Federation Protocol, que poderá ser utilizado no desenvolvimento de sistemas wave customizados. O protocolo possui APIs para a criação de extensões de cliente e de servidor. A Google também anunciou que pretende disponibilizar a maior parte do código sob forma de código aberto. O Google Wave está sendo desenvolvido com a utilização do Google Web Toolkit.