Posts arquivos para dezembro, 2011

29dez2011

Pegar <title> de iframe, e jogar no documento pai

(0) comentários

Dúvida que vi no fórum.

Pegar o valor da tag title de um iframe, e colocar ele em um titulo do lado de fora, do documento pai.
Não é ‘tão simples’ assim, e notei um probleminha: ‘o iframe precisa ser carregado antes de tentarmos pegar o conteúdo dele’.


Bom, resolvi dessa forma:

<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
	jQuery('#menu a').click(function( e ){

		jQuery('#content').load(function(){
			var titulo = jQuery('#content').contents().find('title').text();
			jQuery('#titulo').text( titulo );
		});
	});
});
</script>
</head>
<body>
	<ul id="menu">
		<li><a href="home.html" target="content">Home</a></li>
		<li><a href="cadastro.html" target="content">Cadastro</a></li>
		<li><a href="contato.html" target="content">Contato</a></li>
	</ul><!-- /menu -->
	<h1 id="titulo">Home</h1>
	<iframe name="content" id="content" src="home.html"  width="99.9%" frameborder="0" scrolling="no" ></iframe>
</body>
</html>

Por esse motivo, depois do clique, eu aguardo o evento ‘onload’ do iframe:

		jQuery('#content').load(function(){

Sse vc não quiser incorporar a lib jQuery, e também para provar que jQuery é apenas javascript, segue a mesma funcionalidade, usando apenas js puro:

function id( el )
{
	return document.getElementById( el );
}
window.onload = function()
{
	id('content').onload = function()
	{
		var titulo = this.contentWindow.document.getElementsByTagName('title')[0].innerHTML;
		id('titulo').innerHTML = titulo;
	};
}

é isso =)
Se for útil, comente e compartilhe. Esse é o único ‘pagamento’ que peço pelos códigos(conhecimento) que disponibilizo.

29dez2011

Carregando sem refresh, várias áreas diferentes de um site – jQuery.ajax

(0) comentários

Eu já postei aqui no meu blog, como carregar conteudo com ajax em div, daí, aprimorei aquele código, e mostrei como carregar conteudo com ajax, colocando também um gif de loading.. e também como fazer tudo isso de cima, ainda trocando a URL, e usando um plugin na página interna.

Hoje é dia de carregar várias divs ‘separadas’, várias áreas diferentes com ajax.

Já vi no fórum um cara(com dúvida) resolvendo isso, de uma forma ‘natural’ do ponto de vista de pensamento humano, mas terrível para performance e manutenção do site.

O código que ele usou era mais ou menos assim:

jQuery(document).ready(function(){
	var sidebar = jQuery('#sidebar');
	var content = jQuery('#content');
	var other = jQuery('#other');

	jQuery('#menu a').click(function( e ){
		e.preventDefault();
		if( jQuery( this ).attr('href')=='home.html' )
		{
			sidebar.load('home_sidebar.html');
			content.load('home_content.html');
			other.load('home_other.html');
		}
		else if( jQuery( this ).attr('href')=='cadastro.html' )
		{
			sidebar.load('cadastro_sidebar.html');
			content.load('cadastro_content.html');
			other.load('cadastro_other.html');
		}
	});
});

Ou seja, a cada clique em um link do menu, ele fazia 3 requests. Um para cada ‘área’ do site.
Tinha que manter 3 arquivos distintos para cada link, e esse jogo de if/else para saber quais arquivos ele deve invocar.

Isso deve ter um ‘mau cheiro’.

A cada clique fazer 3 requisições, e ter que manter 3 arquivos separados para cada área.. além de que o site ‘não vai funcionar corretamente’, se o suporte a js estiver desabilitado… muitos motivos para evidenciar que algo está errado.

Mas então, o que podemos fazer?

A minha sugestão, é aproveitar o ótimo parser de HTML da lib jQuery, fazer um único request, e então direcionar cada conteúdo para o local específico.

<html>
<head>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
	var sidebar = jQuery('#sidebar');
	var content = jQuery('#content');
	var other = jQuery('#other');

	request( 'home.html' );

	function m_load( data )
	{
		var text = jQuery( '<div>'+data+'</div>' );//forçando o parser

		sidebar.html( text.find('#sidebar').html() );
		content.html( text.find('#content').html() );
		other.html( text.find('#other').html() );

		jQuery(document).attr( 'title', text.find('title').html() );
	}
	function request( file )
	{
		jQuery.ajax({
			url: file,
			success: function( data )
			{
				m_load( data );
			}
		});
	}
	jQuery('#menu a').click(function( e ){
		e.preventDefault();
		request( jQuery( this ).attr('href') );
	});
});

