Dicas sobre desenvolvimento de software, gestão e tributações

Rede Social

1 de dezembro de 2021

SQL Server: Como pesquisar tabelas em todos os bancos de dados





Nesse post vou mostrar um script para pesquisar as tabelas de todos os bancos de dados que contenham um nome ou parte de nome específico. Ao final vai mostrar um resumo de quantas ocorrências da tabela procurada foram encontradas em cada banco.


 DECLARE @tabelas TABLE(nome_database SYSNAME,

                       nome_schema   SYSNAME,

                       nome_tabela   SYSNAME);

DECLARE @database SYSNAME;


SET NOCOUNT ON;


DECLARE bases CURSOR LOCAL FAST_FORWARD FOR

  SELECT d.name

    FROM sys.databases d

    where d.state = 0;

OPEN bases

FETCH NEXT FROM bases INTO @database

WHILE @@FETCH_STATUS = 0

BEGIN

  INSERT INTO @tabelas(nome_database,

                       nome_schema,

                       nome_tabela)

  EXEC('SELECT ''' + @database + ''',

               s.name,

               t.name

          FROM ' + @database + '.sys.tables t

               INNER JOIN ' + @database + '.sys.schemas s ON s.schema_id = t.schema_id

         WHERE t.name LIKE ''%cliente''');


  FETCH NEXT FROM bases INTO @database;

END;

CLOSE bases;

DEALLOCATE bases;


SELECT *

  FROM @tabelas;


-- Resumo

SELECT nome_database,

       count(1) AS quantidade

  FROM @tabelas t

 GROUP BY nome_database;

