[Piada] Um a dez na faculdade

Um psicólogo fazia testes para admissão de novos candidatos em uma empresa e seleção:
- O senhor pode contar até dez, por favor?
- Dez, nove, oito, sete, seis, cinco, quatro, três, dois, um.
- Por que você contou de trás pra frente?
- É que eu trabalhava na Nasa.
- Sinto muito, está reprovado.
Entra o próximo:
- O senhor pode contar até dez, por favor?
- Um, três, cinco, sete, nove, dois, quatro, seis, oito, dez.
- Por que você contou primeiro os ímpares e depois os pares?
- Porque eu trabalhava como carteiro.
- Sinto muito, está reprovado.
Entra o próximo:
- O senhor pode contar até dez, por favor?
- 1, 2, 3, 4, 5, 6, 7, 8 e 1, 2, 3, 4, 5, 6, 7, 8.
- Por que o senhor só contou até oito?
- Por que eu era dançarino.
- Sinto muito, está reprovado
Entra o próximo:
- Antes de começarmos, por favor me diga uma coisa, o que o senhor fazia em seu emprego anterior?
- Eu era estagiário. Fazia faculdade.
- OK. Excelente. O senhor pode contar até dez?
- É claro. Ás, dois, três, quatro, cinco, seis, sete, dama, valete e rei. Truuuuco ladrão!

fonte: http://www.piadalegal.com.br/piadas/empregados/um-a-dez-na-faculdade/PID35727/


[Piada] Trabalho de estagiário

O presidente de uma Grande empresa, sentado em sua enorme sala sem absolutamente nada para fazer, começa a pensar sobre o que é trabalho e o que é lazer em seu dia. Após uma enorme lista de diversões, ele chegou na hora em que transa com sua esposa, com a qual já está casado há 15 anos. Sem conseguir concluir ao certo se transar com sua esposa é trabalho ou prazer, ele chama o vice-presidente em sua sala. Um pouco menos desocupado, o vice para de ler as reportagens sobre a empresa que haviam sido publicadas no jornal e vai até a sala do Presidente que lhe pergunta:
- Transar com minha esposa é trabalho ou prazer?
O vice pensa alguns segundos e incerto da resposta pede duas horas para responder. Volta para sua sala, chama o diretor geral da empresa e faz a mesma pergunta:
- Quando o presidente dorme com a mulher dele, é trabalho ou prazer?
O vice dá ao diretor geral o prazo de uma hora para responder. Imediatamente o diretor geral, mesmo sem nada para fazer, delega a função ao diretor jurídico que passa a pergunta para o advogado sênior e assim vai até chegar ao advogado júnior.
Assim como o resto da empresa, o advogado júnior fica na dúvida e vai até a mesa de seu estagiário:
- Você tem cinco minutos para descobrir se quando o presidente transa com a mulher dele é trabalho ou prazer.
O estagiário, então, sem parar de digitar com a mão direita e separar uma pilha de documentos com a mão esquerda, olha para o advogado júnior por cima das milhares de pastas que estão em sua mesa e responde:
- É prazer.
Espantado com a rapidez e confiança da resposta do estagiário, o advogado júnior pergunta:
- Mas como você tem tanta segurança em sua resposta?
Ainda sem parar de trabalhar, o estagiário responde:
- Por que se fosse trabalho era eu quem ia fazer!

fonte: http://www.piadalegal.com.br/piadas/empregados/trabalho-de-estagiario/PID35726/


Menu navegável com Xml em AS3

Menu navegável com Xml

Problema:
Quando vc sai do AS2 e tenta fazer o “mesmo” menu Navegável em AS3 e não consegue na hora de passar o indice para dentro dos botões

Solução:
Conceito Básico de Orientação a Objetos, faremos um atributo para receber esse índice na classe do Menu.

Implementação:

Em AS2 ficaria resumidamente assim:

var menu:MovieClip;
for (var i:Number = 0; i < xml.firstChild.chlidNodes.length; i++)
{
	menu = this["botoes" + i];
	menu.x = 0 + (i * (menu.width + spaceMenu );
	menu.index = i;
	menu.onRelease = function():Void
	{
		trace(this.indice); //traz o indice do botão da vez
	}
}

em AS3 mudaria “um pouco” para:

arquivo: HardInspireMenu.as

package
{
	import flash.display.MovieClip;
	/**
	 * @author - Ronaldo Prates
	 */
	public class HardInspireMenu extends MovieClip
	{
		private var _index:Number;
		public function HardInspireMenu()
		{
			super();
		}
		public function get index():Number{	return _index;	}
		public function set index(i:Number):void{	_index = i;	}
	}
}

arquivo: Main.as

var menu:HardInspireMenu;
for (var i:Number = 0; i < xml.children().length(); i++)
{
	menu = HardInspireMenu();
	menu.name = "botoes" + i;
	menu.x = 0 + (i * (menu.width + spaceMenu );
	menu.index = i;
	menu.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
}
private function onDown():void
{
	trace(e.currentTarget.index); //traz o indice do botão da vez
}

Comentário:

- Você colocar uma variavel direto na classe não é nada convencional, pois aquele “atributo/propriedade” não existe! (Doa a quem doer).
- Eu estou fazendo alguns Jobs na empresa de coisas “simples” (MP3Player, VideoPlayer, Banner Rotator) no ver, porem complexo no fazer certo (ou pelo menos iniciar certo) e inicio eles em AS3 -> package -> etc. Assim é a melhor forma de “Desaprender” o AS2 e o procedurismo impreguinado nas veias.


Como fazer um X na matriz

O problema
Quando você precisa fazer um X na tabela ou por que alguem lhe desafiou ou por que foi pedido na faculdade, curso sei la.

Solução
Matriz Diagonal
Numa matriz quadrada de C de ordem n, os elementos aij tais que i = j formam a diagonal principal da matriz, e os elementos aij tais que i + j = n + 1 formam a diagonal secundária. (fonte)

Implementação
Javascript

<table border="1" align="center">
	<script>
		var n = 4; // entenda n como a ordem
		for(var i=1; i < n; i++)
		{
			document.write("<tr>");
			for(var j=1; j<n; j++)
			{
				if ((i == j) || ( i + j == n)) //mágica
				{
					document.write("<td>1</td>");
				}
				else
				{
					document.write("<td>0</td>");
				}
			}
			document.write("</tr>");
		}
	</script>
</table>

Comentário
Matemática e Lógica andam juntas, uma provém da outra
=)


Flex 3 – Problemas com CACHE no Internet Explorer

Voce pode não gosta do IE (eu também não) mas ele ainda é usado, e nós que trarbalhamos com a Tecnologia Flash achamos que nunca precisamos nos preocupar com os navegadores, pois é.

Tive um problema hoje com o IE, simplesmente ele guardava um CACHE doido de uma aplicação flex, coisa que no FF não acontecia (normal né?!).

Se no FF não acontecia e no IE sim, e estamos falando de FlashPlayer só resta 2 opções:
JavaScript ou Configuração do próprio Navegador

Como eu sabia que não era JavaScript parti parar as configurações do IE e lembrei de uma CONFIG para forçar o Navegador (não estamos falando ainda de código e nem vamos até então)

Abra o IE e va em:

Ferramentas -> Configurações (ao lado do excluir) -> Sempre que eu visitar a páina da web

Se vc perceber o Flex trabalha muito com a URL para alguns de seus Refresh’s, dependendo da aplicação você nem consegue ver o que se passa na URL de tanto parameto que ele joga, enfim isso resolveu o problema. Além lógico de excluir os arquivos temporários.

Você pode forçar com algumas alternativas (no meu caso não precisei mas…)

JavaScript:

response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);

JSP:

response.setHeader(”Cache-Control”,”no-cache”);
response.setDateHeader (”Expires”, 0);

HTML:

<META HTTP-EQUIV=”Cache-Control” CONTENT=”no-cache”>
<META HTTP-EQUIV=”expires” CONTENT=”0″>

PHP:

header(”Cache-Control: no-cache, must-revalidate”);
header(”Expires: Mon, 26 Jul 1997 05:00:00 GMT”);

=)


Link para download ou redirecionamento na mesma página Flash/Flex

No trabalho tivemos algumas dificuldes de abrir um humilde link na mesma página apartir de um SWF!
o navigateToURL(URLRequest, String=null); por algum motivo não abria a página na mesma janela (sim usei o _self).

Não estou dizendo que fiz de tudo dentro das boas práticas, usando as coisas certas, mas lhe digo que o simples navigateToURL() com selt, parent, top, hospedado e não hospedado, interno ou em rede, allowScriptAccess:always ou sameDomain ele não queria ir, deve ser alguma config, então ajeitamos de 2 maneiras:

1ª – ExternalInterface -> Chamando um javascript no HTML em que o SWF esta. (Chris postou no blog dele, olhem la também) caiu no post de POGs kkk.

<script type=”text/javascript”>
function swfURL(param)
{
window.open(param, “_self”);
}
</script>

2ª – Digamos que é a mesma solução da primeira, porem faremos dentro do AS:

//Abre a URL passada na mesma janela da aplicação
private function open():void
{
	var url:String = "javascript:void(window.open('http://www.chrisb.com.br/blog/o-pog-nosso-de-cada-dia-18/'))";
	void(navigateToURL( new URLRequest( url ), "_self"));
}

Na linha 4 desse código acima, a palavra javascript fala para o SWF embedado procurar funções do javascript na página HTML, o void é justamente para o window.open não retornar nada, somente executar, pode acontecer de você disparar essa função para abrir a URL e ele abrir uma página em branco.

Na linha 5 esse void() é só teste mesmo hehe, ele não influência em nada, até por que o comando navigateToURL() é void, ele executa e não retorna nada. Pode remover ele se quiser rs


FlashVars no Flash

Como vimos no post do FlashVars no Flex 3, não é tão diferente do flex, então vou pular as lances dos parâmetros e ir direto ao assunto okay, qualquer coisa você pode ver no link acima do flashvars no flex.


//No trace não ira dar certo, por que precisa do carregamento do flashvars do HTML/SWFObject
//Então crio um campo de texto
var verFlashVars:String = flashVars.suaVariavel;
var texto:TextField = new TextField();
texto.autoSize = TextFieldAutoSize.LEFT;
texto.text = ' ';
addChild(texto);

//LoaderInfo recebe a própria informação de carregamento do root atual (no caso o principal né).
//Nessa altura ele ja tem as informações do seu Flashvars = parameters
try {
var flashVars:Object = LoaderInfo(this.root.loaderInfo).parameters;
//Não existe mais aquela coisa de TextField.text += "...";
texto.appendText(flashVars.suaVariavel);
}
//implementação - "suaVariavel" tem que ser o mesmo nome da variavel passado no flashVars do HTML/SWFObject

} catch (e:Error) {
texto.appendText(e);
}

Essa foi rádpida, para melhor aprendizado acompanhe o post do flashvars no flex


JavaScript executando um ActionScript

Posteriormente estarei postando um exemplo mais completo de toda a classe ExternalInterface(), ao qual é responsável pela integração FlashPlayer / JavaScript.

A pergunta é: Como enviar informações para dentro do FlashPlayer com JavaScript?
A Resposta é: Com ExternalInterface.addCallBack().

sua implementação:

//import
import flash.external.Externalnterface;

//ExternalInterface trabalha com métodos e atributos státicos
ExternalInterface.addCallBack(functionName:String, closure:Funcion);

addCallBack recebe 2 parâmetros:

functionName:String = Coloque entre aspas o nome da função la do JavaScript.
closure:Funcion = Aqui vai o nome da função aqui do Flex (no caso) que sera executada

import flash.external.ExternalInterface;
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
	width="500"
	height="200"
	xmlns:mx="http://www.adobe.com/2006/mxml"
	layout="absolute"
	applicationComplete="Main(event)" xmlns:text="flash.text.*">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import flash.external.ExternalInterface;
			private function Main(e:FlexEvent):void
			{
				var debug:String = "";
				try
	            {
	                ExternalInterface.addCallback("enviaParaFlash", recebeDoJavaScript);
	            }
	            catch (error:SecurityError)
	            {
	                debug += "Um erro de Segurança ocorreu: " + error.message + "\n";
	            }
	            catch (error:Error)
	            {
	                debug += "Um erro ocorreu: " + error.message + "\n";
	            }
	            trace(debug);

	        }
	        private function recebeDoJavaScript(param:String):void
	        {
	            Alert.show(param.toString());
	        }
		]]>
	</mx:Script>
</mx:Application>

Certio? Ainda não acabamos, ainda tem a parte do JS, então va no seu HTML que tem o embed do FlahPlayer e insira esse javascript no corpo () do seu código.

function retornaObjetoFlashPlayer(id)
{
     //Se IE
     if (navigator.appName.indexOf("Microsoft") != -1)
     {
         return window[id];
     }
     else
     {
         return document[id];
     }
}
//Executado pelo flash
function alerta(paramTexto)
{
     returnaObjetoFlashPlayer('id_seu_flash').alerta(paramTexto);
}
<input type="text" id="inpAlerta"/>
<input type="button" value="Alertar dentro do FlashPlayer" onclick="alerta(document.getElementById('inpAlerta').value)" />

