Posts arquivos para novembro, 2011

29nov2011

Agile Product Discovery in a Non-Startup Environment – Building MVPs

(0) comentários

As mentioned in my first post about Agile Product Discovery, I’m trying to take the ideas I used in my lean startup experiment (phase 1, phase 2 and phase 3) in a non-startup environment.

Locaweb has almost 700 employees now. We ended 2010 with approximately $100M in revenue. We have around 130 people in our engineering group which include software developers, system administrators, user experience designers and product managers. We decided to use the SaaS team – around 25 people – as the group who will be part of the experiment.

In phase 1 we worked on figuring out what to do. The next phase is building the MVPs!

Organizing the team

From the 10 ideas we tested, 6 had enough traction to motivate us to build the MVPs, i.e., the minimal viable product. However, one of them was not simple enough to be developed as an MVP in 1 week so we decided to move on with 5 MVPs. The self-organized into 5 groups of 5 people each to work on developing the 5 MVPs. We wanted the groups to have focus during a whole week, so the groups were allowed to work in a different place so they ware not disturbed by daily work. Since we could not leave the company without anyone capable to deal with daily needs of our existing SaaS products, we decided to have 2 teams working during one week and the other 3 teams working during the next week.

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

Building the MVP

The MVPs

And with no further ado, here are the MVPs:

Lessons learned

  • It was good to have the teams fully focused for a whole week.
  • Since we put in the same team people who are not used to work together, it was a bit difficult to estimate the effort and many times we under estimated the effort.
  • In some products we believe we didn’t get the M for minimal correctly. We may have built sub-minimal viable products that may require another week to get to the minimal level.
  • Back to the daily activities of the non-startup environment it’s a bit difficult put some energy, even a small amount, to the MVPs.

Next steps

Now we are measuring the interest in each of the MVPs. We intend to have another Agile Product Discovery week in Feb/2012. During this week we intend not only to discover new products, but also work on the existing MVPs, specially those that we believe are sub-minimal.

27nov2011

Habilitar e Desabilitar inputs e textarea ao clicar em botão – JavaScript

(0) comentários

Um botão habilita e outro desabilita, setando .disabled = true;

<html>
<head>
<script type="text/javascript">
function toogle_disabled( bool )
{
	var input = document.getElementsByTagName('input');
	var textarea = document.getElementsByTagName('textarea');

	for( var i=0; i<=(input.length-1); i++ )
	{
		if( input[i].type!='button' )
			input[i].disabled = bool;
	}
	for( var i=0; i<=(textarea.length-1); i++ )
	{
		textareat[i].disabled = bool;
	}
}
</script>
</head>
<body>
	<form>
		<input type="button" onclick="toogle_disabled( false )" value="Habilitar" />
		<input type="button" onclick="toogle_disabled( true )" value="Desabilitar" />

		<br /><br />
		Nome: <input type="text" name="nome" />
		Local: <input type="text" name="local" />
		<br>
		Nome: <input type="text" name="nome2" />
		Local: <input type="text" name="local2" />

	</form>
</body>
</html>
25nov2011

Trocando o title da página em navegação por query string php

(0) comentários

Post complementar, deste aqui, em que eu faço um exemplo de navegação por query string, com php.

Outra dúvida bem recorrente no fórum.

É isso ai, não tenho muito oque explicar/enrolar. Fiz o código bem simples.
A “manha”, para funcionar, é processar toda a requisição, antes de começar a cuspir o html para o browser. Lá em cima, antes até de abrir a tag html e o doctype do documento.

Dessa forma, consigo alterar a tag title, para cada página.

<?php
	function getGet( $key ){
		return isset( $_GET[ $key ] ) ? $_GET[ $key ] : null;
	}

	$pg = getGet('pg');
	$file = is_file( 'view/'.$pg.'.php' ) ? 'view/'.$pg.'.php' : 'view/home.php';

	switch( $pg )
	{
		case 'contato':
			$title = 'Contato - ';
			break;
		case 'gostei':
			$title = 'Gostei muito disso! - ';
			break;
		default:
			$title = '';
	}

?><html>
<head>
	<title><?php echo $title; ?>Nome Site</title>