A parte que você deve alterar para o nome da sua tabela fica na linha
WHERE t.name LIKE ''%cliente''');
No caso estou procurando todas as tabelas que terminem com o texto 'cliente'

Ler

10 de novembro de 2021

SQL Server: Listar as chaves do banco de dados





Nesse script vou mostrar como exibir as constraints (chaves estrangeiras) que já estão criadas no banco de dados, nele vou exibir o nome das tabelas ligadas, os nomes das tabelas e o nome da chave.

SELECT

    FK.TABLE_NAME,

    COLUMNUSAGE.COLUMN_NAME,

    PK.TABLE_NAME,

    PT.COLUMN_NAME,

    CONSTRAINTS.CONSTRAINT_NAME

FROM

    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS CONSTRAINTS

INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK

    ON CONSTRAINTS.CONSTRAINT_NAME = FK.CONSTRAINT_NAME

INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK

    ON CONSTRAINTS.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME

INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE COLUMNUSAGE

    ON CONSTRAINTS.CONSTRAINT_NAME = COLUMNUSAGE.CONSTRAINT_NAME

INNER JOIN (

            SELECT

                i1.TABLE_NAME,

                i2.COLUMN_NAME

            FROM

                INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1

            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2

                ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME

            WHERE

                i1.CONSTRAINT_TYPE = 'PRIMARY KEY'

           ) PT

    ON PT.TABLE_NAME = PK.TABLE_NAME


Caso você esteja procurando por uma chave em específico você pode utilizar o where com o nome da chave por exemplo:

WHERE CONSTRAINTS.CONSTRAINT_NAME LIKE '%FK_MINHACHAVE%'


ou então caso esteja procurando todas as chaves relacionadas com uma coluna:

        WHERE COLUMNUSAGE.COLUMN_NAME LIKE '%NOMEDACOLUNA%'

Ler

4 de maio de 2021

Cloud: Quais os benefícios da computação em nuvem



 

Principais benefícios da computação em nuvem  

Computação em nuvem já não é nenhuma novidade, mas mesmo assim muitos ainda não conhecem o termo ou seu uso e nem por que se tornou tão conhecida e utilizada, vou mostrar seis motivos e vantagens desse tipo de serviço.

Custos: Computação em nuvem pode reduzir bastante os custos com a operação de TI, isso porque você não precisará investir na compra de equipamentos e aplicativos para controlar um datacenter local, não precisará dispor de um espaço para servidores e equipamentos de rede, um local de acesso, temperatura, energia e resfriamento controlados por exemplo, poderá reduzir o número de especialistas de TI que seriam responsáveis por manter o datacenter operante.

Escalabilidade: Computação em nuvem facilita muito a escalabilidade do datacenter, podendo ser inclusive elástico. Imagine que você tem uma demanda maior apenas em alguns meses do ano ou então em alguma semana do mês, até mesmo um horário específico do dia, com computação em nuvem você pode contratar um serviço de dimensionamento elástico onde você configura um período que deseja ter mais poder de memória ou de processamento e passado esse período o serviço volta às definições padrões e você paga apenas pelo que usa, pense se fosse necessário comprar mais servidores para usá-los apenas uma semana do mês e nas outras semanas ele ficaria parado não gerando nenhum lucro.

Facilidade: A maioria dos serviços em nuvem é simples de ser configurado, você faz tudo por um navegador web, desde aquisição até configuração do mesmo em alguns minutos, pensando em ter o seu próprio datacenter apenas o fato de ligar e configurar todos os equipamentos pode levar vários dias. Além de ter que testar tudo, caso precise de alguma manutenção (coisa muito normal em datacenters) você precisará de um profissional para identificar o problema e corrigi-lo, além de caso o problema seja o mau funcionamento de algum equipamento ter que providenciar um novo. Na computação em nuvem não tem nada disso uma vez que a responsabilidade é total por parte do contratado. A produtividade da sua equipe pode aumentar muito já que terá profissionais focados na solução dos problemas e não no funcionamento e manutenção do datacenter.

Desempenho e segurança: Os grandes serviços de computação em nuvem são preparados para fornecer um alto padrão de conectividade, mantendo equipamentos e softwares sempre atualizados, mantendo sempre mais de um link de acesso à internet, backups programados, ambientes controlados, além é claro de uma preocupação constante com a segurança de seus servidores tanto física quanto à ataques de hackers.


Existem vários modelos de nuvens, no meu post anterior expliquei o assunto.

Ler

27 de abril de 2021

Cloud: Modelos de serviços de nuvem



Modelos de serviços de nuvem: IaaS, PaaS e SaaS 

Os serviços de nuvem estão atualmente divididos em quatro grupos: IaaS (infraestrutura como serviço), PaaS (plataforma como serviço), SaaS (software como serviço) e sem servidor. É muito importante se saber a diferença entre esses tipos para ter a melhor opção de nuvem possível trabalhando para você.

Caso não tenha visto o post anterior onde falo sobre os tipos de nuvens sugiro que leia antes.


IaaS (infraestrutura como serviço)

É o tipo mais comum de computação em nuvem, nele se aluga uma infraestrutura de TI, que pode ser, servidores, máquinas virtuais, armazenamento, redes e etc. Onde o pagamento é pelo uso e quantidade de recursos locados.


PaaS (plataforma como serviço)

A plataforma como serviço fornece sob demanda um ambiente para desenvolvimento, teste e gerenciamento de aplicativos. Foi criado pela necessidade de desenvolvedores de software em ter um lugar seguro, com boa infraestrutura e facilidade em hospedar seus aplicativos e sites, sem ter a preocupação de criar todo um data center para isso, onde se teria que adquirir e configurar diversos equipamentos, local controlado, armazenamento, infraestrutura de rede, de energia e toda a manutenção de tudo isso.


SaaS (software como serviço)

A nuvem do tipo software como serviço é uma forma de distribuição de aplicativos pela internet, o mais comum a vincular o contratante com uma forma de assinatura. Assim o usuário não tem nenhuma preocupação em como é feita a aplicação ou onde está hospedada, apenas a usa através da internet, podendo ser com um navegador web em computador, tablet, smartphone, ou diretamente com o download do aplicativo que acessa a internet.

Ler

20 de abril de 2021

Cloud: Tipos de nuvens




Tipos de nuvem

Inicialmente vamos falar sobre os tipos de implementações da nuvem, as opções são pública, privada ou híbrida.


Nuvem pública

A nuvem pública é pertencente e administrada por um provedor terceirizado, que por sua vez fornecem serviços de servidores, armazenamento ou aplicações pela internet. Alguns exemplos de nuvens desse tipo são: Microsoft Azure, Google cloud e Amazon AWS.

Nesse tipo de nuvem toda a parte de hardware, software, infraestruturas como local, energia e temperatura são de propriedade e gerenciadas por esse provedor. Ao contratar esse serviço você só precisará definir o que vai querer que ele contenha como se fosse fazer um plano de telefonia, quanto mais recursos mais caro e geralmente se faz todo por um navegador de internet inclusive a maioria deles é altamente parametrizável.


Nuvem privada

A nuvem privada como o nome já diz é uma nuvem utilizada por uma única organização. Essa nuvem pode estar tanto fisicamente dentro da própria empresa quanto pode ser contratada de uma empresa terceirizada, mas não se confunda com uma nuvem pública, nesse caso por mais que possa ser terceirizada, apenas uma empresa tem acesso à essa nuvem. Então em resumo uma nuvem privada mantém os serviços e infraestrutura em uma rede privada.


Nuvem híbrida

Nuvem híbrida como se pode imaginar é a combinação das duas nuvens, onde elas são ligadas por alguma tecnologia ou serviço, isso é bastante útil quando você possui uma nuvem privada e quer expandir apenas em alguns serviços em específico, podendo por exemplo ter a nuvem privada com a parte de armazenamento e o processamento na nuvem pública contratada ou então utilizar a nuvem pública apenas em momentos sazonais de maior necessidade de processamento, enfim as possibilidades são muitas nesse formato.


Ler

9 de março de 2021

Como remover serviços do Windows


 


Essa dica vai tanto para o pessoal que trabalha com a infraestrutura de uma empresa quanto para quem desenvolve softwares e desenvolve serviços no windows.

Algumas vezes nos deparamos com algum serviço com problemas e precisamos removê-lo. Quando se fala em desenvolvimento de serviço é bem comum instalar, testar, remover, instalar novamente e assim por diante.

Primeiro você precisa saber o nome exato do serviço que quer desinstalar, caso já saiba pode pular os próximos passos até chegarmos no cmd.exe, caso não saiba, vamos pesquisar.

Para isso vamos acessar os serviços instalados, podendo ser pela pesquisa na barra de tarefas.


ou pressionando windows + r e digitando services.msc



Abrirá a tela de serviços, localize o serviço desejado, clique com o botão direito sobre ele e depois em propriedades, irá aparecer uma tela como essa. O nome do serviço é o que está no retângulo vermelho.


Agora você irá no cmd, novamente windows + r e digite cmd.exe, ou pesquise por cmd na barra de tarefas do windows (caso não seja usuário administrador, poderá ser necessário abrir o cmd como administrador)



Já no cmd é só digitar sc delete e o nome do serviço



Ler

9 de fevereiro de 2021

Marketing Digital: Site one-page / mini-site



Os sites one-page são um dentre os mais populares atualmente, isso porque eles são compactos, simples e resumem todo o conteúdo em uma única página. Geralmente ele é subdividido em seções para manter uma boa organização e fácil leitura. Voltado para empresas ou produtos para um publico mais atualizado que não tem muito tempo para ler um site grande inteiro para descobrir do que a empresa se trata, aqui a ideia é ser "vapt-vupt".

Algumas vantagens desse tipo de site:
    1. Carregamento rápido, já que não tem muitas páginas para serem carregadas.
    2. Exibe o conteúdo de maneira minimalista tornando de mais fácil absorção.
    3. Fácil navegação afinal está tudo em uma página só, não haverão conteúdos difíceis de encontrar ou ignorados pelo leitor.
    4. Mais simples de tornar completamente responsivo (aqueles sites que se adaptam à qualquer tipo de dispositivo como, computador, celular, tablet etc.).

Algumas desvantagens:
    1. Não há muito espaço para conteúdos, claro a intenção desse tipo de site é ser simples e direto ao ponto
    2. Não tem como fazer um SEO muito completo.

Esse tipo de site está tendo uma alta demanda por juntar um bom custo com uma alta eficácia.

Aqui alguns exemplos de sites one-page.
Ler

4 de fevereiro de 2021

C#: Método Compute



Recentemente estive trabalhando com data tables e me deparei com a situação de ter uma consulta armazenada em um data table e precisava somar os valores de uma coluna contida nele, para isso utilizei o método Compute, vou mostrar como.


Imagine que temos um data table simples com duas colunas, nome do cliente (nome) e total de compras(tot_compras) e eu quero saber a soma do total de todos os clientes.

DataTable tabela = MinhaTabela;
var somaTotal = table.Compute("Sum(tot_compras)", "");

Agora complicando um pouco mais, imagine que na mesma tabela eu tenha mais uma coluna indicando se o cliente é pessoa Física '1' ou Jurídica '0' na coluna (tipo_cliente) como faria se quisesse apenas a soma dos clientes físicos?

somaTotal = table.Compute("Sum(tot_compras)", "tipo_cliente = 1");

Ler

15 de dezembro de 2020

UML: O que é e como funciona


 Unified Modeling Language é uma linguagem de notação muito utilizada em projetos de desenvolvimento de softwares, mas seu uso não se resume apenas a software, ela pode ser usada para muitos tipos de planejamentos e projetos.

Ela é construída através de diagramas que são compostos por elementos gráficos relacionados entre si e com pequenos textos que os descrevem.

Existem vários tipos de diagrama e vou mostrar os mais utilizados abaixo:

Diagrama de casos de uso
O caso de uso documenta o que o sistema faz do ponto de vista do usuário. Esse é o mais conhecido e o que mais se aplica a diversas situações não apenas a desenvolvimento de software.
Ele possui:
- Atores (usuários, equipamentos ou sistemas interligados)
- Casos de uso (as funcionalidades do sistema)
- Comunicação (o que liga o usuário com a funcionalidade realizando uma ação)

Diagrama de caso de uso – Wikipédia, a enciclopédia livre


Diagrama de classe
O diagrama de classes serve para mostrar a estrutura da aplicação, muitas vezes utilizado para planejamento do banco de dados, ou seja este é específico para desenvolvimento de software.

Modelos e Exemplos de Diagrama de Classe Online | Creately


Diagrama de sequência
Diagrama de sequencia mostra a sequencia de ações que um usuário pode fazer (lembre que usuário pode ser uma pessoa, outro sistema, um equipamento etc.)

Ele vai ter um usuário, os elementos gráficos que representam cada etapa e as setas que indicam uma ação seja do usuário (seta para frente) ou da etapa requisitando uma ação do usuário (seta para trás)

 

Diagrama de Atividades
O diagrama de atividades serve para ilustrar as ações que podem ser tomadas na aplicação, juntamente com suas condições e consequências.

UML - Diagrama de Atividades - Purainfo


Ferramentas para UML
ArgoUML http://argouml.tigris.org/
Astah http://astah.net/editions/community
Draw http://draw.io não é focada em UML

Ler

8 de dezembro de 2020

SQL Server: Como saber os últimos comandos executados


 SQL Server Express - Backup, Recursos, Comparando edições

No post de hoje irei mostrar uma forma simples de verificar quais foram os últimos comandos executados no SQL Server, detalhe que são para comandos que ainda estão em chache do SQL não para qualquer comando de qualquer data.

SELECT TAB.TEXT
FROM SYS.DM_EXEC_CACHED_PLANS AS PLANS
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(PLANS.PLAN_HANDLE) AS TAB


Com esse comando são exibidos os comandos no cache, aqui vale bastante colocar cláusulas where pois muitas vezes são exibidos comandos internos do que o SQL server executa então vamos à um exemplo.


SELECT TAB.TEXT
FROM SYS.DM_EXEC_CACHED_PLANS AS PLANS
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(PLANS.PLAN_HANDLE) AS TAB
WHERE TAB.TEXT LIKE '%UM TEXTO DO MEU COMANDO%'

Com um where junto a um like podemos procurar parte do que está escrito no comando.

Ler

17 de novembro de 2020

SQL: Converter tempo decimal em horas e minutos





No post de hoje irei mostrar algumas formas de transformar horas em decimal, no meu caso essa necessidade surgiu porque a funcionalidade grava as horas de uma tarefa no formato decimal, pois o usuário desejava ver essa quantidade de tempo em decimal e também realizar alguns cálculos, mas depois de certo tempo ele quis também um relatório onde exibisse a quantidade de tempo no formato de horas (time)

A primeira forma que vou mostrar é para converter para varchar, isso porque o período de tempo poderia ultrapassar as 24 horas que o formato time do sql suporta

DECLARE @HORAS decimal(7,4) = 25.5599
SELECT
RIGHT('0' + CAST (FLOOR(@HORAS ) AS VARCHAR), 2) + ':' +
RIGHT('0' + CAST(FLOOR((((@HORAS * 3600) % 3600) / 60)) AS VARCHAR), 2) + ':' +
RIGHT('0' + CAST (FLOOR((@HORAS * 3600) % 60) AS VARCHAR), 2)

Caso não ocorra nunca a possibilidade de passar das 24 horas você pode converter para o formato time de uma forma mais simples.

DECLARE @HORAS decimal(7,4) = 20.5599
SELECT  CAST(CONVERT(VARCHAR,DATEADD(SECOND, @HORAS * 3600, 0),108) AS TIME)

Ler

27 de outubro de 2020

Python: List Slices


 Como executar seu código python diretamente no Sublime-Text | by Willyan  Guimarães | experienceCode | Medium

No post de hoje vamos ver uma forma bem interessante e que facilita bastante para se obter valores de listas.
Imagine que temos uma lista de ints conforme a lista abaixo.

list = [0, 1, 5, 8, 14, 27, 31, 45, 63, 76]

E eu quero imprimir na tela os valores das posições 2 até a 5, normalmente pensaríamos em um loop como um for, mas em Python temos uma forma bem simples de resolver isso.

print(list[2:6])

Com esse comando o retorno seria:

[5, 8, 14, 27]

Ou seja os ints nas posições 2 (não se esqueça que a contagem começa do zero), até a posição 5 (a posição 6 não é selecionada por mais que se tenha colocado 6 no comando).

Também podemos omitir um dos dois parâmetros, seja o primeiro que é o número inicial ou o segundo que é o número final
Se eu executar o comando:

print(list[:5])

Seria a mesma coisa que executar o comando print(list[0:5]).

E se executar
print(list[7:])

Ele vai imprimir à partir da posição 7 até o final da lista.

List slices também pode ser usado com um terceiro parâmetro que serve para indicar a quantidade de posições à percorrer de cada vez, como por exemplo:

print(list[2:9:2])

O resultado irá imprimir à partir da posição 2 até a posição 9 de dois em dois como o abaixo:

[5, 14, 31, 63]

 

Também temos a opção de colocar um número negativo no terceiro parâmetro, isso faz com que a lista seja retornada ao contrário como por exemplo:

 print(list[7:4:-1])

Retorno:

[45, 31, 27]

Ler

15 de outubro de 2020

Python: Uma função Pythônica para validar CNPJ



Seguindo a ideia do post anterior, onde mostrei uma solução para a validação de CPF, falarei hoje sobre a validação de CNPJ. Mas como o cálculo é bem parecido, vou destacar apenas as diferenças entre eles.

 

Para a validação do CPF, os pesos aplicados aos seus dígitos vão de 2 a 11. Para o CNPJ, os pesos vão de 2 a 9 e então reiniciamos os pesos (novamente em 2). E, assim como para o CPF, os pesos são aplicados da direita para a esquerda.


Vamos usar o CNPJ (gerado aleatoriamente) 90.306.453/0001-33 como exemplo.

Ao aplicarmos os pesos teremos as seguintes associações:

9
0
3
0
6
4
5
3
0
0
0
1

5

4

3

2

9

8

7

6

5

4

3

2

Sem contar o primeiro DV.

E

9
0
3
0
6
4
5
3
0
0
0
1
3
6
5
4
3
2
9
8
7
6
5
4
3
2

Contando o primeiro DV.


Como a partir da aplicação dos pesos o algoritmo é exatamente o mesmo ao do CPF, vamos direto para o código.

 

from itertools import cycle

LENGTH_CNPJ = 14


def is_cnpj_valido(cnpj: str) -> bool:
if len(cnpj) != LENGTH_CNPJ:
return False

if cnpj in (c * LENGTH_CNPJ for c in "1234567890"):
return False

cnpj_r = cnpj[::-1]
for i in range(2, 0, -1):
cnpj_enum = zip(cycle(range(2, 10)), cnpj_r[i:])
dv = sum(map(lambda x: int(x[1]) * x[0], cnpj_enum)) * 10 % 11
if cnpj_r[i - 1:i] != str(dv % 10):
return False

return True


if __name__ == "__main__":
print("CNPJs inválidos")
print(is_cnpj_valido("0"))
print(is_cnpj_valido("123456789012345"))
print(is_cnpj_valido("5" * LENGTH_CNPJ))
print(is_cnpj_valido("90306453000103"))
print(is_cnpj_valido("90306453000130"))
print("CNPJs válidos")
print(is_cnpj_valido("90306453000133"))
print(is_cnpj_valido("82671952000100"))
print(is_cnpj_valido("31049514000165"))
print(is_cnpj_valido("77437514000133"))
print(is_cnpj_valido("00059549000151"))


Temos apenas 3 diferenças entre os códigos de validação de CNPJ e CPF, que são:

1. A importação da função "cycle" do pacote "intertools"

2. O tamanho da constante que é 14 para CNPJ

3. O método da aplicação dos pesos.


Como são apenas estas as diferenças, e a importação e o tamanho da constante não precisam maiores explicações, vou explicar apenas a parte dos pesos. (Para a explicação do restante do algoritmo, acesse o post do CPF).


Para aplicar os pesos do CPF, nós fazemos uso da função "enumerate", porém não podemos fazer o uso da mesma função para o CNPJ, pois os pesos do CNPJ não são sequenciais, uma vez que a sequência é reiniciada ao atingir o valor 9.

Para atendermos esta particularidade, fazemos uso de 3 funções: "range", "cycle" e "zip". Como todas são funções que merecem posts específicos para explicá-las, vamos apenas resumir como elas agem no algoritmo.

A função range irá nos retornar um iterável que se inicia em 2 e termina em 9 (o 10 não é incluso).

Este iterável é recebido pela função cycle, que por sua vez devolve um objeto "itertools.cycle". Vamos dizer que esse objeto é tipo um "iterável infinito", pois se fizermos um "for" nele, o loop "nunca" será finalizado.

Por fim pegamos este "iterável infinito" e o iterável com os dígitos invertidos do CNPJ e passamos para a função zip. A função irá unir estes 2 iteráveis, limitando o resultado pelo tamanho do menor iterável (neste caso o CNPJ). Com isso teremos todos os dígitos do CNPJ com seus respectivos pesos aplicados, similar ao que a função enumerate faz com o CPF.

A partir daqui segue igual ao que é feito com o CPF.

Ler

13 de outubro de 2020

Python: Particularidades com números em Python


Como executar seu código python diretamente no Sublime-Text | by Willyan  Guimarães | experienceCode | Medium 

No post de hoje vou mostrar algumas particularidades quando estamos tratando números em Python.


Imagine que eu tenho um número 25555777, quando olhamos para ele fica um pouco complicado de rapidamente saber qual número é, mas em Python podemos utilizá-lo de maneira mais amigável ao ser humano como 25_555_777 pronto fica muito mais fácil de saber que o número é 25 milhões, 555 mil e 777, o compilador entende isso normalmente.

Outro exemplo é quando eu quero utilizar apenas a parte inteira de um número decimal, por exemplo 7 / 3 é 2,33333, caso queira saber apenas qual o número inteiro ignorando a parte decimal eu poderia converter com um cast int (7 / 3) que ele me retornaria 2, mas um forma mais fácil e rápida seria 7 // 3 com duas barras, também me retornará 2. Inclusive pode ser utilizado em cálculos mais extensos.

Mais uma seria particularidade é que os números não tem o mesmo limite que outras linguagens, um inteiro pode ter o tamanho até que a memória da máquina suporte e não o tamanho do tipo inteiro.

Ler

6 de outubro de 2020

SQL: Selecionar apenas os decimais dos números


SQL Server Express - Backup, Recursos, Comparando edições
No post de hoje vamos ver como selecionar apenas os decimais de um número no SQL Server.

É bem simples, para demonstrar isso vou declarar uma variável decimal.
declare @teste decimal(4,3)

Setar um valor com casas decimais.
select @teste = 2.938

E executar o comando:
select PARSENAME(@teste, 1)

Na verdade essa é uma função mais utilizada para tratamento de texto, mas para esse caso funciona, o que o parsename faz é separar o texto pelo "." no caso separando o "2" do "938".

Confira também a documentação oficial.
Ler

1 de outubro de 2020

Python: Uma função Pythônica para validar CPF


 


Algoritmos para validação de CPF são alguns dos primeiros algoritmos que aprendemos em cursos de programação (pelo menos foi assim comigo).

CPFs são compostos por 11 dígitos, sendo que os 2 últimos são dígitos verificadores. Portanto, para sabermos se um CPF é ou não válido, precisamos realizar o cálculo (que foi definido pela Receita Federal) e comparar o resultado obtido com os valores do dígito verificador.
 
O cálculo é bem simples! Vamos imaginar o seguinte CPF:
504.065.090-69 (CPF gerado aleatoriamente)
Primeiro pegamos os 9 primeiros dígitos e aplicamos a cada um deles um peso que se inicia em 2, da direita para a esquerda.

5

0

4

0

6

5

0

9

0

10

9

8

7

6

5

4

3

2

 
Após isso, basta somarmos cada dígito multiplicado por seu peso:
5 * 10 + 0 * 9 + 4 * 8 + ... + 0 * 2 = 170
 
Com este resultado, podemos optar entre 2 cálculos:
 
11 - 170 % 11

ou
 
170 * 10 % 11
 
Obs.: Lembrando que "%" é usado para calcular o resto (módulo) da divisão na maioria das linguagens de programação.
Ambos os cálculos nos levará ao valor do primeiro dígito verificador, que para este exemplo é 6.

Agora basta fazermos o mesmo calculo anterior, mas considerando também o primeiro dígito.
Os pesos ficarão conforme abaixo:
 

 5

0

4

0

6

5

0

9

0

6

11

10

9

8

7

6

5

4

3

2

 

Como a partir daqui o cálculo é exatamente o mesmo, vamos então para o algoritmo em Python!

TAMANHO_CPF = 11


def is_cpf_valido(cpf: str) -> bool:
if len(cpf) != TAMANHO_CPF:
return False

if cpf in (c * TAMANHO_CPF for c in "1234567890"):
return False

cpf_reverso = cpf[::-1]
for i in range(2, 0, -1):
cpf_enumerado = enumerate(cpf_reverso[i:], start=2)
dv_calculado = sum(map(lambda x: int(x[1]) * x[0], cpf_enumerado)) * 10 % 11
if cpf_reverso[i - 1:i] != str(dv_calculado % 10):
return False

return True


if __name__ == "__main__":
print(is_cpf_valido("0"))
print(is_cpf_valido("123456789012345"))
print(is_cpf_valido("55555555555"))
print(is_cpf_valido("19627722000"))
print(is_cpf_valido("19627722091"))
print(is_cpf_valido("19627722090"))
print(is_cpf_valido("02927367035"))
print(is_cpf_valido("64935775009"))
print(is_cpf_valido("45508834052"))
print(is_cpf_valido("50406509069"))

Na linha 1 apenas definimos uma constante com o tamanho do CPF.
 
Na linha 4 temos a declaração da nossa função.
 
Na linha 5 realizamos nossa primeira validação. Se o CPF não tiver exatamente 11 caracteres retornamos que o CPF informado é inválido. (lembre-se de limpar a mascara do CPF antes de chamar esta função).
 
Na linha 8 validamos se não é um CPF inválido conhecido (111.111.111-11, 222.222.222-22, ..., 000.000.000-00). Esta validação é feita a partir de um iterável gerado com uma comprehension. A comprehension irá iterar sobre cada valor da string "1234567890" e irá multiplicar cada caractere pelo tamanho do CPF. Aqui temos 2 particularidades sobre strings no Python:
1. Strings são iteráveis
2. Quando multiplicamos uma string por um valor inteiro, o resultado obtido será aquela string repetida x vezes.
 
Exemplo:
"a" * 10 = 'aaaaaaaaaa'
 
Na linha 11 o CPF informado é invertido. Exemplo:
De 12345678910 para 01987654321
A inversão é feita para facilitar a aplicação dos pesos.
 
Na linha 12 nós declaramos um for que irá iterar 2x, iniciando em 2 e finalizando em 1.

Na linha 13 é onde aplicamos os pesos de cada digito do CPF.
Primeiro nós pegamos o CPF invertido e fazemos uma substring delete que vai de "i" até o final.
Então pegamos esta substring e aplicamos os pesos nela, através da função "enumerate".
A função enumerate merece um post só para ela. Mas, de maneira resumida, ela recebe um iterável e enumera cada posição deste iterável. Ela retorna um "enumerate object" (que é também um iterável) de tuplas. Podemos converter este "enumarete object" em uma lista, por exemplo.
 
Exemplo:
list(enumerate([1, "b", 3])) = [(0, 1), (1, 'b'), (2, 3)]

Obs.: Vale atentar que no nosso caso nós iniciamos a função enumerate em 2 e não em 0.
 
A linha 14 é onde aplicamos o cálculo explicado no começo do post.
Primeiro multiplicamos os dígitos por seus respectivos pesos através da função "map". Assim como a função enumerate, a função map merece um post só para falar dela, mas vamos para um resumo. Ela recebe uma função e um iterável, e a partir disso gera um novo iterável.
No nosso exemplo, a função informada é uma expressão lambda (que resumidamente é uma função anônima) e o enumerate object criado na linha anterior. É na expressão lambda que ocorre a multiplicação dos digitos pelos seus pesos.
Usamos então função sum para somar o iterável retornado pela função map e aplicamos o resto da fórmula.

Na linha 15 nós comparamos o dígito do CPF informado com o dígito calculado. Caso os valores sejam diferentes, retornamos que o CPF é inválido.
A única observação que cabe aqui (além da conversão do dígito calculado para string) é que nós comparamos o módulo do dígito calculado por 10. Fazemos isso, pois quando o módulo da divisão por 11 resulta em 10, o valor que deve ser considerado é 0.

Como dito anteriormente, o loop será executado 2x. E caso não haja nenhuma inconsistência, a função irá retornar que o CPF é válido (linha 18).

Ler

29 de setembro de 2020

Gestão de projetos: Gráfico de Gantt o que é e como funciona


 


Gráfico de Gantt ou Diagrama de Gantt é usado para controlar visualmente um cronograma, muito conhecido e utilizado na gestão de projetos, pois ele auxilia a se ter uma avaliação rápida do status do projeto, quais tarefas foram executadas, prazos de entrega, dependências, tudo com intervalo de tempo.

O gráfico foi criado pelo norte americano Henry Gantt na década de 20 que se inspirou em Harmonogram criado pelo engenheiro polonês Karol Adamiecki. A ideia de Henry era evitar atrasos na produção de fábricas.
Ele trás vários benefícios como por exemplo:
  • Mostrar de maneira clara e visual o andamento do projeto
  • Segmenta tarefas, definindo a ordem e interdependência que elas devem ser executadas
  • Distribui responsabilidades (caso deseje adicionar isso ao gráfico)
  • Fácil visualização dos prazos das tarefas
Resumindo seu funcionamento:
Para criar seu gráfico de Gantt você precisará enumerar as tarefas que serão realizadas, colocá-las em sequência de cima para baixo (eixo Y) e na horizontal (eixo X) o tempo (pode ser definido em horas, período de trabalho, dias, etc) e conforme as tarefas vão sendo concluídas você vai preenchendo com retângulos esse espaço de tempo que a tarefa demorou a ser executada. Vejamos no exemplo abaixo um gráfico um pouco mais detalhado e extenso.
Existem várias ferramentas online para criação desses gráficos e gestão de projetos, inclusive o Excel também tem como criar gráficos de Gantt.
Ler

22 de setembro de 2020

CSS: Filtros (drop-shadow, grayscale, saturate, sepia e invert)


 


No post de hoje continuaremos falando de mais alguns filtros do CSS, caso não tenha visto o post anterior CSS: Filtros (opacity, brightness, contrast e blur)


Começando com o sepia, como o nome já diz ele vai converter a imagem em sépia, onde 0% significa a imagem original e 100% é sépia por completo, qualquer valor entre isso é uma mistura da original com o tom de sépia.

.filtered {

  filter:sepia(100%);

}


O filtro saturate vai mexer com a saturação da imagem onde eu posso adicionar ou remover a saturação onde 100% é a imagem original, então caso queira aumentar deve ser valores maiores que isso (200% por exemplo) e para diminuir pode colocar entre 0 e 99%.

.filtered {

  filter:saturate(80%);

}


Converte a imagem em escala de cinza quanto maior a porcentagem mais evidente fica a escala de cinza.

.filtered {

  filter:grayscale(100%);

}


Esse filtro cria uma sombra no objeto, nesse exemplo vou colocar uma sombra um pouco abaixo, para a direita com um leve desfoque e na cor cinza. A ordem dos parâmetros é a seguinte, sombra horizontal, sombra vertical, desfoque e cor.

.filtered {

  filter:drop-shadow(8px 8px 10px gray);

}


Esse filtro inverte as cores da imagem, semelhante ao que tínhamos nos negativos de fotos. O valor de 0% é da imagem original e 100% é a imagem totalmente invertida.

.filtered {

  filter:invert(100%);

}

Ler

15 de setembro de 2020

CSS: Filtros (opacity, brightness, contrast e blur)


No post de hoje irei mostrar alguns filtros bem interessantes do CSS. Principalmente utilizados em imagens.

Primeiro um dos filtros mais usados é o opecity, ele controla a opacidade do objeto, ele é muito utilizado para fotos, principalmente para fotos de fundo onde um texto ficará na sua frente dando assim uma melhor leitura. Para utilizá-lo é bem simples, apenas coloque a porcentagem de opacidade que deseja que o objeto fique.

.filtered {

  filter: opacity(70%);

}


Outro filtro seria o de brilho, bastante utilizado para dar um retoque de claridade a imagem ou para clarear a cor de um objeto de uma forma um pouco diferente do que apenas trocar a cor. No exemplo abaixo irei remover um pouco do brilho, por isso utilizo valores abaixo de 100%

.filtered {

  filter: brightness(50%);

}


Agora se não for o brilho que esteja faltando na imagem, mas sim o contraste o filtro a ser usado é o contrast, também definindo em porcentagem, no caso vou adicionar 40% ao contraste original da foto.

.filtered {

  filter: contrast(140%);

}


Este filtro causa um desfoque na foto, também muito interessante para usar em imagens de fundo com algum texto na frente. Segue um exemplo:

.blured {

  filter: blur(5px);

}

Ler

8 de setembro de 2020

Certificados digitais ganham cada vez mais importância





Os Certificados Digitais são como chaves eletrônicas que abrem também "abrem portas" garantindo a autenticidade e a segurança no mundo online. Ele está sendo cada vez mais usado por empresas de todos os tipos pois é muito vantajoso seu uso e de certa forma com um custo baixo fazendo com que o mercado cresça bastante.

Existem vários tipos de certificados, vamos falar sobre os principais:

Certificado A
Esse certificado vem na forma de assitura digital, como se fosse quando você assina um documento com caneta, ele é utilizado para "assinar" um documento ou transação, mostrando que é autentica com seu titular possuindo inclusive validade jurídica. É muito conhecido por ser usado em Notas fiscais, prescrições médicas digitais, leilões online, enfim uma infinidade de documentos digitais que se comparados com os físicos requiririam assinatura.

Ele existe em vários formatos onde cada um pode variar o tempo de validade ou a forma de se instalar no computador, sendo os mais conhecidos os A1 e A3.


Certificado S
Esse certificado é de sigilo, ou seja, ele criptografa os dados enviados na transação ou que serão armazenados com uma dupla de chaves onde apenas quem tem a chave pode decriptar. Ele também tem alguns subtipos S1, S2, S3 e S4, e suas diferenças estão ligadas ao armazenamento.


Certificado T
O certificado tipo T são de certa forma parecidos com o certificado do tipo A, mas com um adicional de time-stamping que significa “marca de tempo”. Então além de assinar um documento ou transação ele marca quando isso ocorreu com data e hora. Ele tem duas opções T3 e T4.
Ler