sábado, 8 de maio de 2021

O Mínimo de VI

 Sendo o Vi o editor padrão do LINUX, não tem como o mesmo. Sendo assim, a proposta deste Post é expor o básico em relação ao assunto.

Geralmente, o que fazemos em um editor de textos? Abrimos um arquivo para edição, inserimos texto, substituímos, recortamos e colamos texto, salvamos arquivos.

É importante entender que o VI trabalha com dois modos de execução: o modo COMMAND e o modo INSERT. O Insert é utilizado para editar o arquivo e o modo Command é usado para os executar os demais comandos do VI.  Para alternar entre os modos, clicar na tecla ESC

Abrir o editor de texto: VI

Abrir arquivo com o editor vi NOME_ARQUIVO.txt

Comandos básicos:

:wq - Salva o arquivo e sai do editor

:w nome_do_arquivo - Salva o arquivo corrente com o nome especificado

:w! nome_do_arquivo - Salva o arquivo corrente no arquivo especificado

:q - Sai do editor

:q! - Sai do editor sem salvar as alterações realizadas

Comandos de inserção:

i - Insere texto antes do cursor

a - Insere texto depois do cursor

r - Insere texto no início da linha onde se encontra o cursor

A - Insere texto no final da linha onde se encontra o cursor

o - Adiciona linha abaixo da linha atual

O - Adiciona linha acima da linha atual


Comandos de movimentação:

Ctrl+f - Move o cursor para a próxima tela

Ctrl+b - Move o cursor para a tela anterior

H - Move o cursor para a primeira linha da tela

M - Move o cursor para o meio da tela

L - Move o cursor para a última linha da tela

h - Move o cursor um caractere a esquerda

j - Move o cursor para a próxima linha

k - Move o cursor para linha anterior

l - Move o cursor um caractere a direita

w - Move o cursor para o início da próxima palavra (Ignora a pontuação)

W - Move o cursor para o início da próxima palavra (Não ignora a pontuação)

b - Move o cursor para o início da palavra anterior (Ignora a pontuação)

B - Move o cursor para o início da palavra anterior (Não ignora a pontuação)

0 - Move o cursor para o início da linha atual

^ - Move o cursor para o primeiro caractere não branco da linha atual

$ - Move o cursor para o final da linha atual

nG - Move o cursor para a linha n

G - Move o cursor para a última linha do arquivo


Comandos de busca:

/palavra - Busca pela palavra ou caractere em todo o texto

?palavra - Move o cursor para a ocorrência anterior da palavra

n - Repete o último comando / ou ?

N - Repete o último comando / ou ? , na direção reversa

Ctrl+g - Mostra o nome do arquivo, o número da linha corrente e o total de linhas


Comandos de substituição e deleção:

x - Deleta o caractere que esta sob o cursor

dw - Deleta a palavra, da posição atual do cursor ate o final

dd - Deleta a linha atual

D - Deleta a linha a partir da posição atual do cursor ate o final

rx - Substitui o caractere sob o cursor pelo especificado em x(é opcional indicar o caractere)

Rx - Substitui a palavra sob o cursor pela palavra indicada em x

u - Desfaz a última modificação

U - Desfaz todas as modificações feitas na linha atual

J - Une a linha corrente a próxima

s:/Linux/Unix - Substitui a primeira ocorrência de "Linux" por "Unix"

s:/Linux/Unix/g - Substitui a ocorrência de "Linux" por "Unix" em todo arquivo

Selecionar, copiar, recortar, colar

1.Posicione o cursor no início do texto que você quer copiar ou recortar, para isso pode usar as teclas direcionais ou as tradicionais "h", "j", "k" e "l".

2. Digite "v" minúsculo.

3. Novamente usando as teclas de direcionais ou as tradicionais "h", "j", "k" e "l", marque o texto a ser copiado ou recortado.

4. Neste passo é que vem a diferença entre copiar e recortar.

