terça-feira, 4 de dezembro de 2018

Guia rápido de R

Onde obter o R

https://www.r-project.org/

Instalação do R no Ubuntu/Debian:

sudo apt-get install r-base

Executando o R:

Digite r na linha de comando  (ou r.exe no Windows)

Obtendo ajuda

help([NOME DA FUNÇÃO])
help("[NOME DA FUNÇÃO]") // quando houver caracteres especiais
help.start() // abre a ajuda no navegador web padrão


Executando comandos armazenados em um arquivo

source("[NOME DO ARQUIVO]") // o arquivo deve ter a extensão R

Desviando a saída do console para um arquivo externo

sink("[NOME DO ARQUIVO]")
sink() // sem argumento restaura a saída para o console


Vendo objetos da sessão R

objects()

Removendo objetos da sessão R

rm([OBJETO1],[OBJETO2],...,[OBJETON])

Associando um vetor a um objeto



ou

c([VALOR1],[VALOR2],...,[VALORN]) -> x

ou

assign("x",c([VALOR1],[VALOR2],...,[VALORN]))

Se um valor passado como argumento para a função c for um vetor, o resultado não será um vetor multidimensional (uma matriz). Os valores do elemento vetor serão inseridos no vetor resultado, na ordem em que foram definidos. Assim, se x é o vetor gerado por c(10.4, 5.6, 3.1, 6.4, 21.7), y definido por c(x,0,x) será igual a:

10.4 5.6 3.1 6.4 21.7 0.0 10.4 5.6 3.1 6.4 21.7

Ou seja, todos os elementos de x, depois o 0, e novamente os elementos de x.

Aritmética de vetor

R permite a soma de vetores, inclusive de comprimentos diferentes. No caso da diferença de tamanho, o cálculo é feito até o último elemento do vetor maior, repetindo os elementos do vetor menor quando terminam.

Por exemplo, imagine o vetor x com 5 elementos assim definido:

c(10.4, 5.6, 3.1, 6.4, 21.7) -> x

E o vetor y, com 11 elementos, assim definido:

y 10.4 5.6 3.1 6.4 21.7 0.0 10.4 5.6 3.1 6.4 21.7

Se criarmos um vetor v combinando x e y desta forma:



O cálculo de cada elemento de v será feito desta forma:

v[1] = 2 * x[1] + y[1] + 1
v[2] = 2 * x[2] + y[2] + 1
v[3] = 2 * x[3] + y[3] + 1
v[4] = 2 * x[4] + y[4] + 1
v[5] = 2 * x[5] + y[5] + 1
v[6] = 2 * x[1] + y[6] + 1
v[7] = 2 * x[2] + y[7] + 1
v[8] = 2 * x[3] + y[8] + 1
v[9] = 2 * x[4] + y[9] + 1
v[10] = 2 * x[5] + y[10] + 1
v[11] = 2 * x[1] + y[11] + 1


Gerando sequências

Para gerar uma sequência de inteiros de 1 a 30:

s = 1:30

Para gerar uma sequência decrescente de 30 a 1:

s = 30:1

Você pode usar uma variável para definir um dos limites de uma sequência. Assim se você define n com valor 10:



Você pode criar uma sequência de 1 a 10 assim:

s = 1:n

Você pode criar uma sequência com a função seq(). Existem dois formatos:

seq([ELEMENTO INICIAL],[ELEMENTO FINAL],by=[DIFERENÇA COMUM OU RAZÃO]) 

seq(length=[QUANTIDADE DE ELEMENTOS],from=[ELEMENTO INICIAL],by=[DIFERENÇA COMUM OU RAZÃO])

Você pode criar uma sequência a partir da repetição de elementos de um vetor. Existem duas possibilidades, repetir um vetor n vezes ou repetir n vezes os elementos de um vetor. Isso é feito com a função rep(), assim:

rep([VETOR],times=[NUMERO DE VEZES QUE O VETOR SERÁ REPETIDO])

rep([VETOR],each=[NUMERO DE VEZES QUE CADA ELEMENTO DO VETOR SERÁ REPETIDO])

Sendo assim, consideremos o vetor fibonacci assim definido:

fibonacci = c(1,1,2,3,5,8,13,21)

Podemos gerar um vetor que repita fibonacci três vezes, assim:

trifibonacci = rep(fibonacci, times=3)

trifibonacci terá o seguinte conteúdo:

1 1 2 3 5 8 13 21 1 1 2 3 5 8 13 21 1 1 2 3 5 8 13 21

E podemos gerar outro vetor repetindo cada elemento de fibonacci três vezes, assim:

fibonaccigago = rep(fibonacci, each=3)

fibonaccigago terá o seguinte conteúdo:

1 1 1 1 1 1 2 2 2 3 3 3 5 5 5 8 8 8 13 13 13 21 21 21

Vetores lógicos

É possível gerar um novo vetor com elementos booleanos a partir de um vetor numérico existente usando condições lógicas.
Por exemplo, o vetor pares, assim definido:

pares 

Pode gerar o vetor menorquesete, assim definido:

menorquesete 

Que terá o seguinte conteúdo:

TRUE TRUE TRUE FALSE FALSE

Valores ausentes

NaN indica que o resultado de uma operação não é um número, o que significa que essa operação não está definido para os números envolvidos.
Inf indica o infinito, ou o limite de 1/x quando x tende a 0.

Abaixo seguem os resultados de algumas operações envolvendo as constantes NaN e Inf.

0/0 : NaN
1/0: Inf
Inf/Inf: NaN
1/Inf: 0
Inf/0: Inf

Vetores de caracteres

A função paste permite gerar um vetor de caracteres a partir de outro, pela colagem de cada um dos elementos do vetor de origem aos elementos de uma sequência numérica intermediados por um caractere separador. Se o vetor de origem for menor que a sequência, seus elementos serão repetidos até que o tamanho case com a sequência.
Assim, o seguinte exemplo de uso da função paste():

labs 

Irá gerar o seguinte vetor:

"X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"

Vetores indexados

É possível selecionar subconjuntos de um vetor usando índices entre colchetes. Os índices podem ser condições (expressões lógicas), quantidades integrais positivas, quantidade integrais negativas (um conjunto diferença) e cadeias de caracteres.

Expressões lógicas

y <- x[!is.na(x)]
y é o subconjunto de x onde cada elemento retorna falso quando passado como argumento para a função is.na()

Quantidades integrais positivas

z <- x[1:10]

z é o subconjunto dos dez primeiros elementos de x

Quantidades integrais negativas

k <- x[-(1:5)]

k é o subconjunto de todos os elementos de x exceto os cinco primeiros.

Cadeias de caracteres

Para atribuir nomes a elementos de um vetor, use a função names(), recebendo o vetor de nomes. Assim, supondo um vetor numérico fruit assim:

fruit <- c(5, 10, 1, 20)

É possível atribuir nomes aos elementos desta forma:

names(fruit) <- c(“orange”, “banana”, “apple”, “peach”)

E um subconjunto do vetor resultado pode ser selecionado usando os nomes dos elementos, assim:

lunch <- fruit[c(“apple”,”orange”)]

Gerando de novos vetores a partir de funções

Um novo vetor pode ser gerado a partir de um existente pela aplicação de uma função a cada um de seus elementos. Para isso basta passar o vetor de origem como argumento para a função. Ela retornará um vetor em que cada elemento será o resultado da chamada a própria função com a passagem do elemento como argumento.

Se criarmos um vetor y assim:

y = c(-1,2,-3,4,-5,6,-7,8,-9,10)

Após sobrescrevê-lo assim:

y <- abs(y)

Seu conteúdo será apenas de inteiros positivos.

Alternado o comprimento de um objeto