</script>
</head>
<body>
	<ul id="menu">
		<li><a href="home.html">Home</a></li>
		<li><a href="cadastro.html">Cadastro</a></li>
		<li><a href="contato.html">Contato</a></li>
	</ul><!-- /menu -->
	<div id="sidebar">

	</div><!-- /sidebar -->
	<div id="content">

	</div><!-- /content -->
	<div id="other">

	</div><!-- /other -->
</body>
</html>

Note que além de fazer o parser do retorno:

		var text = jQuery( '<div>'+data+'</div>' );//forçando o parser

		sidebar.html( text.find('#sidebar').html() );
		content.html( text.find('#content').html() );
		other.html( text.find('#other').html() );

eu também faço a troca do title do documento:

		jQuery(document).attr( 'title', text.find('title').html() );

Demonstração

Se vc tiver o firebug instalado, confira na aba Net|Rede -> xhr que faço apenas uma requisição.

22dez2011

Benchmarking Cloud Serving Systems

por em Sem categoria
(0) comentários

"While the use of MapReduce systems (such as Hadoop) for large scale data analysis has been widely recognized and studied, we have recently seen an explosion in the number of systems developed for cloud data serving. These newer systems address “cloud OLTP” applications, though they typically do not support ACID transactions. Examples of systems proposed for cloud serving use include BigTable, PNUTS, Cassandra, HBase, Azure, CouchDB, SimpleDB, Voldemort, and many others. Further, they are being ap- plied to a diverse range of applications that differ consider- ably from traditional (e.g., TPC-C like) serving workloads. The number of emerging cloud serving systems and the wide range of proposed applications, coupled with a lack of apples- to-apples performance comparisons, makes it difficult to un- derstand the tradeoffs between systems and the workloads for which they are suited. We present the Yahoo! Cloud Serving Benchmark (YCSB) framework, with the goal of fa- cilitating performance comparisons of the new generation of cloud data serving systems. We define a core set of benchmarks and report results for four widely used systems: Cassandra, HBase, Yahoo!’s PNUTS, and a simple sharded MySQL implementation. We also hope to foster the devel- opment of additional cloud benchmark suites that represent other classes of applications by making our benchmark tool available via open source. In this regard, a key feature of the YCSB framework/tool is that it is extensible—it supports easy definition of new workloads, in addition to making it easy to benchmark new systems."

http://www.brianfrankcooper.net/pubs/ycsb.pdf

http://lanyrd.com/2011/apachecon-north-america/skdpy/

http://lanyrd.com/2011/apachecon-north-america/skdtf/

Permalink | Leave a comment  »

21dez2011

A Pleasant Surprise!

(0) comentários
I would like to say that i’m used to the kind of things i will tell you in this post, but the “sad” reality is that i’m not. Two good surprises at the end of this 2011 year, and two good gifts for the christmas. Last time i did visit US this year, i did [...]


19dez2011

Protegendo linhas do crontab com FLOCK

(0) comentários
Em algumas situações queremos colocar uma linha no crontab que rode de tempos em tempos, mas queremos garantir de algum modo, que esta não ira rodar em paralelo caso a execução anterior não tenha sido finalizada, por exemplo:

*/1 * * * * root /sbin/exemplo/processa_relatorios.asp -t diario

Se as 18:23 o comando processa_relatorios.asp começar e as 18:24 não tiver terminado, teremos 2 execuções em paralelo deste, que pode gerar resultados monstruosos.

Várias pessoas (inclusive eu) acabam implementando algum mecanismo de lock na aplicação (ou no comando) para que ele consiga saber que já existe outra instância rodando e que não poderá rodar novamente caso o crontab dispare, mas descobri que existe o comando FLOCK, disponivel no Debian e em algumas outras versões de linux, que pode resolver isso com mais facilidade!

A linha de cron para esse exemplo ficaria assim:

*/1 * * * * root flock -w 0 /tmp/lock_relatorios  -c "/sbin/exemplo/processa_relatorios.asp -t diario"

onde:
"-w 0" indica que deve esperar 0 segundos caso o comando esteja em execução (isto é, vai desistir de rodar o comando pois não há tempo de espera)
"-c" é o comando a ser executado
"/tmp/lock_relatorios" é o arquivo que será lockado para a execução desse comando