</head>
<body>
	<a href="?pg=home">Home</a>
	<a href="?pg=contato">Contato</a>
	<a href="?pg=gostei">Gostei</a>
<?php
	include $file;
?>
</body>
</html>

Simples não ?

25nov2011

Carregando conteudo com ajax, trocando a URL com jQuery

(0) comentários

Vamos lá.. esse post é mais ou menos uma mescla de outros 3 posts meus.
Nesse script eu vou, carregar conteudo com ajax(usando jQuery), vou deixar o lightbox funcionando, e também fazer com que a URL mude.

Para que o visitante possa dar F5, e o conteudo “continuar lá”(sem voltar para a index). E também, para que ele consiga sei lá, enviar para um amigo, uma página interna do seu site.

Bom, o código javascript ficou assim:

	$(document).ready(function(){
		var content = $('#content');

		//pre carregando o gif
		loading = new Image(); loading.src = 'ico-loading.gif';

		$('#menu a').click(function( e ){
			var arq = pega_arq( $( this ).attr('href') );
			abre( arq, content );
		});

		/* iniciando com a home */
		abre( pega_arq( document.location.href ), content );
	});
	function abre( href, content ){
		content.html( '<img src="ico-loading.gif" />' );

		$.ajax({
			url: href,
			success: function( response ){
				content.delay(1000).hide().html( response ).fadeIn();

				init_plugins( href );
			}
		});
	}
	function pega_arq( url ){
		var file = url.split('#');
		return ( file[1] ) ? file[1]+'.html' : 'home.html';
	}
	function init_plugins( href )
	{
		if( href=='lightbox.html' )
		{
			$('#gallery a').click(function( e ){
				e.preventDefault();
			})
			$('#gallery').lightBox();
		}
	}

Usando lightbox em página que foi carregada com ajax

É isso. Comentem! Sério.. se vc usar, deixa um comentário aqui..

24nov2011

Codificar em entities apenas “letras” – php

(0) comentários

Precisei disso.. e ai a função htmlentities() do php, não era capaz de me atender.
Pelo menos eu, não vi se é possível ignorar os outros símbolos com essa função, para que ela faça o entitie apenas das letras.

Foi então que vi este comentário no manual:
http://www.php.net/manual/en/function.htmlentities.php#102363

Tudo oque eu precisava. Ai restou o trabalho, de escrever uma rotina para fazer o replace das letras com acentos, para o entitie de cada uma delas. Separei em 2 arrays, e pronto:

<?php
	$str = "'homeMessageTitle' => __('Atendimento online, fácil e rápido!', 'saas'),";

	$vogais = array(
		'À', 'à', 'Á', 'á', 'Â', 'â', 'Ã', 'ã', 'Ä', 'ä', 'Å', 'å', 'Æ', 'æ',
		'Ç', 'ç',
		'Ð', 'ð', 'È', 'è', 'É', 'é', 'Ê', 'ê', 'Ë', 'ë',
		'Ì', 'ì', 'Í', 'í', 'Î', 'î', 'Ï', 'ï',
		'Ñ', 'ñ',
		'Ò', 'ò', 'Ó', 'ó', 'Ô', 'ô', 'Õ', 'õ', 'Ö', 'ö', 'Ø', 'ø', 'Œ', 'œ',
		'ß',
		'Þ', 'þ',
		'Ù', 'ù', 'Ú', 'ú', 'Û', 'û', 'Ü', 'ü',
		'Ý', 'ý', 'Ÿ', 'ÿ'
	);
	$ent = array(
	 	'&Agrave;', '&agrave;', '&Aacute;', '&aacute;', '&Acirc;', '&acirc;', '&Atilde;', '&atilde;', '&Auml;', '&auml;', '&Aring;', '&aring;', '&AElig;', '&aelig;',
		'&Ccedil;', '&ccedil;',
		'&ETH;', '&eth;', '&Egrave;', '&egrave;', '&Eacute;', '&eacute;', '&Ecirc;', '&ecirc;', '&Euml;', '&euml;',
		'&Igrave;', '&igrave;', '&Iacute;', '&iacute;', '&Icirc;', '&icirc;', '&Iuml;', '&iuml;',
		'&Ntilde;', '&ntilde;',
		'&Ograve;', '&ograve;', '&Oacute;', '&oacute;', '&Ocirc;', '&ocirc;', '&Otilde;', '&otilde;', '&Ouml;', '&ouml;', '&Oslash;', '&oslash;', '&OElig;', '&oelig;',
		'&szlig;',
		'&THORN;', '&thorn;',
		'&Ugrave;', '&ugrave;', '&Uacute;', '&uacute;', '&Ucirc;', '&ucirc;', '&Uuml;', '&uuml;',
		'&Yacute;', '&yacute;', '&Yuml;', '&yuml;'
	);

	echo str_replace( $vogais, $ent, $str );

