De acordo com o IBGE, o número de usuários de internet no Brasil cresceu 75,3% entre 2005 e 2008, e esse crescimento deve-se à forte inclusão digital de pessoas de baixa renda.

Do total de novos usuários no Brasil, 17 milhões ganham até dois salários mínimos per capita mensais.

O relatório do IBGE aponta que, em 2008, o país tinha 104 milhões de pessoas que não acessavam a internet, mas o contingente diminuiu em relação a 2005, que era de 120,3 milhões de brasileiros.

Nas regiões consideradas mais pobres do país, o acesso à internet também aumentou. Na região Norte, o total de usuários passou de 12% para 27,5% da população com dez anos ou mais de estudo. No Nordeste, passou de 11,9% para 25,1%.

Em 2008, 51,7% dos internautas brasileiros acessaram a rede mundial de computadores de casa e 35,2% a partir de lan houses, contra 49,9 e 21,9%, respectivamente. Nas regiões mais ricas do Brasil, os percentuais de acesso são bem mais elevados, como na região Sudeste, em que o índice foi de 40,3%.

“O Brasil tem uma das piores distribuições de renda no mundo e não é novidade que essa diferença social tenha reflexo também no acesso à internet. A desigualdade de renda é um empecilho para um maior acesso”, disse o coordenador da pesquisa, Cimar Pereira Azeredo. Ele destacou que quanto maior a renda e a escolaridade, maior é o acesso à rede mundial de computadores. A pesquisa mostra que famílias com renda per capita domiciliar acima de cinco salários mínimos têm um percentual de acesso à web de 75,6%. Em média, os conectados têm 10 anos de estudo, o equivalente ao ensino fundamental.

A idade média dos internautas em 2008 era de 27,6 anos contra 28,1 anos em 2005. Na faixa entre 15 e 17 anos, o percentual de conectados alcança 62,9%, aponta a pesquisa.

Como nasceu o nome Google?

Novembro 10, 2009

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

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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="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="http://maps.google.com/maps?file=api&amp;v=2&amp;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[i][1], addr[i][0]);
						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 = [a, new GLatLng(addr[smallestDistId][1], addr[smallestDistId][0])]
					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[0];
	if(k) {
		// salva a latitude/longitude do endereço / save the latitute/longitude of address
		addr[k-1] = place.Point.coordinates;
	}
	point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	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>
</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" class="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!

PHP + JSON

Novembro 9, 2009

PHP + JSONA partir do PHP 5.2.0 temos uma extensão para JSON que facilita o transporte de dados do PHP para o JavaScript (via AJAX) e vice-versa.

Com o advento do Ajax, JSON se tornou um formato para intercâmbio de dados bem mais eficiente e compacto que XML. E nada como tratá-lo como um objeto também no lado do servidor, assim como fazemos no JavaScript. As duas funções que tratam da conversão objeto-string e string-objeto no PHP são json_encode e json_decode, respectivamente.

Vou lhes mostrar um exemplo de como trabalhar com PHP + JSON. Primeiramente vamos formatar corretamente o código PHP que será chamado via AJAX no Javascript.

<?php
$produto = array(
	'id' => 32,
	'nome' => 'Camera Digital Sony W220',
	'fabricante' => 'Sony',
	'valor' => 'R$ 799,00'
);

$produtoJSON = "var produto = " . json_encode($produto);

echo $produtoJSON;
// var produto = {"id": 32, "nome": "Camera Digital Sony W220", "fabricante": "Sony", "valor": "R$ 799,00"}
?>

Agora no javascript vamos dar um alerta com os dados separados:

<script type="text/javascript">

/*
 ... requisição ajax ...
*/

eval(ajax.responseText); // transformo a string do resultado em formato de código válido do javascript

alert(" id = " + produto['id'] + "\n nome = " + unescape(produto['nome']) + "\n fabricante = " + unescape(produto['fabricante']) + "\n valor = " + unescape(produto['valor']));
</script>

Hoje, tive um problema com o Dreamweaver CS4, pois sempre quando abria ele me aparecia o seguinte erro:

“The following translators were not loaded due to errors: ICERegions.htm: has configuration information that his invalid.”

Resolvi o problema e gostaria de compartilhar para que as próximas vitimas possam resolver também.

Resolvi deletando o seguinte arquivo de cache do Dreamweaver:

obs: A pasta AppData está oculta, ative antes a opção para mostrar os arquivos ocultos que está em Ferramentas > Opções de Pasta… > Modo de exibição

Pasta: C:\Users\<usuario do sistema>\AppData\Roaming\Adobe\Dreamweaver CS4\en_US\Configuration
Arquivo: WinFileCache-3012BA81.dat

Não se preocupe em deletar este arquivo, pois ele é um arquivo de cache que é criado após fechar o dreamweaver. E pelo que eu andei vendo, deletando este arquivo pode resolver diversos outros problemas de caching.

Abraços