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

Podcast – A Netflix grátis de Rádios

Eu odeio fazer exercícios. Você também? Eu sei que o título do post não parece ter nenhuma relação com isso, mas aguarde. Você se identificou comigo neste ponto? Então vem comigo…

Particularmente, a minha maior dificuldade mental em fazer meus necessários exercícios é uma sensação de “tempo perdido” que domina o meu ser. 🙂

Eu sei. Pode parecer engraçado para muitas pessoas. Mas como eu me sinto simplesmente um rato de laboratório quando estou sobre uma esteira ou mesmo caminhando ao ar livre, precisei procurar uma solução para o meu problema, e ela é: faça algo que julgue mais proveitoso ao mesmo tempo.

Nossa, descobri a roda…não é isso…muitas pessoas leem livros na bicicleta ergométrica ou escutam músicas mas, além de odiar bicicletas ergométricas, eu estou realmente cansado de ouvir sempre as mesmas músicas do The Killers, Weezer, Metallica, Nando Reis e por aí vai. E não, eu não ouço músicas novas ou me inscrevo no Spotify. Eu simplesmente não sou assim 🙂 (ou talvez eu seja apenas um quase velho).

Eu ouço Podcasts (quando não áudio livros, mas isso é outra história…).

Eu separei abaixo, meus episódios prediletos, dos meus podcasts favoritos. Sou ouvinte já há bastante tempo deles (pelo menos do Jovem Nerd e do Anticast) e há episódios que são simplesmente fenomenais demais para não serem compartilhados.

O primeiro deles, é da equipe do SciCast e é simplesmente obrigatório para todo nerd que se preze e seja fã de vida alienígena (ou a saga da procura por ela).

Você pode ouvi-lo, diretamente pela barra que coloquei acima (o que é chamado “embedar” em um neologismo oriundo da palavra em inglês embed e significa embarcar um conteúdo em sua página), assim como pode procurar pelos episódios e podcasts em algum aplicativo para celulares. Eu uso e recomendo o Podcast Addict embora existam várias opções.

Com ele você pode controlar o que quer baixar, quais episódios já assistiu ou não,  retomar de onde parou, montar playlists, escutar em velocidade aumentada para dar tempo de consumir mais, entre outras funcionalidades interessantes e ele é baseado primariamente, na tecnologia RSS, que eu já expliquei aqui no blog.

Aproveito a apresentação deste, para lembrar meu livro preferido. Que não foi citado diretamente no episódio acima, embora o autor o seja. Lembrando que o episódio não é sobre ficção.

Se eu contar porque fiz isso, estarei dando um spoiler do episódio e/ou do livro…

Mas a lista de episódios recomendados não acabou.

Esse logo abaixo é sobre o Nazismo (em todos os conteúdos, quando os apresentadores não são especialistas e normalmente o são, eles convidam pessoas do ramo ao programa). E é para quem adora história.

Já o pessoal do Jovem Nerd faz o melhor e mais descolado podcast do Brasil, seja em minha opinião ou em seus números que, embora não os tenha de antemão, são sempre reverenciados pelos podcasts de outras pessoas (vide o episódio 294 abaixo e por último). Eles possuem um “ar de superprodução” e são editados profissionalmente por uma empresa, ganhando vinhetas divertidíssimas e deixando tudo mais prazeroso de ouvir. Mas sem perder o conteúdo produtivo (em certos programas classificados como tal).

Eu escolhi colocar outro em especial, que é sequencial ao de cima. Para destacar as “seções” que eles incluem no programa, como introdução, leitura de e-mails sobre o episódio anterior, propagandas, etc. E também para destacar um conteúdo em especial.

Ao 13:30 do episódio acima é lido um e-mail muito relevante e interessante, complementando (no caso corrigindo), uma informação passada pelo convidado no episódio anterior (Nossa Língua Portuguesa) aos 40:25 daquele episódio! Você pode posicionar o mouse em cima da barra se estiver em um PC para facilitar a escolha de um tempo exato.

Por isso mesmo, recomendo fortemente que você assista todos esses episódios por inteiro, sem pular nenhum pedaço (embora essa seja mais uma das vantagens do formato). Eles formam programas muito coesos. Não só complementam o episódio anterior formando uma narrativa sequencial, como dentro do mesmo episódio, muitas piadas e histórias são remontadas mais a frente…

Para terminar, vou deixar um podcast sobre podcasts! Trata-se de uma análise do “mercado” de podcasts no Brasil, inclusive com comparações ao contexto americano, realizado pelo Anticast:

Ufa…acho que dissertei sobre tudo que queria. 🙂

Vou deixar também um link para o meu arquivo OPML, que contém todos os podcasts que sigo, assim você pode importá-lo no seu aplicativo se quiser.

OPML: baixar

Abraço a todos

PS.: Nossa, já estava me esquecendo da referência à Netflix no título do post. Ela nos apresentou um modelo tão disruptivo de distribuição de conteúdo anos atrás, que virou quase um sinônimo de streaming. É comum ver expressões como “Netflix de Livros”, ou coisa parecida…e foi nisso que pensei. Podcast seria algo como um “streaming de rádios”.

 

OBD – Minha primeira experiência

Bom, se há um assunto que eu não domino e sequer havia pensado que um dia trataria dele aqui no blog, seriam carros. Porém, vou falar mais especificamente de uma tecnologia que conheci há pouco e por isso mesmo, sei menos ainda sobre o assunto, mas que me chamou muito a atenção.