=)

23nov2011

Slideshow JavaScript com botões de comando(play,stop,prev e next) usando o jQuery.Cycle

(0) comentários

Coisa rápida… nosso velho e conhecido slideshow.
Porém, denovo, apenas para deixar registrado aqui, a flexibilidade de uso do plugin jQuery.Cycle, e a facilidade de implementação.

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.cycle-2.97.all.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
	jQuery('#slideshow2').cycle({
		fx: 'fade',
		next: '#proxima',
		prev: '#anterior'
	});
	jQuery('#pausa').click(function(){
		$('#slideshow2').cycle('pause');
	});
	jQuery('#play').click(function(){
		$('#slideshow2').cycle('resume');
	});
});
</script>
<style type="text/css">
* {
	margin: 0; padding: 0; border: none;
}
body { font: 12px Arial; }
#slideshow2 {
	list-style: none;
	height: 185px;
	width: 220px;
	overflow: hidden;
}
#slideshow2 li {
	height: 100%;
}
#slideshow2 p {
	font-weight: bold;
	font-size: 13px;
}
#ctrls img { cursor: pointer; }
</style>
</head>
<body>
	<ul id="slideshow2">
		<li>
			<a href="?noticia=2660/nivel-de-estoques-de-aco-e-positivo--mas-perspectiva-e-de-queda-dos-precos-do-setor">
				<img src="uploads/20111123-213901.jpg" alt="Metalurgia e Distribuição" />
			</a>
			<p>Nível de estoques de aço é positivo, mas perspectiva é de queda d...</p>
		</li>
		<li>
			<a href="?noticia=2660/nivel-de-estoques-de-aco-e-positivo--mas-perspectiva-e-de-queda-dos-precos-do-setor">
				<img src="uploads/20111123-213612.jpg" alt="Metalurgia e Distribuição" />
			</a>
			<p>Inscrições para concurso da Petrobras começam nesta quinta salári...</p>
		</li>
		<li>
			<a href="?noticia=2660/nivel-de-estoques-de-aco-e-positivo--mas-perspectiva-e-de-queda-dos-precos-do-setor">
				<img src="uploads/20111122-230224.jpg" alt="Metalurgia e Distribuição" />
			</a>
			<p>Engenheiro norte-americano cria moto elétrica com uma roda só</p>
		</li>
	</ul><!-- /slideshow2 -->

	<div id="ctrls">
		<img src="img/slide_anterior.gif" width="76px" height="20px" alt="anterior" id="anterior" />
		<img src="img/slide_play.gif" width="23px" height="20px" alt="play" id="play" />
		<img src="img/slide_pausa.gif" width="23px" height="20px" alt="pausa" id="pausa" />
		<img src="img/slide_proxima.gif" width="73px" height="20px" alt="proxima" id="proxima" />
	</div><!-- /ctrls -->
</body>
</html>

É isso ai. Comentem!

Demonstração

23nov2011

What is OpenFlow?

por em Sem categoria
(0) comentários

"OpenFlow is an open standard to deploy innovative protocols in production networks."

OpenFlow enables researchers to run experimental protocols in the campus networks we use every day. OpenFlow is added as a feature to commercial Ethernet switches, routers and wireless access points – and provides a standardized hook to allow researchers to run experiments, without requiring vendors to expose the internal workings of their network devices. OpenFlow is currently being implemented by major vendors, with OpenFlow-enabled switches now commercially available.