É possível truncar o tamanho de um objeto usando os índices. Assim, para limitar um objeto alpha aos seus primeiro cinco elementos fazemos assim:

alpha <- alpha[1:5]

Também é possível limitar o tamanho usando a função length(), assim:

length(alpha) <- 5

É possível selecionar elementos alternados criando uma expressão numérica. Por exemplo, para selecionar apenas os elementos com índices pares dos cinco primeiros elementos:

alpha <- alpha[2 * 1:5]

Ordenação de vetores

É possível ordenar um vetor e eliminar os elementos repetidos usando as funções factor() e levels().
Consideremos um vetor que contém siglas repetidas dos estados e territórios da Austrália, correspondentes a uma amostra de auditores fiscais australianos:

state <- c(“tas”, “sa”, “qld”, “nsw”, “nsw”, “nt”, “wa”, “wa”,”qld”, “vic”, “nsw”, “vic”, “qld”, “qld”, “sa”, “tas”,”sa”, “nt”, “wa”, “vic”, “qld”, “nsw”, “nsw”, “wa”,”sa”, “act”, “nsw”, “vic”, “vic”, “act”)

Com a função factor(), podemos gerar um objeto que contém os mesmos dados do vetor acrescido da propriedade levels, que contém um vetor com os elementos ordenados sem repetição. Assim, se criarmos um novo objeto assim:

statef <- factor(state)

O objeto statef conterá o vetor state e uma propriedade levels, que é um vetor com os elementos de state ordenados, sem repetição.

Para obter apenas o vetor ordenado, use a função levels():

levels(statef)

Cálculo de média aritmética sobre elementos de vetores

É possível calcular as médias aritméticas de conjuntos de valores classificados por rótulos. Se você possui um vetor com os rótulos e outro vetor com os valores associados aos rótulos, na mesma ordem, você pode obter um novo vetor com as médias usando a função tapply().

Suponha que haja um vetor com valores de impostos arrecadados por auditores fiscais australianos, que casa justamente com o vetor state citado anteriormente:

incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56, 61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46, 59, 46, 58, 43)

Para obter a média de valor arrecadado por estado, usamos a função tapply, passando o vetor de valores como primeiro argumento, o vetor gerado pela função factor() como segundo argumento e a função mean() (sem os parênteses) como terceiro argumento.

incmeans <- tapply(incomes, statef, mean)

Isso produzirá com vetor com as médias de cada estado:

act    nsw    nt     qld    as     tas    vic
44.500 57.333 55.500 53.600 55.000 60.500 56.000
wa
52.250

sexta-feira, 11 de maio de 2018

Roteiro para chaves PGP usando GIT no Debian

https://github.com/nextcloud/server/wiki/How-to-sign-your-commits-using-PGP

https://keyring.debian.org/creating-key.html

https://www.vivaolinux.com.br/topico/OTRS/Assinar-mensgens-com-o-gpg-(PGP)

sexta-feira, 26 de janeiro de 2018

GIT: juntando commits

Às vezes, para implementar uma funcionalidade, é preciso fazer vários commits, mas no final você só precisa de um, com todas as mudanças.

Para juntar vários commits, use o comando git rebase, neste formato:

git rebase -i [branch]~[numero de commits]

Por exemplo, se você quiser juntar os três ultimos commits do branch issue2814

git rebase -i issue2814~3
 
Será aberto um editor com os commits.Substitua a palavra pick por squash a partir da segunda linha, para que os commits anteriores sejam mesclados ao último.

Após salvar o arquivo com as mudanças, será aberto o commit único, para alteração dos comentários.

terça-feira, 31 de outubro de 2017

Nextcloud - configuração do arquivo de log

A configuração do arquivo de log no Nextcloud é feita no arquivo config.php no diretório config.

A localização do arquivo é definida pela chave logfile, mas cuidado! O valor padrão assumido é o diretório de dados do Nextcloud, definido pela chave datadirectory.

