domingo, 12 de maio de 2013

Estratégia - A Arte da Guerra - O Emprego de Agentes Secretos

Quem nunca ouviu falar de 007? Muito usado na guerra, os Agentes Secretos devem ser utilizados em qualquer modelo de negócio ou mesmo na carreira. Recentemente passou um filme sobre o criador do Facebook chamado “You don't get to 500 million friends without making a few enemies” (algo como, "Você não pode fazer 500 milhões de amigos sem fazer alguns inimigos") encontrado no Brasil como “A Rede Social”, a lógica é bem simples quanto mais amigos possuímos mais aumentará o número de invejosos.

Observe isso funcionando através das grandes lojas que são consideradas vilãs na terra como Mc Donald’s ou Microsoft. Permita-me citar outro filme chamado “Super Size Me” (algo como, "Meu tamanho gigante") encontrado no Brasil como “A Dieta do Palhaço”, o Mc Donald’s imediatamente tomou providências, retirou o tamanho Super Size e adicionou sucos e saladas ao seu cardápio (qual outra loja de Fast Food faria o mesmo?), já a “satânica” Microsoft é uma das poucas que permite ao desenvolvedor realizar livremente seu modelo de negócio.

Retornando ao assunto, ter pessoas infiltradas em grupos contrários fornecendo informações é essencial para a sobrevivência em qualquer mundo seja dos negócios ou particular. Lembre-se que vivemos através da venda da nossa imagem e isso faz toda a diferença.

Permita-me agora citar meu caso, sou escritor com 14 livros (o 15 saindo do forno) sobre diversos assuntos e mais de 25 anos de experiência, obviamente neste caminho não passei sem deixar algumas mágoas, uma delas tentou me difamar de modo mesquinho e ridículo ao publicar em uma lista de Java suas opiniões contrárias a minha entrada no grupo de Java Champions (profissionais em destaque do mundo inteiro que deram sua contribuição à expansão do Java) ao invés de ficar satisfeito que mais um Brasileiro pertence a este seleto clube. Reação que era esperada, que eu subisse “nas tamancas” e o mandasse “plantar batatas” ao mesmo nível dos elogios colocados e mostrasse a todos que sou realmente um idiota, minha reação? Silêncio e deixar a coisa se apagar por si só, pois havia sido informado antes do ocorrido e havia preparado todas minhas reações.

Agentes secretos são úteis não apenas em filmes, mas em todos os aspectos de sua vida como um todo. Cultive pessoas de confiança que podem lhe fornecer informações sobre tudo que o cerca e tudo o que achar necessário conhecer.

Obrigado e até a próxima
Fernando Anselmo

sábado, 11 de maio de 2013

Gimp - Criação de Plug-ins Python

Uma das maiores vantagens do Gimp, além de ser livre, é a possibilidade de se poder criar plug-ins. Para isso, podemos utilizar a linguagem C (na qual o Gimp foi escrito) ou a flexível Python. Este artigo que vou escrever (espero o primeiro de vários) foi criado com base na publicação de Chobo Programmer. O problema é que alguns detalhes não ficaram muito claros, e pretendo destrinchar um pouco mais aqui.


O objetivo deste plug-in é gerar um conjunto de imagens semelhantes, com a variação de um número, baseadas em um único template. Baixe o template aqui. O arquivo template é um arquivo imagem em formato Gimp (*.xcf) contendo um campo texto (que sua camada deve chamar Text), neste campo que o Script trabalha. Gera um número indicado de imagens e cada uma possui um número sequencial, que será iniciado por um número informado. Desta forma é possível por exemplo, gerar 100 imagens de bolinhas onde cada uma delas possui um número.

Como sou brasileiro, resolvi adaptar o plug-in, e aí começaram meus problemas, não se pode usar acentos a menos que o script seja escrito em codificação UTF-8, por isso na inicial do programa possui o código:
# -*- coding: utf-8 -*-
Isso instrui o Python a permitir códigos acentuados no padrão UTF-8. E assim, a janela mostrada pode conter os caracteres acentuados:


Outro detalhe que devemos sempre lembrar é relativo a edentação em Python, isso é extremamente importante, pois informa ao compilador que estamos em um método ou em um comando, então o que é opcional em outras linguagens aqui é obrigatório.

Não existe uma forma "prática" de testar esse Script, ou seja, se estiver com erro devemos sair do Gimp modificar o Script e retornar ao Gimp (algumas vezes inclusive é ideal mudar o nome do Script - Cuidado e Atenção).

