Últimos artigos

Samsung Gear 360 (2017) vídeos h265 para h264

Acabei de comprar um Samsung Gear 360 (2017) e comecei o trabalho para conseguir descobrir como publicar minhas fotos e meus vídeos na internet. O que dificultou ainda mais é que meu desktop é um OSX Sierra. A Samsung tem algumas soluções funcionais para Windows, mas Mac e videos 360 é um universo, pelo que pude perceber, ainda novo.

Existem soluções como Adobe Premier CC para Mac, mas tenho que gastar um valor mas gostaria de encontrar uma solução mais econômica.

No Mac eu não consegui instalar um codec que pudesse abrir os vídeos gerados pelo Gear 360, pode ter sido falta de pesquisa mas, parti para o ffmpeg que sempre resolve todos meus problemas de transformações.

Pesquisando um pouco encontrei o script abaixo. Ele converte para o h264 que é suportado nativamente no Mac.

INPUT=”$1″
for i in *.MP4 ; do
ffmpeg -i “$i” -bsf:v h264_mp4toannexb -sn -map 0:0 -map 0:1 -vcodec libx264 “$i.ts”
mv “$i.ts” “$i.mpg”
sleep 3
done

Abaixo segue a explicação mais detalhada do comando ffmpeg.

Explanation of the command switches:

  • for i in *.mp4 ; do … done
  • This sets up all .mkv files in a directory to be included in the batch process. This may be changed to accommodate the container extension of the files you wish to process.
  • ffmpeg -i “$i” Executes the program ffmpeg and calls for files to be processed.
    • -bsf:v activates the video bit stream filter to be used.
      h264_mp4toannexb – Is the bit stream filter that is activated.
      Convert an H.264 bitstream from length prefixed mode to start code prefixed mode (as defined in the Annex B of the ITU-T H.264 specification).
      This is required by some streaming formats, typically the MPEG-2 transport stream format (mpegts) processing MKV h.264 (currently)requires this, if is not included you will get an error in the terminal window instructing you to use it.
    • -sn stops the streaming of subtitle streams (for those that do not want subtitles in their video) This is optional and can be removed.
    • -map 0:0 -map 0:1 Tells ffmpeg to only process the first two streams of the file (0:0 is the video stream, 0:1 is the first audio stream of the file). This does two things, strips the excess audio streams, usually the first audio stream is English but not always. Other streams such as embedded subtitles are removed reducing the file size. This is also an optional string. You can use ffprobe to view the streams available in the file. -map is optional and can be discarded from the command.
    • -vcodec libx264 This tells ffmpeg to encode the output to H.264
      “$i.ts” Saves the output to .ts format, this is useful so as not to overwrite your source files.
    • mv “$i.ts” “$i.mpg” Converts the file extension to MPG in the same directory. This can be set up to send it to any directory you like.
  • sleep 3 – allows the process to rest giving ffmpeg time to queue the next file

O que me impressionou foi que o tamanho do arquivo também ficou muito menor do que o original.

Agora vou continuar com a minha pesquisa de como gerar um arquivo para publicar.

Qualquer dúvida fique a vontade em perguntar.

Dotnet Core em Docker

Esse nosso passo a passo nós utilizaremos dois terminais, vamos chamar de terminal A e terminal B

No terminal A com docker já instalado baise a imagem microsoft/dotnet

[root@localhost ~]# docker run -ti microsoft/dotnet
Unable to find image ‘microsoft/dotnet:latest’ locally
latest: Pulling from microsoft/dotnet
cd0a524342ef: Already exists
e39c3ffe4133: Already exists
85334a7c2001: Already exists
9627f78550cf: Already exists
81ac746939b3: Already exists
cfee4c781788: Already exists
Digest: sha256:ad02713e78f4b964eadf7432388bf8662082bf7b43be8da3af366660dcdcd6d0
Status: Downloaded newer image for microsoft/dotnet:latest
root@bc972b3958ea:/#

Ao executar o comando acima, o docker baixa a imagem base para rodarmos a aplicação .net core (no meu caso ele não baixou porque eu já tinha executado esse comando anteriormente) e “entra” dentro do docker, de uma maneira similar a entrar em uma máquina virtual. Você pode observar que passamos de

[root@localhost ~]# para root@01d634f5ccc2:/#

Dentro do nosso docker crie um diretório onde colocaremos a nossa aplicação

root@01d634f5ccc2:/# mkdir -p /opt/dotnet-core/

No terminal B vamos criar a nossa própria imagem no docker hub. Para isso crie uma conta (https://hub.docker.com)
Após criar a conta autentique a através da linha de comando.

[root@localhost dotnet-core]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don’t have a Docker ID, head over to https://hub.docker.com to create one.
Username: enamba
Password:
Login Succeeded

Enquanto o docker esta UP no terminal A vamos executar no terminal B o comando “docker ps” conseguimos listar os containers em execução. Vamos utilizar o valor do  “Container ID” para commitar todas as alterações que fizemos dentro do docker. (a criação do diretório)

[root@localhost ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc972b3958ea microsoft/dotnet “/bin/bash” 2 minutes ago Exited (130) 3 seconds ago   sleepy_bhaskara

Vamos fazer um “fork” do microsoft/dotnet para realizarmos alterações necessárias para executarmos a nossa aplicação.

[root@localhost ~]# docker commit –message=”base .net core” –pause=true bc972b3958ea enamba/dotnet_core
sha256:4dddc46bb7ab87c6f9e50b4622e0f7fc791402d25b9e89bcead2866196d11bcb

Com a conta no docker hub criada, autenticado e o container versionado vamos subir para o docker register que nesse caso é o docker hub.

[root@localhost ~]# docker push enamba/dotnet_core
The push refers to a repository [docker.io/enamba/dotnet_core]
47a4c1a61496: Pushed
b6beea1d002a: Mounted from microsoft/dotnet
5a2162f18fc7: Mounted from microsoft/dotnet
97816a563822: Mounted from microsoft/dotnet
d359ab38b013: Mounted from microsoft/dotnet
682e7cee9d37: Mounted from microsoft/dotnet
295d6a056bfd: Mounted from microsoft/dotnet
latest: digest: sha256:f6951cdc8991a43e5c91c03daa60aa452977026bd898488fce0f0621c57f5d83 size: 1800

Com a nossa imagem docker commited e salva em um docker register, agora precisamos criar uma receita/script para rodar a aplicação.
O primeiro arquivo é o Dockerfile uma boa prática é deixar o script da sua aplicação fora do Dockerfile para não gerar confusão das configurações necessária para a aplicação e as configurações necessárias para subir o docker.

O Dockerfile pode ser obtido através do link (https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/Dockerfile)

FROM enamba/dotnet_core:latest
ENV ASPNETCORE_URLS http://*:5000
WORKDIR /tmp/
RUN curl -SL https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/script.sh –output script.sh \ 
&& chmod 700 script.sh \
&& ./script.sh \
&& rm script.sh
WORKDIR /opt/dotnet-core/
ENV ASPNETCORE_URLS http://*:5000
EXPOSE 5000
ENTRYPOINT [“dotnet”, “api.dll”]
COPY . /opt/dotnet-core

O script tem apenas um script shell com o que é necessário para subir a aplicação: https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/script.sh

#! /bin/bash
mkdir -p /opt/dotnet-core/
git clone -b v0 https://github.com/enamba/dotnet-core.git /opt/dotnet-core/
cd /opt/dotnet-core/
git checkout v0
dotnet restore
dotnet run

O código da aplicação esta commited em https://github.com/enamba/dotnet-core.git Logo ao criar o docker sempre vai ser feito com a última versão. Esse modelo é prático para deixar com o time de desenvolvimento, mas para um ambiente homologação e produção pode gerar problemas na governança das promoções de ambientes e para isso pode seguir a estratégia de salvar no docker register a versão final.

E por fim para executar o docker basta executar o comando abaixo:

docker build -t enamba/dotnet_core https://raw.githubusercontent.com/enamba/dotnet-core/v0/Dockerfiles/Dockerfile

Ele já utiliza o Dockerfile no github e que faz o fluxo completo.

Qualquer dúvida é só perguntar…

Como listar as regras de NAT definidas no IPTABLES

Esse simples comando você consegue validar se existem regras de iptables que alteram a tabela NAT. Me ajuda, diariamente.

# iptables -t nat -v -L -n --line-number

Configurar o Mysql para rodar um aplicação

Quando instalamos o Mysql ele não tem senha e nem database, para rodar um wordpress ou um magento por exemplo, com um mínimo de segurança é importante que ter usuários para cada database. Por isso com alguns passos simples conseguimos criar uma database, usuários e dar permissões.

Após instalar a base de dados através do yum ou apt-get, basta executar o comando mysql.

# mysql
mysql> create DATABASE nomedabasededados;
Query OK, 1 row affected (0.00 sec)
mysql> create user ‘nomedousuario‘@’localhost’ identified by ‘senhadousuario‘;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on nomedabasededados.*  to ‘nomedousuario‘@’localhost’;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Com os comandos acima você tem uma base de dados chamado “nomedabasededados” e que o usuário com o nome “nomedousuario” consegue acessar todas as tabelas da base “nomedabasededados”. A senha desse usuário é “senhadousuario”.

Espero ter ajudado..

Abraços,

Como usar o SourceTree com o CodeCommit AWS no Windows

Levei algumas horas para conseguir fazer tudo funcionar corretamente, por isso gostaria de compartilhar todos os passos. O CodeCommit é seguro e de custo zero, mas não é simples de se usar. Ele pode integrar com outras “ferramentas” que pode proporcionar um ambiente de CI e CD de baixo custo.

Nessa publicação vou apresentar um passo a passo para quem quer colocar o primeiro projeto no CodeCommit.

1- Criando um usuário para acesso ao CodeCommit

Partindo do pré suposto que você já tem um usuário na AWS, uma boa prática é criar usuários específicos para sua empresa ou corporação, por isso que sugiro criar um usuário no IAM (Identity & Access Management), durante o processo de criação você deve gerar uma Security Credential e baixá-la, você vai precisar dessa informação nos próximos passos. Após criar ee permissão/policy a esse usário de AWSCodeCommitFullAccess (essa permissão vai dar acesso a todos os repositórios, mas é possível definir acesso à um grupo ou à um usuário a um repositório mas isso não será tratado aqui, pois envolve uma personalização de police do IAM).

Se você vai aproveitar um usuário existe, tenha a Security Credential dele ou peça para gerar uma nova. Além disso se esse usuário que você vai usar não for o mesmo usuário dono da conta do AWS valide se ele tem a permissão de AWSCodeCommitFullAccess.

2- Criando um repositório no CodeCommit

No dashboard do AWS acesse o CodeCommit, clique em Create New Repository, defina o nome do seu repositório e uma breve descrição caso queira.

3- Preparando o seu desktop para acessar o repositório

Todos os recursos da AWS funcionam através do aws-cli (uma aplicação de linha de commando da própria AWS baseado em python que permite fazer todas as operações que você pode realizar através da interface web e muito mais) e para autenticar no repositório precisaremos fazer uma configuração que tanto o GIT quanto o próprio Sourcetree utilize o metódo de autenticação através do AWS-CLI.

Para isso faça o download do aws-cli para windows no site do user guide da AWS você consegue as instruções mais detalhadas. Mas como esse guia é focado para windows, segue abaixo os links, espero que não mudem, mas se mudar ai vocês tem que pesquisar no user guide da AWS.

Windows 64bits

Windows 32bits

Ao baixar o arquivo instale com as opções padrões.

Após a instalação realizada com sucesso acesse a linha de comando do DOS.
Cadastre a Security Credential do usário que você irá acessar, para isso execute o comando abaixo.
# aws configure

O comando irá solicitar as seguintes informações:

AWS Access Key ID [None]: Informe o AWS access key ID aqui, e pressione Enter
AWS Secret Access Key [None]: Informe seu AWS secret access key aqui, e pressione Enter
Default region name [None]: Se seu codecommit esta na virgina informe us-east-1 aqui e pressione Enter
Default output format [None]: Informe json aqui e pressione Enter

Para testar se as permissões e os valores informados anteriormente estão corretos execute o comando abaixo, ele deve trazer o repositoryMetadata com os dados de acesso ao seu repositório com o comando abaixo:

#aws codecommit get-repository –repository-name NOMEDOREPOSITORIOCRIADO

Obs:. Algumas pessoas disseram que ao copiar a string acima não deu certo pois o aws reclamou de caracteres desconhecidos, sugiro escrever a linha acima e não copiar.

Retornando o valor correto baixe o git em linha de comando

https://git-for-windows.github.io/
Instale com as opções padrões exceto o Git Credential Manager, esse você precisa desabilitar. (com isso habilitado não vai funcionar)

Desabilitar o Git Credential Management

Desabilitar o Git Credential Management

 

Baixe e instale o AWS Tools for Windows PowerShell para administrar as credenciais da AWS
http://sdk-for-net.amazonwebservices.com/latest/AWSToolsAndSDKForNet.msi

Na instalação pode deixar apenas selecionado o “Command-line credential helper for AWS CodeCommit”

Abra o prompt do DOS
Acesse o diretório C:\Program Files (x86)\AWS Tools\CodeCommit
#cd C:\Program Files (x86)\AWS Tools\CodeCommit
Execute o comando
#git-credential-AWSS4.exe
Caso queira acessar o diretório pelo Windows Explorer e executar o arquivo acima, não tem problema.
Ira aparecer uma mensagem e confirme clicando em SIM/YES

Selecione Yes para reaizar a configuração

Selecione Yes para realizar a configuração

O SourceTree você pode fazer o download no site https://www.sourcetreeapp.com/ e utiliza-lo normalmente após essas configurações. Não testei outros clients mas acredito que funcione, se não funcionar me diga que podemos tentar fazer funcionar juntos.

4- Projetos vazios recém criados

Para projetos recém criados, você precisa executar alguns passos antes de usar o Sourcetree.
Através do git na linha de comando faça o clone do seu repositório já criado no codecommit.
#git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/NOMEDOREPOSITORIO
Adicione um arquivo qualquer na pasta criada
No diretório onde colocou o arquivo adicione o arquivo ao projeto com o comando abaixo.
#git add .
Faça o commit da inserção desse novo arquivo
#git commit -m “first commit to create the master branch”
#git push origin master

Após a criação da primeira branch você consegue utilizar normalmente o repositório. Lembrando sempre terá o pré-requisito de instalar o AWS-CLI e o Command-line credential helper for AWS CodeCommit. Essas duas aplicações instaladas e configuradas você consegue utilizar a ferramenta.

Abra o sourcetree e adicione o projeto através do HTTPS e saia para o abraço.

MeArm – #GaragemFabLab

Finalmente finalizei o primeiro protótipo junto com o Garagem FabLab. O MeArm é um projeto bem conhecido no universo dos maker mas antes de participar desse grupo eu não tinha ouvido falar.

Esse projeto eu fiz com a ajuda do Tauan. Ele teve a iniciativa de cortar esse projeto e me deu o desafio de fazer funcionar. Desafio é uma coisa que me instiga muito e como bom brasileiro deixei para finaliza-lo um dia antes da apresentação aqui no #fablab.

Esse é composto de 4 microservos que controlo através de um arduino. A interface de controle eu fiz através de comandos via serial. Quando a aplicação começou a entender os comandos eu “pluguei” uma shield de bluetooth e enviei os comandos via um app no meu celular.

Os irei em breve compartilhar os fontes desse projeto. Como terminei hoje as 2 da matina preciso melhorar a documentação.

Segue o link do app para rodar no android. mearm.apk

A dica para rodar o aplicativo, primeiro ligue o projeto, a luz vermelha do bluetooth deve começar a piscar, antes de abrir o aplicativo vá emparelhe com o dispositivo HC-06, isso deve ser feito apenas para que ele apareça na lista dos dispositivos. Se depois desse processo a luz vermelha do bluetooth parar de piscar reinicie o MeArm abra o APP e escolha o HC-06. Isso deve levar alguns segundos, não clique várias vezes.

Os comandos está um pouco lento por conta dos comando que utilizei para facilitar o parser mas em breve eu compartilho no github o projeto e podemos melhora-lo!

Um grande abraço para todos e boa diversão.

#MeArm - #GaragemFabLab

Primeiro projeto com o #GaragemFabLab

Git quick reference

Tentei em poucas linhas descrever os principais comandos que devem ser utilizados no git, espero que seja útil para quem busca uma documentação enxuta.

Ferramentas de configuração (define quem fez as atualizações)

  • $ git config –global user.name “[nome/nick do desenvolvedor]
    • Define o nome ou o apelido de quem realiza as alterações, o nome é enviado ao GIT e descreve quem realizou a alteração de maneira simples.
  • $ git config –global user.email “[e-mail do desenvolvedor]
    • Define o e-mail de quem realiza as alterações, o e-mail é enviado ao GIT e descreve quem realizou a alteração de maneira simples.
  • $ git config –global color.ui auto
    • As interações por linha de comando ficam coloridas com esse comando.

Criar Repositórios (inicia um novo repositório ou obtém de um já existente)

  • $ git init [nome do projeto]
    • Cria um novo repositório local com um nome já definido
  • $ git clone [url]
    • Baixa um projeto e os históricos de versões

Fazendo atualização pontual (revisão de alterações commit manual de alterações)

  • $ git status
    • Lista todas as alterações que precisam ser comitadas
  • $ git diff
    • Apresenta as diferenças entre arquivos que não estão staged
  • $ git add [files]
    • Adiciona o arquivo para o grupo (staged) que será comitado
  • $ git diff –staged
    • Apresenta as diferenças entre os arquivos staging e a ultima versão.
  • $ git reset [file]
    • Remove o arquivo do grupo (staged) que será comitado mas preserva seu conteúdo.
  • $ git commit -m “[descrição da alteração]
    • Gera um snapshot que pode ser utilizado futuramente para roolback por exemplo. Isso não gera uma versão apenas um snapshot, isso é importante para que as alterações sejam documentadas. Essa operação é realizada apenas localmente.

Fazendo atualizações para entregar uma funcionalidade

  • $ git branch
    • Lista todos os branches (termo que podemos utilizar para definir versões funcionais)
  • $ git branch [nome de uma nova branch]
    • Cria uma nova branch com o nome informado
  • $ git checkout [nome de uma branch existente]
    • Altera o conteúdo do local de trabalho para o snapshot da branch informada
  • $ git merge [nome de uma branch existente]
    • Combinará o código da branch informada com o conteúdo da branch atual que o git esta configurado no instante.
  • $ git branch -d [nome de uma branch existente]
    • Remove a branch informada

Remover arquivos

  • $ git rm [file]
    • Remove o arquivo do local de trabalho e do stage
  • $ git rm –cached [file]
    • Remove o arquivo do stage mas não remove do local de trabalho
  • $ git mv [nome do arquivo original] [novo nome do arquivo]
    • Altera o nome do arquivo local e na area do stage, pronto para comitar.

Removendo arquivos e diretórios de commit acidental/indevido

  • *.log
    build/
    temp-*

    • Esse é deve ser o conteúdo do .gitignore nesse arquivo ficam todos os diretórios arquivos ou padrões de arquivos que não devem ser comitados.
  • $ git  ls-files –other –ignored –exclude-standard
    • Lista todos os arquivos ignorados nesse projeto

Como salvar alterações incompletas sem comitar

  • $ git stash
    • Seria como um commit temporário não oficial.
  • $ git stash pop
    • Recupera os arquivos que foram salvo pelo stash
  • $ git stash list
    • Lista todos os stash realizados e não recuperados
  • $ git stash drop
    • Descarta os stash mais recente realizado.

Histórico

  • $ git log
    • Lista o histórico das versões da branch atual
  • $ git log –follow [file]
    • Lista o histórico de versão de um arquivo, incluindo se também foi renomeado
  • $ git diff [nome da primeira branch] [nome da segunda branch]
    • Apresenta a diferença entre as duas branch
  • $ git show [nome ou código de um commit]
    • Apresenta todos os detalhes  as mudanças de um commit especifico

Rollback dos commits realizados

  • $ git reset [nome do commit_1]
    • Desfaz todos os commits após o commit_1, mantendo as alterações locais
  • $ git reset –hard [nome do commit_1]
    • Descarta todos os histórico de mudanças após o commit_1 e atualizada a área de trabalho com a versão do commit_1

Atualizando o servidor com os commits locais

  • $ git fetch [geralmente utilizam o nome “origin”]
    • Faz download de todo o histórico do repositório, nesse exemplo seria do “origin”
  • $ git merge [geralmente utiliza o nome “origin”]/[nome de uma branch]
    • Combina o branch do origin com a branch local
  • $ git push [geralmente utilizam o nome “origin”] [o nome da branch remota]
    • Faz upload de todo o conteúdo local  para o servidor do Git
  • $ git pull
    • Faz o download de todo histórico do repositório incluindo as mudanças

Abaixo é possível entender melhor o que é o stage e o workflow para o uso do git

make-the-code-work-for-you-with-git-48-638

 

Fonte:
https://training.github.com/kit/downloads/github-git-cheat-sheet.pdf

Adicionar a chave privada e pública em um java keystore

Faça chave privada e o arquivo de solicitação para a CA.

openssl req -nodes -newkey rsa:2048 -keyout mycert.key -out mycert.csr

O mycert.csr deve ser enviado para assinar por uma CA e será retornar um mycert.cer

Após assinado use o openssl onvamente para converter o par de chaves para um PKCS#12 keystore

openssl pkcs12 export in mycert.cer inkey mycert.key out mycert.p12 name nomedodominio.com.br

Com o PKCS#12 em mãos converta o para o formato Java keystore

keytool -importkeystore \
    -deststorepass changeit -destkeypass changeit -destkeystore mycert.keystore \
    -srckeystore mycert.p12 -srcstoretype PKCS12 -srcstorepass some-password \
    -alias nomedodominio.com.br

Strace em Grupo

ps auxwf | grep sbin/apache | awk '{print"-p " $2}' | xargs strace >> trace.txt

Procurando arquivos com conteúdo ‘palavra’

Meu amigo João Paraíso compartilhou uma linha de comando para quem usa linux para encontrar arquivos com uma determinada string. Nesse exemplo abaixo o termo é ‘palavra’

find . \( -iname ‘*.xml’ \) -print0 | xargs -0 grep -Ei ‘palavra’