Posts arquivos para maio, 2011

31mai2011

o RHoK vai ser hospedado aqui :)

(0) comentários

image

ok, ok, nosso negócio aqui é hospedagem, mas neste sábado o pessoal vai abrir as portas pra receber a galera do Random Hack of Kindness São Paulo,

o evento é mundial e, resumindo, o lance é criar soluções digitais inovadoras pra ajudar o mundo Smile.  aqui estão mais detalhes:

O Random Hacks of Kindness (RHoK) é uma comunidade voluntária global composta por especialistas em desenvolvimento socioeconômico e programadores que colaboram e desenvolvem soluções de software em código aberto que ajudam a prevenir, mitigar e responder aos desafios enfrentados pela humanidade.

De seis em seis meses o grupo organiza uma competição de programação (hackathon) mundial que reúne especialistas nas áreas de gestão de riscos e desastres e também da área de adaptação às mudanças climáticas que apresentarão problemas aos programadores voluntários criarem soluções de software em código aberto. No domingo os programas são julgados e decretados os vencedores.

inscrições aqui: http://www.rhok.org/event/sao-paulo 

e mais detalhes sobre como vamos receber a moçada: http://blog.locaweb.com.br/eventos/locaweb-promovera-terceira-edicao-do-random-hacks-of-kindness-em-sua-sede-em-sao-paulo/

31mai2011

presentão pros geeks: a tabela periódica… em vídeo!

(0) comentários

image

genial, genial, genial: uma tabela periódica onde, a cada elemento químico, corresponde um video no youtube Alegre 

vejamos, por exemplo… o tungstênio (W):

 

os caras ganharam um prêmio super importante, segundo o @brainpicker :

brainpicker Maria Popova

The excellent Periodic Table of Videos wins the 2011 Science Prize for Online Education http://j.mp/ihAIfh More winnershttp://j.mp/jbmoaP

31mai2011

Atrelar evento em elementos que não existiam no DOM

(0) comentários

Salve salve galera !!

Bom, eu já havia postado como carregar conteudo com ajax, apenas com javascript puro.

Porém, se junto com o xmlHttp.responseText, vierem alguns links, eles não terão o evento onclick, atrelados. Pois nós fizemos o ‘bind’ da function no window.onload, e nossos novos elementos foram trazidos muito depois desse instante.

Para entendimento, rode esse script isoladamente:

<html>
<head>
	<script type="text/javascript">
	window.onload = function(){
		id('teste').innerHTML = '<span id="ae">aeee</span>';

		attach( id('ae'), teste );
	}

	function attach( el, f ){
		if( window.addEventListener )
			el.addEventListener("click", f, false);
		else
			el.attachEvent("click", f );
	}
	function id( el ){
		return document.getElementById( el );
	}
	function teste(){
		alert( 'ae' );
	}
	</script>
</head>
<body>
	<div id="teste"></div>
</body>
</html>

Entendeu oque fizemos ?
Criamos uma tag <a> dentro da div#teste com javascript. E logo depois de criar, nos fizemos o bind do evento.

Precisaremos do mesmo para ‘dar vida’ aos nossos novos elementos que trouxemos com ajax.

			var as = id('content').getElementsByTagName('a');
			for( var i=0; i<as.length; i++ ){
				var arq = pega_arq( as[i].href );
				if( window.addEventListener )
					as[i].addEventListener( 'click', function(){ abre( arq ); }, false );
				else
					as[i].attachEvent( 'click', function(){ abre( arq ); } );
			}