Configuração em servidor Linux

O arquivo de log deve ter código de permissão 640 e ser de propriedade do usuário www-data.

O código 640 atribui permissão de leitura e escrita (6) para o dono do arquivo, somente leitura para usuários do mesmo grupo (4) e nenhuma permissão para outros usuários (0). 

Comandos para configurar isso no GNU/Linux:

chmod 640 [arquivo de log]
chown www-data [arquivo de log]

Se após a criação do diretório, o Nextcloud reclamar que não há permissão para o arquivo de log, crie o arquivo .ocdata no diretório de dados [datadirectory].

sexta-feira, 30 de junho de 2017

Amanhecer Esmeralda

Já imaginou poder comprar uma revista em quadrinhos com uma história completa que não continue na próxima edição, ou que não faça referência a 30 outras revistas diferentes? Para leitores de quadrinhos mais infantis, como os da Turma da Mônica (original) e da Disney, essa é uma realidade quase frequente. Mas para os leitores de quadrinhos de super-heróis é um sonho distante. 

"Uma história com começo, meio e fim em uma única revista?"
Entretanto houve um tempo em que as histórias de super-heróis tinham roteiros tão descompromissados quanto os quadrinhos infantis de hoje. Era o tempo em que os editores ainda não tinham grandes preocupações com a continuidade e a cronologia dos personagens. Era o tempo em que ainda os editores ainda não haviam visto a oportunidade de obrigar os fãs a comprarem dezenas de revistas para acompanhar uma história.

Os super-heróis da DC Comics, conhecidos entre os setentistas e oitentistas como Superamigos, e pelos mais novos como Liga da Justiça, viveram um momento em que os roteiristas não precisavam de uma enciclopédia com referências cruzadas e vários álbuns para poder escrever uma história. Eles podiam ignorar fatos passados ou simplesmente incluí-los, contradizendo o que já havia sido escrito antes.

Guerra Civil: contradição de caráter

Foi assim que o Superman, que no início só torna-se herói adulto, logo depois passa a ter uma adolescência como Superboy. E logo o último sobrevivente de Krypton passa a não ser mais tão último assim, encontrando prima, cachorro, gato, cavalo e até inimigos vindos de seu planeta.


Os super-animais de estimação

 Nos anos 40 vários personagens foram criados, muitos tendo a magia como fonte de poder, como o Lanterna Verde original, Alan Scott, o Senhor Destino e o Gavião Negro original.  Nos anos 60, vários heróis foram reformulados, para terem uma origem mais científica. Assim surgiram o segundo e mais conhecido Flash, Barry Allen, o Lanterna Verde Hal Jordan, e o Gavião Negro alienígena Katar Hol.

Os Flashes da Era de Prata e de Ouro
 
Os Lanternas Verdes da Era de Prata e de Ouro


Só que havia um problema. Superman,  Batman e Mulher-Maravilha haviam lutado com os heróis dos anos 40, a Sociedade da Justiça. E agora, eles lutam com os heróis dos anos 60, a Liga da Justiça. E em vinte anos, continuavam enxutos. Como explicar isso? Aliás, como explicar que, aparentemente, a trindade da DC Comics parecia não se lembrar de ter lutado com a Sociedade da Justiça?    Em uma história do Flash Barry Allen chamada Flash of Two Worlds, publicada na revista Flash #123 de 1961, o Flash dos anos 60 se encontra com o Flash dos anos 40. Voltando no tempo? Não, porque o Flash dos anos 40 nunca existiu na história do Flash dos anos 60. Então como? O que ocorre é que ambos descobrem que existem terras paralelas. Ou seja, em uma Terra há um Flash, e ela está na década de 40, enquanto em sua cópia há um outro, só que ela está vive a década de 60. 


Superman e Superboy

