formats

O dia em que a maçã chorou

Publicado em 6 de outubro de 2011 por em Artigos

Steve Jobs 1955 - 2011

Não dá pra ignorar a morte de Steve Jobs. Nunca me imaginei lamentando tanto pela morte de alguém que nunca conheci, e que talvez nunca iria conhecer pessoalmente. Ontem me surpreendi em ver o quanto ele conseguiu marcar a vida de muita gente, que sequer sabia quem ele era. Muito me impressionou ao ver a feição de meu pai, um senhor de 80 anos, quando eu disse que se tratava do cara responsável pela primeira idéia do computador voltado para o público em geral.

Desde que assisti “Pirates of the Silicon Valley”, adquiri uma grande adimiração pela figura de Jobs. Mais ainda depois do meu primeiro contato com o iPhone, vindo logo após o iPad e por último, quando comprei meu primeiro MacBook. Achei o texto abaixo no Insconsciente Coletivo que retrata justamente uma das maiores lições que aprendi observando os altos e baixos da carreira de Jobs.

Amor e Perda (por Steve Jobs)

Eu era sortudo. Encontrei o que amava fazer já cedo na vida. Woz e eu começamos a Apple na garagem dos meus pais, quando eu tinha 20 anos. Nós trabalhamos arduamente, e em 10 anos a Apple cresceu de apenas nós dois em uma garagem para uma companhia de 2 bilhões de dólares com mais de 4.000 funcionários. Nós tínhamos acabado de lançar a nossa melhor criação – o Macintosh – um ano antes, e eu tinha acabado de completar 30 anos. E então eu fui demitido. Como você pode ser demitido da companhia que você começou?

Bem, conforme a Apple crescia, nós contratamos alguém que eu achava que era bem talentoso para comandar a companhia comigo, e no primeiro ano ou mais, as coisas foram bem. Mas então as nossas visões de futuro começaram a divergir, e no fim tivemos uma desavença. Quando isso aconteceu, a nossa banca de diretores ficou do lado dele. Então, aos 30, eu estava fora. E fora de uma maneira bem pública. O que tinha sido o foco de toda a minha vida adulta havia acabado, e isso foi devastador.

Por alguns meses, eu realmente não sabia o que fazer. Sentia que havia decepcionado a próxima geração de empreendedores – que havia deixado a batuta cair quando ela me foi passada. Encontrei-me com David Packard e Bob Noyce e tentei me desculpar por ter errado feio. Foi um fracasso muito público e pensei em abandonar tudo. Mas alguma coisa lentamente começou a despertar em mim – eu ainda amava o que fazia. Os acontecimentos com a Apple não haviam mudado isso. Eu havia sido rejeitado, mas ainda estava apaixonado. E então eu decidi recomeçar.

Eu não percebi isso na época, mas ter sido demitido da Apple foi a melhor coisa que poderia ter acontecido comigo. O peso de ser bem-sucedido foi substituído pela leveza de ser um iniciante novamente, com menos certezas à respeito de tudo. Isso me libertou para entrar em um dos períodos mais criativos da minha vida.

Durante os 5 anos seguintes, iniciei uma companhia chamada NeXT e outra chamada Pixar, e me apaixonei por uma mulher incrível, que se tornou minha esposa. A Pixar foi em frente e criou o primeiro filme de animação computadorizada do mundo, “Toy Story”, e hoje é o estúdio de animação mais bem-sucedido do mundo. Em uma reviravolta extraordinária, a Apple comprou a NeXT.

Eu voltei para a Apple, e a tecnologia que desenvolvemos na NeXT está no coração do atual renascimento da Apple. E Laurence e eu temos uma família maravilhosa juntos.

Tenho certeza que nada disso teria acontecido se eu não tivesse sido demitido da Apple. Foi um remédio amargo, mas eu acho que o paciente aqui precisava. Algumas vezes a vida atinge você com um tijolo na cabeça. Não perca a fé. Eu estou convencido que a única coisa que me manteve indo em frente foi o amor pelo que fazia. Você precisa encontrar o que ama. E isso é verdade não só para o seu trabalho, mas para os seus relacionamentos também.

O seu trabalho irá preencher uma grande parte da sua vida, e a única maneira de se sentir verdadeiramente satisfeito é fazer aquilo que você acredita ser um ótimo trabalho. E a única maneira de fazer um ótimo trabalho, é amando o que faz. Se você ainda não encontrou, continue procurando.

Não se acomode. Assim é com todos os assuntos do coração, você reconhecerá quando encontrar. E, da mesma forma que em qualquer grande relacionamento, vai ficando melhor e melhor conforme os anos passam. Portanto, continue procurando até encontrar. Não se acomode.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Utilizando novas fontes em projetos Flex 4

Publicado em 28 de setembro de 2011 por em Flex

O número de fontes disponiveis na IDE do Flex 4 (Flash Builder) é um tanto limitado. Para resolver esse problema de duas formas: através de CSS ou embutindo a fonte na sua aplicação.

Via CSS

<fx:Style>
		@namespace s "library://ns.adobe.com/flex/spark";
		@namespace mx "library://ns.adobe.com/flex/halo";

		@font-face {
			src: url("assets/fonts/LisboaSansOSF.otf");
			fontFamily: "LisboaSansOSFEmbedded";
			embedAsCFF: true;
		}

		s|Label {
			fontFamily: LisboaSansOSFEmbedded;
			fontSize: 40;
		}
	</fx:Style>

Dessa forma, a fonte será utilizada em todos os elementos label do Spark. Mas para funcionar, você precisa enviar o arquivo da fonte para o ftp do seu projeto.

Utilizando Embedding Fonts

Se você quiser, também poderá incluir o arquivo na sua aplicação:

		[Embed(source="/assets/fonts/LisboaSansOSF.otf", fontName="LisboaSansOSF", mimeType="application/x-font-opentype")]
		public var LisboaSansOSF:Class;

Feito isso, você pode selecionar a fonte via CSS (como no exemplo anterior) ou nas propriedades do elemento. Porém nesta forma você não precisa ficar se preocupando qual arquivo enviar junto com o seu projeto compilado.

Um detalhe importante: Se você for utilizar um arquivo .ttf (Fonte True Type), lembre-se de alterar o mimeType para application/x-font-truetype.

 

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Dia do Programador

O Dia do Programador é um feriado profissional oficial na Rússia, celebrado no 256º dia do ano (13 de setembro; ou 12 de setembro nos anos bissextos).

O número 256 foi escolhido para esta data porque 256 é o número de valores distintos que podem ser representados com um byte de oito bits, um número bem conhecido entre os programadores. Além disso, ’256′ em hexadecimal é ’100′ (’0×100′), e é a maior potência de 2 abaixo de 365 (o número de dias em um ano). Nos anos bissextos, a data comemorativa é 12 de setembro (13 de setembro em outros anos).

Para comemorarmos juntos, digite isto no Terminal:

python -c "import urllib2;print ''.join(map(lambda x:chr(x),map(int,urllib2.urlopen('http://bit.ly/quv9c6').read().split(','))))"

É mais ou menos assim o resumo da vida de quem desenvolve!

 

 

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Verificando o status de IPs, maquinas e portas utilizando PHP

Publicado em 18 de maio de 2011 por em PHP

Eu pretendia criar um script de monitoramento para verificar constantemente através do Cron a quantas andam os serviços dos principais domínios e servidores que gerencio. Até pensei em utilizar algum serviço profissional, mas a demanda era pouca e não justificaria o gasto. E outra: Porque contratar um serviço se eu posso criar o meu?

Depois de algumas buscas, acabei caindo na dica do colega Rafael Jaques, através do site PhpIt .

É muito simples, mais do que você imagina.  Encontrei na internet várias aplicações semelhantes a esta:

<?php
    exec('ping 127.0.0.1', $saida, $retorno);
 
    if (count($saida)) {
        print 'A Máquina está online e os dados do PING foram gravados em $saida. :) ';
    } else {
        print 'A Máquina NÃO está online ou o host não pode ser encontrado. :( ';
    }
?>

Mas nem sempre o comando exec() é permitido. Muitos servidores, visando maior segurança, bloqueiam o uso desse artifício. A solução indicada pelo Rafael é, em vez do exec(), utilizar o fsockopen() para a tarefa:

<?php
    $conectado = @ fsockopen('127.0.0.1', 135, $numeroDoErro, $stringDoErro, 10); // Este último é o timeout, em segundos
    if ($conectado) {
        print 'A máquina está online! :) ';
    } else {
        print 'A máquina NÃO está online! :( ';
    }
?>

Em vez da porta 135, você poderia utilizar a porta 80 para verificar se o serviço http está funcionando corretamente. Não cheguei a testar com outras portas como FTP, MySQL, Jabber, etc, mas pela lógica deverá funcionar também. De qualquer modo, fica aí a dia.

Agradecimentos ao Rafael, do PHPIt.

 

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Piada linuxer

Publicado em 3 de maio de 2011 por em Nada haver

binladen_killed obama@whitehouse:~$ sudo chmod +x /bin/laden

 

#RoleiDeRir

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Contando o número de linhas de um <mx:List>

Flex3mxList Uma forma simples de contar a quantidade de linhas em um mx:List é utilizando a propriedade length do dataProvider da lista. Simples:

itemList.dataProvider.lenght

Onde itemList é o ID da sua mx:List. Isso é muito util quando você precisa que um determinado campo ou botão não permaneça desabilidado quando o usuário selecionar o último item da sua lista. Supondo que o controle que precisamos desabilitar seja um mx:Button, basta colocar o seguinte na sua propriedade enabled

 

{(itemList.selectedIndex < (itemList.dataProvider.length-1))}

Isso se torna possível graças a facilidade provida pelo excelente sistema de DataBindind proporcionado pelo Flex. A lógica é simples: Retornará TRUE caso o indice do item selecionado na lista seja menor que a quantidade de itens menos um. Lembrando que o calculo do length – 1 é obrigatório, já que o indice de itens começa em zero, e a contagem de itens começará sempre com 1 (lógico). Simples, fácil e rápido!

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

PHPThumb – Your GD installation does not support JPG image types

Uma solução rápida para quem utiliza a PHPThumb em seus projetos e de uns tempos pra cá vem se deparando com mensagens semelhantes a esta:

Fatal error: Uncaught exception 'Exception' with message
'Your GD installation does not support JPG image types'
in '(...)\phpthumb\ThumbBase.inc.php:165 Stack trace:
#0 (...)\phpthumb\GdThumb.inc.php(1081): ThumbBase->triggerError('Your GD install...')
#1 (...)\phpthumb\GdThumb.inc.php(101): GdThumb->verifyFormatCompatiblity()
#2 (...)\phpthumb\ThumbLib.inc.php(127): GdThumb->__construct('D:/xampp/htdocs...', Array)
#3 (...)\phpthumb\ThumbBase.inc.php on line 165

A solução é mais simples do que você pode imaginar. Se você tem certeza que sua biblioteca GD está instalada corretamente, tente o seguinte:

No arquivo GdThumb.lib.php, procure por volta da linha 1060 pelo método verifyFormatCompatiblity(). Substitua as linhas:

case 'JPG':
case 'PNG':
$isCompatible = $gdInfo[$this->format . ' Support'];
break;

Pelo código abaixo:

case 'JPG':
$isCompatible = (isset($gdInfo['JPG Support'])) ? $gdInfo['JPG Support'] : $gdInfo['JPEG Support'];
break;
case 'PNG':
$isCompatible = $gdInfo['PNG Support'];
break;

O método completo deverá ficar assim:

	protected function verifyFormatCompatiblity ()
	{
		$isCompatible 	= true;
		$gdInfo			= gd_info();

		switch ($this->format)
		{

			case 'GIF':
				$isCompatible = $gdInfo['GIF Create Support'];
				break;
      case 'JPG':
        $isCompatible = (isset($gdInfo['JPG Support'])) ? $gdInfo['JPG Support'] : $gdInfo['JPEG Support'];
        break;
      case 'PNG':
        $isCompatible = $gdInfo['PNG Support'];
        break;
      default:
				$isCompatible = false;
		}

		if (!$isCompatible)
		{
			$this->triggerError('Your GD installation does not support ' . $this->format . ' image types');
		}
	}

Salve o arquivo e teste.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Lógica de programador