a. Caso deseje copiar, digite "y" minúsculo.

b. Mas se seu desejo é de recortar, digite "d" minúsculo.

6. Posicione o cursor no ponto onde deseja colar o texto usando as teclas de direcionais ou as tradicionais "h", "j", "k" e "l".

7. Para colar digite "p" minúsculo.

Com isso, já dá para se virar com o editor.

Valeu!!!


sexta-feira, 7 de maio de 2021

Automatizando tarefas com Shell Script

Shell script é o nome dado a um arquivo que será interpretado por algum programa tipo Shell. Atualmente existem vários programas tipo Shell. Além dos principais - sh e bash -, existem também, ksh, zsh, csh e tcsh. Um Shell script (ou script em Shell) necessita basicamente do interpretador Shell.

Algumas operações típicas executadas por linguagens de script em Shell incluem; manipulação de arquivos, execução de programas e impressão de texto. Sendo assim é muito comum que scripts sejam utilizados para automatização de tarefas - como configurar o ambiente, executar um programa e fazer qualquer limpeza, registro, etc. 


A ideia deste post é fazer um apanhado geral para criação de scripts.


Nome dos arquivos

Apesar do Linux não exigir que você coloque extensão nos arquivos, é comum utilizar a extensão .sh o que visualmente facilita o reconhecimento de um script. Exemplo: script_x.sh


Estrutura de um script

#!/bin/bash 

# ou #!/bin/sh (dependendo do shell que você estiver utilizando). 

# Todo script deve começar com a linha acima (# é usada para definir comentários)

cd /

ls -l

#Para definir uma variável, basta usar o sinal de igual "=" e

#para ver seu valor, usa-se o "echo":

#Não podem haver espaços ao redor do igual "=" no valores das variáveis

NOME_VARIAVEL=Hugo

echo $NOME_VARIAVEL

#Repare que para exibir o conteúdo da variável foi utilizado o caractere $

#Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao invés #de aspas, o comando deve ser colocado com o caractere "$()", vejam:

HOJE=$(date)

echo $HOJE

#O comando read é para ler informações digitadas pelo usuário e criar variáveis

#O parâmetro –n é apenas para ficar na mesma linha

echo -n "Digite um número:"

read NUMERO1

echo -n "Digite outro número:"

read NUMERO2

# A construção usada para indicar uma expressão aritmética é

# "$((...))", com dois parênteses.

echo "A soma entre os dois número é" $((NUMERO1 + NUMERO2))

#Os scripts que usam estruturas condicionais possibilitam criar duas ou mais #respostas para a condição exposta. Assim como qualquer outra linguagem de #programação, o shell também tem estruturas de condição e repetição. As mais usadas #são if, for e while.

#estruturas de condição

IDADE=18

if [ IDADE -eq 18 ] then

    echo "É maior de idade"

else

    echo "É menor de idade"

fi


#Operadores aritméticos + - * / % **

#Operadores relacionais -eq(igual) -ne(diferente) -lt(menor) -le(menor ou igual) 

# -gt(maior) -ge(maior ou igual)

#Operadores lógicos || &&

#teste em arquivos


if [ -f /tmp/teste.txt ] then

    echo "arquivo existe"

else

   echo  "arquivo inexistente"

fi

#CASE

echo "Digite 1 ou 2"

read opcao

case $opcao in

"1") echo "você digitou 1";;

"2") echo "você digitou 2;;

  *) echo "opção inválida";;

esac

exit

#estrutura de repetição

#while

i=1

while [$i -le 100]

do

 echo $i

i=$(($i+1))

done


#for

for passo in $(seq 10)

do

  echo passo

done


#FUNÇÕES

IDADE=18

CALCULARIDADE()

{

  if [ $IDADE -eq 18 ] then

        echo "Maior de 18"

}

CALCULARIDADE


#funcoes podem receber parâmetros

echo "Nome do script: $0"