Confuso? Isso piorou com o tempo. Pra tentar explicar as incoerências geradas pela falta de continuidade nas histórias foram sendo criadas várias terras paralelas: Terra 3, Terra X, Terra S, Terra Prime e milhares outras. A Terra da Liga da Justiça era a 1, enquanto a Terra da Sociedade da Justiça era a 2. De vez em quando os heróis de Terras diferentes se encontravam. Às vezes ocorriam coisas curiosas, como a morte do Batman da Terra 2 (que teve uma filha com a Mulher Gato) enquanto sua contraparte na Terra 1 permanecia viva.    Bem, um dia a DC resolveu arrumar a bagunça e tentar estabelecer uma única Terra, com uma única cronologia. Mas não dava pra simplesmente começar do zero sem dar uma satisfação para os leitores. Então surgiu uma das maiores sagas dos quadrinhos nos anos 80: a Crise nas Infinitas Terras. Essa foi uma história magistral, publicada originalmente em doze edições, que reuniu todos (TODOS) os personagens da DC Comics em um confronto com o Antimonitor, uma criatura de anti-matéria que queria destruir o multiverso (o universo com as múltiplas Terras).   

Os personagens de Crise nas Infinitas Terras, por Alex Ross
 
No final da saga, as Terras (que sobreviveram) são fundidas em uma única Terra. Alguns heróis e vilões morrem, para solucionar as incoerências, como o Robin e a Caçadora da Terra 2 e a Supermoça. Infelizmente, alguns que não precisavam morrer por causa disso também sucumbem, como o Flash.    A partir do final da Crise, toda a cronologia do universo DC foi unificada, tanto que os autores da saga, Marv Wolfman e George Pérez, escreveram "A História do Universo DC", para servir de referência para os artistas e leitores. A partir daí, os principais personagens da DC Comics tiveram suas origens recontadas. Um desses foi o Lanterna Verde da Era de Prata (anos 60). E tudo o que foi falado até agora foi apenas uma introdução para a história dos anos 80 que reconta a origem do personagem criado na década de 60.

A história do universo DC
O nome dessa história é Emerald Dawn, traduzida aqui como Amanhecer Esmeralda. O que ela tem de importante hoje? Bem, parte dela serviu para o infame primeiro filme solo do Lanterna Verde. E olha que o personagem já apareceu em péssimas produções cinematográficas antes, mas sempre como parte de uma equipe. 

Os fãs do Lanterna Verde esperaram pela chance de assistir a uma produção que honrasse toda a mitologia da Tropa dos Lanternas Verdes, conceito criado por John Broome e Gil Kane, logo na primeira história em quadrinhos de Hal Jordan, o Lanterna que foi interpretado por Ryan Reynolds que mais tarde ironizou sua atuação no filme solo de Deadpool.

O primeiro filme solo do Lanterna Verde
A Tropa dos Lanternas Verdes tem uma grande importância na Crise das Infinitas Terras. Na verdade, a origem da crise se dá no planeta Oa, que é o lar dos Guardiões do Universo, os criadores da Tropa. 

Os milhares de membros da Tropa dos Lanternas Verdes, exceto Mogo, um vírus e uma equação
Eu resolvi reescrever este artigo, criado originalmente em meu site (www.fgsl.eti.br) após assistir ao primeiro trailer do filme Lanterna Verde, que infelizmente não foi o filme que o gladiador esmeralda merecia. Mas percebi que diversas frases foram retiradas da história Amanhecer Esmeralda. Eu pessoalmente gosto muito dessa história. É bem escrita (ao contrário do filme) e bem desenhada, e ainda não tem aquela sanguinolência dos quadrinhos pós-Watchmen e Cavaleiro das Trevas. É algumas vezes poética e até inspiradora.    

Em uma das cenas do filme, Hal Jordan diz que um Lanterna Verde não pode ter medo, mas ele não é assim. Em Amanhecer Esmeralda, quando Abin Sur encontra Hal e lhe diz que ele foi escolhido para ser seu sucessor, ele responde: 

 "Você disse que um Lanterna Verde tem de ser corajoso e eu estou me borrando nas calças".    