Outro exemplo:

- arquivo /etc/cron.d/teste

*/1 * * * * root flock -w 0 /tmp/test -c "date && sleep 70" >> /tmp/log.txt

- a saida do log será:


Mon Dec 19 09:36:01 BRST 2011
Mon Dec 19 09:38:01 BRST 2011
Mon Dec 19 09:40:01 BRST 2011

Nesse caso podemos ver que não rodou a cada minuto pois havia um "sleep 70" que estava segurando a execução do comando.
19dez2011

Protegendo linhas do crontab com FLOCK

(0) comentários
Em algumas situações queremos colocar uma linha no crontab que rode de tempos em tempos, mas queremos garantir de algum modo, que esta não ira rodar em paralelo caso a execução anterior não tenha sido finalizada, por exemplo:

*/1 * * * * root /sbin/exemplo/processa_relatorios.asp -t diario

Se as 18:23 o comando processa_relatorios.asp começar e as 18:24 não tiver terminado, teremos 2 execuções em paralelo deste, que pode gerar resultados monstruosos.

Várias pessoas (inclusive eu) acabam implementando algum mecanismo de lock na aplicação (ou no comando) para que ele consiga saber que já existe outra instância rodando e que não poderá rodar novamente caso o crontab dispare, mas descobri que existe o comando FLOCK, disponivel no Debian e em algumas outras versões de linux, que pode resolver isso com mais facilidade!

A linha de cron para esse exemplo ficaria assim:

*/1 * * * * root flock -w 0 /tmp/lock_relatorios  -c "/sbin/exemplo/processa_relatorios.asp -t diario"

onde:
"-w 0" indica que deve esperar 0 segundos caso o comando esteja em execução (isto é, vai desistir de rodar o comando pois não há tempo de espera)
"-c" é o comando a ser executado
"/tmp/lock_relatorios" é o arquivo que será lockado para a execução desse comando

Outro exemplo:

- arquivo /etc/cron.d/teste

*/1 * * * * root flock -w 0 /tmp/test -c "date && sleep 70" >> /tmp/log.txt

- a saida do log será:


Mon Dec 19 09:36:01 BRST 2011
Mon Dec 19 09:38:01 BRST 2011
Mon Dec 19 09:40:01 BRST 2011

Nesse caso podemos ver que não rodou a cada minuto pois havia um "sleep 70" que estava segurando a execução do comando.
14dez2011

Afinal, oque é Crescer Profissionalmente ?

(0) comentários

Um post motivacional.

Sim, hoje é meu aniversário. Exatamente as 11 horas da manhã de hoje, completo 23 anos de vida. Fazem vinte e três “desde o instante em que nasci”.
Se for contar “apartir de quando eu me lembro”, teria que adiar a contagem, para depois dos 12 anos.. pois realmente antes disso, é tudo muito vago nas minhas memórias.

Comecei a trabalhar com 16 anos. Estagiário Técnico na Porto Seguro – Proteção Patrimonial.
Então, se fosse contar apartir daí, a minha “vida profissional”, seria de apenas 7 anos. Não trabalhei direto, desde então.. logo podemos contar algumas “férias”(entre um lugar e outro). Somando, seriam oficialmente:
1 ano como estagiário +
6 meses como assistente de manutenção de micros em campo +
2 anos e meio para uma agência web(sem férias durante esse período) +
quase 1 ano agora, no trabalho atual.

São 5 anos ao todo. Então posso dizer que “a minha carreira”, soma 5 anos. Isso não me parece “tão pouco assim”. É mais que 20% do meu tempo de vida total, e quase 50% da “vida, desde que eu me lembro”.

Cresci profissionalmente neste período. E não me refiro a dizer que “estou ganhando mais”.
Sim, estou, mas não é somente isso que importa. Como estagiário, meu salário era de 2.48 por hora. Com algumas horas extras, eu tirava R$200.00 líquidos no fim de cada mês.

Mas não é isso que significou “crescer” para mim.

Quando digo que quero evoluir, significa que antes eu “imprimia folhas de monitoramento das rotas dos caminhões, fazia cadastros no access, elaborava planilhas e bds para otimizar o trabalho, …”, e agora eu trabalho programando sites. Analisando rotinas lógicas, desenvolvendo scripts, testando, controlando versão com GIT, garantindo semântica da marcação, garantindo uma degração graciosa, e o máximo de compatibilidade crossbrowser possível..

