Contribuindo em projetos no GitHub

Contribuir em projetos opensource no GitHub já é um assunto bem comentado. É um prazer, é útil e está cada vez mais facilitado.

Se engana quem pensa que é necessário um grande conhecimento para poder contribuir, como é o caso no Stack Overflow, onde você precisa ser muito bom e estar extremamente atento para conseguir responder uma pergunta.

Mas o Stack é assunto pra outro post, meu intuito aqui é demonstrar como começar e claro, contar como foi minha primeira contribuição.

Há alguns repositórios prontos para lhe ajudar a entender como o processo funciona e no meu caso eu usei este: first-contributions.

Nele você encontrará um passo-a-passo de como proceder com o fork (que é o primeiro passo, onde você copia o repositório), a alteração, commit, pull request, enfim…

O arquivo README  possui traduções para outras línguas e você não encontrará nenhuma maior dificuldade para começar.

Pois bem, dado este primeiro passo, você está pronto a procurar projetos do seu interesse ou que você possa contribuir de verdade ou de forma mais significativa.

O importante é lembrar que nem toda contribuição decorre de grandes e inteligentes códigos, podendo ser simplesmente uma pequena correção, até mesmo gramatical ou uma tradução.

E aproveito essa deixa pra comentar sobre minha primeira real contribuição!

Veja que o seu nome fica gravado como um contribuidor do projeto, o que é bem gratificante, podendo até mesmo servir como algo interessante no seu currículo virtual.

Você pode acessar esse projeto aqui e saber mais sobre ele nesse meu outro post.

O projeto em questão era muito interessante e apresentava o README apenas em inglês e eu fiz a tradução para o Português. Embora não seja um projeto muito famoso, isso não importa, é grande a satisfação de ajudar e agora ele pode ser acessível a mais pessoas, quem sabe?

Sendo assim, realizei o processo, fiz o fork, submeti a pull request e o mantenedor do repositório aceitou minha contribuição. Excitante!

E é isso.

Porém, contribuir é viciante e logo já comecei ter ideias e escrever novas funcionalidades para o projeto.

Recomendo fortemente que você invista nesse tipo de contribuição (inclusive são bem vindas nos meus repositórios, ok?) e quem sabe você não possa realizar ainda melhores feitos e ajudar toda uma comunidade que utilize o projeto e de quebra aprender muito na jornada.

Um abraço.

Emulationstation: configuração simples para Windows

O cenário da emulação mudou bastante nos últimos anos, com o surgimento das versões para os mini computadores Raspberry Pi, que viraram simplesmente uma febre.

Eu já brinco com emuladores há muitos anos. Era tão apaixonado que já tentava iniciativas que promovessem eles desde jovem. Cheguei certa vez a compilar um DVD, usando um software que montava uma espécie de instalador, copiando os arquivos e criando atalhos no menu Iniciar do Windows e na área de trabalho. Cheguei a fazer até uma capa.

Pela data dos arquivos que estão no disco, isso foi em abril de 2006. Que saudades…

Caso você queira pular toda essa minha história e explicação sobre os emuladores, pode ir direto pro repositório do projeto. Lá contém uma explicação de como proceder para instalar.

Voltando a falar do cenário atual e do Raspberry (eu mesmo tenho o meu, lógico), trata-se de um minicomputador, com poder suficiente pra emular os consoles antigos.  Para um apaixonado pela nostalgia dos games do passado, é simplesmente maravilhoso. Eles viraram uma febre, embora nem todo mundo conheça por esse nome, pois muitas pessoas comercializam um pacote já pronto contendo o computador, jogos, etiquetas e até cabines ou controles.

Porém, muita gente ainda usa o próprio PC para emulação de jogos e é possível aproveitar alguns dos desenvolvimentos que fizeram para ele, também no Windows, ficando com um sistema praticamente idêntico ao conseguido no mini PC.

Uma das principais evoluções foi o advento do Libretro e do Retroarch. Trata-se de aplicações ou projetos, que converteram os antigos emuladores em DLLs, fazendo eles trabalharem por debaixo dos panos, através de uma interface única, o que permitiu que você trocasse de console sem sequer sair do aplicativo.

Em cima desses sistemas, surgiram mais diversos projetos de customização da interface e um deles, que é muito famoso e funciona no Windows, é o Emulation Station.

O projeto