Note que primeiro guardamos apenas os nossos ‘novos links’ (os que estiverem dentro da div#content), na variavel as.
depois com um loop for(), iteramos por essas tags <a>, e vamos uma a uma, adicionando no evento onclick a function abre(), responsável pela requisição ajax.

	as[i].addEventListener( 'click', function(){ abre( arq ); }, false );

Aqui, usamos uma function anônima, pois queremos que a arq() só seja executada, no evento onclick.

Demonstração Online

31mai2011

Do you work to earn money?

(0) comentários

Do you work to earn money? Or do you work to solve someone’s problem and earning money is just a consequence of the good work you did solving someone’s problem? Earning money is one of many indicators that you’re doing a good job, but you need to know what problem are you solving and why.

30mai2011

Backuping only the Zabbix Configuration

(0) comentários

This script is a simple way to backup all configuration tables (eg. templates, hostgroups, hosts, triggers…) without the history data.

As the result is very small (around 30 MB), is possible run this backup many times per day.

https://github.com/xsbr/zabbixzone/blob/master/zabbix-mysql-backupconf.sh

#!/bin/bash
#
# zabbix-mysql-backupconf.sh
# v0.2 - 20111105
#
# Configuration Backup for Zabbix 1.8 w/MySQL
#
# Author: Ricardo Santos (rsantos at gmail.com)
# http://zabbixzone.com
#
# Thanks for suggestions from:
# - Oleksiy Zagorskyi (zalex)
# - Petr Jendrejovsky
#

# mysql config
DBHOST="localhost"
DBNAME="zabbix"
DBUSER="zabbix"
DBPASS="YOURMYSQLPASSWORDHERE"

# some tools
MYSQLDUMP="`which mysqldump`"
GZIP="`which gzip`"
DATEBIN="`which date`"
MKDIRBIN="`which mkdir`"

# target path
MAINDIR="/var/lib/zabbix/backupconf"
DUMPDIR="${MAINDIR}/`${DATEBIN} +%Y%m%d%H%M`"
${MKDIRBIN} -p ${DUMPDIR}

# configuration tables
CONFTABLES=( actions applications autoreg_host conditions config dchecks dhosts \
drules dservices escalations expressions functions globalmacro graph_theme \
graphs graphs_items groups help_items hostmacro hosts hosts_groups \
hosts_profiles hosts_profiles_ext hosts_templates housekeeper httpstep \
httpstepitem httptest httptestitem ids images items items_applications \
maintenances maintenances_groups maintenances_hosts maintenances_windows \
mappings media media_type node_cksum nodes opconditions operations \
opmediatypes profiles proxy_autoreg_host proxy_dhistory proxy_history regexps \
rights screens screens_items scripts service_alarms services services_links \
services_times sessions slides slideshows sysmaps sysmaps_elements \
sysmaps_link_triggers sysmaps_links timeperiods trigger_depends triggers \
user_history users users_groups usrgrp valuemaps )

# tables with large data
DATATABLES=( acknowledges alerts auditlog_details auditlog events \
history history_log history_str history_str_sync history_sync history_text \
history_uint history_uint_sync trends trends_uint )

# CONFTABLES
for table in ${CONFTABLES[*]}; do
        DUMPFILE="${DUMPDIR}/${table}.sql"
        echo "Backuping table ${table}"
        ${MYSQLDUMP} -R --opt --extended-insert=FALSE \
                -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >${DUMPFILE}
        ${GZIP} -f ${DUMPFILE}
done

# DATATABLES
for table in ${DATATABLES[*]}; do
        DUMPFILE="${DUMPDIR}/${table}.sql"
        echo "Backuping schema table ${table}"
        ${MYSQLDUMP} -R --opt --no-data	\
                -h ${DBHOST} -u ${DBUSER} -p${DBPASS} ${DBNAME} --tables ${table} >${DUMPFILE}
        ${GZIP} -f ${DUMPFILE}
done

echo
echo "Backup Completed - ${DUMPDIR}"
30mai2011

best of Brasil… num pacotão só :)

(0) comentários

image

o pessoal da AppSumo fez um pacotão de apps brasileiras  por um preço especial e tal, incluindo algumas apps nossas, e pra divulgar a oferta o time de marketing aqui me chamou pra fazer um “stand-up jabá” sem ensaio nem nada.   eu estou acostumado a me ver em vídeo, mas não nesse papel Alegre  pelo menos não ofereci as legítimas facas Ginzu!

o pacotão da AppSumo está aí:  veja o que você acha

 

Best of Brazil

30mai2011

inédito: ao vivo e a cores! o 13º Encontro Locaweb São Paulo… streaming

(0) comentários

image

