Automatização de intalações

Com o Windows migrando para um formato loja para seus apps, talvez não seja interessante mais para todo tipo de usuário e softwares, a dica que darei hoje. Contudo, muitos aplicativos ainda não são distribuídos por ela, ou talvez jamais cheguem a ser.

E um software que ajuda muito nessa tarefa é o Chocolatey. Trata-se de uma aplicação, conectada a um repositório, onde os usuários criam scripts relacionados aos diretórios de download de diversas ferramentas. Os próprios usuários mantém esses scripts, mas eles passam por uma moderação para tentar evitar arquivos e códigos maliciosos, sendo assim, é possível dizer que instalar aplicações por ele é tão seguro quanto pelo download comum.

Isto posto, desenvolvi um script Powershell, que baixa o próprio Chocolatey e o utiliza para instalar silenciosamente, todas as aplicações que uso regularmente:

O script acima utiliza o comando upgrade do choco, pois ele instala quando não encontra, ou faz a atualização caso o mesmo já se encontre instalado, ou seja, você pode usar o mesmo script para atualizações futuras.

Se você desejar, pode verificar os softwares disponíveis como pacotes choco, em seu diretório, clicando aqui e customizar meu script como lhe convenha. Neste link você pode também, verificar os detalhes de cada script de instalação, caso queira saber exatamente de onde são baixados os arquivos e todos os comandos.

Basta fazer o download do arquivo (clicando no nome do arquivo na parte de baixo da janela dele no post), ou copiar o seu conteúdo e salvar com a extensão ps1, usada pelo Powershell (você pode clicar no botão “view raw” para ver somente seu conteúdo na tela).

Outra dica relacionada à essa, é o uso de um arquivo para modificação do registro. Com ele, fica disponível no menu de contexto do Windows (botão direito do mouse), a opção para executar um script Powershell diretamente como administrador.

Basta executar o arquivo (da mesma forma que sugerido para o primeiro arquivo do post) e aceitar a modificação do registro.

Abs.

Bluetooth Pioneer + Zenfone

Resolvi registrar essa dica após as dificuldades que passei para configurar corretamente o Bluetooth do meu novo celular Zenfone 4 com meu som do carro Pioneer MVH-X588BT.

Não encontrei nada na internet sobre o meu problema, então, quem sabe este post possa ajudar alguém no futuro.

Usava o Bluetooth do som com meu antigo Moto G4 Plus sem nenhum contratempo, porém, com o celular novo, a conexão ocorria com sucesso, mostrava estar tocando, mas o áudio não saía. Testei o celular com uma caixinha de som Bluetooth e tudo funcionou perfeitamente.

Tentei formatar o som, reconectar mais de uma vez e nada. Pesquisei na internet e não achei também nenhuma informação sequer.

Foi então que, em um golpe de sorte e lógica, uma opção me chamou a atenção na configuração de mídias compartilhadas (ao clicar sobre o dispositivo em questão no Bluetooth do celular). Entre as opções “Usar para” abaixo, me chamou a atenção o item “Usar áudio de alta qualidade”.

Screenshot_20180803-083553

E era justamente ele o causador do problema. Foi só desmarcar a opção e o áudio começou a funcionar corretamente.

Abs.

WhatsApp: usando 2 contas no mesmo aparelho

Todo mundo que possui aparelhos com dois chips, caso um deles seja profissional, já se deparou com esse problema. Como usar o app do WhatsApp nos dois?

No início do ano, a empresa lançou uma versão “Business” do app, voltada para o uso empresarial. Ela contém inclusive alguns recursos específicos, como TAGs que o usuário pode usar para marcar grupos e mensagens (exemplo: “Pedido concluído”), facilitando a usabilidade também como um controle de demandas.

Contudo, um outro uso muito interessante foi proporcionado por esse lançamento: o fato de finalmente podermos acessar duas contas diferentes (uma para cada chip), no mesmo aparelho e de forma oficial.

Já existiam outra maneiras mais nebulosas de se atingir isso, usando apps de terceiros, usando o mecanismo de usuários do Android (que nem todos os fabricantes implementam e ainda por cima, não permite o login em dois usuários simultâneos), entre outras.

Contudo nenhuma delas é tão prática quanto essa e sem a segurança que um método oficial oferece. Embora eu ainda queira pesquisar um pouco mais, pois o modo que a empresa valida as contas é um pouco obscuro (recebi ligações com códigos de confirmações assim como SMS), até agora não tive problemas e mesmo com um certo receio de algum bloqueio na conta, venho usando com sucesso e feliz por aposentar meu segundo aparelho.

Abs.

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

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