Mas ao final é apaixonante saber que podemos possuir um total controle sobre este poderoso Editor de Imagens (concorrente do todo poderoso Photoshop) e saber que a partir de agora podemos automatizá-lo de qualquer forma.

Detalhes do Script (já totalmente em português)
# -*- coding: utf-8 -*-

#!/usr/bin/env python

from gimpfu import *
import os

def run(*args):
    # Definir os cinco argumentos de Entrada
    arquivo, num, tot, nome, dirSaida, zeros = args

    # Verificar se foi informado o diretório de saída
    dirSaida = os.path.expanduser('~/' + dirSaida)
    if not os.path.exists(dirSaida):
        os.makedirs(dirSaida)
    for i in xrange(1, tot+1):
        # Abrir o arquivo de template 
        im = pdb.gimp_file_load(arquivo, arquivo)
        # Nome da camada Texto na template deve ser 'Text'
        camada = filter(lambda  x: x.name == 'Text', im.layers)[0]
        # Adicionar o número para a camada de texto
        numStr = str(num)
        pdb.gimp_text_layer_set_text(camada, numStr.zfill(zeros))
        # Adicionar mais um ao número
        num += 1
        # Fazer um merge da camada para a imagem...
        merged = pdb.gimp_image_merge_visible_layers(im, 0)
        # Montar parte do nome do arquivo de saída
        nomArqSaida = "%s%d.png" % (nome, i)
        # Montar o nome completo do arquivo de saída
        nomCompleto = os.path.join(dirSaida, nomArqSaida)
        # Salvar o arquivo com extensão PNG
        pdb.file_png_save_defaults(im, merged, nomCompleto, nomCompleto)

register(
    "gennumero",
    "Gerador de números para uma template",
    "Gerador de números de template",
    "Original: Roman Hwang",
    "Adaptado: Fernando Anselmo",
    "Maio de 2013",
    "/Filters/Fernando/Gerar Número...", "",
    [
        (PF_FILE,   "arg0", "Arquivo Template", ""),
        (PF_INT,    "arg1", "Primeiro número da sequência", 1),
        (PF_INT,    "arg2", "Total de imagens a gerar", 30),
        (PF_STRING, "arg3", "Nome dos arquivos de saída", ""),
        (PF_STRING, "arg4", "Diretório de saída (relativo a pasta USER)", ""),
        (PF_INT,    "arg5", "Tamanho mínimo do número (completa com zeros)", 1),
    ], [], run)

main()
Coloquei todos os comentários necessários para que o Script seja auto entendível, mas qualquer dúvida recomendo a consulta do texto original, outro detalhe é que modifiquei um pouco a programação deste.

Para instalar o plug-in, copie todo o código para seu editor de códigos favorito (não vale o Word/Write) e salve-o com o nome de "icon_generator.py" na pasta /gimp-2.8/plug-ins (esse número 2.8 é a versão do Gimp). Agora é só abrir o Gimp e acessar o caminho "Filters | Fernando" que estará disponível para uso.

Obrigado e até a próxima
Fernando Anselmo

PS. Toda a documentação sobre a geração do Python com Gimp pode ser obtida aqui.

domingo, 5 de maio de 2013

Estratégia - A Arte da Guerra - Ataque com Fogo

Na época em que foi escrito "A Arte da Guerra", atacar com fogo pode ser descrito como utilizar com o recurso mais destrutivo que possuímos. Ou seja, agora é hora de mostrarmos o que temos a mão para vencermos a batalha em um único movimento rápido e preciso. Sun Tzu alerta sobre o momento de executá-lo, porque essa forte preocupação? Pode-se dizer que o momento é tudo.

Em Xadrez existem as jogadas clássicas, uma delas é chamada Ataque Marshall, no qual o jogador sacrifica deliberadamente a Rainha (uma das peças mais poderosas do jogo) para obter a vitória. Outra jogada conhecida é a de Anderssen no qual apesar de ter sacrificado um Bispo, ambas as Torres e a Rainha conseguiu aplicar um xeque-mate. Isso demonstra que ao escolhermos o momento correto e usarmos tudo que temos a nossa disposição podemos vencer.

Outro alerta importante neste capítulo é sobre ir para a “guerra” carregando “fogo de palha”, ou seja, ir simplesmente porque os líderes estão furiosos com alguma coisa. Esse é o famoso momento que precisamos contar até 10 e analisarmos criticamente essa resolução.


Leia aqui sobre o ataque de Marshall.
Leia aqui sobre a partida imortal de Anderssen.

Obrigado e até a próxima
Fernando Anselmo