Abin Sur responde:    

"Se o anel o escolheu, é porque você tem o potencial para superar o medo".    

Abin Sur e Hal Jordan
No infame filme, é Carol Ferris, o amor de Hal, quem lhe diz:

"Você tem a habilidade de superar o medo".  

Blake Lively como Carol Ferris

O encontro entre Hal e Abin Sur ocorre, guardadas as adaptações, de maneira bastante similar a origem recontada em 1986, embora de forma bem sucinta (e pouco épica). Aliás, no filme aparece o planeta Oa e os outros Lanternas que Hal conhece na história, que serão os mais influentes em sua carreira de super-herói: Tomar Re, Killowog e Sinestro. 

O Hal Jordan vivido por Reynolds é um sujeito pouco responsável, que de repente se vê com uma enorme responsabilidade nas mãos. 

Em Amanhecer Esmeralda, Hal é retratado como um cara que carrega uma dor pela morte do pai (que também era piloto) e vive uma fase de seguidos fracassos. A cena fo filme em que ele ejeta do caça após uma pane me deixou com a suspeita de que tentaram fazer referência ao roteiro de Amanhecer Esmeralda, mas infelizmente, descartaram essa explicação.

Eu sempre quis que Amanhecer Esmeralda virasse filme, pois é uma história fantástica, realmente poderia ser a origem definitiva (mas contaram ela de novo pra consertar a besteira de terem matado Hal Jordan). Seria fantástico assistir a um filme baseado nessa saga. Aliás, eu não entendo porque Warner Bros complica tanto suas produções, enquanto a Marvel Studios apenas segue os roteiros dos quadrinhos adaptando o que é necessário mas mantendo a essência dos personagens e a trama principal das sagas.


Amanhecer Esmeralda - versão brasileira

Uma nova produção com a Tropa dos Lanternas Verdes já foi anunciada. Quem sabe eu ainda ouça a frase de Hal, quando entrou na bateria central pela primeira vez:    "Eu anda tenho medo? Sim. Mas o medo não importa mais". 

terça-feira, 14 de fevereiro de 2017

Cloud programmers






O conceito de programador em nuvem (em inglês, cloud programmer) refere-se à utilização total da memória e das capacidades de raciocínio de um programador por meio de todos os meios de comunicações que estiverem disponíveis para abrir demandas.

O programador em nuvem pode ser acionado de qualquer lugar do mundo, a qualquer hora. Não há necessidade do programador comparecer a um local de trabalho, porque qualquer lugar onde ele possa conectar seu notebook e pegar sinal de celular é um local de trabalho. Você pode abrir demandas para o programador em nuvem remotamente, através da Internet, usando e-mail, mensageria instantânea, Skype, ou qualquer outro programa

O programador em nuvem tem elasticidade. Ele é capaz de aumentar a sua capacidade de resolver problemas de acordo com o aumento da demanda.

O programador em nuvem é multitarefa: ele trabalha em vários projetos simultaneamente. Ele usa várias janelas no seu desktop e vários monitores ao mesmo tempo. Ele codifica usando as mãos, os pés, a voz e os olhos. Enquanto ele desenvolve, atende ao telefone, participa de reuniões, faz relatórios e presta consultoria.

O programador em nuvem é 24X7. Não existe distinção entre vida profissional e vida social. Aliás, não existe vida social. Todos os recursos devem ser direcionados para o atendimento de demandas.

Você não precisa de mais programadores. Basta abrir as demandas para o programador em nuvem e ele automaticamente irá expandir o tempo para terminar dez demandas no período em que ele não conseguiria nem atender a uma.

O programador em nuvem está em algum local elevado, onde não existe necessidade de comida, lazer ou qualquer coisa mundana. Só precisa de um suprimento de oxigênio para o cérebro funcionar.