echo "Número total de parâmetros: $#"

echo "Primeiro parâmetro: $1"

echo "Segundo parâmetro: $2"

echo "Décimo quinto parâmetro: ${15}"

echo "Todos os parâmetros: $*”



Passos a serem realizados para execução de um script

  1. Criar um arquivo com a extensão .sh
  2. Iniciar com a tag e o Shell a ser utilizado.
  3. Digitar os comandos do script e salvar o arquivo
  4. Dar permissão de execução para o script
  5. executar o script com "./"

Bom é isso aí! Até a próxima.

domingo, 28 de março de 2021

Desmistificando a BIG DATA

Quando iniciei na faculdade, nos final dos anos 90, os mais abastados tinham um computador pessoal em casa, acesso discado a internet e um "tijolão" pendurado na cintura.

Naquela altura, o DOS estava dando lugar ao Windows, os arquivos textos que registravam as informações geradas pelos sistemas de informação, já haviam sido substituídos por banco de dados relacionais. Ao invés de ler ou escrever diretamente em arquivos texto, os sistemas de informação passaram essa responsabilidade para os SGBD's e o acesso aos dados passou a ser feito através de SQL.

Os sistemas de informação já possuíam uma arquitetura cliente servidor (sistema instalado na máquina do usuário e banco de dados instalado em um servidor de banco de dados).

Nessa época, um banco de dados com cinco, dez, cinquenta tabelas, atendiam bem as demandas.
 
O volume de informações crescia exponencialmente. Logo verificou-se que o modelo relacional não servia para um volume grande de informações. As consultas já estavam comprometendo o desempenho dos bancos. Como solução, surgiu a modelagem dimensional e com ela, os conceitos de BI, DATA WAREHOUSE, bases OLAP.

Com a popularização da Internet, os navegadores Web se tornaram os aplicativos mais usados nos computares pessoais. Logo este tipo de aplicação se tornou uma plataforma para o uso dos sistemas de informação.

Os tijolões deram lugar a celulares menores e logo em seguida, aos smartphones. Surgem os aplicativos mobile. 

Lembro de um professor de JAVA entusiasta que falava que nossos eletrodomésticos no futuro, teriam embutidos, sistemas informatizados com funcionalidades, aonde seria possível registrar listas de compras, receitas, bloco de recados, etc.

Como estava iniciando os meus estudos na área de tecnologia de informação, confesso que achava aquilo tudo uma bobagem e ficava me perguntando se aquilo de fato ia acontecer. 

E quanto aos eletrodomésticos informatizados? Aconteceu! Com a popularização da Internet, praticamente TUDO passou a estar conectado a ela. Estamos falando que as coisas passaram a se conectar a Internet, o que ficou conhecido como  INTERNET DAS COISAS. E essas coisas passaram a gerar dados.

Confesso a vocês que não tenho noção do volume de dados que é produzido a cada segundo por esses dispositivos, mas podemos imaginar que é algo astronômico. Pesquisando na Internet sobre o assunto, fala-se em zetabytes de dados.

Sem ir muito longe, pense na quantidade de posts que nós fazemos no Facebook ou ainda na quantidade de pesquisas que realizamos na Internet e multiplique isso pelo número de usuários desses serviços no mundo todo. Imagine ainda, a quantidade de vídeos produzidos e publicados no Youtube a cada minuto.

Levando-se em conta a topologia, a natureza híbrida dos dispositivos conectados a Internet, o grande volume e a alta velocidade com o qual esses dados são produzidos, surgem algumas questões: Aonde armazenar esses dados? Levando-se em conta que os dados produzidos por esses dispositivos nem sempre são estruturados, como processa-los e armazena-los?  E Por fim, como produzir informação com base nesses dados, de modo a gerar insights interessantes? É grande o desafio, não é mesmo? 

BIG DATA foi o termo criado para descrever esse cenário com imenso volume de dados - estruturados ou não - que são gerados a cada segundo e que impactam os negócios no dia a dia.