Sim, eu cresci. O meu trabalho atual exige muito mais de mim, do que o meu primeiro. Em cada um deles, cada vez que mudei foi assim.

O dinheiro é apenas consequência.
Melhor salário vem junto com o seu merecimento por ele.

Ninguém merece ganhar mais, se continuar fazendo o mesmo de sempre. Se nesses 5 anos, eu ainda estivesse “imprimindo folhas”, eu não teria evoluído como profissional. Teria muito menos experiência e conhecimento sobre “outros assuntos”..

Esta é a minha definição de “crescer”. Sucesso profissional para mim, é não parar de evoluir. Não estacionar.

Estar contente com o que faz. Fazer o melhor. Errar. Corrigir. Diminuir os erros. Continuar melhorando progressivamente, e então quebrar todos os paradigmas e recomeçar. Sou movido a desafios.

Puxe a responsabilidade para ti. E acredite que a situação profissional em que você se encontra, se deve exclusivamente por sua própria culpa. Culpe a si mesmo. E se vanglorie nas suas vitórias.

Não queira ser melhor que seu colega. Seja melhor que você mesmo. Supere seus limites, as suas barreiras são impostas por você mesmo. Não se limite.

Fazer “mais do mesmo” todos os dias é muito fácil e muito cômodo. Porém é o “preguiçoso”, e nada mais que apenas a tua obrigação mínima. Aquele que “faz oque mandam”, é o funcionário que justifica o salário. Nem mais e nem menos.
É para isso que ele recebe.

Aquele que não faz direito nem oque lhe pedem, não justifica e nem mereceria estar ganhando oque está. O problema, é que os que estão nessa situação, parecem não perceber, pois deveriam voltar um passo.

Aquele que cumpre o seu papel com excelência, e sempre procura “o algo a mais”, merece reconhecimento.
Reconhecimento não é apenas “números positivos maiores no extrato depois do dia 5″. Reconhecimento é um “Parabéns !”, é um “foi ele quem fez isso”, é um “essa solução ficou ótima”, é atribuir mais a este funcionário. Exigir mais dele.

O dinheiro virá, tem que vir. Se a empresa fizer o reconhecimento “motivacional” e com “mais trabalho”, porém não aumentar os ganhos, então este funcionário deve trocar de trabalho. Tão simples quanto isso.
Não fique em um lugar onde seus esforços não são reconhecidos. Entretanto, tenha certeza de que vc está se esforçando, e merece realmente o que acha que merece.

Estou feliz onde estou. Porém aprendi que nunca devo ficar satisfeito com o que eu faço, e com o que eu ganho. Quero fazer melhor, e quero ganhar mais. Sempre.

E para você ? o que é crescer profissionalmente ?

11dez2011

Assorted

(0) comentários
We have some more days until the end of 2011. We have plenty of time to do many things until we really say “bye” to this year. But the feeling will be hard to change as always: this year was fastest than the others. I think this notion about a year that was fastest than [...]


8dez2011

Série Delta 2011 – Etapa Quênia – 5km

(0) comentários

No domingo de 04 de dezembro de 2011 corri os 5 km da Série Delta 2011 - Etapa Quênia.

Série Delta 2011 - Etapa Quênia

A prova teve sua largada em frente ao Jóquei Clube de São Paulo, com o percurso contornando a avenida Irineu de Paula Machado, entrando dentro do Jóquei (em um trecho de areia e extrume de cavalo) e com a chegada também dentro do Jóquei.

Tempo total: 00:22:53

Tempo médio por km: 04:34

Tempo em cada km:

  1. 04:02
  2. 04:35
  3. 04:56
  4. 04:53
  5. 04:27

Foto de Ativo.com

Foto de Ativo.com

Foto de Ativo.com

Foto de Ativo.com


8dez2011

New CFEngine 3 Policy Wizard

por em Sem categoria
(0) comentários

"The CFEngine Policy Wizard attempts to bridge the gap between established concepts that are second nature to System Administrators -- such as setting file permissions, process management and software installation -- by offering a side-by-side comparative view of the CFEngine syntax."

http://www.cfengine.com/blog/cfengine-3-policy-wizard

https://cfengine.com/policy_wizard/

Permalink | Leave a comment  »

Switch to our mobile site