Regressão linear usando Shell Bash + AWK

Ouvi falar do AWK enquanto estudava Programação Shell Linux, Júlio César; e de maneira bem cômica, ele explica um pouco dessa "Linguagem/Ferramenta/Tudo de bom". kkk Então vi grande potencial para resolver alguns problemas que gastaria muito tempo, as vezes. Bem, para quem faz alguma Análise de Dados, e desses dados necessite fazer regressão linear com cálculo das incertezas, vi que o AWK é excelente para fazer tal coisa. E resolvi compartilhar com a comunidade esse pequeno trabalho, fiquem a vontade para compartilhar, melhorar e contribuir para o maior uso dessa fantástica ferramenta. Então, basta fazer: ./linear_simples.sh "dados.dat" por exemplo, e pronto, um arquivo com tudo. Ou quase tudo. ;)

Por: Perfil removido


Telegram Installer

Você conhece o Telegram né? Este script é minha primeira contribuição ao site. Ele basicamente baixa a última versão do Telegram (e do Telegram Updater) para o seu PC e instala ele para você. O script foi testado no Debian Jessie e Ubuntu, mas deve funcionar em todas as distribuições já que não é amarrado a um formato de pacote (deb, rpm etc) nem faz uso de nenhum installer como APT ou YUM. Após a instalação, o telegram vai estar disponível apenas digitando telegram no terminal. Para atualizar a versão, você pode simplesmente usar o sudo ou entrar como root para o comando telegram-updater P.S.: caso você não possua, é necessário que você tenha o sudo instalado e habilitado para o usuário que você está utilizando. Agradeço qualquer ajuda ou atualização, o script está disponível no github em: https://github.com/gustavohmsilva/telegram_installer

Por: Perfil removido


Crivo de Eratóstenes Simples em Ada 95

A linguagem de programação Ada foi assim denominada em homenagem à Condessa Ada Lovelace (1815 — 1852), filha do poeta, maconheiro e revolucionário inglês Lord Byron (1788 — 1824). Ada Lovelace foi a primeira programadora da história, colaborando com os cálculos da máquina analítica de Charles Babbage. A máquina analítica é uma espécie de computador mecânico. Também chamada de máquina das diferenças, pois calculava diferenças de polinômios programados. Como disse em outra oportunidade, Ada possui semelhanças com Pascal. Na verdade foi implementada com base em Pascal e algumas outras linguagens como Simula, COBOL e BASIC. Mais tarde adquiriu elementos de C++ e Java. É um sonho de padronização de uma linguagem universal. Ada é uma linguagem de programação estruturada, com tipagem estática, imperativa, orientada a objetos, de alto nível, orientada à escalonamento de sistemas de tempo real e com suporte à programação de threads (programação paralela). Foi criada pelo Departamento de Defesa dos EUA (DoD) para substituir outras centenas de linguagens usadas por lá. Existe até uma implementação chamada de A# (A Sharp) para a plataforma .Net. Exemplos de quem usa ou usou Ada: sistema de bordo de aviões a Boeing e da Embraer, transporte metroferroviário de algumas capitais europeias, alguns projetos científicos da NASA. A maior parte das afirmações está esparsa pela internet. Há muito ainda para se dizer. Voltando ao programa, algumas semelhanças com Pascal: * Operador de atribuição := * Operador de igualdade lógica = * Operadores Lógicos, exceto o de diferente * Cálculo de resto de divisão * Conectores lógicos Comentários no programa começam por um duplo hífen no começo da linha. Após isto, o programa começa com uma invocação de módulos (melhor chamados de packages) nas cláusulas With e Use. Como são usadas expressões com tipo de dados inteiro e ponto flutuante, com funções do sistema, são chamados os módulos para os mesmos. A declaração de variáveis e arrays devem ser feitas antes do Begin da procedure principal do programa. O operador de diferente é expresso de uma forma curiosa. Ao invés de != (como em C) ou <> (como em Pascal) é expresso por /= que em C teria um significado bem diverso do apresentado. É possível converter tipos de dados como entre Integer e Float, de modo semelhante ao type casting de C++. Sendo Integer(X) e Float(Y) respectivamente uma conversão para tipos Integer e Float. Aparentemente não existem funções de incremento e decremento de valores numéricos. Posições de arrays são marcadas entre parêntesis. Podem existir arrays multidimensionais separando os índices por vírgulas, dentro do mesmo par de parêntesis. Existem três tipos de laços (loops) neste programa com as seguintes estruturas: While (...) Loop Exit When (...) End Loop; For (...) in <reverse> (...) Loop Exit When (...) End Loop; Loop Exit When (...) End Loop; O primeiro laço é condicional, um while simples, como aparece na maioria das linguagens. A diferença é a cláusula Exit When. O segundo é um for que percorre um conjunto, que pode ser um vetor ou uma sequência de números demarcados por pontos, como por exemplo 1..10, que vai de 1 a 10. Pode ainda ter em opcional a cláusula Reverse, que faz os itens do conjunto serem percorridos do fim para o começo. Novamente aparece a cláusula Exit When. O terceiro comeca apenas com a palavra Loop e encerra com a expressão End Loop. Seria apenas um laço perpétuo se não estivessem com a cláusula Exit When entre eles. A cláusula Exit When (...) serve para sair do laço caso a expressão lógica que vem após When seja verdadeira. A estrutura condicional If assemelha-se à do Pascal, com uma leve diferença no fechamento do bloco. Segue If ... Then ... <Elsif> ... <Else> End If. Com Elsif e Else sendo opcionais caso a lógica do programa necessite. A função Put() serve para a escrita de dados como a função Write do Pascal. E a mudança de linha se dá com a função New_Line. As duas combinadas tem o mesmo efeito da função WriteLn do Pascal.

