Postagens

Python - As diferentes estrutura de dados build-in

Imagem
LIST List é uma lista ordenada que pode conter elementos únicos ou repetidos. Ex. lista = [11122233344, 22233344455, 33344455566] lista.append(11122233344) lista # [11122233344, 22233344455, 33344455566, 11122233344] DICT Dicionários são estruturas que possuem uma padrão 'chave:valor'. A Chave é única dentro da estrutura. Ex. instrutores = {'João' : 39, 'Maria': 37, 'Pedro' : 30} instrutores['Daniel'] = 45 instrutores # {'João' : 39, 'Maria': 37, 'Pedro' : 30, 'Daniel', 45} TUPLE Uma tupla é uma lista de elementos imutável Ex. pessoa = ("Daniel", 45) SET Set não possui um índice por isso não tem uma ordenação fixa, porém seus elementos são únicos. Ex: colecao = {11122233344, 22233344455, 33344455566} colecao.add(44455566677) colecao # {11122233344, 22233344455, 33344455566, 44455566677}

Python Pandas - Selecting multiple rows in Pandas DataFrame

Imagem
Query selection df.query("field_name == 'value'") df.query("field_name == 'value1' & field_name2 == 'value2'") Multi selection df[df['field_name'] == 'value'] df[df['field_name'] == 'value1'][df['field_name'] == 'value2'] df[(df['field_name'] == 'value1') & (df['field_name2'] == 'value2')] .loc selection Selecting some rows and all columns  df.loc[df['field_name'] == 'value', :] Selecting some rows and some columns df.loc[df['field_name'] == 'value', ['field_name','field_name2']] Multi selection df.loc[(df['field1'] == 'value1') & (df['field2'] == 'value2'), ['field_name','field_name2']] Regexp selection df.loc[df['field'].str.contains('REGEXP EXPRESSION'),:] df.loc[df['numeric_field'].astype(str).str.contains(...

JavaScript / Node.js - Iteração em arrays

Imagem
Abaixo estão listados os diferentes métodos para iteração em arrays e suas respectivas características. Lembrando que o processamento em geral é mais rápido quando usamos funções ou métodos nativos ao invés de criar nossas próprias soluções. Método: Array.forEach() Descrição: Este método chama um callback para cada item da array Exemplo: [1,2,3,4].forEach((item) => { const res = item * 2; console.log(res); }); /* 2 4 6 8 */ Método: Array.map() Descrição: Este método cria uma nova array aplicando um callback para cada elemento da array original . Este método não altera a array original. Exemplo: const res = [1,2,3,4].map(item => item * 2); // [2, 4, 6, 8] Método: Array.filter() Descrição: Este método cria uma nova array com os elementos que passaram no filtro Exemplo: const res = [1,2,3,4].filter(item => item % 2 == 0); // [2, 4] Método: Array.reduce() Descrição: Este método aplica uma função para cada elem...

Python - Pandas Cheat Sheet

Imagem
Artigo completo em português:  https://danielpms.com.br/artigos/python-pandas-guia-rapido-exploracao-dados.html Pandas is a Python library for data analysis and data manipulation with a lot of tools that help us to work with databases like MySQL, data based on text files like csv, json, html or Excel files. Free, powerful and with a low learning curve it's a great tool for beginners on Python language and an alternative to people that use Excel as an analysis tool. To start with Pandas or learn the basics you don't need to install any software, just access an online tool like Google Colab . My intention in this post is to show a small cheat sheet with basics of Pandas as a kind of beginner's guide or a consultation guide. Let's go To load Pandas library import pandas as pd Importing data from external source Import text files // Regular csv separated by commas pd.read_csv('filename') // Separated by semicolon pd.read_csv('fil...

Vue.js - Propriedades e métodos de um componente

Imagem
O Vue.js é um framework para front end que vem ganhando muito espaço na comunidade de desenvolvimento por sua baixa curva de aprendizado e por suas excelentes qualidades. É possível desenvolver em Vue.JS utilizando o Vue cli , que é uma ferramenta de 'transpiler', ou apenas importando scripts com a tag <script>, que no geral colocamos no header da página. Para facilitar o desenvolvimento de aplicações abaixo segue um breve resumo das opções dentro de um componente Vue.js. { // Referência para o container HTML // (utilizado no desenvolvimento sem vue-cli) el: '#app', // HTML que deve ser renderizado junto com variáveis e etc. // (utilizado no desenvolvimento sem vue-cli) template: '<p>Minha aplicação {{ nome }}</p>', // Define as variáveis disponíveis no componente data() { return { nome: 'Meu nome' } }, // Define métodos disponíveis no componente methods: {...

GIT - Guardando temporariamente as modificações de um repositório sem commit usando stash

Imagem
Muitas vezes, enquanto estamos trabalhando em um branch, chega um pedido de bugfix ou precisamos executar alguma operação como mudar de um branch para outro. O que fazemos com as modificações que já haviamos feito? Criamos um novo commit só para guardar o trabalho já feito mas não concluído? Isso pode poluir nossa cadeia de commit. Desfazer todo o trabalho já feito está fora de cogitação. Então o que fazer quando precisamos limpar temporariamente nosso branch de trabalho? A resposta é o comando stash ! Abaixo seguem alguns dos comandos básicos: Limpando temporariamente o stage das modificações para poder dar checkout para outro branch sem precisar fazer commit nada. $ git stash Lista o que está no temporário (stash) $ git stash list Para recuperar o último stash e manter todos os stashes anteriores $ git stash apply Para recuperar o último stash e remove-lo da pilha $ git stash pop Para limpar a pilha de stash (no caso em que você esteja utilizando ...

Mongo DB - Comandos úteis para export e import de dados

Imagem
Exporta uma base de dados inteira, com todas as collections mongodump --db <database_name> -o <path_to_a_folder> O comando acima irá criar uma pasta dentro de <path_to_a_folder> com o mesmo nome de <database_name> Exporta um collection mongoexport --db <database_name> --collection <collection_name> --out <path_to_a_folder>/<filename>.json Importa uma base de dados inteira contida em uma pasta mongorestore --db <database_name> <path_to_folder> O comando acima cria a base de dados no mongo se ela não existir Importando de uma array de objetos mongoimport --db <database_name> --collection <collection_name> --type json --file <filename>.json --jsonArray Importando com uma collection já existente mongoimport --username user --password "pass" --collection <collection_name> --db <db_name> --file /path/to/dump/collection_name.json Importando sem que a...

Node.js - NPM comandos úteis

Imagem
O NPM (Node Package Manager) é o gerenciador de pacotes no Node.js e é um grande auxiliar no desenvolvimento de aplicações. Vamos mostrar aqui alguns comandos básicos para ajudar no desenvolvimento de aplicações Node.js Inicializando o NPM dentro de uma aplicação. Para isso você deve estar dentro da pasta de seu projeto npm init Você também pode iniciar o NPM com as opções padrão diretamente, pulando a fase de perguntas e respostas npm init -y Versionando uma aplicação npm version minor (as possibilidades são: major | minor | patch) Major geralmente é usado para uma grande modificação da aplicação Minor geralmente é usado quando é feita a implementação de uma nova ferramenta sem grandes alterações na aplicação como um todo Patch geralmente é usado quando erros são corrigidos Para que a versão vá para seu repositorio GIT remoto basta dar um push com a tag de versão git push origin master --tags ...

MySQL - Gerando .csv a partir de uma Query pelo Shell

Imagem
Dependendo da complexidade de suas queries será muito difícil exportar dados através de IDEs como o MySQL workbench por exemplo. "Perda de conexão" é um dos erros mais comuns. Conectar via Shell no MySQL pode ser uma opção porém exportar arquivos para uma pasta de trabalho pode resultar em erros de permissão de acesso e etc. Para evitar estes problemas é possível utilizar um truque muito simples: utilizar diretamente o Shell para chamar o MySQL juntamente com um parâmetro -e a querie desejada e na sequência redirecionar o resultado da querie para sua pasta de trabalho. Segue um exemplo simples abaixo: mysql -uuser -p -e "SELECT * FROM database.tabela_1 FIELDS ENCLOSED BY '\"' TERMINATED BY ';' ESCAPED BY '\"' LINES TERMINATED BY '\r\n'" > /home/minha_pasta/tabela_1.csv É possível fazer a querie sem os parâmetros de formatação FIELDS. A saída será um arquivo texto com padrão de separação por TABS. m...

Javascript / NodeJs - Varias maneiras de escrever uma função

Imagem
Uma função pode ser declarada de várias formas diferentes. Abaixo estão alguns exemplos. Ao implementar funções em javascript para navegadores cuidado com a versão do mesmo. Algumas versões de navegador podem não interpretar as ultimas duas maneiras de declaração. Function declaration A primeira é a mais conhecida function resultado ( numero ) { return 2 * numero } Function Expression const resultado = function( numero ) { return 2 * numero } Arrow function expression const resultado = numero => { return 2 * numero } No caso de dois ou mais parâmetros de entrada da função const resultado = ( numero , multiplicador ) => { return multiplicador * numero } Anonymous Arrow function Com parâmetro (( numero ) => { console.log( 2 * numero ) })( numero ) Sem parâmetro (() => { console.log( 2 * 2 ) })() Assíncrono (async () => { console.log( 2 * 2 ) })() Concise Arrow function expression const resultado = numero => 2 * numero ...

PHP - Modificando métodos através da extensão de classes

Imagem
Extensão de classes é uma ótima maneira de organizar e reaproveitar código, tornando a aplicação mais clara e de manutenção mais simples. Vamos mostrar aqui um exemplo muito simples de extensão de classe utilizando os mesmos nomes de método. Isso pode ser muito útil, por exemplo, quando temos uma chamada de método em várias partes do código e precisamos mudar alguma coisa neste método porém não queremos mexer diretamente nele. Vamos supor que o método statement()  dentro da classe Main é chamado em trinta pontos de sua aplicação e você precisa alterar a saída dele. main.class.php <?php Class Main { public function statement() { return "Classe 'Main'"; } } index.php <?php include "main.class.php"; $new = New Main(); echo $new->statement(); echo "\n"; Uma opção seria alterar o método mas você não quer mexer diretamente nel...

NodeJS / Javascript - Concatenando arrays com concat

Imagem
Para concatenar arrays em Javascript basta aplicar o método .concat() let result = ['a','b','c'].concat(['d','e','f']) O resultado será a array abaixo: ['a','b','c','d','e','f'] Outra maneira de aplicar a função: let var1 = ['a','b','c'] let var2 = ['d','e','f'] let result = var1.concat(var2) O resultado será o mesmo do exemplo anterior: ['a','b','c','d','e','f'] É possível também fazer uma concatenação de uma array dentro de um objeto como no exemplo abaixo: let content = [{titulo:'Titulo 1',tags:['tag1','tag2']},{titulo:'Titulo 2',tags:['tag3','tag4']}] let result = [] content.map( item => { result = result.concat(item.tags) } ) Como resultado temos: ['tag1', 'tag2...

Docker - Comandos básicos

Imagem
O Docker lembra o conceito de máquina virtual onde é possível simular um sistema operacional dentro do sistema operacional principal (Exemplo: uma máquina rodando Windows 10 pode rodar dentro dela um ambiente com Linux, isolado do Windows). Com o Docker é possível pegar seu script em qualquer linguagem (PHP, Node.JS, Python, etc), baixar uma imagem de sistema operacional apenas com os recursos básicos para rodar o script (Kernel de Linux mais a instalação do Node.JS com Mongo por exemplo) e rodar este script como se fosse uma máquina isolada dedicada apenas a este script. Além disso é possível criar várias instancias de um mesmo script como se fossem várias máquinas separadas. A instalação do Docker é um pouco chata e apenas máquinas com capacidade de virtualização podem rodá-lo. Algumas versões de Windows tem tido problemas para rodar o Docker. O Recomendado é que ele seja instalado em ambiente Linux que é seu lugar 'natural'. O guia para instalação pode ser acessad...

Linux / Shell Script - Repetindo um comando no terminal a cada X intervalos de tempo

Imagem
Muitas vezes precisamos monitorar o funcionamento de aplicações que precisam pegar dados em web services, APIs, gerar arquivos de tempos em tempos, logs e etc. O comportamento das aplicações podem variar muito conforme o tipo de dados que recebemos e processamos, principalmente quando não temos o controle completo do dado que chega. Um bom meio para fazer isso é deixar sua aplicação rodando por algum tempo sozinha, coisa que seria muito chata de fazer manualmente. O Shell do Linux nos permite fazer facilmente um timer para rodar nossa aplicação, por exemplo, a cada 20 minutos. No final do dia podemos ver os logs, arquivos gerados ou as atualizações em um banco de dados de testes para verificar se o comportamento foi o esperado. O comando Shell é o que segue abaixo: while true; do <your_command>; sleep <interval_in_seconds>; done Vamos supor que queremos rodar uma aplicação NodeJs a cada 20 minutos. Para isso vamos na pasta em que se encontra nossa apl...

MySQL - Como fazer múltiplos updates com uma única query

Imagem
Vamos supor que temos uma tabela chamada parameters com os campos param , value , type e description : +-------------+------------------------+------+-------------------------------------+ | param | value | type | description | +-------------+------------------------+------+-------------------------------------+ | EXPERIMENTO | 1504037801122 | int | ID do experimento atual | | CONFIG | {"idPublication":"10"} | str | Configurações de treinamento atuais | +-------------+------------------------+------+-------------------------------------+ Supondo que precisamos atualizar apenas o campo value das duas linhas acima com updates, como seria o processo "sem pensar muito"? Bom, seria simplesmente utilizar duas queries UPDATE, correto? UPDATE parameters SET value = '174305845' WHERE param = 'EXPERIMENTO' UPDATE parameters SET value = ...

NodeJs - Corrigindo o encode do retorno de um request com iconv-lite

Imagem
Uma maneira prática de corrigir o problema de caracteres UTF8/ISO-8859-1 é usando iconv-lite. Para instalar o iconv-lite em seu projeto Node: npm install iconv-lite ( ou npm install iconv-lite --save caso queira registrar no arquivo package.json) Aplicando a solução: const iconv = require('iconv-lite'); request( { url : 'http://www.minhaurl.com.br' , encoding : null } , function ( error , response , body ) { if( !error ) { let textEncoded = iconv.decode( body , 'iso-8859-1'); console.log( textEncoded ); } } );