O programador em nuvem é onipresente. Envolva ele em quantos compromissos você quiser, agende quantas reuniões você precisar. Ele conseguirá tempo infinito para participar de todas as atividades dispensáveis e ainda fazer o seu trabalho.

Não fique preso à tecnologia

Filme: Homem de Ferro 2.
Cena: Tony Stark recebeu alguns objetos pessoais de seu pai Howard Stark, dados por Nick Fury, o diretor da S.H.I.E.L.D. Entre os objetos está uma fita de vídeo, com uma gravação feita em 1974.  Quando seu pai termina a mensagem para a Expo Stark, ele inicia uma outra mensagem para o filho. Nela, Howard diz que está limitado pela tecnologia de sua época, mas que Tony não, e por isso poderá realizar aquilo que ele projetou.

Howard Stark, pai de Tony Stark
Tony está sendo envenenado pelo paladium, o elemento utilizado no reator arc de seu peito, que o mantém vivo, desde que estilhaços de uma bomba se alojaram em seu peito, no Afeganistão. Ele precisa substituir o paladium por outro elemento químico, mas não existe um substituto disponível. A partir da mensagem do pai, Tony descobre que a maquete da Expo Stark é um esquema para a composição de um novo elemento químico. Ele cria um acelerador de partículas, e partir do esquema do pai, cria o novo elemento, que passa a usar em um novo reator.

Quero enfatizar a mensagem de Howard Stark, de que ele estava limitado pela tecnologia da época. Ela vale para o desenvolvimento de software. Nós também limitamos nossos projetos à tecnologia que temos disponível. Na verdade, é ainda pior que isso, ficamos presos a somente um tipo de tecnologia e passamos a criar arquitetura a partir de uma tecnologia existente, em vez de projetar a arquitetura e buscar as tecnologias que a implementam. Ficamos subjugados pelas soluções de software existentes e não inovamos por não desafiar as restrições que elas impõem.

Um arquiteto tem de ousar experimentar. Tem de ter uma atitude Oscar Niemeyer. Já pensaram se Niemeyer ficasse limitado às tecnologias de construção civil para conceber seus projetos. Ele viaja, ousa, depois verifica se é possível. Não sendo possível, pode rever o projeto. Mas ele não tem medo de ousar.

É natural que nos apeguemos ao passado, pois isso gera uma sensação de conforto. Aquilo que já vimos funcionar nos dá mais segurança. Não queremos arriscar, porque o sucesso é esquecido rapidamente, mas o fracasso é lembrado eternamente. Um sucesso não apaga um fracasso. Mas isso é decorrência do medo também, porque o fracasso sempre é uma possibilidade. Faz parte de qualquer empreendimento. Deve constar na avaliação de riscos. Mas não podemos trabalhos com risco zero. Conforme houver capacidade de recuperação, devemos tentar algo novo, algo inesperado.

Os primeiro carros eram parecidos com carruagens, porque esse era o modelo que o homem conhecia à época. Ele tentava criar uma carruagem sem cavalos. A medida que a lembrança das carruagens foi ficando mais distante, o carro começou a se tornar algo completamente diferente da carruagem. Mas mesmo assim, alguns ousavam. Veja a imagem abaixo.

Thomas Edison e um de seus carros elétricos
Um carro elétrico, produzido pelo inventor da lâmpada, Thomas Edison. Na verdade, os carros elétricos existiam desde 1830. Nos Estados Unidos houve uma época em que havia estações de recarga de baterias, no lugar de postos de gasolina. Hoje estamos discutindo a poluição causada pelos veículos a gasolina e uma das barreiras para substitui-los por carros elétricos é a falta de estações de recarga. Depois de quase um século, vemos que Thomas Edison SEMPRE ESTEVE CERTO QUANTO AO CARRO ELÉTRICO. Porque ousou experimentar.