Por: Perfil removido


Crivo de Eratóstenes Simples em XBase (Clipper)

Atenção: código Clipper em Caixa Alta é Nostálgico! Esta é uma homenagem a uma linguagem que foi extremamente popular no Brasil durante a segunda metade dos anos 80 e a primeira metade dos anos 90. Alguns chamam-na de Clipper. Outros de XBase. Tudo começou com um sistema de banco de dados chamado dBase. Ele possuía uma sintaxe de operações mais simples que SQL. Vinha também com uma linguagem de programação embutida, que permitia criar interfaces modo texto de uma forma absurdamente simples e era extremamente satisfatório para as atividades em MS-DOS. A coisa toda era feita geralmente com um programa multiuso chamado Sidekick. Ele vinha com editor de texto, tabela ASCII, calculadora e outras firulas. Ele tinha uma característica peculiar, chamada de programa que termina e fica na memória. Através das teclas <Ctrl>+<Alt> ,o programa era chamado e utilizado seu editor. Com outro uso das teclas, ele voltava para a memória. Com isto não era necessário usar Wordstar. Vale lembrar que esse programa usava um truque divulgado por uns livros na época. Na era da multitarefa isto é dispensável. Ou mesmo no Unix, com seus comandos bg e fg. É por isto que me espanto em comparar MS-DOS dos anos 80/90 com o que Unix fornece. Para melhorar a performance dos programas feitos para dBase, dois amigos tiveram a ideia de escrever um compilador usando programação em C e Assembly. Resolveram chamar-lhe de Clipper. Uma coisa que chamou a atenção é que cada versão lançada vinha com o nome da estação do ano da época. Logo chamaram-nas de Clipper Winter '85, Clipper Autumn '86 e a popular Clipper Summer '87. Tenho até hoje um livro comprado à época, detalhando esta versão. Quem se lembra do Antonio Vidal? Continuando, após a versão de 1987, Clipper deu uma salto para ser independente da plataforma dBase, que se não me engano teve as versões 1, 2, 3 (a mais popular tida por muitos como a melhor, chamada dBase III Plus) e a 4. Clipper deslanchou com versões 5.0, 5.0.X, 5.1, 5.2, 5.3 ... Clipper funcionava, por exemplo, em um disquete onde vinha o próprio compilador, um linkeditor (que podia ser o Plink, o Tlink ou o Rtlink) e livrarias de código nomeadas como CLIPPER.LIB e EXTEND.LIB. Ainda havia uma coisa chamada overlay que era uma quebra de partes do programa compilado por causa da memória da máquina ser muito pequena. Overlays eram lidas de cada vez para não comprometer a memória. Falamos de algo da época dos 386 e 486. Pentium? Ainda não... Uma coisa cultural da época eram os sistemas de fluxo de caixa feitos em Clipper. O lugar mais icônico de sistemas Clipper eram as videolocadoras. E lugares bons de se encontrar sisteminhas Clipper à venda prontos eram em bancas de jornal. Houve algumas empresas negociando a marca Clipper na jogada, com interesses comerciais diversos, como a Oracle, por exemplo, de olho em migrar as bases de dados para seu carro-chefe. Clipper foi passado de mão em mão até seus compiladores perderem poder comercial. Nantucket, Borland, Computer Associates etc. Por volta de 1998, 1999 (?) houve um programador da Usenet que teve a ideia de criar um compilador do tipo do Clipper só que no modelo Open Source (quem conhece uma historinha parecida? Usenet... compartilhar códigos... etc.) e o projeto foi para frente. Chama-se Harbour. Harbour é um jogo de palavras com Clipper. Clipper é um veleiro rápido e Harbour é porto. Ainda surgiram alguns projetos, como o xHarbour, que me pareceu extremamente ambicioso e que tentou ser um fork do Harbour só que bem mais comercial. Da última vez que li algo, parece que tiveram muitos problemas entre eles. E o Harbour continuou firme e forte sem puxão de tapete. Também teve o Clip, projeto russo. Abandonado. O código aqui exposto mostra os rudimentos básicos da linguagem (como todo código de crivo bem o faz). Ainda existem funções e procedimentos inimaginados como @ ...TO ... e @ ... BOX ... que dadas as coordenadas, desenham molduras na tela. @ ... SAY e @ ... GET ... PICTURE ... que também com coordenadas, exibem texto e recebem dados em formato de formulário, navegando pela tela com as setas. As funções SAVESCREEN() e RESTSCREEN() ,que salvavam e restauravam respectivamente em/de variáveis partes da tela e que através de manipulação de dados das cores da tela nas variáveis faziam efeitos de sombra na tela, como o Dialog o faz. E funções incríveis como a DBEDIT() que permitia navegação completa pela base de dados. Links: - O básico * https://pt.wikipedia.org/wiki/Clipper_(linguagem_de_programa%C3%A7%C3%A3o) * https://en.wikipedia.org/wiki/Clipper_(programming_language) * https://es.wikipedia.org/wiki/Clipper_(lenguaje_de_programaci%C3%B3n) - Abandonwares * http://vetusware.com/download/dBASE%20III%20PLUS%203/?id=4877 * http://vetusware.com/download/Clipper%20Autumn%2086%20Autumn%2086/?id=7260 * http://vetusware.com/download/Clipper%20Summer87/?id=8144 * http://vetusware.com/download/CA-Clipper%205.3b%20Intl/?id=8460 Essas acima são boas para se testar no DOSBOX, DOSEMU ou no WINE como comando de DOS - Artigos do VOL * https://www.vivaolinux.com.br/artigo/Clip-no-Slackware-(compilador-Clipper) * https://www.vivaolinux.com.br/artigo/Compilador-Clipper-opensource-compile-sem-problemas-os-sistemas-.PRG-no-Linux/ - Site do Harbour * https://harbour.github.io/index.html - Site do xHarbour * http://www.xharbour.org/ - Páginas brasileiras * http://www.vagucs.com.br/ * http://www.pctoledo.com.br/ Agora quanto ao programa: A partir da versão 5.0 veio uma enxurrada de comandos e operadores que deixou o Clipper/XBase mais parecido com C. O sinal de igual simples nativo em Summer '87 ganhou os dois pontos, ficando semelhante à atribuição em Pascal. E o sinal de diferente é <>. Comentários podem ser feitos como em C, com duas barras // ou barra e asterisco abre e fecha /* ... */ Para declarar uma matriz (array) com alocação dinâmica usa-se a sintaxe PRIMES := {} de modo simples. O comando AADD(VAR,VALOR) cria uma nova posição ao final do array VAR e coloca VALOR como conteúdo desta posição. Laços while são escritos como DO WHILE e encerrados com ENDDO, tudo junto. A estrutura IF segue um modelo semelhante: IF ... ELSEIF ... ELSE ... ENDIF. No código ELSEIF não aparece. O comando SQRT() calcula a raiz quadrada de um dado número. O comando INT() trunca as casas decimais de um número não-inteiro e assim retorna um inteiro. Índices de matrizes usam colchetes. Há operador de incremento como em C, como por exemplo VAR++ ou VAR+=3. Os valores e operadores lógicos aparentemente vieram do Fortran. Para verdadeiro e falso usa-se .T. e .F., para negação, e e ou usa-se .NOT, .AND. e .OR., respectivamente. A operação de módulo, ou resto de divisão, é feita com a função MOD(A,B), onde A é o dividendo e B é o divisor, retornando o resto da divisão. Laço FOR é feito com uma contagem em uma variável e ao final do laço é escrito NEXT junto com o nome da variável. O comando ? imprime uma mensagem na tela com quebra de linha. É semelhante a um comando chamado PRINT, mas usa-se ? para abreviação. O comando ?? faz o mesmo sem quebra de linha. Uma sequência de ?? imprimirá mensagens na mesma linha. A função STR() converte um número em string alfanumérica. Isto é feito para se concatenar com aquele espaço em branco entre aspas que aparece no código. A função TRIM() serve para remover espaços em branco do lado esquerdo e direito de uma string. Por algum motivo não funciona neste exemplo. O operador + presente ao final do código serve como concatenador de strings.

