window.lintrk('track', { conversion_id: 13086145 }); Forum posts
top of page

Posts do fórum

dataside
14 de dez. de 2022
In Discussões gerais
Neste artigo, você vai descobrir algo que tem tirado o sono de muitosdevs, e impulsionado a produtividade e efetividade dos que sabem utilizá-la. Continue lendo! Tech stack ou Stack tecnológico (pilha tecnológica em tradução livre) tem a mesma relação de sentido do termo full-stack, que seria um ramo acumulativo de funções e conhecimentos na carreira de desenvolvimento. Tech stack por sua vez, representa todas as ferramentas, códigos, programas e linguagens de programação que envolvem o funcionamento de umaaplicação, ou qualquer outro tipo de software. Por que ter um stack? Tecnologias como essa dinamizam e aceleram a produção, além de facilitar que as etapas sejam entrelaçadas e a equipe tenha todas as informações do projeto para elevar as soluções. É claro que o sucesso do stack dependerá das escolhas do time em defini-lo, mesmo assim o fato de possuir um stack já é um sinal de maturidade para o time, que também terá a chance de evoluir em suas próprias decisões estratégicas. Com um stack definido na empresa, ou para um produto podemos assumir um padrão de tecnologia que será utilizada em uma ou mais aplicações, facilitando automatização de tarefas e proporcionando mais eficiência no desenvolvimento. São muitos os exemplos de stacks, alguns mais utilizados do que outros pelos devs, entre os mais populares estão: LAMP: Linux, Apache, MySQL e PHP. Popular nos anos 2000. MERN: Mongo DB, Express, React, Node.js. Popular nos últimos anos. Ambos os conjuntos foram montados pensando em atender soluções especificas que podem, ou não estar dentro do que outras aplicações necessitam. Fica então a cargo do time técnico encontrar um conjunto de tecnologias que atendem a sua demanda específica, processo esse relativo e que pode variar de acordo com as necessidades da demanda. Exemplo: Pode-se usar ferramentas que permitem um desenvolvimento mais rápido, porém menos personalizável e escalável, ou então um desenvolvimento de software tradicional que pode ser muito mais customizável, porém mais demorado. Por isso, é importante ter profissionais que se mantém constantemente atualizados sobre os serviços e programas disponíveis, e que estejam em total sintonia com os objetivos da empresa.
Você sabe o que é Tech Stack? content media
0
0
14
dataside
14 de dez. de 2022
In Discussões gerais
Hoje o dataholic William Kelvin vai te contar sobre o que acontece após o fim da etapa principal do desenvolvimento de um aplicativo mobile. É certo que outra grande etapa surge para um time de desenvolvedores: a publicação do App desenvolvido nas lojas. Continue lendo! O processo de distribuição de um aplicativo pode tornar-se algo complexo por conta de alguns fatores ligados a critérios e parâmetros colocados pelas lojas, a fim de garantir certo nível de qualidade e segurança para os usuários de suas plataformas. A equipe de desenvolvedores deve estar sempre em dia com esses critérios, para conseguirem a aprovação do aplicativo de modo mais rápido e de maneira com que novas versões do App no futuro, consigam ser publicadas mais facilmente. Plataformas e o básico de uma publicação As duas plataformas mais utilizadas para a distribuição dos aplicativos atualmente são a Google Play e a App Store, sendo estas, respectivamente, destinadas a aplicações Android e iOS, sistemas operacionais dos principais smartphones atuais. Cada uma das lojas citadas possui algumas características mais específicas no momento da publicação, mas as duas compartilham de um sistema bem parecido de gerenciamento das aplicações, com a utilização de um “painel” onde os desenvolvedores conseguem controlar os detalhes do aplicativo e da publicação em si. Para a publicação de um App na Google Play os desenvolvedores fazem o uso de uma ferramenta chamada “Google Play Console”, que concentra diversas áreas diferentes onde os usuários conseguem por exemplo, gerenciar parte da política do App que deve condizer com as normas da própria Google Play, checar dados acerca da presença do App na loja e liberar o App para testes de maneira rápida e prática para os “Testers” da equipe. Imagem – Painel do Google Play Console Já para a publicação de uma aplicação na App Store, o uso da ferramenta App Store Connect é necessário, onde os usuários dentre muitas áreas, como no “Google Play Console”, conseguem por exemplo, subir novas versões do App, adicionar descrições e informações cruciais da aplicação e liberar o mesmo para testes através de uma outra ferramenta chamada “Test Flight”, que possibilita que os “Testers” do time baixem e façam “Feedbacks” sobre o uso do App. Imagem – Painel do App Store Connect As contas de desenvolvedores nessas plataformas possuem um sistema de precificação, sendo uma taxa de 25 dólares americanos para usufruir das funcionalidades da Google Play e 99 dólares americanos ao ano para uma conta na App Store. Critérios e exigências para uma publicação Durante o processo de publicação, a equipe responsável pelo App pode enfrentar alguns problemas relacionados à algumas exigências feitas pelas plataformas, que podem atrasar muitas vezes a disponibilização do aplicativo nas lojas. Essas exigências podem variar desde contestações sobre informações concedidas na política de privacidade do App, até “prints” inválidos que foram anexados para detalhar o App na página da loja. Abaixo estão listados alguns exemplos de pontos que os desenvolvedores devem atentar-se no momento da publicação de seus Apps, esses pontos comumente podem ocasionar problemas na hora da revisão das aplicações: Falta de declarações dos usos de permissões solicitadas ao usuário (ex: Permissão de acesso à localização, ou a câmera do smartphone). Por exemplo, se o seu App Android solicita ao usuário a permissão para o uso da localização em primeiro plano, você deve declarar o uso dessa permissão em seu AndroidManifest. Mais informações: https://developers.google.com/fit/android/authorization Preenchimento incorreto de informações na política de privacidade do App. No momento de responder os questionários (ex: questionário de público-alvo e conteúdo do App na Google Play) e inserir as informações sobre o aplicativo nas plataformas, é necessário que tudo seja feito com o máximo de cautela, inserindo corretamente as informações, para evitar que após dias de revisão a publicação seja reprovada e seja necessário fazer todo o processo novamente. Ao publicar um App na Google Play, atente-se ao gerenciamento da keystore (Chave utilizada para assinar e identificar aplicações Android na Google Play) com a qual a sua aplicação foi primeiramente assinada no momento de subir a primeira versão do aplicativo, todas as outras builds que forem geradas devem conter essa mesma keystore. Caso necessário, é possível resetar essa keystore e iniciar o processo novamente, assinando as novas builds com uma nova chave. Mais informações: https://developer.android.com/studio/publish/app-signing?hl=pt-br Conclusão Com o App revisado e aprovado pelas plataformas fica disponível para o time liberar a aplicação para testadores, e até mesmo publicar o App na loja para que novos usuários já comecem a baixar e utilizar a aplicação. Subir uma aplicação pode ser uma tarefa difícil, porém com mais informações e seguindo os critérios das plataformas através das documentações e informações disponibilizadas o processo torna-se mais fácil e rápido de ser feito.
Como funciona o processo de distribuição de um Aplicativo mobile? content media
0
0
14
dataside
13 de dez. de 2022
In Discussões gerais
Você sabe o que é um firewall? O dataholic Vinícius Medeiros vai nos ajudar a entender como funciona essa tecnologia e o porquê de ela ser tão importante e fundamental no nosso cotidiano. Vem aprender! A todo momento estamos trocando informações de forma instantânea na internet, seja numa empresa, num smartphone pessoal ou até mesmo em uma rede de wi-fi pública. Mas, como nem tudo são flores, estamos propícios a ataques de hackers e malwares. Uma forma bastante eficiente de fornecer proteção durante o uso da internet é o uso do Firewall. Podemos usar como analogia o fluxo de entrada e saída de pessoas de um prédio, quando alguém chega na portaria e solicita a subida para alguma sala, o porteiro liga para o apartamento ou escritório e pergunta se deve ou não permitir a subida daquela pessoa. O Firewall nada mais é que um dispositivo de segurança que faz o monitoramento do tráfego nas redes de entrada e saída, através de regras de segurança que fazem a permissão ou bloqueio desse fluxo. Podemos ter um firewall em forma de software, hardware ou ambos. Tendo um funcionamento diferente em cada forma. Firewall software Quando comprarmos um computador seu firewall já vem embutido, ele usa um conjunto de regras para fazer o controle do tráfego de informações do computador, tudo que entra e sai. Quando o usuário faz o download de um arquivo que pode ser malicioso, o firewall já bloqueia o recebimento daquele arquivo e notifica sobre a possível nocividade do download. Esse tipo de firewall é muito utilizado em computadores pessoais, onde é menos comum termos ataques massivos de entidades má intencionadas. Exemplos de Firewall em software: ● ZoneAlarm. ● Norton 360 ● AVG Internet Security 2014 ● Tinywall. ● Anti NetCut3. ● Comodo Firewall. ● PeerBlock. ● Privatefirewall ● Firewall Windows Firewall hardware Um firewall mais trabalhado, trata-se de um equipamento que irá servir como suporte de segurança para outros dispositivos. São muito procurados por empresas, pois elas precisam garantir que seus dados estejam seguros e ilesos. Diferente do Firewall de software, um firewall de hardware tem seus próprios recursos e não consomem CPU e RAM dos dispositivos host. Exemplos de Firewall em hardware: Watchguard Netgear Dependendo da demanda em que o firewall será utilizado, temos alguns tipos de firewall: Stateful Inspection Os firewalls de inspeção de testes, comparam o que deve acontecer e o que está acontecendo fazendo uma análise de todo o tráfego de dados e buscando padrões coniventes com suas regras. Essas informações são mantidas pelo firewall e usadas como parâmetro para o tráfego subsequente. Caso ocorra uma transação em uma porta não mencionada, o firewall irá efetuar o bloqueio do processo. Proxy Services Ele atua como uma ponte entre um computador ou rede interna e outra rede como a internet. Geralmente são instalados em servidores mais parrudos, pois irão se submeter a um grande número de requisições. Ele não permite a comunicação direta entre origem e o destino, isso faz com que todo o fluxo passe por ele, tornando possível o estabelecimento de regras que impedem o acesso de determinados endereços externos. Packet filtering Seria uma lista de regras criadas pelo desenvolvedor, caso as informações sejam compatíveis, aquele usuário será autorizado. Possuem 2 tipos de filtragem de pacote: Estático, onde os dados serão analisados com base nas regras. Dinâmico, que surgiu para corrigir as limitações de filtros estáticos, pois ele permite a criação de regras que se adaptem a situação, melhorando sua performance. Então concluindo, o firewall é como um porteiro de um prédio, que através de regras faz a permissão ou não da entrada de alguma determinada entidade. É indicada para grandes e médias companhias. Temos mais controle com esse sistema, já que ele terá como foco apenas a proteção, logo filtragem, suporte para requisições maiores e com mais frequência e automatização fazem esse tipo de firewall bastante interessante.
Firewall content media
0
0
17
dataside
13 de dez. de 2022
In Linguagem de programação
E aí, você testa seus códigos? Hoje o dataholic Dakson Chaves vai te explicar a relevância e importância que os testes têm para um dev. Bora conferir! Então, o que são testes unitários? A palavra teste é um substantivo que tem sua origem no latim - testis – no dicionário “Todo mecanismo que busca verificar ou provar a verdade de”. O nome é autoexplicativo, é um algoritmo construído para colocar a prova, as menores unidades de código do seu projeto. Outra definição é do Roy Osherove: "Um teste unitário é um pedaço de código automatizado que executa uma funcionalidade unitária no sistema e depois faz uma conferência singular sobre uma hipótese no comportamento daquela determinada funcionalidade unitária". Exemplo de unidade código: Figura 1 //Código JavaScript que soma duas variáveis "a" e "b". Por que testar? Fazer os testes unitários pode evitar erros e eventos de Regressão, que são bgus dados como resolvidos anteriormente no projeto, isso possibilita uma entrega com mais qualidade. Além disso, é gerada automaticamente uma documentação que pode ser usada no projeto. Por último, mas não menos importante, a redução de custos no processo de desenvolvimento, evitando retrabalho e facilitando a manutenção do código. Na Documentação do React Você pode testar componentes React de forma similar como se testa outros códigos JavaScript. Há algumas maneiras de testar componentes React. Em geral, os testes podem ser feitos de duas formas: Renderizando árvores de componentes em um ambiente de testes simplificado e confirmando o seu output. Executando uma aplicação completa em um ambiente de navegador real (também conhecido como testes “end-to-end”). Esta seção da documentação se concentra nas estratégias de teste para o primeiro caso. Embora os testes end-to-end completos possam ser muito úteis para impedir regressões em casos importantes, esses testes não estão relacionados a componentes React em particular e estão fora do escopo desta seção. Tradeoffs Ao escolher uma ferramenta de teste, vale a pena considerar alguns tradeoffs: Velocidade de iteração vs ambiente real: Algumas ferramentas oferecem um ciclo de feedback muito rápido entre fazer uma alteração e ver o resultado, mas não reflete o comportamento do navegador com precisão. Outras ferramentas podem usar um ambiente de navegador real, mas reduzem a velocidade da iteração e são mais precárias em um servidor de integração contínua. Quanto mock eu devo usar: Nos componentes, a diferença entre um teste de “unidade” e um de “integração” pode ser confusa. Se você estiver testando um formulário, o teste também deve testar os botões dentro dele? Ou um componente de botão deve ter seu próprio conjunto de testes? A refatoração de um botão deve falhar o teste do formulário? Diferentes respostas podem funcionar para diferentes times e produtos. Ferramentas recomendadas Jest é um test runner JavaScript, que te permite acessar o DOM através do jsdom. Mesmo o jsdom sendo apenas uma aproximação de como um navegador funciona, é bom o suficiente para testar componentes React. Jest oferece uma excelente velocidade de iteração combinada com recursos poderosos como mock de módulos e temporizadores para que você tenha mais controle sobre como o código é executado. React Testing Library é um conjunto de utilitários que permitem testar componentes React sem depender dos detalhes de implementação. Essa abordagem facilita a refatoração e também te orienta para as melhores práticas de acessibilidade. Embora não forneça uma maneira de renderizar “superficialmente” um componente sem seus filhos, um test runner como o Jest permite fazer isso através de mock. Exemplos práticos de utilização Para continuar vou criar um exemplo simples de teste no React com o nome “teste-unitario”. Dentro do terminal digite o npx create-react-app <meu-app>, para criar um projeto. Figura 2 //Abrindo a pasta “teste-unitario” do projeto criado pelo React no VSCode. Ao criar o projeto há uma organização de estruturas de pastas, mas nesse caso vamos nos ater apenas ao arquivo de teste que está dentro da pasta src, App.test.js. Figura 3 // Pasta src e arquivo App.test.js na organização do React. Precisamos entender o que rola dentro desse arquivo, a princípio Figura 4 // Código do arquivo App.test.js De cara percebemos a importação da biblioteca @testing-library que vai interagir com DOM (Document Object Model). Em relação ao render e screen que são usados para capturar os elementos e não necessariamente renderizar a tela. Na sequência a importação do App que é o componente que vai ser testado. O método test() – tem a missão de chamar os testes que serão executados dentro do método. Dentro contém o que é esperado e o que não é. Então ocorre que: É renderizado o componente Criada uma variável (linkElement) A variável recebe do método screen o elemento que possuir o texto learn react O esperado é que a variável esteja no documento O comando Yarn test ou npm test, que já vem por padrão configurado no arquivo package.json, chama o executor de testes criado pelo Facebook – o Jest , sem nenhuma alteração, ao rodá-lo no terminal o Jest que examinará seu código e vai apresentar uma tela de PASS, com informações dos testes quais deles passaram e quais falharam, conforme Figura 5. Figura 5 // Trecho do arquivo packge.json que vem por padrão no scripts. Figura 6 // Execução do teste sem alteração (yarn test). Vamos fazer uma alteração no App.js e verificar como roda o teste. Um elemento simples de iteração interessante para exemplificar é checkbox. Figura 7 // App.js com o nosso novo bloco de código, o checkbox, para testar. Figura 8 // Tela inicial padrão do create-react-app com nosso checkbox para testar. Agora vamos alterar o App.test.js e colocar a prova nosso código simulando uma ação de click do usuário. Começaremos com import userEvent from '@testing-library/user-event', sem o qual não teremos sucesso no teste. Figura 9 //App.test.js alterado para testar nosso checkbox. O userEvent é uma biblioteca que nos permite executar outras ações. A testing library fornece o método fireEvent integrado, mas é mais recomendável que se use o userEvent. Figura 10 // Resultado do teste. Nesse ponto é legal mencionar outras funcionalidades bastante utilizadas – Mocks e Snapshot. Mocks ou Mock Objects são utilizados quando precisamos simular chamados reais de dados, permitindo a criação de módulos, funções com retorno controláveis. Por exemplo, uma página de autenticação de usuário, onde são solicitados e-mail e senha. Nesse caso no código de teste se utiliza informações falsas para agilizar o processo. Exemplo da própria Documentação React: Figura 11 // Exemplo de Mock da documentação React. Snapshots são testes para prevenir quebra de layout e eventuais bugs na UI (User Interface) do projeto. Primeiramente, não esquecer de importar o react-test-renderer – que é um pacote que oferece um renderizador de componentes sem precisar de um código complexo para manipular o DOM. Figura 12 //Exemplo de código de teste UI. Verifica-se que nosso componente é passado como argumento para o renderer e depois transformado em JSON. Normalmente o Snapshot é salvo em um arquivo como esse: Figura 13 // Exemplo de arquivo snashot JSON. Conclusão Independente do projeto que estivermos trabalhando é uma boa prática testar nossos códigos, é o mínimo que podemos fazer para garantir a qualidade do produto sem perder agilidade. E assim garantir que o software não esteja sujeito a erros e evitar eventos de regressão. Além disso, os testes podem ser usados como documentação para o projeto. Portanto, são muitas as vantagens dos testes unitários e hoje não dá mais para pensar em desenvolvimento de software sem pensar em testes unitários. Referências: Testing Library Jest React - Renderizador de teste
TESTE UNITÁRIO NO REACT content media
1
0
15
dataside
13 de dez. de 2022
In Discussões gerais
Os dataholics Vinícius Medeiros e João Victor vão compartilhar neste artigo, dicas e curiosidades que você precisa saber antes de adentrar o mundo dos Devs, e como começar seus estudos. É só continuar lendo! Ter paciência é essencial em todas as áreas da vida, e na construção de uma carreira profissional não é diferente. Quando se está ingressando na área da tecnologia, é possível que o início não seja muito amigável e muitas dúvidas surjam, no entanto, é importante entender que isso faz parte do caminho. A evolução é um processo, na maioria das vezes, lento, porém gradual e que no futuro gera resultados satisfatórios. Consistência e disciplina são outros dois fatores extremamente importantes, principalmente para quem está iniciando sua carreira de desenvolvedor, afinal, não é fácil aprender tantos conceitos diferentes e que a princípio parecem ser complexos. Tudo que é novo nos assusta e o que devemos fazer é praticar um pouco todos os dias para que aquilo seja fixado na nossa cabeça. Na programação, existem tantos conceitos e detalhes para se aprender, que se fizermos tudo de uma vez poderemos esquecer grande parte. Portanto, o correto é ir no seu tempo e estudar todos os dias, para que o cérebro se adapte pouco a pouco aos conteúdos. Programar diariamente nos dará esse hábito, até chegar o momento em que não conseguiremos passar um dia sem essa atividade. Durante os estudos e na rotina de trabalho, erros irão aparecer, os famosos bugs, encontrá-los é uma das partes mais normais da área de TI. Devemos ser resilientes e ler com atenção as mensagens de erros apresentadas e pesquisar como solucionar caso não soubermos, faremos esse exercício frequentemente durante toda nossa carreira. Embora um programador mais experiente possa já ter visto aquele bug antes solucionando-o então com mais rapidez e facilidade, o mais importante é que exercitemos essa prática de corrigir erros com paciência. Mesmo sabendo lidar com os erros, por vezes acabamos caindo na armadilha da comparação, que nos faz duvidar de nossa capacidade e do que já produzimos. Assim como mencionado anteriormente, é necessário paciência e maturidade para entender que estamos em um processo, semelhante aos degraus de uma escada, e que existem pessoas que estão degraus acima, abaixo ou no mesmo degrau que você. Uma boa prática seria, ao invés de se comparar com outras pessoas, se comparar consigo mesmo do passado, faça uma lista do que você aprendeu nos últimos meses e perceba sua evolução, é possível que o seu “eu” de hoje tenha conhecimentos que seu “eu” do passado jamais imaginaria que existissem. Primeiros passos Front-end Parte 1 - Básico É importante ter uma base forte em HTML, CSS e JS, antes de começar a estudar algum framework (estrutura de códigos) ou biblioteca, também é de grande importância estudar o funcionamento da internet, os protocolos HTTP e HTTPS e como funciona o fluxo de request e response. Com uma base boa nos itens listados, ficará bem mais tranquilo adentrar as tecnologias utilizadas no mercado de trabalho. Ter um bom fundamento de GIT também tem relevância, já que é uma ferramenta de uso diário para todo desenvolvedor. Parte 2 - Conceitos mais avançados Depois de se dedicar bastante aos estudos e obter uma boa base das tecnologias citadas anteriormente, chega a hora de adentrar as tecnologias utilizadas no mercado de trabalho. Hoje no frontend a ferramenta mais utilizada e mais em alta é o React, acompanhada do typescript e uma biblioteca de CSS in JS. Cada uma dessas tecnologias, permite que o desenvolvedor frontend consiga elaborar diversos projetos incríveis, que servirão de portfólio antes de sua sonhada vaga. Uma vez que aprendemos react, typescript e styled components, ficará fácil migrar para outros frameworks ou bibliotecas. React O React é uma biblioteca do Javascript, que nos permite desenvolver uma aplicação web de forma performática, elegante e organizada. Ao dividirmos partes da interface do usuário em componentes isolados, ganhamos mais organização no código, pois cada botão, header e footer possui sua própria pasta com sua lógica e estilização isolada, facilitando o desenvolvimento e as manutenções. Stitches / Styled components Essas duas bibliotecas possuem o conceito de css in js, que nos permite aplicar javascript dentro do css. Isso é muito poderoso quando precisamos adicionar lógica na estilização. Hoje em dia são bibliotecas muito utilizadas no mercado de trabalho. Testes Os testes nos auxiliam com problemas futuros, podem ser difíceis no começo e parecerem atrapalhar o desenvolvimento, mas com o tempo vamos enxergando a importância deles. Outros frameworks Depois de ter uma boa base de React, é muito interessante experimentar outros frameworks e bibliotecas de construção de aplicações (Front End), sendo elas o Vue, Next e Angular. Todas fazem parte da grande gama de opções que nascem todos os dias no mundo do desenvolvimento web. Back-end Parte 1 - Básico Assim como no front-end, a trilha de estudos do back-end está dividida em duas partes (uma básica e outra mais avançada). A parte mais básica também inicia com conceitos importantes sobre a internet: como ocorre o tráfego de informações, interações cliente-servidor etc. Após essa etapa básica em comum, temos a escolha da linguagem de programação a ser utilizada nos estudos. Como exemplo, apresentamos o Javascript e o Typescript, em conjunto com Node.js - ferramenta que serve de ambiente de execução para o Javascript fora do browser. Por fim, nessa parte inicial, há outra etapa em comum com a trilha anterior: o uso das ferramentas de versionamento. Parte 2 - Conceitos mais avançados Como primeiro tópico desta parte, temos os conceitos de bancos de dados: tabelas, colunas, tipos de dados, diferenças entre SQL e NoSQL etc. Em seguida, adentramos a ideia e os aspectos principais de uma API: conceitos básicos (rotas, parâmetros, requisições e respostas etc.) e estruturação do projeto em pastas. Após isso, existe um leque de ferramentas e de implementações diferentes a se estudar, dentre as quais, destacamos: testes unitários, arquitetura e conceitos de segurança como criptografia e autenticação por token. Testes unitários A princípio, os testes podem se apresentar como adversários da produtividade dos devs, porém, como boas práticas, devem fazer parte do processo como um todo. Com constante exercício da implementação dos testes e, consequentemente, o aperfeiçoamento no uso dessa ferramenta, muita dor de cabeça pode ser poupada no futuro, tendo em vista que a aplicação estará seguramente coberta pelos cenários de testes. Arquitetura No tópico de arquitetura, se encontram as diferentes formas de se modelar a estrutura de um projeto de api. Alguns exemplos dos assuntos abordados são: arquitetura monolítica, arquitetura de micro serviços, clean architecture, DDD (Domain Driven Design), etc. Segurança Esse, com certeza, é um ponto extremamente importante em qualquer projeto moderno. A internet a cada dia que passa, se torna um local mais perigoso, onde dados são roubados e sistemas são invadidos com maior facilidade. Tendo isso em vista, os desenvolvedores devem buscar reforçar suas aplicações com camadas de proteção eficazes. Para isso, é necessário ter conhecimento de técnicas que promovem essa segurança, como por exemplo: criptografia de dados, funcionamento de um sistema com autenticação por token, uso de variáveis de ambiente etc. Conclusão + dica final Vamos concluir esse artigo com uma dica final, que se aplica a tudo o que foi dito até aqui (vale ressaltar, que essa dica também vale para assuntos que não se refiram à área de TI). Trata-se de dois exercícios interessantes a se fazer quando vamos estudar/produzir algo: organização e refatoração. A organização é uma atitude pré-executória, pois antes de realizar qualquer atividade, é inteligente ter noção acerca do que vai ser feito, e a ordem dos passos a serem executados. Esse planejamento pode evitar confusões e bloqueios durante a realização da atividade, e, consequentemente, acaba por se tornar um processo mais produtivo, com um melhor gerenciamento do tempo. A refatoração é um exercício realizado após a atividade ter sido feita. Trata-se de um review do que foi feito e como foi feito, identificando pontos que podem ser melhorados, automatizados ou até mesmo descartados na próxima execução. Tudo isso, visando um melhor resultado e buscando evitar gasto de energia desnecessário.
Como ingressar na carreira de desenvolvedor? content media
0
0
16
dataside
13 de dez. de 2022
In Discussões gerais
Se pelo nome você presumiu que estamos falando sobre a área de criação de conteúdo, talvez não esteja muito longe, mas o design thinking possui um campo de abrangência bem maior. Continue lendo para entender como essa estratégia pode ser útil para você! Sendo gestor, chefe de um setor técnico ou responsável por uma equipe você provavelmente já teve que lidar com algum problema para o qual precisava de uma solução criativa e eficiente. Talvez tenha recorrido a uma metodologia específica, mas com certeza não esperou que a resposta viesse até você. É justamente na avaliação e resolução de problemas que entra o design thinking, não como um método regrado, mas como uma maneira que trabalha a criatividade em grupo, para facilitar o caminho até as soluções. Esta forma não garante que as respostas saltem aos olhos em instantes de aplicação, mas de fato, promete um rendimento melhor da equipe, além de um caminho mais curto e claro para atingir o objetivo. Etapas Assim como qualquer outra maneira de construir uma análise para identificar e tratar de uma dor empresarial, o design thinking também propõe a sua própria maneira de resolver os problemas. Lembrando é claro que não se trata de regras ou uma metodologia a ser seguida, mas dicas e indicações que farão a diferença no processo. Análise da situação A intenção aqui é entender completamente a situação adversa, seja de um cliente interno, externo ou qualquer outro stakeholder. Estar familiarizado com a demanda, abre as portas para todos os pequenos detalhes que podem interferir na projeção e realização do seu projeto, além disso esclarece as necessidades profundas dos clientes, algumas talvez não ditas previamente, mas que se mostraram necessárias dentro da análise. Para tal feito recomenda-se a análise SWOT, ela pode ser muito eficiente para mapear possíveis erros, ou sinais externos de interferência que também precisam ser levados em consideração. Tais como, o contexto social, observação das tendencias de mercado, situação econômica etc. No mais, a opinião dos consumidores será de extrema importância, eles serão o juiz no processo final e devem ter direito a serem contemplados durante a resolução. Primeiros resultados Depois de recolher os dados relevantes (algo que pode ser feito com o auxílio de ferramentas de big data), é hora do brainstorming. Falando em bom português, esse é o momento de reunir o time envolvido técnico e/ou administrativo e deixar as ideias fluírem, ou seja, ter os primeiros esboços das ideias que podem ajudar a propor uma solução viável. Podem ser apenas palavras ou frases que já têm o primeiro vislumbre do caminho a ser trilhado, esse é um passo muito importante, já que utilizaremos o que a criatividade trouxer à mente, não estando mais presos à estaca zero, é possível partir “de algum lugar”. Planejamento Depois de esgotar as ideias iniciais, é hora de aplicar a técnica que muitos conhecem por prestarem exames de múltipla escolha, “ir pela eliminação”. Desse modo, descartaremos o que não funciona ou não faz sentido para o projeto e diminuiremos nossas escolhas, tendo somente que escolher entre o que é mais ou menos viável. Após delimitar a melhor ideia para prosseguir, é a vez de planejar detalhadamente o que deverá ser feito a partir do conceito inicial. É nessa etapa que serão feitos os testes, e todas as perguntas necessárias para sanar as dúvidas quanto a colocação prática do projeto. Essa é provavelmente a parte mais cansativa e detalhada, afinal tudo deve ser bem pensado e estruturado para que nenhum gasto financeiro ou esforço físico e metal seja desnecessário na execução da solução a ser desenvolvida. Então, deve ser dedicada máxima atenção a ela. Colocar em prática Após todos os testes e aprovações feitas, começa a última etapa do projeto: tirar tudo do papel e começar a produzir segundo o planejamento. Nesta etapa, é importante que as funções estejam bem definidas e o time esteja e total sintonia, para que durante o processo nenhuma informação se perca e nenhuma tarefa seja interrompida ou imprecisa. Ainda nesta etapa, é interessante pensar na pós-produção, que envolve a divulgação, criação de campanhas e distribuição dependendo do seu produto. Afinal, quem melhor para pensar sobre a difusão do produto do que as pessoas que estão envolvidas desde o início. Hora de agir! O design thinking é uma ferramenta que pode ser aplicada no desenvolvimento de qualquer projeto, isso inclui estruturação de sites, produção criativa de conteúdos, desenvolvimento de apps e softwares ou qualquer outro processo, seja ele técnico ou administrativo. Para desenvolvedores ela pode ser ainda mais completa quando aplicada juntamente às ferramentas de UX design e UI design, que permitirão um planejamento assertivo e detalhado para a criação de qualquer peça. A ferramenta é uma ótima maneira de redistribuir as tarefas e aumentar a produtividade sem sacrificar seu time, promovendo o uso criativo e colaborativo das pessoas envolvidas. Os funcionários acabarão se sentido mais integrados e presentes no projeto, mesmo não sendo as pessoas específicas responsáveis por cada tarefa, afinal serão consultados e ouvidos durante todo o processo. Além de tudo isso, se houverem custos para a realização eles serão mínimos, afinal se trata principalmente de uma reorganização didática, então todos os ganhos da experiência serão maximizados. Ficou interessado e quer aprender mais a fundo sobre o design thinking? Acesse a plataforma de cursos Echos e comece agora mesmo!
Como tomar decisões com o Design thinking content media
0
0
14
dataside
09 de dez. de 2022
In Linguagem de programação
Neste artigo, o dataholic Michel Oliveira vai nos ajudar a entender melhor sobre os paradigmas da programação, e pontuar especificamente entre eles suas especificações e categorização. Bom estudo! O paradigma de programação está ligado diretamente ao estilo de escrita e forma de organização do código utilizado para desenvolver a aplicação. Cada paradigma utiliza uma forma específica de escrita e organização do código. A palavra paradigma tem por definição o seguinte: Um exemplo que serve como modelo; padrão. Um conjunto de formas vocabulares que servem de modelo para um sistema de flexão ou de derivação; padrão. Trazendo para o contexto da programação, o paradigma pode ser definido como um conjunto de princípios, ideias, conceitos de design e normas que definem a maneira como o código do programa é escrito e organizado. Em outras palavras é uma estrutura que define como o programador pode conceituar e modelar problemas complexos a serem resolvidos por meio de uma linguagem de programação. Por sua vez, uma linguagem de programação é uma ferramenta para solução de diversos problemas. Cada linguagem de programação tem um estilo de programar único que implementa um paradigma de programação específico. E o mais incrível nisso, é que para cada problema há inúmeras formas de os resolver. Tipos de Paradigmas de Programação Os paradigmas de programação podem ser classificados em dois tipos principais. O tipo de paradigma depende dos recursos da linguagem de programação e de um estilo particular de organização do código do programa. Paradigma Imperativo. Paradigma Declarativo Paradigmas Imperativos O paradigma imperativo é dirigido por comando. O código do programa na linguagem de programação do paradigma imperativo direciona a execução do programa como uma sequência de instruções executadas uma a uma. Ou seja, o programa de estilo imperativo consiste em um conjunto de instruções de programa, e cada instrução direciona o computador para executar uma tarefa específica. Neste estilo de programa, o programador deve elaborar cada instrução em detalhes. Cada declaração orienta o que deve ser feito e como deve ser feito. A execução das instruções do programa é decidida pelas instruções de fluxo de controle, e o fluxo do programa pode ser direcionado de acordo com a lógica do programa. Algumas das linguagens de programação do paradigma imperativo incluem Fortran, C, Pascal e Cobol. Paradigmas Declarativos O paradigma declarativo é um paradigma de programação focado na lógica do programa em si, e no resultado. Aqui o fluxo de controle não é o elemento mais importante do programa, mas sim alcançar o resultado almejado. Uma das principais características do paradigma declarativo é que não há preocupação na maneira ou método de execução de uma determinada rotina. Em outras palavras, o foco não está no “como” e sim no “que”. Tipos de Programação Imperativa 1. Programação Estruturada. 2. Programação Procedural. 3. Programação Orientada a Objetos. 4. Linguagem de consulta de banco de dados. Programação Estruturada A programação estruturada é derivada do paradigma imperativo, ela é uma abordagem melhorada em comparação ao seu predecessor. A programação estruturada também é referida alternadamente como programação modular. Este tipo de programação visa otimizar o código utilizando as construções de fluxo de controle do programa, construções de tomada de decisão (If, If Then, Else) e as construções de iteração (For, while loops), blocos e funções. A principal intenção da abordagem de programação estruturada é melhorar a legibilidade do código. Essa abordagem também facilita a reutilização do código. Algumas linguagens estruturadas são Cobol, PHP, Perl e Go. Programação Procedural A programação procedural também pode ser chamada de programação imperativa. É um paradigma de programação baseado no conceito de chamadas de procedimento, em que as instruções são estruturadas em procedimentos (também conhecidos como sub-rotinas ou funções). Eles são uma lista de instruções para dizer ao computador o que fazer passo por passo, linguagens de programação procedurais são conhecidas como linguagens de cima para baixo. A maioria das primeiras linguagens de programação são procedurais. Algumas linguagens procedurais são C, C++, Java e Pascal. Programação Orientada a Objetos A programação orientada a objetos como o próprio nome resume, é um tipo de programação estruturada que visualiza os componentes do programa como objetos. Na programação OOP, todos os componentes do programa são representados como objetos. Um objeto liga os dados e os métodos associados como uma unidade única. Como tal, o programador pode controlar as permissões de acesso aos dados definindo o especificador de acesso. Algumas das linguagens mais utilizadas no mundo fazem parte desse paradigma: PHP, Java, C#, Python e Ruby. Linguagem de consulta de banco de dados A linguagem de consulta de banco de dados SQL ( Structured Query Language ) é o exemplo mais comumente usado de linguagem baseada em modelo. O banco de dados é um componente vital da maioria dos projetos de software. A maioria dos RDBMS (Relational Database Management System) suporta o SQL para programação de banco de dados. Tipos de programação declarativa 1. Programação Funcional. 2. Programação Lógica. Programação Funcional Diferentemente das programações imperativas e orientada a objetos, a funcional parte do princípio de que tudo são funções. Não existe uma lista de instruções ou objetos para o computador realizar, mas uma sequência de funções matemáticas que juntas, vão resolver um problema. Aqui você trata a computação como uma avaliação de funções matemáticas e evita a mudança de estado e dados mutáveis. Algumas linguagens desse paradigma são Haskell, Scala e JavaScript. Programação Lógica A programação lógica é um paradigma de programação declarativa que se baseia na lógica e no controle. A palavra “lógica” significa essencialmente fatos e regras, já o controle significa uma ordem de regras. Sendo assim, a lógica define o que deve ser resolvido enquanto o controle define como deve ser resolvido. A principal vantagem da programação lógica é que o programador só precisa definir qual parte do problema quer resolver, e o sistema encontra a melhor solução para esse problema. Algumas linguagens desse paradigma são Absys, Ciao e Alice. Os paradigmas de programação ajudam a reduzir a complexidade dos programas, além de contribuir para o cultivo e o crescimento das linguagens de programação.
O que são Paradigmas de Programação? content media
0
0
16
dataside
09 de dez. de 2022
In Linguagem de programação
No artigo de hoje o dataholic Michel Oliveira vai explicar sobre o backend como serviço (BaaS), ele permite que os desenvolvedores se concentrem no frontend de suas aplicações e tenham um serviço de backend sem construí-los ou mantê-los. Vem aprender! O que é BaaS? Backend como serviço (BaaS) é um modelo de serviço em nuvem que facilita a vida dos desenvolvedores frontend, onde eles terceirizam todos os aspectos do backend de um aplicativo web ou mobile, assim os desenvolvedores terão que se preocupar apenas, em desenvolver e manter o frontend. O BaaS fornece um software genérico para atividades que ocorrem em servidores, como por exemplo a autenticação de usuários, gerenciamento de banco de dados, atualização remota e notificações push (para aplicativos móveis), assim como hospedagem e armazenamento em nuvem. O BaaS não é só para desenvolvedores frontend, esse serviço também pode ser utilizado por empresas para validar uma ideia. Investir recursos na criação do frontend e backend de uma aplicação que ainda não é concretamente certa, pode não ser a melhor coisa a se fazer, o sensato seria utilizar o BaaS e economizar tempo e outros recursos para validar sua ideia de aplicação, e só então migrar para um backend próprio. Fornecedores de BaaS Os fornecedores de BaaS, fornecem Application Programming Interface (Interface de Programação de Aplicativos) e Software Development Kit (kit de desenvolvimento de software) o que os desenvolvedores podem usar para integrar todas as funcionalidades de backend que precisam em suas aplicações, sem construir o backend em si. Também não há necessidade de gerenciar servidores, máquinas virtuais ou contêineres para manter o aplicativo em execução. Isso permite que os desenvolvedores criem e lancem aplicativos de forma muito mais rápida. Firebase O Firebase é um conjunto de ferramentas para criar, melhorar e expandir seu aplicativo, e as ferramentas que ele oferece cobrem grande parte dos serviços que os desenvolvedores normalmente teriam que criar. O Firebase é rico em recursos, entre os recursos fornecidos pelo firebase estão coisas como análise, autenticação, bancos de dados, configuração, armazenamento de arquivos, mensagens push etc. Os serviços são hospedados na nuvem e são dimensionados com pouco ou nenhum esforço por parte do desenvolvedor. Back4App O produto Back4App é baseado em várias tecnologias de código aberto, incluindo NodeJS e Parse Server. É um backend de código-fonte aberto que ajuda desenvolvedores a criar aplicativos escaláveis sem reinventar a roda. Os recursos fornecidos por este provedor são, modelagem de dados, APIs REST e GraphQL, painel de administração não técnico, funções em nuvem, login, autenticação, redefinição de senha, notificações por push, CLI, backup de dados, vários SDKs. Backendless O backendless é uma plataforma de desenvolvimento de aplicativos móveis de uso geral. Ele possui quatro pilares: uma estrutura BaaS, um serviço de hospedagem na web, um mecanismo de geração de API e um mercado de serviços. Alguns recursos fornecidos por este provedor são: banco de dados, cache, código em nuvem, sem código, geolocalização, registro, mensagens, banco de dados em tempo real, segurança, gerenciamento de usuários. Game Sparks Essa é uma empresa de propriedade da AWS (Amazon Web Services). É um backend como um serviço focado em jogos. Seus recursos incluem: multijogador social, economias de metagame, back office personalizado, dimensionamento, gerenciamento de jogadores, segmentação, análise, automação de marketing, eventos ao vivo, quadros de líderes, multijogador em tempo real, organização de partidas, equipes, bate-papo, moedas, bens virtuais, testes A / B, sistemas de conquista, funções, permissões, notificações, sistema de mensagens, autenticação e várias integrações. É claro que existem muitos outros provedores de BaaS, mas aqui citei alguns para que você os conheça. É isso, galera! Nesse artigo, você viu que usando um BaaS, é possível reduzir o tempo de desenvolvimento de sua aplicação e terceirizar as responsabilidades de backend, e de gerenciamento da infraestrutura em nuvem.
BaaS – Backend as a Service content media
0
0
13
dataside
08 de dez. de 2022
In Linguagem de programação
Você sabia que WebSocket e HTTP são protocolos de comunicação, usados na comunicação entre cliente e servidor? No artigo de hoje o dataholic Michel Oliveira vai nos contar mais sobre esses protocolos. Boa leitura! HTTP O HTTP (HyperText Transfer Protocol) é um protocolo que permite a obtenção de recursos, como documentos HTML. É a base de qualquer troca de dados na Web e um protocolo que chamamos de cliente-servidor, o que significa que as requisições são iniciadas pelo destinatário (cliente), geralmente um navegador da web. Um documento completo é reconstruído a partir dos diferentes sub-documentos obtidos, como por exemplo texto, descrição do layout (CSS), imagens, vídeos, scripts e muito mais. Imagem blog informática para todos WebSockets WebSocket é um protocolo de comunicação bidirecional, que pode enviar os dados do cliente para o servidor, ou do servidor para o cliente reutilizando o canal de conexão estabelecido (bidirecional). A conexão é mantida ativa até ser encerrada pelo cliente ou pelo servidor. Os WebSockets permitem que o servidor e o cliente enviem mensagens a qualquer momento, sem qualquer relação com uma solicitação anterior. Uma vantagem notável de usar WebSockets, é que quase todos os navegadores suportam o protocolo. Imagem js-tutorials.com Diferenças O HTTP quando usado durante o acesso de um site, abre uma conexão com o servidor e é feita uma requisição para esse servidor. O servidor então processa essa requisição e devolve uma resposta normalmente em HTML. Quando essa resposta é recebida pelo cliente, a conexão com o servidor é fechada, impedindo que o navegador envie mais informações para o servidor e vice-versa. Se precisarmos pedir mais informações ao servidor, uma nova conexão deverá ser criada. Cada requisição que fazemos para o servidor possuí um certo atraso, o que pode ser um problema para aplicações que precisam fazer requisições contínuas ao servidor, um exemplo disso são chats e jogos online. Existe uma forma de o navegador fazer novas requisições para o servidor sem que haja a necessidade de recarregar a página. Podemos utilizar o ajax, que realiza uma chamada assíncrona com JavaScript, mas ainda assim, por debaixo dos panos o protocolo HTTP será utilizado, logo teremos perda de performance. É aí que entra o Websocket, pois quando uma conexão com o servidor é criada utilizando esse protocolo, a conexão não é finalizada. Isso faz com que as informações trafeguem de forma muito mais rápida do que navegariam com o protocolo HTTP, pois não há mais necessidade de criar uma nova conexão toda vez que uma requisição for feita. Tomando como exemplo um chat online, usando o Websocket, quando o usuário1 enviar uma mensagem para o usuário2, a mensagem vai para o servidor que automaticamente envia para o usuário1, sem que ele faça uma requisição. Já com o HTTP, a mensagem é enviada ao servidor, e só é entregue ao usuário1 quando o mesmo faz a requisição. Utilizando o websockets não sobrecarregamos o servidor. Embora a maioria das implementações de websockets sejam com node.js, você pode usá-lo com diversas outras linguagens, como por exemplo C, C++, C#, Java, entre outras. O websockets é uma das melhores alternativas de protocolo atualmente, mas é claro que nem tudo é perfeito. É preciso saber o momento de quando usá-lo e quando não o usar, o ideal é usá-lo para aplicações que demandam comunicação bilateral em tempo real. Utilizá-lo em outros tipos de aplicação pode não ocasionar melhora, mas sim afetá-la negativamente com perda de performance. WebSockets será a melhor escolha no contexto de comunicação contínua em tempo real. Você provavelmente já jogou os jogos .io, esses jogos são um exemplo perfeito de onde usar o poder do websocket; já pensou jogar agar.io com o protocolo HTTP? Não seria a melhor opção, não é mesmo?
WebSocket e HTTP content media
1
0
20
dataside
08 de dez. de 2022
In Discussões gerais
Neste artigo, o dataholic Vinícius Medeiros, vai nos ajudar a entender finalmente o que é, e por que devemos usar HTPP. Boa leitura! Hypertext Transfer Protocol, no português Protocolo de transferência de hipertexto, é o protocolo principal de comunicação entre computadores na internet. Ele possibilita a busca de recursos como, por exemplo, documentos em HTML, dados em JSON ou XML. Mas, como isso funciona por debaixo dos panos? O HTTP é um protocolo na camada de aplicação, logo deve ser implementado nos softwares responsáveis por essa comunicação, como servidores web e navegadores. Eles vão trabalhar com mais alguns protocolos, tendo um destaque para o TCP (Transmission Control Protocol) e o IP (Internet Protocol) e TLS, que será explicado nesse artigo. A comunicação realizada pelo HTTP segue um modelo de Request / Response (Pedido e resposta), seguindo a arquitetura cliente-servidor, onde o cliente é o usuário que faz a requisição e os servidores atendem a essas requisições respondendo com o serviço que foi solicitado. Assim que a resposta é recebida pelo cliente, a comunicação é encerrada. Em comparação, pode-se citar o modelo de comunicação via Streaming de dados, em que o cliente se conecta com o servidor e mantém essa conexão de forma contínua, por exemplo, durante a exibição de vídeos no Youtube ou em lives na Twitch. Entre o cliente e o servidor, existem diversas entidades, conhecidas como proxies, que podem executar diferentes operações até que a mensagem seja entregue. O HTTP é um protocolo Stateless, ou seja, quando o computador manda uma requisição para o servidor é como se fosse a primeira vez, pois dentro do protocolo não existe um estado da comunicação, não conseguindo identificar se é a primeira requisição ou a centésima requisição. Existem alguns métodos do HTTP, são eles: GET: Solicita a representação de um recurso, essas requisições devem retornar apenas dados. POST: É utilizado para submeter uma entidade a um recurso específico, causando uma mudança no estado do recurso ou até efeitos colaterais no servidor. PUT: Substitui todas as representações atuais pelos dados da requisição. DELETE: Remove um recurso específico. TRACE: Executa um teste de chamada loopback junto com o caminho para o recurso destino. OPTIONS: É utilizado para descrever as opções de comunicação para o recurso de destino. CONNECT: Estabelece uma ponte para o servidor identificado pelo recurso de destino. HEAD: Solicita uma resposta igual ao método GET, mas sem conter o corpo da resposta. PATCH: É usado para aplicar modificações parciais em um recurso. Agora podemos ver um exemplo de resposta servidor HTTP com status code 200, representando que a resposta foi realizada com sucesso. Grupo de status HTTP: 1XX - Informação 2XX - Sucesso 3XX - Redirecionamento 4XX - Erro no Cliente 5XX - Erro no servidor Nesse site podemos ver todos esses status de forma mais descontraída https://http.cat/ Nomeação dos dados que pertencem a uma requisição HTTP - Query String Params: Parâmetros que são informados na rota após o sinal de interrogação (?). Geralmente, são utilizados para filtros e paginação. Ex: https://exemplo.com/rota?page=2&name=Kleber&idade=18 - Route params: Parâmetros utilizados para identificar recursos. Ex: https://exemplo.com/perfil/:id/edit - Body: Corpo da requisição ou da resposta. Ex: se eu cadastrar um usuário em um sistema, preciso enviar seus dados. Estes dados são enviados através do body. - Headers: Informações adicionais que não aparecem nos outros parâmetros. Geralmente são usadas para autenticação, ou para informar detalhes da origem da requisição ou resposta. Mas e o HTTPs? Hoje muita coisa na web está migrando para HTTPs pela segurança que ele proporciona através da criptografia. Mas, o que é o HTTPs? O HTTPs é um protocolo utilizado em sites que utilizam informações sensíveis, como senhas e dados pessoais. O protocolo HTTPs se difere do HTTP por possuir recursos de segurança, trazendo uma maior segurança ao site. Ele realiza a criptografia dos dados, utilizando o protocolo TLS (Transport Layer Security), em português: Segurança na Camada de Transporte, que é a camada onde transitam os dados de uma requisição HTTP. Tudo é feito por meio da criptografia de dados, para a troca de informações é necessário que haja uma autenticação de ambos. Tudo que o HTTPS oferece será útil tanto para os donos do site, como para os usuários. Quando um site possui HTTPS eleva as chances de subirem no ranking de buscas. Já para os usuários que navegam em sites HTTPS, aumenta significativamente a segurança de navegação, pois com essa camada de segurança poderemos ficar mais tranquilos em relação a malwares e pessoas má intencionadas. É muito importante não nos prendermos a segurança que o HTTPS proporciona, temos que ficar atentos a tentativas de fraude. Alguns sites podem “imitar” o uso do cadeado na url para fingir o uso de HTTPS. Por isso é necessário acessar sites verdadeiros e com conexão segura.
Protocolo HTTP content media
0
0
11
dataside
08 de dez. de 2022
In Linguagem de programação
Fala galera, hoje o dataholic Michel Oliveira vai mostrar como iniciar um projeto com uma ferramenta sensacional, que ajuda muito na hora de criar um app com react native. Vem conferir! Mas e aí? Você sabe o que é o Expo? O Expo é um framework/plataforma utilizada no desenvolvimento de aplicações com React Native. É um conjunto de ferramentas e serviços construídos em torno de plataformas nativas e do React Native que ajudam você a desenvolver, construir, implantar e iterar rapidamente em aplicativos iOS, Android e web a partir da mesma base de código JavaScript/TypeScript. Alguns requisitos Existem duas ferramentas que você precisa para desenvolver aplicativos com o Expo: um aplicativo de linha de comando chamado Expo CLI para inicializar e servir seu projeto, e um aplicativo cliente móvel chamado Expo Go para abri-lo no iOS e Android. Qualquer navegador da web funcionará para abrir o projeto na web. Expo CLI Expo CLI é um aplicativo de linha de comando, que é a principal interface entre um desenvolvedor e as ferramentas do Expo. A Expo CLI também tem uma GUI baseada na web que aparece em seu navegador da web quando você inicia seu projeto. Você pode usar a GUI em vez da interface de linha de comando se ainda não estiver confortável em usar um terminal ou preferir GUIs, ambas têm a capacidade necessária. Para instalar o Expo CLI você precisa ter instalado o Node.js LTS, Git e para os usuários de macOS e Linux precisão também do Watchman. Expo Go Expo Go é um aplicativo que está disponível nas lojas de apps da google e apple. Ele permite que você abra os aplicativos que estão sendo servidos através do Expo CLI apenas lendo o QR Code gerado no browser ou no terminal. Você pode baixar o expo go nas seguintes lojas: Android Play Store - Android Lollipop (5) e superior. iOS App Store - iOS 11 e superior. Esclarecidos esses conceitos vamos agora pôr a mão na massa de fato. Instalação 1- Primeiramente, instalamos o Expo CLI, para isso abra o terminal (ctrl+alt+t) e digite o seguinte comando: $ npm install --global expo-cli 2- Verifique se a instalação foi bem-sucedida, se o retorno do comando abaixo for "Not logged in", isso significa que deu certo a instalação: $ expo whoami 3- O próximo passo é instalar o Expo Go. Com seu dispositivo, vá até sua loja de aplicativos e busque por Expo Go, basta instalar como qualquer outro app. 4- Agora estamos prontos para criar nosso projeto com expo. Abra seu terminal (ctrl+alt+t) crie uma pasta para guardar o projeto, navegue para essa pasta: $ mkdir project-expo && cd project-expo 5- Nessa pasta digite o comando para iniciar o projeto: $ expo init hello-world Ao digitar o comando acima, o expo perguntará com qual template você quer criar o porojeto: Existem duas abordagens para criar aplicativos com ferramentas Expo, elas são chamadas de fluxos de trabalho, Managed workflow - "gerenciados" e Bare workflow - "nuas". A principal diferença entre as duas abordagens é que com o fluxo de trabalho gerenciado (Managed workflow), você apenas escreve JavaScript/TypeScript, e as ferramentas e serviços Expo cuidam de todo o resto para você. Já no fluxo de trabalho simples (Bare workflow), você tem controle total sobre todos os aspectos do projeto nativo, e as ferramentas e serviços do Expo são um pouco mais limitados. Managed workflow blank - um aplicativo mínimo tão limpo quanto uma tela vazia. blank (TypeScript) - o mesmo que em branco, mas com configuração TypeScript. tabs (TypeScript) - várias telas e guias de exemplo usando react-navigation e TypeScript. Bare workflow minimal - simples e minimalista, apenas o essencial para você começar. Nesse caso vou escolher o blank sem TypeScript. Pressionando enter na opção escolhida o expo vai criar e configurar todo nosso projeto. Após a criação do projeto você pode entrar na pasta do projeto que no meu caso dei o nome de hello-world. Dentro da pasta do projeto podemos iniciar o servidor do expo e gerar o QR Code para abrirmos o app com o expo Go, digite o seguinte: $ expo start No terminal irá aparecer o QR Code para que você possa ler com o app Expo Go, provavelmente o browser irá abrir também com o mesmo QR Code e algumas outras opções. Abra seu app Expo Go e leia o QR Code, o expo vai abrir o app em seu dispositivo: App aberto no Android Pronto! Você criou seu primeiro aplicativo com React Native. Agora vamos alterar essa mensagem no app: Abra o projeto no VSCode ou seu editor de texto preferido (aposto que é o VSCode). Com o projeto aberto, abra o arquivo App.js, esse é o arquivo onde podemos por nossos códigos. Vamos alterar o texto que está dentro da tag <Text>, altere para “Hello World!” e salvar o código. Note no seu dispositivo, que ao salvar o código, a alteração é refletida instantaneamente no dispositivo, isso acontece graças a um recurso sensacional do React Native chamado de fast refresh, que permite obter feedback quase instantâneo para alterações em seus componentes. O fast refresh vem habilitada por padrão, para desabilitar/habilitar você pode chacoalhar seu dispositivo para abrir o menu do desenvolvedor (developer menu) e clicar em Disable Fast Refresh. Dev Tools Então é isso galera, hoje aprendemos que o expo é uma ferramenta para desenvolvimento de aplicações com react native. Vimos também que precisamos de apenas duas ferramentas para iniciar um projeto com expo, o Expo CLI e Expo Go, um aplicativo de linha de comando e um aplicativo para dispositivo android e iOS para abrir o app respectivamente. Além disso o expo nos dá dois fluxos de trabalho, gerenciado (Managed workflow) onde os serviços do expo cuidam da maior parte das configurações, e simples (Bare workflow), onde você tem controle total sobre os aspectos do projeto nativo. Agora você pode iniciar seus projetos sem medo de passar horas configurando um ambiente trabalhoso e pesado com react native CLI, android studio e emulador, o que demanda muito consumo de hardware do seu PC.
Conhecendo o Expo e iniciando um projeto content media
0
0
67
dataside
08 de dez. de 2022
In Linguagem de programação
O artigo de hoje, vai fazer a diferença na vida de vocês Devs, que querem facilitar sua rotina de trabalho. Vem conferir esse tutorial do Dataholic Michel Oliveira! Em agosto de 2021 o GitHub removeu o suporte à autenticação de senha para operações do GIT. Agora toda autenticação deve ser feita por um token de acesso (Personal Access Token). Mas armazenar e gerenciar o token de acesso é uma tarefa bem delicada. Não importa o quanto você tente armazená-lo, um dia você acaba criando outro, e esse ciclo nunca termina. Para simplificar nossa vida o GitHub permite que você crie chaves SSH, para que você gerencie tudo de maneira remota, com segurança e sem precisar fornecer seu nome de usuário e token de acesso pessoal toda vez que quiser acessar. O que é SSH? O SSH é um protocolo de rede que permite a conexão com determinados servidores por meio de uma comunicação criptografada, trazendo mais segurança para as transações de dados. Se você estiver no Windows, recomendo que instale o git e utilize o terminal do próprio git (Git Bash). Se estiver em uma distro Linux pode usar o terminal do próprio Linux. Passo 1 - Verificando chaves existentes Vamos verificar se já possuímos alguma chave SSH em nosso sistema. Por padrão elas ficam na pasta raiz da máquina dentro da pasta “.ssh”, e vem com nomes como: “id_rsa.pub”, “id_ecdsa.pub” ou “id_ed25519.pub”. No seu terminal digite: ls –al ~/.ssh , a saída desse comando deve ser algo parecido com a imagem abaixo. Caso você já tenha alguma chave e deseja usá-la, siga para o passo 3. Se você deseja gerar uma chave nova ou a saída do comando acima tenha mostrado uma contagem ou nenhum arquivo, significa que você não tem chaves SSH então siga para o passo 2. Passo 2 – Gerando chave SSH Agora precisamos gerar um novo par de chaves. Falamos "par de chaves" porque assim que gerarmos uma chave, serão criados dois arquivos, um público (.pub) e um privado. O conteúdo do arquivo público (.pub) é o que colocaremos no GitHub para fazer a conexão. Para criar uma chave ed25519, execute: ssh-keygen -t ed25519 -C "your_email@example.com" Para criar uma chave rsa, execute: ssh-keygen -t rsa -b 4096 -C "your_email@example.com" Não esqueça de substituir “your_email@example.com” por seu e-mail registrado em sua conta do GitHub. Se você deseja saber a diferença sobres os tipos de chaves, recomendo essa discussão sobre o assunto: https://qastack.com.br/ubuntu/363207/what-is-the-difference-between-the-rsa-dsa-and-ecdsa-keys-that-ssh-uses Ao digitar um dos comandos acima você será solicitado para o local de arquivo padrão da chave. Basta apertar enter. Em seguida será solicitada uma senha, você pode deixar vazia e apertar enter. Solicitação de senha e local para chave Feito isso, você receberá seu key fingerprint, mas não copie ainda porque essa será a versão simplificada da chave. Key fingerprint No resultado acima, selecione o caminho do arquivo de chave, no meu caso é /home/mjohn/.ssh/id_rsa.pub; Para encontrar a chave original execute o comando abaixo: cat /home/mjohn/.ssh/id_rsa.pub Então você encontra sua chave original: Exemplo da chave original Passo 3 - Adicionar chave privada ao ssh-agent O ssh-agent é um gerenciador de chaves ssh. O ssh-agent armazena em cache a chave para que você só precise digitar a senha uma vez, quando o agente desejar descriptografar a mesma, ou seja, você não precisa perder tempo digitando sua senha sempre que for fazer uma operação. Inicie o ssh-agent digitando no terminal: eval $(ssh-agent -s) Inclua a chave privada ao ssh-agent: ssh-add ~/.ssh/id_rsa Chave adicionada ao ssh-agent Passo 4 – Adicionando a chave pública (.pub) ao GitHub Agora que já adicionamos a chave privada no ssh-agent, vamos copiar a chave pública que faz par com ela, para incluirmos no GitHub. Para copiar digite: No Windows: clip < ~/.ssh/id_rsa.pub. (Automaticamente o conteúdo da sua chave pública será copiado para a área de transferência.) No Linux: cat ~/.ssh/id_rsa.pub. (O conteúdo da chave pública aparecerá no terminal para ser selecionado e copiado.) Adicionar chave no GitHub Faça login com sua conta no GitHub; Clique na sua foto de perfil no canto superior direito; No menu que foi aberto clique em “settings”; No menu lateral aberto no canto esquerdo clique em “SSH and GPG keys”; Clique no botão “New SSH key”; No campo “Title” de um nome para sua chave SSH; por exemplo, se estiver usando seu computador pessoal, você pode chamar essa chave de "Computador pessoal"; A chave pública (.pub) que você copiou no terminal cole-a no campo “Key”; Clique em "Add SSH key"; Testando a conexão SSH Execute esse comando no terminal: ssh -T git@github.com Aguardar as mensagens. Digite "yes" para continuar. Verifique se a mensagem resultante contém seu nome de usuário e o sucesso da sua autenticação. Conectado com sucesso Se porventura, a conexão não acontecer, você pode seguir essas dicas: https://docs.github.com/en/authentication/troubleshooting-ssh/error-permission-denied-publickey
Configurando chave SSH para o GitHub content media
0
0
59
dataside
08 de dez. de 2022
In Linguagem de programação
Neste poste, você vai aprender com o dataholic Michel Oliveira, como o map(), filter() e reduce() trabalham, como usá-los, e como eles são implementados. Pega a caneta e vem conferir! Se você começou a estudar JavaScript agora, ou se já estuda a um tempo, você já deve ter ouvido falar da “trindade” do JavaScript: map, filter e reducer. Estes são uns dos métodos mais importantes do JavaScript, eles nos permitem iterar pelo conteúdo de um array, semelhante a usar um loop for . Cada um desses métodos criará um novo array (ou elemento, objeto, etc.) com base na função callback fornecida, e eles não mudarão ou alterarão o array original. Por que você deve usar map, filter ou reducer em vez de um loop for? Nos permite criar códigos mais legíveis. São mais rápidos para serem escritos. Facilita no encadeamento de outros métodos. Não alteram o array original. Array.map() Invoca a função callback passada por argumento para cada elemento do Array e devolve um novo Array como resultado. Essa função de callback pode receber até três argumentos: elemento - O valor do elemento original do array de origem. index (opcional) - O índice do elemento atual que está sendo processado no array. array (opcional) - O Array de origem Descrição O método map chama a função callback recebida por parâmetro para cada elemento do array original, e constrói um novo array com base nos retornos de cada chamada. A função callback é chamada apenas para os elementos do array original que tiverem valores atribuídos; os elementos undefined, ou removidos, ou os que nunca tiveram valores atribuídos, não serão considerados. O método map não modifica o array original. Mas, a função callback invocada por ele, pode fazê-lo. Quando não usar o map() Como map o cria um novo array, usá-lo quando você não está usando o array retornado é uma má pratica; use forEach ou for...of em vez disso. Exemplo O código a seguir mapeia um array de números e cria um novo array contendo o valor do elemento elevado a 2 de cada número do primeiro array. Note que no exemplo acima, eu não passei os argumentos index e array, pois como eu disse são opcionais, existem caso que você vai precisar passa-los, mas na maioria das vezes não será necessário. Array.filter() Cria um novo array com todos os elementos que passaram no teste implementado pela função fornecida. Essa função é um predicado para testar cada elemento do array. Retorna um valor que resolve para true para manter o elemento, ou false para não manter. Assim como no map() a callback do filter() pode receber o element, index e o array. Sendo assim, filter() chama a função callback fornecida, uma vez para cada elemento do array, e constrói um novo array com todos os valores para os quais o callback retornou o valor true, ou um valor que seja convertido para true. O callback é chamado apenas para índices do array que possuem valores atribuídos; Ele não é invocado para índices que foram excluídos ou para aqueles que não tiveram valor atribuído. Elementos do array que não passaram no teste do callback são simplesmente ignorados, e não são incluídos no novo array. Exemplo O exemplo a seguir usa filter() para criar um array filtrado em que todos os elementos com valores menores que 10 são removidos. Note que no exemplo acima, assim como no map() eu não passei os argumentos index e array, pois como eu disse são opcionais, existem casos que você vai precisar passa-los, mas na maioria das vezes não será necessário. Array.reduce() Executa uma função de callback “reducer” fornecida pelo usuário em cada elemento da matriz, passando o valor de retorno do cálculo no elemento anterior. Resultando num único valor de retorno. Na primeira vez que o callback é executado, não há "valor de retorno do cálculo anterior". Se fornecido, um valor inicial pode ser usado em seu lugar. Caso contrário, o elemento de matriz 0 é usado como o valor inicial e a interação começa a partir do próximo elemento (índice 1 em vez de índice 0). O reduce() recebe até três parâmetros: callback Uma função de callback que é executada em cada valor no array (exceto no primeiro, se nenhum valor inicial “initialValue” for passado); recebe quatro argumentos: previousValue - valor retornado da última iteração. Na primeira iteração esse argumento receberá o initialValue, se ele for informado; currentValue - o valor atual que está sendo processado pelo array; currentIndex - o índice atual do item no array de origem; array - o array original; accumulator (opcional) O índice do elemento atual que está sendo processado no array. Começa a partir do index 0 se um (initialValue) for fornecido. Do contrário, começa do index 1. InitialValue (opcional) Valor inicial do resultado da operação que será passado para a função de callback na primeira iteração. Em um cenário no qual desejamos somar os itens de um array, por exemplo, esse argumento representa o valor inicial da soma, que apesar de ser zero na maioria dos casos, pode variar de acordo com a situação. Por exemplo, podemos desejar somar os elementos de mais de um array. Nesse caso, o resultado da soma do primeiro poderia ser passado como initialValue para o segundo, e então a nova soma seria acumulada na segunda função. Esse argumento, no entanto, é opcional. Exemplo O exemplo a seguir usa reduce() para somar todos os elementos do array. Observe que no exemplo acima, eu não passei o initialValue, nesse caso não tem problema, pois o array tem elementos. No entando, caso o array esteja vazio, isso causaria um erro. Por tanto, é bom que passe um initialValue. Veja um exemplo com o uso do initialValue; supomos que temos 2 arrays, um com os gastos de maio e um com os gastos de junho e queremos somar os dois arrays para descobrir o total de gastos dos dois meses. Podemos então aplicar um reduce() no array de maio e somar seus valores, e passar o valor obtido como initialValue do reduce() para o mês de junho, veja como fica o código: No exemplo acima o totalMay foi passado como valor inicial para o reduce() do juneExpenses, ou seja, a soma começou com 180 e fechou com 655 dos dois meses. Baseado no que vimos, você pode aplicar map() - Se deseja aplicar a função de callback a cada elemento do array; filter() - Se deseja filtrar elementos do array baseado em alguma condição; e reduce() - Se deseja fazer algum cálculo com os valores do array, para retornar soma dos valores por exemplo.
A “trindade” do JavaScript: Map, Filter e Reducer content media
0
0
10
dataside
08 de dez. de 2022
In Discussões gerais
No artigo de hoje, o dataholic João Victor se propôs a facilitar a vida de vários devs, compartilhando um conhecimento simples e muito útil, que você pode ter deixado passar. Ficou curioso? Da só uma olhada! No mundo da programação, nós devs (desenvolvedores) cedo ou tarde, temos que criar intimidade com o terminal do computador. Se você trabalha como desenvolvedor há algum tempo, já percebeu a infinidade de comandos disponíveis que existem. Alguns são curtos e simples, porém outros são extensos e complexos. Para facilitar nossa vida nesse quesito, os terminais Linux disponibilizam o comando alias, o qual explicaremos melhor a seguir. Comando alias Os aliases são ferramentas que permitem a criação de comandos personalizados, que funcionam como uma espécie de atalho, ou apelido para outros comandos. Um bom exemplo é o comando de mostrar seu IP na rede. O comando completo é: echo $(hostname -I | awk '{print $1}'), mas usando alias podemos reduzi-lo apenas para myip Atalhos como esse facilitam bastante o desenvolvimento e aumentam a produtividade, diminuindo o esforço de escrever repetidamente um comando e até mesmo de ter que memorizá-lo. Existem duas formas de se criar um alias, a temporária e a permanente. Veremos como cada uma funciona. Criando um alias temporário Os alias temporários funcionam apenas durante a sessão do terminal em que foram criados. Após a sessão ser encerrada, o comando criado não funcionará mais. Para criar um alias temporário usamos o seguinte modelo: alias nome_do_alias='comando' Exemplo: comando para mostrar a mensagem “Hello, World!” no terminal. Criando um alias permanente Para criar um alias permanente, ou seja, que funcione em toda sessão, é necessário adicioná-lo no arquivo de configuração do seu terminal. No meu caso, o arquivo se chama zshrc, pois estou usando o terminal zsh. Dependendo do terminal que você esteja usando, o arquivo de configuração terá outros nomes, como no caso do terminal bash, cujo arquivo é .bashrc. Abrindo o arquivo, basta adicionar na última linha (ou onde você preferir, desde que não afete outras configurações) o mesmo comando utilizado para criar um alias temporário. Veja um exemplo de como adicionei os meus. Conclusão Criar seus próprios aliases agilizará bastante seu trabalho e poupará tempo na hora do desenvolvimento, mas tenha cautela antes de criá-los. É importante ter conhecimento de como o comando que você escolheu funciona, para não acarretar problemas maiores.
Criando comandos customizados no terminal Linux content media
0
0
9
dataside
08 de dez. de 2022
In Discussões gerais
Neste artigo, o dataholic João Victor aborda sobre algumas das estruturas mais conhecidas na computação: lista, pilha, fila e árvore. Boa leitura! No dicionário encontra-se a seguinte definição para o termo estrutura: “Modo como alguma coisa é construída, organizada ou está disposta”. Na programação, as estruturas de dados são exatamente assim, formas diferentes de se armazenar, organizar e manipular um conjunto de dados. Algumas das estruturas mais conhecidas na computação são: lista, pilha, fila e árvore. Falaremos brevemente sobre elas a seguir. Vale salientar que além dessas existem outras estruturas que não receberam destaque neste artigo. Listas ou Listas Encadeadas Trata-se de uma estrutura linear, onde os elementos são ligados entre si, onde um nó (termo usado para identificar um elemento da estrutura) pode ter uma ligação com seu sucessor (lista encadeada) ou com seu sucessor e antecessor (lista duplamente encadeada). Geralmente utilizamos o termo “apontar” para identificar as ligações, por exemplo: o nó aponta para o seu sucessor. Algumas observações são necessárias antes de vermos a representação gráfica da lista: ● em caso de lista duplamente encadeada, o antecessor do primeiro nó será null (uma ligação para um valor nulo); ● independente de ser duplamente encadeada ou não, o sucessor do último nó aponta para null; ● existe também um tipo de lista conhecido como lista encadeada (ou duplamente encadeada) circular, onde o último elemento aponta para o início da lista, porém não iremos tratar dele nesse artigo. Representação da lista encadeada Pilha Tipo especial de lista, onde a estrutura se baseia no princípio LIFO, que representa a expressão “last in, first out”, onde o último elemento que entra na estrutura é o primeiro a sair. Achou confuso? Explicarei melhor. Imagine uma pilha de livros, o livro que está no topo foi o último adicionado (last in), mas na hora de desempilhar ele será o primeiro a sair da pilha (first out). Esse é o comportamento da estrutura pilha. Representação do comportamento da pilha Exemplo de uso na computação: ● Chamadas de funções num interpretador de código; ● Mecanismo de desfazer/refazer dos editores de texto; ● Navegação entre páginas Web; Fila Assim como a pilha, a fila é tipo especial de lista, porém esta se baseia no princípio FIFO, que representa a expressão “first in, first out”, onde o primeiro elemento que entra na estrutura também é o primeiro a sair. Um bom exemplo para explicar seu funcionamento é uma fila em um caixa de supermercado, onde o primeiro cliente a entrar na fila (first in) é o primeiro a ser atendido e, consequentemente, é também o primeiro a sair da fila (last in). Representação do comportamento da fila Exemplo de uso na computação: ● Processos executados em um sistema operacional. ● Controle de documentos para impressão; ● Troca de mensagens entre computadores numa rede; Árvores Diferente das estruturas lineares (elementos dispostos em forma de sequência) apresentadas até agora, as árvores são estruturas não lineares. Seus dados são dispostos de forma hierárquica, onde os elementos se encontram “abaixo” ou “acima” uns dos outros. Representação da árvore Como apresentado na figura acima, os nós da árvore possuem algumas nomenclaturas especiais. Toda árvore possui um nó raiz, que possui ligações para os outros elementos. Em outras palavras, é o “começo” da árvore. A partir da raiz, todos os nós possuem um antecessor imediato ou pai, tomando a figura como exemplo: o Dado 3 é pai do Dado 6. Os nós também podem ter filhos (sucessores imediatos) e irmãos (quando são filhos do mesmo pai), por exemplo: os Dados 4 e 5 são irmãos, pois são filhos do mesmo pai, o Dado 2. Nós sem filhos são chamados de nó folha, nó terminal ou nó externo. Exemplo do uso na computação: ● Estruturas de pastas de um sistema operacional. Conclusão Apesar de se mostrarem simples, as estruturas de dados são peças fundamentais no mundo da programação, pois, como foi visto, elas são amplamente utilizadas na computação, seja no desenvolvimento de softwares, arquitetura de redes ou construção de sistemas operacionais.
Estruturas de dados na computação content media
0
0
22
dataside
08 de dez. de 2022
In Discussões gerais
Neste artigo você vai aprender mais sobre pipelines com o dataholic João Victor. Se você já ouviu o termo “pipeline” e ficou confuso sobre do que se tratava, esse artigo tem a intenção de clarear um pouco a sua mente a respeito desse assunto. Vale salientar que o objetivo não é um detalhamento técnico preciso, mas uma explicação simples e clara do tema. Boa leitura! O termo “pipeline” Em uma tradução literal, “pipeline” significa “oleoduto” ou “tubo”, também pode ser traduzida como “canalizar”. De modo geral, esse termo define o processo em que algo é transportado de um local para outro, como no caso das tubulações. Já em outros cenários, pipeline pode assumir significados diferentes, no entanto vamos nos ater a apenas um deles, que são as pipelines da área de devops, as conhecidas pipelines de CI/CD. O que significa CI e CD? CI (Continuous Integration) e CD (Continuous Deployment ou Continuous Delivery) são práticas do desenvolvimento de software que visam automatizar a integração e entrega de novas features em um projeto. De forma mais direta, vamos usar o exemplo de um repositório versionado com Git. Caso ainda não tenha conhecimento sobre Git, recomendo a leitura de um de nossos artigos sobre o tema, você pode acessá-lo clicando aqui. Continuando o exemplo, digamos que, ao desenvolver uma nova funcionalidade em seu site, você faz os commits e mescla suas alterações na branch principal. Em seguida, essa nova versão do projeto é enviada para ser consumida em produção pelos clientes. A imagem abaixo apresenta de forma simplificada esse fluxo: Para garantir que tanto o merge da pull request (integração) quanto o deploy da aplicação sejam feitos de forma segura, é necessária uma validação nas mudanças feitas no código. E é aqui que a pipeline surge para automatizar esse processo. Automatizando processos com a pipeline A pipeline tem o papel de verificar se o código não possui problemas que prejudiquem a versão em produção, e caso tudo esteja conforme o esperado, prosseguir com a entrega do produto. Essas checagens são realizadas em etapas, que são comumente chamadas de jobs ou steps. Dentre essas etapas podemos encontrar: Estágios de integração: Compilação: verifica se não há erros de build; Testes: etapa onde os testes do projeto são executados, evitando que algum código não testado vá para o ambiente de produção; Lint: garante que os padrões de lint do código estão sendo seguidos; Estágios de deploy: Compactação: Criação de um arquivo compactado contendo os arquivos do projeto; Upload / Deploy: Onde o build da aplicação (compactado ou não) é enviado para o servidor de hospedagem, onde será acessado pelos usuários. Vale destacar que cada etapa depende do sucesso da anterior. Por exemplo, caso algum erro seja encontrado no estágio de testes, a pipeline irá “quebrar”, ou seja, interromper o processo sem que as etapas seguintes sejam iniciadas. Dessa forma estamos seguros de que nosso deploy não terá nenhuma falha e pouparemos tempo e esforços no futuro. Conclusão De acordo com o que foi visto, o uso de pipelines possui inúmeros benefícios durante o decorrer de um projeto, alguns deles são: Mais segurança contra possíveis erros no ambiente de produção; Detecção de bugs de forma automática, contribuindo para uma correção mais rápida do problema, sem que este afete a experiência dos usuários; Economia de tempo e esforço, já que a pipeline se encarrega do trabalho de compilação, compactação (quando necessário) e deploy; O time de desenvolvimento mantém o foco no progresso do projeto e na criação de novas funcionalidades, gastando menos tempo testando o código.
O que são pipelines de CI/CD? content media
0
0
17
dataside
08 de dez. de 2022
In Discussões gerais
Neste artigo você vai entender o que é o cache, através de sua definição, função e exemplos de atuação. Vem com a gente! Artigo por: João Victor Você provavelmente já viu o termo “cache” enquanto tentava limpar o armazenamento do seu celular para liberar mais memória. Mas, você sabe o que ele significa? Caso tenha respondido não, não se preocupe, hoje você irá saber o que é esse tal de “cache”, como funciona e qual sua função. Sem mais enrolação, vamos começar. Definição Cache, ou memória cache, trata-se de um armazenamento de acesso rápido utilizado por computadores e smartphones para guardar arquivos temporários que são acessados com frequência. Certo, mas por qual motivo precisamos disso? Bem, antes de dar essa resposta, vamos imaginar o seguinte cenário: Você trabalha em uma loja de roupas e está responsável pela tabela de fornecedores; Certo dia, um colega lhe envia um email pedindo o telefone de contato do fornecedor X; Você abre a tabela, e começa a pesquisar manualmente nas várias linhas o fornecedor X; Após um bom tempo procurando, você encontra e envia a informação pedida para seu colega, porém também a anota em um bloco de papel que estava na sua mesa. Nos dias seguintes, a mesma cena se repete, seu colega lhe manda um email pedindo o contato do mesmo fornecedor, mas você responde bem mais rápido do que na primeira vez, pois tinha anotado a informação em um bloco de papel, onde é possível encontrá-la em poucos segundos. A memória cache funciona de maneira semelhante a essa, ela salva informações que são solicitadas com frequência. Na história: ● O colega de trabalho são os usuários de algum app ou site realizando requisições aos servidores; ● Você (“o funcionário das tabelas”) seria o processador, recebendo os pedidos e realizando as buscas dos dados; ● A tabela seria o banco de dados, contendo todas as informações salvas; ● E o bloco de papel a nossa memória cache, responsável por guardar temporariamente os dados frequentemente requisitados. Se não fosse o bloco de papel, ou melhor, a memória cache, teríamos que realizar o esforço de pesquisar na tabela todas as vezes que o pedido fosse feito. Função do cache e exemplos de atuação Com essa analogia, fica mais claro identificar a principal função da memória cache: melhorar a performance, seja de um app, computador ou servidor. Saindo da história e vindo para o uso real, o cache evita que os mesmos dados sejam requisitados novamente. Um exemplo disso é quando acessamos o Instagram durante o dia. O app salva em cache os posts e stories que já foram vistos e dessa forma, quando você entra no app novamente, os mesmos não precisam ser baixados do servidor do Instagram pela segunda vez. Outro bom exemplo são os navegadores de internet. Os sites que acessamos com frequência tem sua estrutura pré-pronta salva no cache, por isso são carregados com mais velocidade. Então posso apagar o cache do meu celular? Sim, pode. Apagar o cache apenas libera seu armazenamento para que novos dados sejam salvos. Além disso, também evita que seu dispositivo fique sobrecarregado e demonstre travamentos e lentidão, pois, mesmo que a função do cache seja aumentar a velocidade, o excesso dele pode realizar a ação contrária. Conclusão Após toda essa explicação, fica claro a importância desse tipo de memória em nossos dispositivos e computadores. Agora, quando você se deparar novamente com esse termo já sabe exatamente do que se trata e para que serve.
O que é cache? content media
0
0
13
dataside
08 de dez. de 2022
In Discussões gerais
Você já ouviu falar sobre os tipos de criptografia? O Dataholic João Victor escreveu esse artigo onde aborda sobre a criptografia simétrica e assimétrica. Boa leitura! O que é criptografia? Desde a antiguidade a criptografia é utilizada para troca de informações sigilosas, onde apenas o remetente e o destinatário são capazes de decifrar a mensagem. Um bom exemplo é a Cifra de César, desenvolvida pelo próprio imperador romano para se comunicar com seus generais em momentos de guerra. Atualmente essa tecnologia de proteção de informações é amplamente utilizada, principalmente na computação. Diferente das criptografias mais antigas (ou criptografias clássicas) os métodos de cifragem modernos são mais complexos e mais seguros, os quais serão o tema deste artigo, mais precisamente a diferença entre criptografia simétrica e criptografia assimétrica. Criptografia simétrica Antes de iniciarmos, é necessário entender o termo “chaves criptográficas” ou “chaves de criptografia”. Essas chaves são conjuntos de bits baseados em algum algoritmo capaz de decodificar uma informação. De forma simples, a(s) chave(s) que determinam como nosso texto legível será “bagunçado” e vice-versa. Na criptografia de chaves simétricas utiliza-se uma única chave para cifrar e decifrar uma mensagem. Apesar de, geralmente, ser executada mais rapidamente do que o método assimétrico, essa forma de criptografia apresenta uma desvantagem, que é a troca de chaves. Em casos de envios de mensagens em um sistema aberto, é necessário que a chave seja enviada ao destinatário, correndo o risco de ser interceptada por um terceiro. Por esse motivo, fez-se necessário a criação da criptografia com chaves assimétricas. Criptografia assimétrica Nesse método de cifragem é utilizado um par de chaves assimétricas, ou seja, diferentes, porém matematicamente vinculadas através dos números aleatórios e cálculos para a geração das mesmas. O par é composto por uma chave pública (que pode ser divulgada) e uma chave privada (que deve ser mantida em segredo). Dessa forma, uma mensagem criptografada com a chave pública só poderá ser decifrada com a chave privada e vice-versa. Obs: Não é possível descobrir uma chave privada a partir de sua chave pública (ou vice-versa) ou a partir da mensagem cifrada. Cifrando com a chave privada (autenticação) A figura abaixo exemplifica o processo de criptografia com chave privada: O seguinte cenário é apresentado na imagem: João deseja enviar um documento assinado ao seu amigo Pedro e para isso utiliza sua chave privada (que somente ele tem acesso). Ao receber o documento assinado, Pedro precisa confirmar a autenticidade, ou seja, se foi realmente João que assinou. Para isso ele utiliza a chave pública de João para decifrar o documento. Com a decifragem bem sucedida é confirmada a autenticidade do documento. Cifrando com a chave pública (confidencialidade) A figura abaixo exemplifica o processo de criptografia com chave pública: O seguinte cenário é apresentado na imagem: Pedro deseja enviar uma mensagem para João, agradecendo pelo documento. Para garantir que apenas João leia sua mensagem, ele utiliza a chave pública de João para criptografar a mensagem. Ao receber a mensagem João utiliza sua chave privada (que apenas ele tem acesso) para decifrar a mensagem. Com a decifragem bem sucedida apenas João consegue ler a mensagem de Pedro, garantido a confidencialidade da conversa entre os dois. Concluímos, portanto, que a criptografia não é uma escolha, e sim um recurso essencial para garantir a segurança das informações. Agora que você entende melhor sobre criptografia, é hora de escolher uma linguagem de programação e tentar criar seu próprio sistema de criptografia.
Criptografia: Simétrica x Assimétrica content media
0
0
8
dataside
08 de dez. de 2022
In Linguagem de programação
Os aplicativos chegaram para facilitar as atividades cotidianas, trouxeram praticidade e otimizam nosso tempo. Atualmente, os apps são fundamentais em nossas vidas. Abra seu smartphone e observe quantos aplicativos você instalou e não consegue nem se imaginar sem eles. Dentro desse atual cenário, empresas inteligentes, que buscam crescer, estão investindo cada vez mais em aplicativos para oferecer as melhores experiências aos clientes. Com isso, o volume de linhas de código-fonte só aumenta a cada dia que passa. Softwares Open-source O conceito de open-source foi criado por Eric Raymond em parceria com outros fundadores da OSI - Open Source Initiative com o entendimento de que é possível adaptar de formar variadas essas linhas de código-fonte criadas para um software. O principal benefício do desenvolvimento de software open-source para as empresas é a redução de custo. Existe uma rede colaborativa de desenvolvedores que compartilham as ferramentas de forma gratuita e sem restrições, pois não é preciso pagar por uma licença dentro desse contexto open-source. Com isso, as empresas podem usar esse investimento para outros fins. De maneira breve, softwares open-sources são projetos cujo código-fonte está disponível publicamente, qualquer pessoa tem acesso para ler e sugerir melhorias, alterações, correções de erros, etc. São exemplos de software open-source: GIMP (Editor de imagem) VLC Media Player (Player de áudio e vídeo) Brave Browser (Navegador) Notepad++ (Editor de texto e código) PostgreSQL (Banco de dados) DuckDuckGo (Mecanismo de busca online) LibreOffice (Pacote de aplicativos para escritório - Alternativa para o Microsoft Office) Linux (Sistema Operacional - não poderíamos deixar de colocar o SO queridinho dos desenvolvedores 💚) Existem plataformas em que os códigos-fontes são hospedados, a mais conhecida delas atualmente é o Github.
O que é desenvolvimento open-source? content media
0
0
13
dataside
08 de dez. de 2022
In Linguagem de programação
O assunto hoje é sobre profissão. Você está preparado para as mudanças do mercado? Preparamos uma lista de cursos e referências para quem está iniciando na área da programação. Antes dar início aos seus estudos, confira algumas dicas do Desenvolvedor João Victor Silva: ● Não pule etapas. Sabemos que a vontade de criar seus próprios projetos, usar inúmeros frameworks, explorar cada biblioteca é enorme, mas tenha paciência, um degrau por cada vez. ● Não se compare aos outros, cada pessoa tem seu ritmo de aprendizagem. Ao invés de querer "aprender em menos tempo", tenha como meta apenas "aprender". ● Os erros são seus amigos! Comece a ver os erros na sua tela como mais oportunidades de aprender e melhorar como dev. ● Pratique muito e ajude outras pessoas. Essas são as principais atitudes que te farão evoluir rapidamente, tanto na vida profissional como na pessoal A partir daqui, você embarca na jornada do conhecimento com Michel John Oliveira, Analista Desenvolvedor Frontend: Novas tecnologias surgem todos os dias, não é de hoje que sabemos disso, por esse motivo é difícil traçar um plano que seja considerado correto para tornar-se um bom programador. No momento em que esse artigo é escrito, até sua postagem, muita coisa pode ter sido mudada, novas tecnologias podem ter sido lançadas. Porém, existem alguns passos que considero imprescindíveis para aprender qualquer coisa, e esses passos são geralmente negligenciados quando estamos começando algo novo, seja com frontend ou backend, as bases, os fundamentos. Certamente você se sentirá tentado a ir direto para um framework, a estudar a tecnologia do momento, você vai quer pegar um atalho. Mas isso é um erro, não faça isso, foque em entender os conceitos e fundamentos das tecnologias que você escolher começar a estudar, e esses conceitos vão servir para outras tecnologias, e os frameworks, quando você for estudá-los será muito mais fácil, você precisará aprender basicamente só a sintaxe porque você já tem a base. Isso vai te poupar muito tempo lá na frente. Quando novas tecnologias surgirem você vai estar preparado para elas. Vou listar o que considero a base para tornar-se um excelente desenvolvedor frontend e backend Frontend Internet ● Entender como ela funciona. ● O que é HTTP. ● Como os browsers trabalham. ● O que são DNS e como trabalham. ● O que são Hosting HTML ● Aprenda o básico de HTML. ● Semântica em HTML. ● Formulários e validação. ● Convenções e melhores práticas. CSS ● Aprenda o básico de CSS. ● Criação de layouts. ● Responsividade. ● Flex Box e CSS Grid JavaScript ● Sintaxe. ● Manipulação da DOM. ● Fetch API. ● ES6+ ● Entenda os conceitos de Hosting, Escopo, Prototype, Shadow DOM. Backend Internet ● Entender como ela funciona. ● O que é HTTP. ● Como os browsers trabalham. ● O que são DNS e como trabalham. ● O que são Hosting ● Nome de domínio Básico de frontend ● HTML. ● CSS. ● JavaScript. Sistemas operacionais e outros ● Uso do terminal. ● Como os sistemas operacionais trabalham. ● Gerenciamento de processos. ● Threads e concorrência. ● Gerenciamento de memória. ● Comunicação entre processos. Escolha uma linguagem de programação ● Rust, Go, Java, PHP, C#, Python, JavaScript, Ruby. Básico de controle de versão ● Git. ● GitHub. Banco de dados relacional e NoSQL ● PostgreSQL, MySQL. ● MongoDB, DynamoDB. Aprenda sobra API ● Autenticação. ● REST. ● JSON APIs. ● SOAP. Note como os conceitos de internet e o básico de frontend (html, css e javascript) se repetem em ambas as listas, daí a necessidade de entender bem esses conceitos básicos, uma base sólida vai te fazer alcançar seus objetivos como programador. Certamente existem muitas outras coisas a serem estudadas, mas com esses passos pode se dizer que você percorreu 60% da jornada. Vou listar alguns cursos que podem te ajudar nessa jornada, pagos e gratuitos. Cursos gratuitos frontend FreeCodeCamp Trata-se de uma plataforma web de aprendizagem interativa, com fórum on-line, salas de chat, publicações de artigos e organizações locais. O Curso JavaScript da FreeCodeCamp contempla tutoriais de HTML, CSS e JavaScript, indo do básico ao Node.JS. https://www.freecodecamp.org/ CFBCursos Este é um canal no YouTube de cursos/aulas de informática que disponibiliza conteúdo de qualidade e gratuito de segunda a sexta, utiliza de uma linguagem simples e direta para que os “webalunos” possam absorver o conteúdo de forma mais rápida e objetiva. Conta com uma quantidade grande de aulas já postadas e estão sempre produzindo novidades. https://www.youtube.com/c/cfbcursos/featured HTML e CSS Pro Também no Youtube esse canal tem umas playlists muito boas, do básico ao avançado, com mais de 100 vídeos de qualidade. https://www.youtube.com/c/HTMLeCSSPro/playlists Cursos pagos frontend Curso Web Moderno Completo com JavaScript 2021 + Projetos Esse curso da Cod3r é bem completo, tem uma didática excelente passa por todos os fundamentos das tecnologias até a parte mais avançada. O curso está na Udemy com um preço bem acessível. https://www.udemy.com/course/curso-web/ Alura A Alura nasceu da Caelum, uma das mais respeitadas escolas de tecnologia e inovação do Brasil. Como se isso não fosse o suficiente para você estudar com eles, a plataforma conta ainda com uma imensa gama de outros cursos de programação, marketing e outras áreas. Até o momento são mais de 1.000 cursos e novos lançamentos toda semana, é conteúdo que não acaba mais! https://www.alura.com.br/ RocketSeat A RocketSeat é uma plataforma bem completa e que faz um trabalho incrível na comunidade. Os cursos dele são divididos em três categorias: Discover Onde você cria uma base sólida na programação para decolar rumo a desafios maiores. São mais de 500 aulas gratuitas para você aprender programação do zero, com foco em desenvolvimento web. Você vai encontrar aulas para dominar HTML, CSS, JavaScript, HTTP, Forms, Ferramentas, DOM e muito mais. Ignite Aqui você avança na carreira aprendendo uma tecnologia específica. O Ignite é um programa de aceleração profissional com treinamentos certificados e reconhecidos pelo mercado. Domine Elixir, Flutter, Node.js, React ou React Native e prepare-se para as melhores oportunidades. Experts club Uma forma de acompanhar a tecnologia evoluindo com ela. O Experts Club é um clube de aprendizado contínuo com aulas práticas e específicas em que você vai aprender através das experiências acumuladas no mercado por grandes devs. Reunimos no clube as mais diversas tecnologias. https://rocketseat.com.br/ Cursos gratuitos backend CFBCursos O já citado acima CFBCursos, tem muito conteúdo de Java, Python. Com uma qualidade incrível. https://www.youtube.com/c/cfbcursos/playlists Bóson Treinamentos Um canal no YouTube com curso que vão desde o básico ao avançado das tecnologias, passando por Java, Python, banco de dados, sistemas operacionais e muito mais. Tudo isso de forma gratuita. https://www.youtube.com/c/bosontreinamentos/featured Canal Celke A Celke é uma empresa que visa oferecer os melhores curso, utilizando tecnologia de ponta. Oferecendo Cursos Preparatórios para Concursos Públicos, Cursos Profissionalizantes, Cursinho Preparatório para Vestibular e planos Corporativos. Conta com cursos de JavaScript, NodeJs, PHP, Banco de dados e muito mais. https://www.youtube.com/channel/UC5ClMRHFl8o_MAaO4w7ZYug Cursos pagos backend Tecnólogo em dev back-end O Dev Back-End é um Tecnólogo com duração de 2 anos, oferecido na modalidade EAD 100%online. Assim, o diploma de nível superior é obtido em um período mais curto, permitindo o rápido ingresso no mercado de trabalho após 4 semestres. Aliás, é possível que o profissional já tenha as primeiras oportunidades antes mesmo de completar o biênio, especialmente com os estágios. Na parte de tecnologia, o graduado encerra o curso com um amplo domínio das linguagens de programação (Java, Phyton, PHP e C++), além de conhecimentos sobre sistemas, servidores, hardware, software, bancos de dados e mobile. https://www.unopar.com.br/curso/desenvolvimento-back-end-tecnologo/ PROFESSOR NELIO ALVES O curso Java COMPLETO 2020 Programação Orientada a Objetos +Projetos do Professor Nélio Alves também é um dos mais bem avaliados na plataforma da Udemy. O curso é destinado para estudantes da área de computação e interessados em aprender Java e Programação Orientada a Objetos de forma completa e para fins profissionais. Devmedia A DEVMEDIA reconhecida pela comunidade de desenvolvedores como uma plataforma confiável e de bastante conteúdo relevante. É perceptível o cuidado e a atenção que o pessoal teve na construção de um guia específico de carreira em Java para iniciantes. Com cursos dedicados sobre as ferramentas e frameworks da linguagem, você vai poder aprender a desenvolver as mais variadas aplicações utilizando Java. A quantidade de cursos de Java disponíveis na plataforma é impressionante. Para complementar sua trilha do conhecimento, Felipe Borges, Desenvolvedor Full Stack, indica um curso da Harvard, com conteúdo disponível de forma gratuita: CS50 - Curso de Introdução à Ciência da Computação de Harvard. 100% online e gratuito. ● Material de qualidade excepcional (Harvard não é famosa atoa, né?!) ● Noções de algoritmos, estrutura de dados, gerenciamento de memória, etc. para entender melhor como as coisas funcionam debaixo dos panos. Isso facilita demais o aprendizado de linguagens de alto nível. ● Desafios muito bem feitos que estimulam o raciocínio, a resolução de problemas e o desenvolvimento do brio. Você tem brio? ● O certificado é pago, mas todo o material do curso é gratuito. Pode ter certeza que ter os exercícios resolvidos no seu GitHub valem muito mais que um PDF, mesmo que tenha o Emblema de Harvard (haha). Esperamos que esse conteúdo tenha te ajudado e inspirado a seguir o caminho dos estudos para ser um profissional sempre a frente e que você se desenvolva cada vez mais.
Os melhores cursos para quem está começando a programar content media
0
0
275

dataside

Administrador
Mais ações
bottom of page