Procurando na internet, encontrei um projeto no GitHub que fazia quase exatamente o que eu esperava. Ele conecta nos endereços corretos, baixa e configura tudo automaticamente, de forma bem fácil.

Realizei um fork do repositório e inclusive inclui minhas próprias contribuições (conto um pouco mais sobre esse processo em um futuro post). Sendo assim, você pode usar os links desse post para a minha versão do projeto ou acessar o original aqui.

Eu inclui os dois links para que, caso alguma modificação minha não seja aceita pelo dono do projeto original, seja possível ter as duas opções, e também, claro, para dar o devido crédito.

O arquivo de instruções está em inglês, mas possui um link para a tradução em português que eu escrevi.

Instalando

Você pode navegar até o site e baixar o pacote do Emulation Station por si mesmo, mas algumas configurações são um pouco mais complexas de serem feitas e é aí que entra o projeto “win10_emulation_station”.  Se preferir, você pode baixá-lo nesse link: download. Mas repito, recomendo que você utilize o instalador do projeto.

O arquivo LEIAME no repositório (possui um link para a tradução em Português que, inclusive foi escrita por mim) já explica muito bem como proceder, mas ainda complementarei com mais algumas informações abaixo.

Faça o download ou clone o repositório git e siga as instruções para a instalação.

Infelizmente, mesmo o pacote do projeto, não contém todos os arquivos necessários para se divertir, já que um dos obstáculos encontrados no compartilhamento e difusão dos arquivos é que muitos deles, principalmente as ROMs (que são os jogos) não serem de domínio público, o que caracteriza pirataria. Mas os emuladores em si não e podem ser compartilhados sem problema.

Terminando as configurações

Feito o download conforme descrito no repositório com sucesso, você terá os arquivos espalhados em 3 pastas:

  • A pasta onde você baixou os arquivos do repositório: essa pode ser apagada ao final.
  • A pasta do Emulation Station em “Arquivos de Programas”: nessa pasta ficam os executáveis, em teoria, o que você não precisaria de nenhum backup. O instalador deve ter criado atalhos na área de trabalho também, mas caso não o tenha feito, pode procurar por Emulation Station na pesquisa da Cortana que ela encontrará para você.
  • A pasta de DLLs e ROMs que ficará em %UserProfile%\.emulationstation (você pode digitar esse caminho na barra de endereços do Windows Explorer, na janela executar, ou, se o atalho tiver sido criado com sucesso, usá-lo).

Nesse terceiro local é onde você deverá copiar as suas ROMs, colocando especificamente cada console em seu diretório próprio.

Para configurar os emuladores de PS1 e PS2, que não estão usando DLLs do Libretro, você terá que abrir o emulador mesmo e fazer a configuração diretamente nele ao invés de fazer pelo Emulation Station. Navegue até as pastas systems/epsxe e systems/pcsx2 e inicie os executáveis. Você não deverá ter problemas em entender como eles funcionam, mas procure pela configuração de controles e também de BIOS, para se certificar que estão apontando para os diretórios corretos.

Aliás, para esses consoles, será necessário também baixar os arquivos de BIOS e copiá-los, pois não são inclusos no pacote também por motivos de copyrigth.

Feito isto, você já deverá ter tudo funcionando. O repositório contém até mesmo algumas ROMs “homebrew”, ou seja, que foram feitas por terceiros de forma open-source, não sendo jogos oficiais e por isso são distribuídas livremente e você pode testar os emuladores com elas.

Espero que você se divirta muito com esse setup e caso tenha alguma dificuldade, pode comentar e eu tentarei te ajudar a resolver qualquer problema.

Abraço a todos

UPDATE: Novo post com novidades sobre o projeto. Clique aqui.

Projeto: document-generator

documents

Há tempos tenho várias ideias para melhor controle de documentações em projetos, já que atuo diretamente criando e mantendo arquivos desse tipo há anos trabalhando como analista.

Obviamente que os contextos são muitos e por diversas vezes encontramo-nos em processos já bem maduros, nos quais temos pouca liberdade de propormos inovações.

Mas uma coisa que sempre foi um mantra pra mim é: trate a documentação com o mesmo carinho que o código, afinal, são tudo “apenas texto”.

Hoje em dia, com os repositórios de arquivos em nuvem, o cenário do controle e compartilhamento de arquivos vem mudando muito, mas ainda carece de algumas funcionalidades que os desenvolvedores possuem às mãos em seus repositórios de código, seja ele git, svn, ou qualquer outro. Como por exemplo, o controle de alterações com observações e a centralização.