Publicado em 17 de agosto de 2010 por em Humor

A esposa pede ao marido, um programador, para ir à mercearia e diz “Compre duas salsichas e, se eles tiverem ovos, compre 10″.

O programador vai até a loja e pergunta:

- “Vocês têm ovos?”
- “Sim”
- “Então eu quero 10 salsichas”.

Não viu a graça? Veja bem: O cara era programador. Quando a esposa fez o pedido a ele simplesmente entendeu da seguinte forma:

compre 2 salsichas
Se (aMerceariaTemOvosParaVender == sim) então
compre 10 salsichas
 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
5 Comments  comments 
formats

Confuso Ed

Publicado em 4 de agosto de 2010 por em Nada haver

Já quero avisar, meu caro leitor, que desta vez este post não fala sobre programação, nem sobre desenvolvimento web, nem sobre tecnologia, embora alguns personagens citados aqui sejam constituídos de bits. ;-)

Há uns dias atrás, googlando sobre bots para chats (daqueles que emulam uma conversa com o internalta, fazendo de conta que quem está respondendo é uma pessoa), cheguei a este simpático bot chamado Ed. A sua função é ajudar a crianças (e alguns adultos também) a entenderem o porquê precisamos aprender a poupar energia, o meio ambiente e seus recursos naturais.

Lembrei-me de uma brincadeira que tinhámos quando eu estava no primário, onde ao objetivo era conversar da maneira mais confusa possível. Lembro-me que dávamos muitas risadas em meio a aquelas conversas, cheias de perguntas sem um sentido exato.

Perguntei a mim mesmo se as minhas habilidades naquele jogo ainda estavam intactas. Resolvi então testar no Ed, por que não?

Eis o resultado da minha conversa produtiva com o simpático e confuso Ed.

Link para quem quiser conhecer pessoalmente o Ed: http://www.ed.conpet.gov.br/index.php

nota: Parece que resolveram tirar o Ed do ar. Mas vc pode informar o seu email neste link e ser avisado quando ele retornar.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
formats

Problema de coerção em aplicações Flex 3 modularizadas

Publicado em 24 de julho de 2010 por em Flex

Modularizar uma aplicação pode se tornar algo quase obrigatório depois que uma determinada aplicação ultrapassa um certo tamanho. Afinal, não queremos que nossos clientes fiquem horas e horas na frente da tela, esperando o sistema carregar uma infinidade de recursos que ele sequer utilizará para aquela tarefa.

Comecei a modularizar uma aplicação, e a uma certa altura dos testes, eis que me deparo com o seguinte erro:

TypeError: Error #1034: Falha de coerção de tipo: não é possível converter
mx.managers::DragManagerImpl@1444b809 em mx.managers.IDragManager.at
mx.managers::DragManager$
O erro ocorria sempre que eu carregava o módulo 1, descarregava-o, e então carregava o módulo 2. Sempre que eu clicava em uma DataGrid deste segundo módulo, o famigerado erro era disparado.

Pelo que pude observar depois de muita pesquisa e uns dias quebrando a cabeça, existe uma falha por parte do Flex quando trabalhamos com modularização. Se você faz referencia uma classe dentro de um módulo, por vezes, o Flex “se esquece” de linká-la na tua Main App. Ou seja, quando o módulo da sua aplicação tenta utilizá-lo, ele simplesmente não existirá.

A carta na manga!

Para solucionar este problema, vamos contar com uma característica do Flash Player: Por padrão, as definições de todas as classes que serão utilizadas pelo sistema podem estar presentes na aplicação principal. Ou seja, para evitar a falha, vamos forçar a referencia aos managers que estão gerando o erro.

Vi casos de pessoas que obtem um erro semelhante no uso de PopUpManagers. Para que isso não aconteça mais, escreva o seguinte código na sua aplicação principal:

import mx.managers.PopUpManager;
import mx.managers.DragManager;

private var popupMan:PopUpManager;
private var dragMan:DragManager;

Vc pode alterar o nome das variáveis popupMan e dragMan ao seu gosto. O importante é que elas sejam instanciadas com seus respectivos tipos. Isso deverá resolver seu problema.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
No Comments  comments 
© Mike & Etc
credit