eu sabia que a conversa com o Thiago Lima, empreendedor literalmente com a cabeça nas nuvens, ia dar bons resultados:  vamos usar a plataforma dele pra transmitir ao vivo o 13. Encontro Locaweb São Paulo Alegre

 

veja mais detalhes aqui: http://www.eventials.com/13elw  (e veja a gente ao vivo nesta quinta!)

30mai2011

videocast: o próximo passo para um nerd é…

(0) comentários

o proximo passo para um nerd é… from renedepaula on Vimeo.

 

a gente celebra tanto a cultura nerd que acaba não questionando muito a história toda de nerds, geeks e CDF’s. se você quiser dar um passo adiante na área digital, me acompanhe nessa reflexão rápida

30mai2011

Não tenha medo do código

(0) comentários

Não tenha medo de códigos ! Não tenha medo de códigos ! Não tenha medo de códigos !

Pois é.
Sei que não é fácil continuar o trabalho de alguém. Pegar um daqueles macarrões(emarranhados), ainda mais se ele tiver sido escrito por um ou vários CQPs.

Porém, um dos primeiros passos é não ter medo.

Missão dada é missão comprida. Não tenha medo de tentar, pois não tentar já é um erro.

Agora, transporte esse pensamento para o teu próprio código. Não deixe que ele te faça ter medo.
Já expus aqui no blog que penso sobre a maneira com qual devemos programar.

Porém foi algo ainda mais sutil que me fez querer escrever este post.
Não tenha medo dos plugins! Não tenha medo!

Sério. Não tenha medo do core do WordPress, do core do Joomla, da versão não minify do jQuery, ou daquele lightbox superbacana.. Retire esse bloqueio da tua mente.
É apenas código. Leia.

Não raramente, você pode encontrar ‘aquela solução ninja‘, só de apenas ter paciência para decifrar o intocado. Além do que, se é algo ‘renomado’ que várias pessoas usam, e já está ‘estável’, ‘popular’, e na enésima versão, então é provavel que tenha sido bem escrito.

Você pode aprender e muito com ele. Assim, sem compromisso.
Este é um nível acima, depois de começar a criar os teus próprios plugins jQuery, por exemplo, você deve começar a aperfeiçoa-los, refatorá-los, otimizar, melhorar performance, deixar mais robusto, expansível.

Imaginou ne!?
Pois é, é dessa forma que acredito que o conhecimento é construído. Num primeiro momento, apenas usávamos essas ferramentas, sem nos importar como foram feitas, e naquele instante, nem mesmo tinhamos cacife suficiente para entender.

Depois, melhoramos, e começamos a escrever nossos próprios, intercalando lógico, com o uso de alguns prontos, dos quais nem passamos o olho pelo fonte.

Agora o momento é de descobrir, de aprender com oque está pronto. Sabe aquele callback, superbacana que o Fancybox te deu ? pois é, que tal deixar essa opção no plugin que vc criou ?

Sim meus caros, nem tudo está nos tutorais. Apesar da crescente onda de blogueiros, e dos mais diversos materias que temos espalhados pela web, nem tudo está lá. E boa parte do que está, não tem qualidade.. tome cuidado.

Eu disse para não temer os códigos, afinal estes devem ser escritos para humanos lerem. As máquinas apenas os executarão. Tenha medo é dos tutoriais. Leia com olhar crítico.
Nem tudo oque circula é bom. Se vc não se sentir acanhado, será capaz de indagar, de realmente decidir por si só, se o que você leu, era bom ou não.

29mai2011

Buscando uma hash tag no search do Twitter

(0) comentários

Não tem muito oque explicar.

vou fazer um search no Twitter, procurando por determinada hash tag #wbruno, e então devolver um HTML simples para inserirmos no nosso site.

Usei aqui, algumas funções nativas do php, como file_get_contents(), var_dump(), e json_decode().

O link para mais esclarecimentos do search é: http://dev.twitter.com/doc/get/search