É óbvio que, para quem é do ramo, as informações que passarei aqui serão irrisórias, mas como sempre, minha intenção é comentar minhas experiências, minhas descobertas, escrever sobre qualquer coisa que me interesse ou que possa existir alguém que não saiba!

Há também o problema de que esse conhecimento talvez chegue atrasado para a maioria pessoas, já que os novos e futuros carros inteligentes disporão de outros meios muito mais interessantes para dar informações à seus donos ou ocupantes.

Eu estou falando do OBD:

OBD (do inglês On-Board Diagnostic) designa um sistema de autodiagnóstico disponível na maioria dos veículos automóveis que circulam atualmente. A conexão ao sistema consiste em um conector padronizado que foi sancionado como obrigatório na Europa e nos Estados Unidos para todos os veículos produzidos desde 1996, e no Brasil a partir de 2010 com o padrão de segunda geração OBD2 (ou ODBII). A medida tem a finalidade de popularizar o serviço de reparo eletrônico, reduzindo drasticamente o custo das oficinas, possibilitando o consumidor pagar mais barato por esse gênero de serviço. Além disso, a padronização e abertura dos protocolos de comunicação trouxeram ao mercado equipamentos extremamente baratos possibilitando a compra dos mesmos pelos próprios consumidores para “diagnóstico em casa”. Atualmente existem no mercado equipamentos de diagnóstico na ordem de $20 dólares com interface USB e tecnologia Bluetooth para sincronização com um computador ou aparelho celular.

Fonte: https://pt.wikipedia.org/wiki/OBD

Pois bem…você já deve ter visto inclusive o seu mecânico usando essa interface no seu carro, mas provavelmente através de um leitor exclusivo e maior, algo semelhante a um leitor de cartão de crédito e com fio.

O que eu comprei é igualzinho à este da foto do post. Ele se encaixa nessa interface e lê dados da ECU do veículo e você consegue se conectar a ele com seu celular, através do bluetooth.

No pacote veio alguns aplicativos para Android prontos para instalação e foi muito legal para mim, brincar com as informações disponíveis. No meu caso, eu já sabia que meu carro tem um problema no catalisador (meu mecânico leu e me deu a mesma informação há pouco tempo atrás) e pude então, constatar que eu estava recebendo a informação correta. (Nota: cuidado com o pacote que comprar, no CD de instalação que recebi vieram softwares “piratas” com keygens que podem contaminar o seu computador. Como não utilizei os softwares para Windows e nos de Android não precisei “gerar” nada, acredito estar seguro, mas não posso afirmar…).

Segue algumas telas:

Caso minha atenção não se volte para alguma outra bugiganga tecnológica num futuro próximo 🙂 , pretendo explorar mais e voltar aqui e escrever novos posts.

Enquanto isso, fica apenas esse pequeno post mostrando minha rápida experiência com o OBD.

Abraço a todos.

Coisas que todo mundo sabe, ou não… Kindle

Como já comentei aqui no blog (ou não, acho que ainda preciso falar disso, pelo menos com mais detalhes), sou um colecionador quase compulsivo. Tá bom, se é quase ou não, não sou psicólogo ou psiquiatra pra saber, mas prefiro continuar nessa ignorância, pelo menos por enquanto.

Pois bem, apesar de amar meus livros físicos e o quão belos eles ficam na minha estante. Eu comprei um Kindle. E estou simplesmente apaixonado pelo que ele me proporciona (coitada da minha estante padrão apartamento, está abarrotada…).

Pensei em um review, mas sabe como é, devem haver uns belos milhões por aí, então, minha inspiração para este post foi uma funcionalidade que conheci há pouco, ao fazer minha primeira leitura de um livro em língua inglesa usando o Kindle (venho estudando inglês, inclusive já dei dicas aqui no blog) e eis que me deparo com algo que achei extremamente útil: ele fornece explicações acerca de algumas palavras!!! Você pode conferir na imagem abaixo:

Estão vendo essas pequenas letras em cima de algumas palavras? Pois bem, são as explicações. Embora elas ainda sejam em inglês, são de grande ajuda para quem está procurando evoluir no idioma, assim como este que lhes escreve aqui.

Você pode também, segurar o dedo sobre uma palavra e receber o significado dela direto de um dicionário instalado automaticamente no seu aparelho:

É lógico que há várias outras funcionalidades e principalmente vantagens, que talvez eu fale sobre, ou talvez não, mas essa me chamou a atenção e é inclusive ajustável quanto ao nível de “explicações que dá” ou quantidade de vezes que aparece.

Há também a possibilidade compartilhar trechos dos livros no Facebook, fazendo comentários sobre eles, e o leitor pode, inclusive, acessar uma fração do livro! para verificar o que você citou.

Veja como ele se apresenta ao ser clicado:

(repare no botão comprar ali no canto superior direito, mas faz parte)

Em resumo: estou maravilhado, completamente feliz com minha aquisição e, apesar de muitas vezes os livros digitais serem mais caros que os físicos (se der, qualquer dia explico pra quem quiser saber por que), há promoções que me permitiram comprar livros por módicos 10 reais, enquanto suas versões físicas beiravam os 60.

Os livros não ficam amarelados, não são perdidos e formam até uma estante virtual “bonita” no aparelho, para satisfazer os ávidos colecionadores…(ou seriam viciados, deixa pra lá…).

Um abraço e até a próxima.