O jeito mais simples de fazer isso é utilizando o pip:
[sourcecode language=”bash”]sudo pip install virtualenv[/sourcecode]Entretanto, em algumas distribuições como o Gentoo, isso normalmente oferece um risco, pois você estará instalando uma biblioteca interna que pode ocasionar conflitos com as bibliotecas de sistema. No meu caso, o Gentoo oferece já um pacote de sistema que faça isso. Se você utiliza essa distro que eu, ao invés de utilizar o comando anterior, utilize esse:
[sourcecode language=”bash”]sudo emerge -av dev-python/virtualenv[/sourcecode]Verifique se a instalação foi bem sucedida:
[sourcecode language=”bash”]virtualenv –version[/sourcecode]Para criar um ambiente virtual novo é bem simples. Acesse um diretório onde vai ser criado o ambiente e digite o seguinte comando substituindo nome_do_ve pelo nome do ambiente desejado:
[sourcecode language=”bash”]virtualenv nome_do_ve[/sourcecode]Você deverá ter uma saída como essa:
Using base prefix ‘/usr’
New python3.7 executable in /development/testes/nome_do_ve/bin/python3.7
Not overwriting existing python3.7 script /development/testes/nome_do_ve/bin/python3.7 (you must use /development/testes/nome_do_ve/bin/python3.7)
Installing setuptools, pip, wheel…
done.
Para utilizar o ambiente é só ativá-lo:
[sourcecode language=”bash”]source nome_do_ve/bin/activate[/sourcecode]Com isso, você pode instalar as dependências que você precisa e trabalhar com o python, após terminar é só desativar:
[sourcecode language=”bash”]source nome_do_ve/bin/activate[/sourcecode]Para sair do ambiente é só digitar: deactivate. Para apagar o ambiente é só remover a pasta.
]]>Para instalar o Elasticsearch no Ubuntu, a melhor forma é utilizando o repositório oficial. Como pré-requisito, é necessário instalar o Java 8 ou superior (instale o de sua preferência) e o repositório apt via https:
sudo apt install apt-transport-https openjdk-8-jdk
Importe a chave do repositorio:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
O resultado deverá ser OK. Adicione o repositório do Elasticsearch da versão 7. Se quiser você pode alterar para uma versão anterior:
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'
Atualize o apt e instale normalmente o pacote elasticsearch:
sudo apt update && apt install elasticsearch
Você pode habilitar como serviço:
sudo systemctl enable elasticsearch.service
Ou iniciar de acordo com a demanda:
sudo systemctl start elasticsearch.service
Veja se está funcionando:
curl localhost:9200
Pronto!
]]>Para iniciar o desenvolvimento é necessário fazer o download da plataforma. No site há algumas opções, como a versão comercial, opensource, download online e offline, além das versões para cada sistema operacional. Para prosseguir nesse artigo, vamos utilizar a versão online com a versão 64 bits do linux.
Após o download, transforme o arquivo em executável e execute-o:
[sourcecode language=”bash”]chmod +x qt-unified-linux-x64-3.0.6-online.run ./qt-unified-linux-x64-3.0.6-online.run[/sourcecode]
Irá abrir uma tela de boas vindas:

Prossiga com as instruções, crie uma conta Qt, especifique o diretório de instalação. Na etapa de seleção de componentes, você poderá especificar a versão do qt a ser utilizada, se vai utilizar a IDE de desenvolvimento (Qt Creator) e se possui necessidade de se trabalhar com gráficos 3D (Qt 3D Studio), além de poder selecionar componentes individuais:

Prossiga com a instalação. Ao final dela você poderá ter acesso ao QT Creator, que está disponível no caminho de instalação que você forneceu:

Agora é só se aventurar. Se você quiser também trabalhar com outras arquiteturas é necessário configurar a plataforma e um debugguer.
Para o debugger eu estou utilizando o gdb, se você já tiver instalado, o QtCreator pode identificá-lo automaticamente. Em Tools, Options, Kits, na aba Debbugers, você poderá ver essa informação:

Na aba Kits você pode configurar outras plataformas, como o Android.
]]>[code language=”bash”]libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
Error: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory[/code]
Crie um link simbólico da libcurl referenciando a lib necessária:
[code language=”bash”]ln -s /usr/lib/libcurl.so.4 /usr/lib/libcurl-gnutls.so.4[/code]
Com isso a lib é encontrada e o problema resolvido.
]]>[code language=”bash”]> stat 412412312.txt
File: 412412312.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 17563908 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 1000/ thiago) Gid: ( 1000/ thiago)
Access: 2018-09-14 14:57:44.899000835 -0300
Modify: 2018-09-14 14:57:44.899000835 -0300
Change: 2018-09-14 14:58:39.583004882 -0300
Birth: -[/code]
Com isso sabemos que esses atributos estão disponíveis no arquivo. Para recuperar todos esses atributos do contexto Unix, no Java, pode-se utilizar o seguinte comando:
[code language=”java”] Path path = Paths.get(filePath);
Map f = Files.readAttributes(path, "unix:*");
System.out.println(f);[/code]
Onde filePath é o caminho onde está o arquivo/diretório. Ou, se deseja recuperar apenas um atributo, como o Change Time (ctime), pode-se realizar da seguinte forma:
[code language=”java”] System.out.println(Files.getAttribute(path,"unix:ctime"));
[/code]
Para mais informações de como trabalhar com atributos, pode-se encontrar aqui.
]]>[sourcecode language=”bash”]mount -o remount,size=8G /tmp/[/sourcecode]
A opção -o é utilizado para passar opções de montagem da partição. Nesse caso, utilizamos o “remount” para realizar a remontagem da partição e o size para especificar o novo tamanho, que nesse exemplo é de 8GB.
]]>O comando é o seguinte:
Dentro da variável frase estará o lero-lero a ser utilizado. Um echo $frase; irá mostrar o conteúdo. Bom proveito!
Atualização: Não funciona mais, pois eles tiraram a geração server side e fizeram via React.JS.
Esse túnel pode ser contemplado pelo seguinte comando:
[sourcecode language=”bash”]ssh -f USUARIO@SERVIDORCOMACESSO -L PORTAACESSAR:SERVIDORACESSAR:PORTAORIGINAL -N[/sourcecode]
O parâmetro mais importante é o -L que é responsável por mapear qual porta você irá acessar pela sua máquina (PORTAACESSAR), de qual servidor (SERVIDORACESSAR), e qual porta desse servidor você irá acessar (PORTAORIGINAL).
Por exemplo, se eu quero acessar o servidor de AD que está disponível no servidor 192.168.18.6 e na porta 389 à partir da minha máquina na porta 2000, sendo que só tenho acesso ao servidor 192.168.18.1, executo o seguinte comando:
[sourcecode language=”bash”]ssh -f [email protected] -L 2000:192.168.18.6:2000 -N[/sourcecode]
Com isso, tenho acesso ao servidor de AD da máquina 192.168.18.6 pela porta 2000 da máquina 192.168.18.1, que seria a única máquina que eu deveria ter acesso.
O parâmetro -f especifica que o SSH deve rodar em background após informar a senha. O -N especifica que nenhum comando remoto será executado, ou seja, só irá fazer o port forward utilizado no nosso túnel.
Agora é só aproveitar esse recurso que é muito útil quando temos acesso limitados à servidores ou necessitamos fazer port forwading.
]]>No Java normalmente esse conteúdo, quando empacotado fica dentro de arquivo WAR interno a um arquivo EAR. Para extrair esse conteúdo estático e disponibilizá-lo no apache, criei um pequeno script que automatiza essa tarefa:
[sourcecode language=”bash”]unzip <NOMEDOPACOTE>.ear -d tmp/ > /dev/null && unzip tmp/*.war `unzip -l tmp/*.war | grep ‘.js$\|.jpg$\|.jpeg$\|.png$\|.gif$\|.htm$\|.html$\|.css$’ | awk ‘{print $4}’` -d static && rm -rf tmp[/sourcecode]
Se você utiliza somente o WAR sem o EAR, basta utilizar o seguinte script:
[sourcecode language=”bash”]unzip <NOMEDOPACOTE>.war `unzip -l tmp/*.war | grep ‘.js$\|.jpg$\|.jpeg$\|.png$\|.gif$\|.htm$\|.html$\|.css$’ | awk ‘{print $4}’` -d static[/sourcecode]
Esse script irá criar uma pasta static com todo o conteúdo a ser mapeado no Apache. Com isso, o seu servidor de aplicações ficará mais leve, com menos requisições e o trabalho de disponibilizar os conteúdos estáticos fica a cargo do Apache, que realiza essa atividade com muita eficiência.
]]>
O TDC 2014 – São Paulo será realizado de 5 a 9 de agosto e terá 36 trilhas (TV Digital, Android, Startups, Java, Arquitetura, etc) no Anhembi Morumbi e, como novidade, vários workshops na sede da Globalcode, inclusive de Raspberry PI e IoT com o Vinicius Senger.
A trilha de TV digital está bem bacana e está sendo coordenada por um grande amigo meu, o Carlos do Java Noroeste e por mim. Vamos ter palestras com aplicativos da Record, TQTVD, TV Aparecida, especialistas renomados na área de TV digital no Brasil e pela comunidade de desenvolvedores.
Para participar é só fazer a inscrição no site. Simultaneamente, vai ter um outro evento legal que é o TDC4Kids para crianças programarem com Scratch, Minecraft e IoT. Para ter uma ideia do porte do evento, essa é a lista de alguns patrocinadores: Amazon, Oracle, Stackoverflow, SAP, PayPal, Google, StackOverflow, JetBrains e Liferay.
A gente se fala lá!
]]>