Estanhou alguma coisa? A Função returnaObjetoFlashPlayer recebe o id como parâmetro, esse id é substituído pelo id do filme do flashplayer. Normalmente esse tipo de código é gerado automaticamente e o id do seu filme é o mesmo que o nome do seu arquivo:

exemplo:

nome do arquivo: “main.swf”
nome do seu id: “main” (normalmente)

Neste caso:

retornaObjetoFlashPlayer('main').alerta(paramTexto);

O JavaScript entende que o Flash embutido na página também se torna um objeto parte da página e assim pode acessa-lo de certa forma, enviar e trazer parâmetros.

função nomeDaFunção1 (parametros)
{
     //Mesmo nome a função
     id_FlashPlayer.nomeDaFunção1 (parametros)
}

Okay, ficamos nisso hoje, posteriormente postarei sobre toda a Classe ExternalInterface


QueryString no JavaScript

Hard Inspire - URLUtils

Talvez eu apanhe de algumas pessoas por esta mexendo com javascript he he, mas estou a terminar um pequeno e simples freela de um site, na verdade estou ajudando um amigo com a parte de Javascript/Ajax.

Entenda a Situacao:
Tinhamos a seguinte URL para consumir

www.nomedosite.com/?pagina=fotos&album=Casamento

No caso precisaríamos do valor de album (Casamento) e ele fez o seguinte script:

window.location.search.substring(20);

Que no caso pega apartir da posicao 20 ate o fim da string
Isso funcionou? Sim!
Problema Resolvido? Sim!
Foi à melhor forma de fazer? Não!

Tínhamos tempo para resolver algumas coisas, então depois que finalizamos algumas coisas eu fiquei com isso na cabeça, o maldito substring(20) que ate então eu nunca tinha usado sem passar seu segundo parâmetro.

Foi então que juntando minha vontade de aprender OOP, pensei em fazer um método para eu pegar qualquer QueryString , pois no exemplo acima se tivéssemos qualquer outro parâmetro depois dele já não iria funcionar (esse é o problema de qualquer sistema sem sua fase de TDD).

Já agradeço o Julio Greff que postou sobre métodos estáticos em javascript, eu estava quebrando a cabeça colocando o Método dentro da função xD.

Estou aprendendo a documentar, Na verdade nao estudei ainda isso rs Mas eu vou arrumar Palavra de “Poeta Morto”.

Eu já tinha a lógica toda na cabeça então foi muito simples fazer, olha só:

/**
 * URLUtils
 * @author Ronaldo Hard - hardinspire.com
 */
function URLUtils()
{
}

/**
 * Método Statico para QueryString
 * @param passa a String a ser procurada
 */
URLUtils.getParameter = function(queryString)
{
	var nothingFound = 0;
	var arrParameters = new Array();
	arrParameters = window.location.search.split("&");
	arrParameters[0] = arrParameters[0].substring(1, arrParameters[0].length)

	for( var i in arrParameters )
	{
		if (arrParameters[i].indexOf(queryString) == 0)
		{
			var searchParams = arrParameters[i].indexOf("=") + 1;
			var cutParam = arrParameters[i].substring(searchParams, arrParameters[i].toString().length);
			return new String(cutParam);
		}
		else
		{
			nothingFound++;
			if ( nothingFound == arrParameters.length)
			{
				throw new Error("QueryString não encontrada!");
			}
		}
	}
}// JavaScript Document

Salve esse script como URLUtils.js, e qualquer arquivo que quiser usaldo basta usar direto o metodo estatico por exemplo:

//getAlbum recebe o valor do parametro album
var getAlbum = URLUtils.getParameter("album");

Simples assim!

=)


Hitler vai à CFUnited

CFUnited

O nome dele voces (flexeiros) ja deve saber, Doug McCune esteve no CFUnited falando sobre frameworks opensource, bem ele diz em seu blog que, quem nao estava la talvez nao entenderia o motivo deste video porem eu mesmo ri demais quando vi, do pouco de “leitura basica de ingles” alias, uma das coisas que o McCune citou era um framework de legendas para videos, onde vc poderia ate trazudir as legendas, em breve postarei ele aqui.

Enquanto isso de uma olhada no video, muito bom por sinal… (Abraco Ari uhauhau)