How does OpenFlow work?

In a classical router or switch, the fast packet forwarding (data path) and the high level routing decisions (control path) occur on the same device. An OpenFlow Switch separates these two functions. The data path portion still resides on the switch, while high-level routing decisions are moved to a separate controller, typically a standard server. The OpenFlow Switch and Controller communicate via the OpenFlow protocol, which defines messages, such as packet-received, send-packet-out, modify-forwarding-table, and get-stats.

The data path of an OpenFlow Switch presents a clean flow table abstraction; each flow table entry contains a set of packet fields to match, and an action (such as send-out-port, modify-field, or drop). When an OpenFlow Switch receives a packet it has never seen before, for which it has no matching flow entries, it sends this packet to the controller. The controller then makes a decision on how to handle this packet. It can drop the packet, or it can add a flow entry directing the switch on how to forward similar packets in the future.

What can I do with OpenFlow?

OpenFlow allows you to easily deploy innovative routing and switching protocols in your network. It is used for applications such as virtual machine mobility, high-security networks and next generation ip based mobile networks

 

http://www.openflow.org/documents/openflow-spec-v1.1.0.pdf

http://www.openflow.org/documents/openflow-wp-latest.pdf

http://www.openflow.org

 

 

Permalink | Leave a comment  »

23nov2011

Samsung 10K Corpore São Paulo Classic – 10º Troféu Zumbis dos Palmares

(0) comentários

No domingo de 20 de novembro de 2011 corri os 10 km da Samsung 10K Corpore São Paulo Classic - 10º Troféu Zumbis dos Palmares. A corrida foi disputada nos arredores do Parque do Ibirapuera.

Como tinha corrido 15 km da Fila Night Run na noite anterior, meu tempo não foi dos melhores.

Tempo total: 00:52:04

Tempo médio por km: 05:12

Tempo em cada km:

  1. 04:50
  2. 04:57
  3. 05:09
  4. 05:23
  5. 05:05
  6. 05:33
  7. 05:28
  8. 05:16
  9. 05:12
  10. 05:11

Foto de WebRun

Foto de WebRun

Foto de MidiaSport

Foto de MidiaSport

Foto de Treino Online

Foto de Treino Online


22nov2011

Fila Night Run – São Paulo 2011 – Etapa 2 – 5 km e 10 km

(0) comentários

Na noite do sábado de 19 de novembro de 2011 corri os 5 km da Fila Night Run - São Paulo 2011 - Etapa 2.

Fila Night Run - São Paulo 2011 - Etapa 2

A prova teve sua largada às 19h30 e aconteceu nas redondezas do CEAGESP, em um percurso horrível.

Tempo total: 00:23:29

Tempo médio por km: 04:41

Tempo em cada km:

  1. 04:22
  2. 04:32
  3. 04:46
  4. 05:18
  5. 04:31

Patricia e eu

Depois de correr os 5 km, também corri a prova dos 10 km para acompanhar a Patricia, que teve sua largada às 20h30.

Os tempos abaixo então são os tempos dela.

Tempo total: 00:57:55

Tempo médio por km: 05:47

Tempo em cada km:

  1. 06:04
  2. 05:26
  3. 06:03
  4. 06:38
  5. 05:06
  6. 04:50
  7. 05:34
  8. 05:59
  9. 06:55
  10. 05:18

Foto de Ativo.com


22nov2011

Descobrir se foi aberto como popup, ou se abriram diretamente.

(0) comentários

Dúvida rápida no fórum..
Será que é possível saber, se um documento foi aberto diretamente ? ou se ele foi aberto ‘como popup’ ?

b.html

<script type="text/javascript">
alert( window.opener );
</script>

Qndo acessarmos diretamente esse arquivo, o alert irá mostrar: null (digitando na url, ou copiando e colando daqui)
http://wbruno.com.br/scripts/b.html

e agora:
a.html

<script type="text/javascript">
window.open( 'b.html', '', 'width=300, height=200;')
</script>

ao acessarmos o arquivo a.html, o alert do nosso b.html, que foi aberto como popup, irá mostrar: [Object Window]

a.html

Switch to our mobile site