<?php
	header('Content-type: text/html; charset=utf-8');

	$hash = '%23wbruno';//apenas para ficar claro oque é
	$search = 'http://search.twitter.com/search.json?q='.$hash.'&rpp=10';

	$json = file_get_contents( $search );
	/*
		"{"results":[
			{
				"from_user_id_str":"18765280",
				"profile_image_url":"http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg",
			...
	*/
	$data = json_decode( $json );
	/*
	object(stdClass)#1 (10) {
	  ["results"]=>
	  array(6) {
		[0]=>
		object(stdClass)#2 (14) {
		  ["from_user_id_str"]=>
		  string(8) "18765280"
		  ["profile_image_url"]=>
		  string(89) "http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg"
		  ["created_at"]=>
		  string(31) "Sat, 28 May 2011 13:35:21 +0000"
		  ["from_user"]=>
		  string(8) "tiu_uiLL"
		  ["id_str"]=>
		  string(17) "74468805430087680"
		  ["metadata"]=>
		  object(stdClass)#3 (1) {
			["result_type"]=>
			string(6) "recent"
		  }
		  ["to_user_id"]=>
		  NULL
		  ["text"]=>
		  string(113) "Novo Post: Formulário de busca com filtro dinâmico em MySQL e php http://www.wbruno.com.br/blog/?p=1058 #wbruno"
		  ["id"]=>
		  float(7.4468805430088E+16)
		  ["from_user_id"]=>
		  int(18765280)
		  ["geo"]=>
		  NULL
		  ["iso_language_code"]=>
		  string(2) "pt"
		  ["to_user_id_str"]=>
		  NULL
		  ["source"]=>
		  string(97) "<a href="http://www.wbruno.com.br/blog" rel="nofollow">wbruno</a>"
		}
	*/

	$li = '<ul>'.PHP_EOL;
	foreach( $data->results AS $post ){
		$li .= "\t".'<li><img src="'.$post->profile_image_url.'" alt="'.$post->from_user.'" title="'.$post->from_user.'" />
			'.$post->text.'</li>'.PHP_EOL;
	}
	echo $li,'</ul>';

com isso, a minha saída no instante em que rodei, foi:

<ul>
	<li><img src="http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg" alt="tiu_uiLL" title="tiu_uiLL" />
			Novo Post: Formulário de busca com filtro dinâmico em MySQL e php http://www.wbruno.com.br/blog/?p=1058 #wbruno</li>
	<li><img src="http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg" alt="tiu_uiLL" title="tiu_uiLL" />
			Acessar função de um iframe, apatir do documento pai http://t.co/MqrYpuf #wbruno</li>
	<li><img src="http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg" alt="tiu_uiLL" title="tiu_uiLL" />
			Post Editado: Criando um plugin jQuery - parte 3 - Otimizando http://www.wbruno.com.br/blog/?p=343 #wbruno</li>
	<li><img src="http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg" alt="tiu_uiLL" title="tiu_uiLL" />

			Novo Post: Navegação sem refresh – carregando conteúdo com ajax em div 2 http://www.wbruno.com.br/blog/?p=1038 #wbruno</li>
	<li><img src="http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg" alt="tiu_uiLL" title="tiu_uiLL" />
			Novo Post: Validando inputs com Expressão Regular com jQuery http://www.wbruno.com.br/blog/?p=1034 #wbruno</li>
	<li><img src="http://a3.twimg.com/profile_images/1318748377/0863ff06d8563514ab26e03e0fad1fa6_normal.jpg" alt="tiu_uiLL" title="tiu_uiLL" />
			Novo Post: Só carregar scripts js, se houver suporte a js http://www.wbruno.com.br/blog/?p=1031 #wbruno</li>
</ul>

Demonstração Online

Deixei um parâmetro, caso vc queria fazer um teste:
http://wbruno.com.br/scripts/search_hash_twitter.php?hash=locaweb

Versão com cURL

	$search = 'http://search.twitter.com/search.json?q='.$hash.'&rpp=10';
	function curl_file($url, $timeout=0){
		$ch = curl_init();
		curl_setopt( $ch, CURLOPT_URL, $url );
		//curl_setopt ($ch, CURLOPT_HEADER, 1);
		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
		curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
		$content = curl_exec( $ch );
		curl_close( $ch );

		return $content;
	}

	$json = curl_file( $search );

Switch to our mobile site