Porém, não é nenhum pouco recomendável guardar arquivos binários nesses repositórios (além de ser “impossível” rastrear mudanças), bem como não é interessante escrevermos documentação em texto puro, tampouco HTML, que acaba não sendo tão prático e demanda ao menos um conhecimento básico.

Nesse contexto, a linguagem markdown cresce como uma forte candidata. É inclusive a linguagem utilizada nas documentações dos repositórios no GitHub. Porém, os navegadores (ainda talvez) não leem arquivos “.md” e exibem como HTMLs. E é aí que entra a ideia da transformação de arquivos markdown em HTML.

Já há muitos projetos prontos, com as mais diversas tecnologias que se propõem a esse tipo de trabalho e eu escolhi um deles para me basear e fazer uma versão ainda mais enxuta, ao menos na intenção de difundir a ideia e lembrando que, sempre é possível utilizar-se do projeto original e a plenitude de suas funcionalidades.

Exemplo de arquivo gerado pelo projeto:

O layout fornecido pelo projeto original apresenta sim alguns problemas e há muito espaço para evolução (eu sequer cheguei a testar mais deles), mas o template escolhido gera uma página como a da imagem acima, sendo possível navegar nos tópicos pelo menu à esquerda.

Com os arquivos gerados, é possível também publicá-los num website, inclusive até mesmo dentro do próprio sistema para o qual foi destinado, sendo ainda mais prático que um compartilhamento tradicional de arquivos e suas várias versões nos e-mails de cada um…

Para baixar e utilizar o projeto, acesse o repositório do mesmo no meu GitHub:

document-generator

Lá você encontrará mais orientações e garanto que será bem fácil começar. Caso se interesse e tenha dúvidas, ou mesmo sugestões, basta entrar em contato.

Abraço à todos.

Controlando versões com PHP, SVN e Gulp

Com o crescente uso do Git para controle de repositórios, talvez essa dica não seja mais tão útil, contudo, como aqui na empresa que trabalho ainda usamos Tortoise SVN, pode haver outras empresas e pessoas mundo afora, interessadas no post de hoje.

Ela também funciona muito melhor em projetos .Net, devido ao fato dele ser compilado, mas as informações aqui providas podem ser facilmente adaptadas pra ele (vou fazer uma nota também demonstrando uma diferença básica) quando for o momento).

Pois bem, o foco do post está em demonstrar o uso de um executável do SVN, de nome SubWCRev.exe, que serve para ler informações do repositório, como número da última revisão ou data e realizar a troca de variáveis em um arquivo template, pelos valores retornados.

Contudo, devido ao PHP não ser uma linguagem compilada, você precisará estar utilizando gerenciadores de pacotes, no caso o Gulp, se quiser implantar esse “controle de versão” aos seus projetos. Embora também seja possível executar o comando diretamente no console do sistema operacional, porém, grande parte da automatização se perderia.

Comece pela criação de um arquivo template, onde você incluirá as variáveis que deseja trabalhar (é possível encontrar a lista completa delas na documentação do SVN). No meu exemplo, eu chamei o arquivo de version-template.php e ele possui o seguinte conteúdo:

<?php return array( 'version' => '1.0.0.$WCREV$ data: $WCDATE$'>);

Repare que ele contém um array em PHP que inclui as variáveis WCREV e WCDATE, que serão trocadas pelo executável assim que for chamado.

No nosso arquivo gulpfile precisamos incluir um require, caso já não exista. Dessa forma:

var exec = require('child_process').exec;

Feito isso, poderemos criar a nossa task que realizará a chamada do executável:

gulp.task('version-number', function (cb) {
exec('"C:/Program Files/TortoiseSVN/bin/SubWCRev.exe" "." "C:/Source/Projeto/branches/branch1/version-
template.php" "C:/Source/Projeto/branches/branch1/version.php"', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
})

Vamos a uma breve explicação do script acima. A task recebeu o nome de version-number para ser referenciada mais abaixo no arquivo gulp (junto à sequência de build). Ela utiliza o exec para chamar o comando, que é composto da seguinte forma:

[diretório do exe][diretório da solution][arquivo template][arquivo final]

Apresenta também instruções para logar as informações na janela do console e os erros, caso ocorram.

Você precisará adaptar o comando para os seus diretórios e tomar um cuidado especial caso sua build seja remota, em um servidor Jenkins por exemplo, mas basicamente, ao incluir essa task em seu build e executá-la, você terá gerado um arquivo com o conteúdo parecido com o exemplo abaixo:

'version' => '1.0.0.93528 data: 2018/06/07 09:36:50'

Esse arquivo, que no meu exemplo levou o nome de version.php, é recomendável que esteja na lista de ignore do SVN, evitando que o mesmo seja comitado toda hora.

Caso você esteja em um projeto .Net, você poderá executar um comando semelhante como um evento de pré-build, usando em conjunto as variáveis do Visual Studio, e deverá utilizar o arquivo AssemblyInfo.cs para salvar as informações. Ficando mais ou menos assim.

"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" $(ProjectDir). $(ProjectDir)Properties\AssemblyInfo_template.cs $(ProjectDir)Properties\AssemblyInfo.cs

Com tudo pronto, você poderá colocar na sua aplicação, algo que leia esse arquivo e exiba, ou não, a versão do mesmo para o usuário. Claro que, devido a questão de não ser de fato uma compilação, o processo acaba sendo menos interessante, pois é mais fácil manipular algum arquivo e não executar o gulpfile. Porém, se você for fiel ao seu workflow, e utilizar sempre o Gulp para geração dos builds, pode conseguir um grande aliado na organização do seu projeto e na avaliação de versões utilizadas.

Abraço a todos e até o próximo post

Docker – guia super básico

Docker é uma ferramenta que possibilita que você utilize máquinas virtuais não completas para executar, por exemplo, o código de seu projeto, ou seu servidor de banco de dados.

Materiais não faltam para você estudar ou aprender como ele funciona e validar se ele te ajuda a solucionar os seus problemas. Como sempre, meu intuito é encontrar uma forma realmente simples de explicar o conceito e indicar os primeiros passos, servindo até mesmo como um backup para mim mesmo, já que também não sou nenhum especialista na tecnologia.

Sendo assim, minha ideia é realmente escrever um ponto de partida. Mas é legal citar que seu uso está aumentando muito e ele resolve o problema de diferenças entre o ambiente de desenvolvimento e de produção por exemplo. Torna também a implantação em novas máquinas extremante simples, já que é possível compartilhar o script e até mesmo as imagens customizadas.

Mas vamos lá. O importante agora é você se familiarizar com os termos básicos:

image: é a “ISO” do sistema operacional que será utilizada pela VM. Ela pode ser usada em diversos containers ao mesmo tempo. Há muitas delas prontas na internet pra baixar.

container: é a image instanciada, em execução. Como dito, você pode instanciar diversas delas baseadas na mesma imagem (há inclusive orquestradores de containers, que reiniciam automaticamente em falhas, entre outras coisas, como por exemplo o Kubernetes ou o Swarm (que vem integrado), mas não é o escopo deste post).

Ao fazer alterações em um container, elas se perdem assim que ele é destruído, a não ser que você o salve como uma nova imagem. Vide abaixo.

Pois bem, para instalar, basta ir até o site e procurar pela versão Community Edition

Download Docker CE

Baixe e instale na sua máquina. É a única instalação real necessária. Recomendo também que já crie uma conta pelo site, já que ela é necessária para a utilização.

Depois de instalar, talvez sua máquina exija umas configurações para que ele funcione, mas ele mesmo vai te sugerir isso e reiniciar sozinho (eu uso Windows 10). Tudo pronto, basta você abrir um console (cmd, powershell, etc) e digitar o comando abaixo:

docker login

Insira o nome de usuário do docker (não serve o email) e a senha que você criou.

Para criar seu primeiro container e automaticamente já baixar a imagem, basta executar o comando abaixo:

docker run -it ubuntu /bin/bash

O bash é o comando para acessar o console do Ubuntu. Você deve estar agora em uma janela do console com um usuário root conectado e pode começar testar comandos no console pra ir se familiarizando, como ls para ver as pastas ou mesmo fazer umas instalações no container, com o comando apt-get. Mas lembre-se do que eu disse sobre salvar…

Sugiro você abrir outro console na mesma pasta e executar esse comando para verificar os containers que estão em execução:

docker container ls

Pode também, conferir que foi baixada a imagem:

docker image ls

Mas a real forma interessante de se criar os containers é usando scripts, e você pode fazer isso criando um arquivo Dockerfile, sem extensão e mandando executar:

# Setando a imagem a ser usada do Docker hub
FROM ubuntu:latest
LABEL Paulo Roberto Elias "ppuspfc@gmail.com"

Use o texto acima como o exemplo mais simples possível do que colocar no arquivo. Ele usa a última versão do Ubuntu disponível no DockerHub e coloca o meu nome no label (mude para o seu claro). Você pode até mesmo colocar a instrução abaixo nele para já ver um pouco da mágica acontecendo e ir tirando suas conclusões…

RUN apt-get update

Na internet você vai encontrar diversos desses scripts prontos com várias dependências já configuradas para alguns ambientes de desenvolvimento.

Navegue no console até a pasta onde você salvou o seu Dockerfile e execute o comando abaixo:

docker build -t minhaimagem .

Será criada uma nova imagem baseada no seu script, no caso utilizando a imagem original do Ubuntu. Veja que eu dei um nome a ela e o ponto após o nome é pra indicar que é para executar do diretório em que estamos. Confira novamente usando o comando para listar as imagens.

Depois executaremos a imagem, ou seja, criaremos um container com o comando abaixo:

docker run -it minhaimagem /bin/bash

As alterações que você fizer só ficarão salvas se você salvar o container, criando assim, uma nova imagem (pode-se sobrepor usando o mesmo nome, cuidado com a TAG, ela diferenciará também o arquivo).

$ docker commit <container_id> new_image_name:tag_name(optional)

Não se esqueça de executar o comando para listar os containers enquanto ele ainda estiver em execução, pegar o ID e usar no comando acima.

Eu ainda não aprendi desconectar do bash para executar comandos docker no mesmo console 🙂 mesmo tendo lido que dá pra usar uns atalhos de teclado. Não sei o que houve…acho que eu estava no console do VSCode, preciso pesquisar melhor. É, talvez tenha sido isso, mas é uma boa deixa para eu voltar aqui e tentar transformar isso em uma série, com meus próximos passos no Docker.

Um abraço e até a próxima

Meu pitaco sobre o momento atual

Bom, pelo que ando vendo nas redes sociais e nos jornais, acho que posso colocar no currículo que não votei na Dilma, não bati panela em manifestação e sequer corri ao posto encher o tanque hoje, pois quem foi é porque não tem amor ao próximo. Sou praticamente postulante a gênio e exemplo de brasileiro!

Quem quer dar um pitaco rápido corre o risco de ser injusto, quem o faz na forma de uma postagem mais longa comete o novo pecado capital do “textão” e assim vamos todos tentando encontrar o formato cool do momento para nos expressarmos.

A impressão que tenho é que simplesmente todo mundo virou o tiozão do “eu avisei” e quando não está morrendo de medo de ter escolhido o lado errado, quer parecer intelectual porque acha que é o único que está enxergando a situação como ela realmente é.

Eu não vejo a hora é de poder reler esse meu post no futuro e me gabar do quanto eu era antenado e enxergava a situação como ninguém…

Só pode se gabar disso, na humilde opinião de mais um burro que passa por todas essas mesmas coisas e sensações, aquele que percebe que somos todos enganados o tempo todo e não há um só brasileiro que esteja no grupo, ou melhor, nos grupos de “respostas certas em todos os assuntos”.

A moda agora é culpar quem se manifestou, por uma crise que foi criada por corruptos. Simplesmente ignorando que isso tudo é um reflexo tardio, senão do último governo, de todos os governos democráticos que tivemos nos últimos anos. Por outro lado, os que apontam o dedo não se sentem nem um pouco culpados mesmo tendo co-participado de todas as decisões que tomamos desde que nascemos e vivemos nesse país que só diz ter futuro, mas que ele nunca chega.

Outra frase de efeito que vem bem a calhar é culpar o povo que vota errado. Mais uma falácia que tenta transferir ao povo uma culpa que não é dele, pelo menos não gerada desta forma. Se algo lhes confere culpa, seria apenas a apatia em aceitar a realidade que lhes é imposta. Grande parte dos políticos sequer são eleitos por voto popular e entram lá por coeficientes eleitorais, mas mesmo quando são votados, fazem parte de pleitos onde não são oferecidas verdadeiras opções.

Não se iludam, trata-se mais uma vez do bom e velho “dividir para conquistar” que hoje em dia é mais conhecido pela difusão em filmes da Marvel. Que sirvam pelo menos pra isso, mas duvido que a maioria se dê ao trabalho de refletir (não é culpa deles também em todo caso).

E não me venham com essa que os caminhoneiros estão fazendo isso pelo Brasil hein? Lá vamos nós daqui alguns meses botar a culpa neles pelos novos velhos problemas que fatalmente teremos. Eles estão fazendo isso por eles, mas não estão errados por isso, só se cansaram de esperar uma mobilização completa para buscar o que acham que lhes é devido.

A nossa próxima grande crise é a de adjetivos, pois todos os que temos para definir a bagunça em que vivemos estão se tornando obsoletos e cansativos, só não vamos querer criar novos por decreto, por que já vimos que por essa via quase nada funciona por aqui.

Até a próxima.

Ferramentas de estudo e produtividade: Ouvir páginas Web

Hoje darei mais uma dica que julgo muito interessante para aprendizado de idiomas, embora a ferramenta possa ser utilizada para diversos fins.

“Text-to-speech” e o nome utilizado para essa tecnologia, que consiste em aplicações que leem textos e transformam em voz e há vários deles no mercado para diversos fins. O próprio Pocket, que já indiquei aqui no blog, possui uma funcionalidade com essa tecnologia, permitindo que você escute os textos dos links que salvou.

Mas encontrei uma forma muito prática de fazer isso diretamente no navegador (Google Chrome), através da extensão Read Aloud. Basta você clicar no link e adicionar.

Feito isso, será adicionado um botão no canto superior direito da sua tela e ao acioná-lo, o texto começará a ser lido!

Para forçar a leitura de apenas um trecho da página, basta selecionar o mesmo com o mouse antes de acionar o botão. Eu achei isso uma ótima maneira de poder conferir minimamente, a pronúncia das palavras quando faço minhas leituras em inglês.

Abraço

Electric Dreams e Prime Video – Para os fãs de Black Mirror

Para um bom fã de ficção científica como eu, vivemos uma era de ouro nos cinemas e seriados. Finalmente essas histórias chegaram com força e, espero eu, para ficar.

Após o sucesso de Black Mirror, fãs ávidos estão procurando obras semelhantes e Electric Dreams chega no momento certo.

Produzida em conjunto com a empresa que criou o Black Mirror original, são 10 episódios independentes e baseados na obra de Philip Dick, um dos maiores gênios do gênero.

Só pude assistir o primeiro episódio até aqui, mas me chamou a atenção também a equipe do projeto, cheio de nomes conhecidos, como você pode ver inclusive na imagem que ilustra esse post.

O episódio não conseguiu me impactar como muitos de Black Mirror conseguiram, embora convenhamos, sequer as últimas temporadas do próprio Black conseguiram. Mas mesmo assim foi muito interessante e, na minha opinião, esse choque não se faz tão necessário para os verdadeiros fãs da ficção científica, que querem mesmo é se deparar com histórias cheias de elementos futurísticos e que nos façam pensar.

Outro ponto interessante dessa série é que ela pode finalmente fazer com que o mundo comece a prestar atenção nas obras disponíveis no serviço Amazon Prime. Candidato fortíssimo a verdadeiro concorrente do Netflix, chegou ao Brasil com uma grande promoção, com os seis primeiros meses a R$9,90 e eu fiz questão de conferir.

Mas a verdade é que não me animei a assistir nenhuma obra disponível! Apesar de contar com alguns clássicos que eu amo, como o Show de Truman, todos sabemos que não é bem para revisitar velhas paixões que pagamos esses serviços.

Justiça seja feita, há também no catálogo, outras obras de ficção científica, inclusive do próprio Philip Dick, que pretendo ver, como o Homem do Castelo Alto. Só não o fiz ainda, pois estou pensando seriamente em ler o livro antes, que já possuo e está na minha fila de leitura no Kindle.

Além disso, os aplicativos ainda não se encontram em um estado muito bom de maturidade, com dificuldades em configurar legendas e até erros técnicos nas mesmas, mas nada que chegue a atrapalhar a experiência de fato.

Se você é fã de Black Mirror, aparentemente não há nada melhor e inédito, já disponível, para você curtir. Então, recomendo fortemente que veja se a promoção ainda está disponível (ou alguma nova) e constate que, por mais que você não use tanto quanto a sua conta do Netflix, ainda custa menos que um cinema e por meses de conteúdo.

Abraço e até a próxima.

Oracle SQL Developer – Relatórios Mestre x Detalhes

Olá a todos. Hoje vou falar de um recurso muito útil deste cliente de banco de dados. Embora a aplicação possa ser utilizada com diversos SGBD, devido ao suporte a ODBC, o recurso que vou apresentar hoje só funciona em bancos de dados Oracle (pelo menos até a última vez que eu testei).

É muito comum para analistas e administradores de sistemas em geral, a necessidade de consultar diretamente a base de dados a todo momento e muitas vezes, poder salvar seus scripts já basta. Contudo, a possibilidade de encadear muitas consultas de uma só vez, em modo “mestre x detalhes”, de modo fácil e dinâmico, é muito bem vinda.

Acredito que todo mundo que tenha chego até aqui na leitura, já saiba do que se trata, em todo caso, em vez de explicar o conceito, vou apresentar-lhes o passo-a-passo e com certeza vocês enxergarão as vantagens e aplicabilidade dessa ferramenta.

Com o aplicativo aberto, clique com o botão direito do mouse no item “Relatórios Definidos pelo Usuário”, conforme print abaixo:

Caso esta janela não esteja aparecendo, basta selecioná-la no menu Exibir > Relatórios

Será apresentada uma janela / formulário para preenchimento. Os campos até aqui são auto-explicativos, só vale lembrar que você deve escrever sua consulta “original” ou mestre, no campo SQL.

Preencha conforme desejado e salve. Logo após, o relatório deve aparecer na pasta exibida no print acima. Selecione agora o próprio relatório com o botão direito do mouse e acione a opção editar.

Será apresentada novamente a janela de edição, desta vez, contendo a opção de Relatório Filho. Clique em adicionar filho e escolha um nome para o mesmo.

A mágica ocorre no relatório filho, pois ele pode se valer de variáveis provenientes da consulta meste, conforme o print abaixo:

Repare que eu usei na cláusula where uma variável Oracle. Ela deve ter o mesmo nome de qualquer coluna do resultado da consulta mestre. Caso a sua query mestre possua prefixos, como por exemplo tb_users.userid, lembre-se de utilizar um alias para a coluna e usar o mesmo alias como o nome da variável.

E é só isso. Assim que você clicar no relatório, a query mestra será executada automaticamente e ao clicar sobre quaisquer linhas do resultado, o relatório filho será executado baseado na sua seleção.

Na imagem acima vemos a execução de um relatório com um relatório filho. As informações sensíveis foram apagadas

É possível criar quantos relatórios filhos você desejar e para abrir mais de um relatório de uma vez, será necessário selecionar para executar em outra aba.

Também podemos salvar o relatório como um arquivo XML e com isso compartilhá-los ou mesmo fazermos backups.

Espero que gostem e considerem essa dica e principalmente esta funcionalidade, tão útil quanto eu.

Até a próxima.

Interestellar

Há tempos eu queria escrever sobre esse filme que eu tanto amo, mas não costumo escrever muito sobre filmes, principalmente tanto tempo depois do lançamento. Acho que na maioria dos casos, não se sobra muito pra falar. Ou você se apressa em tentar expressar uma opinião enquanto ele é notícia ou fica com as sobras quando todo mundo já viu e não quer mais saber…

Por outro lado, há filmes que realmente nos marcam e esses são os meus preferidos. Filmes que realmente nos fazem divagar sobre a vida e o futuro. E esses filmes custam a sumir das nossas mentes e parecem nos fazer brotar sentimentos diferentes a cada vez que o assistimos.

Obviamente que várias obras diferentes tocam corações ainda mais diversos e o que é sublime pra mim pode passar completamente despercebido pra outra pessoa. Além disso, nossa opinião muda muito nas diversas fases da nossa vida, ou mesmo de acordo com o nosso espírito ou pré-disposição à uma obra, ainda mais em tempos de internet e de enxurradas de opiniões que nos fazem duvidar das nossas próprias convicções.

Como você pôde perceber por essa tediosa introdução, esse não é um post curto e grosso sobre o filme também, mas sim, um “textão” sobre minha relação com essa obra e o que me faz gostar tanto dela e até mesmo sobre meu antigo filme preferido antes deste.

Quem me conhece sabe que sou simplesmente apaixonado por Matrix. Talvez pela idade com que assisti o filme no lançamento, talvez por ser igualmente apaixonado por tecnologia, ou por ele ter tanto a ver com games, talvez por tudo isso, mas simplesmente por quanto ele foi disruptivo e carregava o que pra mim torna uma ficção científica brilhante: a sua capacidade de ser “incontestável”. Sua história jamais poderá ser completamente negada ou provada e até cientistas sérios falam sobre vida em simulação.

A sua “apresentação em camadas” é simplesmente espetacular, agradando quem gosta de ação, de romance e propiciando diversos níveis de entendimento. Para mim ele foi o primeiro contato com “universos” criados sobre uma obra, com expansões da história e comunidades em torno. Hoje também bem sei que muitas dessas coisas (pra não dizer quase tudo), do culto, do enredo, do mistério em torno do universo, não foram tão originais assim (estou lendo Neuromancer), mas nada disso tira o seu brilho nem o seu mérito por ter sido um divisor de águas.

Partindo de Matrix, eu simplesmente comecei a consumir todas as obras vindas do irmãos (hoje irmãs) Wachowski. E embora “V de Vingança” seja simplesmente sensacional, suas obras foram decaindo de qualidade absurdamente, ao ponto de eu simplesmente odiar qualquer coisa que eles façam hoje em dia. Sense8 é pavoroso, me desculpem.

Pois bem, também não é por isso que Matrix perdeu o posto de meu filme favorito, e seu diretor, Chistopher Nolan, está obviamente e igualmente sujeito a tomar rumos ruins em sua carreira. Mas precisou surgir outro filme igualmente “mindblowing” para tomar o seu lugar em meu coraçãozinho nerd.

Eu simplesmente amo esse GIF e estou feliz de finalmente poder usá-lo.

🙂

Interestellar não tem esse poder todo ou a importância histórica pro cinema e pra ficção científica que Matrix tem, nem mesmo quaisquer semelhanças, ou sequer se apoia nas mesmas bases e estratégias (não há combate ou lutas nessa viagem espacial), mas compartilha o fato de ser uma ficção de grande apelo emocional e te fazer sentir pequeno. Ele é realmente emocionante e sim, eu choro pra cacete com ele!

O filme

Bom, vou tentar não dar spoiler nenhum, até por que, minha intenção é, quem sabe, convencer alguém ou mesmo lembrar alguém de assistir, caso já não o tenha feito. Embora isso tire bastante da graça e me limite bastante no que dizer, infelizmente.

Na história, o planeta Terra está morrendo e a humanidade procura uma solução, que passa por procurar um novo planeta para habitarmos e esse pano de fundo carrega uma história profunda, sobre uma das formas de amor mais bonitas que existem, o de um pai por sua filha e vice-versa.

Como se não bastasse lidar com essa forma tão sublime e especial de amor, ele se dispõe a sugerir em uma das falas que talvez o amor tenha um objetivo no universo…não se preocupe, você não vai identificar essa cena por ter lido isto, antes de vê-la.

Com um final muito controverso e até mesmo psicodélico, dividiu muitas opiniões e recebeu muitas críticas negativas por isso e foi então que me deparei com o vídeo abaixo e que me inspirou a escrever esse post.

Na entrevista concedida pelo popstar da física mundial, Neil deGrasse Tyson, fica fácil perceber como você pode sim respeitar o que foi feito, em vez de ficar se achando entendido do assunto e curtir uma obra que tenta imaginar o que nenhum ser humano sequer chegou perto de vislumbrar e quiça você passe a admirar o esforço desses artistas em tentar colocar em imagens o que faz parte apenas da imaginação, mesmo de grandes cientistas.

O filme tem um ar de esmero poucas vezes vista no cinema, não se deixando levar por artifícios comuns em nome do sucesso. É fácil imaginar um investidor pedindo ação ou lutas…de certo isso ocorreu…hehehe. A parte musical é igualmente fenomenal e eu escuto as músicas da trilha sonora até hoje.

É…

Talvez mais uma vez o meu texto não tenha conseguido realizar o que propus no início. Se resumindo como sempre, a servir como um diário, um baú de memórias para mim mesmo. Que me permita, assim como citei (agora assim fechei o arco :)) voltar aqui no futuro e tentar decifrar como eu me sentia sobre esse filme e como um olhar de outro tempo pode mudar tudo.

Dica: tempo tem tudo a ver com o roteiro também…não é perfeito esse filme?

Abraço