Num cenário como este, algumas premissas devem ser alcançadas. As tecnologias envolvidas devem ser capazes de suportar grande VOLUME de dados, capazes de armazenar uma grande VARIEDADE de dados (estruturados, semiestruturados e não estruturados) e possuir VELOCIDADE na ingestão, processamento e retorno das informações.

A cada dia, novas tecnologias surgem para solucionar problemas relacionados ao cenário descrito aqui, mas sobre essas, eu falarei em outros Posts, OK?

Espero ter mais esclarecido do que confundido.

Valeu!

quarta-feira, 26 de fevereiro de 2020

Booleanos em C #


Muitas vezes, na programação, você precisará de um tipo de dados que possa ter apenas um dos dois valores, como:

SIM NÃO
LIGADO DESLIGADO
VERDADEIRO FALSO

Para isso, o C # possui um tipo de dados bool, que pode levar os valores verdadeiro ou falso.

Valores booleanos
Um tipo booleano é declarado com a palavra-chave bool e só pode levar os valores true ou false:

Exemplo
bool isCSharpFun = true;
bool isFishTasty = false;
Console.WriteLine (isCSharpFun); // Saída True
Console.WriteLine (isFishTasty); // Saídas falsas

No entanto, é mais comum retornar valores booleanos de expressões booleanas, para testes condicionais (veja abaixo).

Expressão booleana
Uma expressão booleana é uma expressão em C # que retorna um valor booleano: True ou False.

Você pode usar um operador de comparação, como o operador maior que (>), para descobrir se uma expressão (ou variável) é verdadeira:

Exemplo
int x = 10;
int y = 9;
Console.WriteLine (x> y); // retorna True, porque 10 é maior que 9

Ou ainda mais fácil:

Exemplo
Console.WriteLine (10> 9); // retorna True, porque 10 é maior que 9

Nos exemplos abaixo, usamos o operador igual a (==) para avaliar uma expressão:

Exemplo
int x = 10;
Console.WriteLine (x == 10); // retorna True, porque o valor de x é igual a 10

Exemplo
Console.WriteLine (10 == 15); // retorna False, porque 10 não é igual a 15

O valor booleano de uma expressão é a base para todas as comparações e condições de C #.

C # Strings


As strings são usadas para armazenar texto.

Uma variável de cadeia contém uma coleção de caracteres entre aspas duplas:

Exemplo
Crie uma variável do tipo string e atribua um valor a ela:

string cumprimento = "Olá";

Comprimento da string

Uma string em C # é na verdade um objeto, que contém propriedades e métodos que podem executar determinadas operações nas strings. Por exemplo, o comprimento de uma sequência pode ser encontrado com a propriedade Length:

Exemplo
string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Console.WriteLine ("O comprimento da cadeia de caracteres txt é:" + txt.Length);

Outros métodos
Existem muitos métodos de sequência disponíveis, por exemplo, ToUpper () e ToLower (), que retornam uma cópia da sequência convertida em maiúsculas ou minúsculas:

Exemplo
string txt = "Olá, mundo";
Console.WriteLine (txt.ToUpper ()); // Saídas "HELLO WORLD"
Console.WriteLine (txt.ToLower ()); // Saídas "olá mundo"

Concatenação de String
O operador + pode ser usado entre cadeias para combiná-las. Isso é chamado de concatenação:

Exemplo
string firstName = "John";
string lastName = "Doe";
nome da string = nome + sobrenome;
Console.WriteLine (nome);

Observe que adicionamos um espaço após "John" para criar um espaço entre firstName e lastName na impressão.

Você também pode usar o método string.Concat () para concatenar duas seqüências:

Exemplo
string firstName = "John";
string lastName = "Doe";
nome da string = string.Concat (nome, sobrenome);
Console.WriteLine (nome);


Interpolação de String
Outra opção da concatenação de strings é a interpolação de strings, que substitui valores de variáveis ​​em espaços reservados em uma string. Observe que você não precisa se preocupar com espaços, como na concatenação:

Exemplo
string firstName = "John";
string lastName = "Doe";
string name = $ "Meu nome completo é: {firstName} {lastName}";
Console.WriteLine (nome);

C # Math


A classe C # Math possui muitos métodos que permitem executar tarefas matemáticas em números.

Math.Max ​​(x, y)
O método Math.Max ​​(x, y) pode ser usado para encontrar o valor mais alto de x e y:

Exemplo
Math.Max ​​(5, 10);

Math.Min (x, y)
O método Math.Min (x, y) pode ser usado para encontrar o valor mais baixo de x e y:

Exemplo
Math.Min (5, 10);

Math.Sqrt (x)
O método Math.Sqrt (x) retorna a raiz quadrada de x:

Exemplo
Math.Sqrt (64);

Math.Abs ​​(x)
O método Math.Abs ​​(x) retorna o valor absoluto (positivo) de x:

Exemplo
Math.Abs ​​(-4,7);

Math.Round ()
Math.Round () arredonda um número para o número inteiro mais próximo:

Exemplo
Math.Round (9,99);

Operadores C #


Operadores são usados ​​para executar operações em variáveis ​​e valores.

No exemplo abaixo, usamos o operador + para adicionar dois valores:

Exemplo
int x = 100 + 50;

Embora o operador + seja frequentemente usado para adicionar dois valores, como no exemplo acima, ele também pode ser usado para adicionar uma variável e um valor, ou uma variável e outra variável:

Exemplo
int sum1 = 100 + 50; // 150 (100 + 50)
int soma2 = soma1 + 250; // 400 (150 + 250)
int soma3 = soma2 + soma2; // 800 (400 + 400)

Operadores aritméticos
Operadores aritméticos são usados ​​para executar operações matemáticas comuns:

+ Adição Adiciona dois valores x + y
- Subtração Subtrai um valor de outro x - y
* Multiplicação Multiplica dois valores x * y
/ Division Divide um valor de outro x / y
% Módulo Retorna o restante da divisão x% y
Incremento ++ Aumenta o valor de uma variável em 1 x ++
- Decremento Diminui o valor de uma variável em 1 x--

Operadores de atribuição C #
Operadores de atribuição são usados ​​para atribuir valores a variáveis.

No exemplo abaixo, usamos o operador de atribuição (=) para atribuir o valor 10 a uma variável chamada x:

Exemplo
int x = 10;

O operador de atribuição de adição (+ =) adiciona um valor a uma variável:

Exemplo
int x = 10;
x + = 5;

Uma lista de todos os operadores de atribuição:


= x = 5 x = 5
+ = x + = 3 x = x + 3
- = x - = 3 x = x - 3
* = x * = 3 x = x * 3
/ = x / = 3 x = x / 3
% = x% = 3 x = x% 3
x = x & 3 = x & 3
| = x | = 3 x = x | 3
^ = x ^ = 3 x = x ^ 3
>> = x >> = 3 x = x >> 3
<< = x << = 3 x = x << 3

Operadores de comparação de c #
Operadores de comparação são usados ​​para comparar dois valores:

Exemplo do nome do operador Experimente
== Igual a x == y
! = Diferente x! = Y
> Maior que x> y

> = Maior ou igual a x> = y
<= Menor ou igual a x <= y

Operadores lógicos em C #
Operadores lógicos são usados ​​para determinar a lógica entre variáveis ​​ou valores:

&& Logical and Returns true se ambas as afirmações forem verdadeiras x <5 amp="" div="" x="">
|| Lógico ou Retorna verdadeiro se uma das instruções for verdadeira x <5 div="" x="">
! Lógico não Inverte o resultado, retorna falso se o resultado for verdadeiro! (X <5 amp="" div="" x="">