Por: Perfil removido


Função Fatorial Recursiva em Ada 95

Este é um exemplo simples de uma função fatorial recursiva em Ada 95. Cheguei a ler um texto onde era citado que Ada é uma linguagem da família Pascal. Até parecem um pouco. Para a compilação pode ser usado o gnatmake. Ele vem junto com o pacote GNAT nas principais distribuições Linux. Uso: $ gnatmake fatorial-0001.adb Caso seja feita uma tentativa de compilação com o gnat, resultará no seguinte, conforme abaixo: $ gnat fatorial-0001.adb gcc-4.9 -c fatorial-0001.adb fatorial-0001.adb:4:11: warning: file name does not match unit name, should be "mostra.adb" Esta crítica sugere que o nome do arquivo deve ter o mesmo nome do programa declarado na primeira declaração Procedure. Mesmo sem fazer isto, tudo parece funcionar normalmente. Continuando: Este é um exemplo simples, sem aprofundamento. O objetivo é ilustrar uma pequena parte da sintaxe de um programa em ADA. No caso um programa com função recursiva. Posso dizer que até onde vi, Ada parece uma espécie de mistura de Pascal com Java. Coisas como System.out.println() são semelhantes a Ada.Text_IO.Get() ou Ada.Text_IO.Put(). As semelhanças com Pascal são maiores e aparecem mais em outras instruções de declaração de tipos e registros, que não constam no exemplo. Uma semelhança relevante é que não é case sensitive. A diferença é que colocando as bibliotecas com With e Use na primeira linha estes comandos podem ser abreviados para Get() e Put(). Get não foi usado nesta oportunidade. Uma coisa que chama a atenção é o fato de que todo programa deve estar declarado como "Procedure Nome_do_Programa" (semelhante ao "Program Nome_do_Programa" do Pascal) e ainda deve ser seguido da partícula is. Os comandos do programa são implementados entre um Begin e um End. Este último End do programa não termina com o ponto final igual ao Pascal, mas sim com "End Nome_do_Programa", seguido de um ponto-e-vírgula. A implementação da função Fatorial se dá antes do Begin de início do código. Ao invés de se igualar o retorno da função ao nome da mesma, retorna-se o resultado com o comando Return (semelhante ao C). A estrutura de decisão IF é semelhante ao Pascal, com IF, THEN, ELSE, mas neste caso completa-se com END IF. Neste exemplo não aparece o que seria semelhante à estrutura CASE, ficando para uma próxima. Ao invés de se usar um WriteLn para a mudança de linha, usa-se simplesmente o comando New_Line. O comando Put é usado semelhante ao comando Write, sem mudança de linha. A linguagem Ada é poderosa, tendo inúmeros usos estratégicos na indústria, como programação concorrente e orientada a objetos. Não é o objetivo de abordá-los neste micro-artigo.

Por: Perfil removido






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts