Arquivo

Arquivo do Autor

SQL Server – Gerar um número randômico

13 de setembro de 2017 Deixe um comentário

Preciso gerar um volume de dados com valor inteiro e/ou decimal, para popular uma tabela no SQL Server. Não quero depender de ferramenta de terceiro para gerar os dados.

A solução foi fazer um script Gerar_Numero_Randomico.sql, que está disponível no meu GitHub.

Gera_NrRandomicoResult

Explicação dos comandos usados, abaixo:

1. Gerar um número randômico, ou seja, número aleatório. Exemplo: 1, 524, 6421, 60544, 40.

Para isso usarei a função NEWID() que cria um valor hexadecinal único do tipo uniqueidentifier.

SELECT NEWID() AS ID_Hex

 

2. Extrair o valor inteiro do ID_Hex, usando a função CHECKSUM().

SELECT

  A.ID_Hex,

  CHECKSUM(A.ID_Hex) AS Nr_Randomico,
FROM ( — Nr_Randomico baseado em um ID Hexadecimal
            SELECT NEWID() AS ID_Hex
          ) A

 

3. Criar o valor decimal, com 4 casas, dividindo o valor inteiro por 10000,0000 e convertendo o resultado da divisão usando a função CAST().

SELECT

  A.ID_Hex,

  CHECKSUM(A.ID_Hex) AS Nr_Randomico,

  CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)) AS Nr_Randomico_Decimal
FROM ( — Nr_Randomico baseado em um ID Hexadecimal
            SELECT NEWID() AS ID_Hex
          ) A

 

Com os três passos, obtemos o seguinte resultado:

ID_Hex Nr_Randomico Nr_Randomico_Decimal
4CBFDEC3-F57C-433D-B145-7959B570FBC0 -1216800284 -121680.0284

 

Podemos gerar novos valores inteiros e decimais, usando parte do Nr_Randomico_Decimal. Exemplo:

Nr_Randomico_Decimal Novos Valores Descrição do Valor
-121680.0284 -121680 Somente parte inteira
-121680.0284 0284 Somente parte decimal
-121680.0284 0.0284 1 dígito da parte inteira + parte decimal
-121680.0284 80.0284 2 dígitos da parte inteira + parte decimal
-121680.0284 680.0284 3 dígitos da parte inteira + parte decimal
-121680.0284 1680.0284 4 dígitos da parte inteira + parte decimal

 

4. Usarei a função PARSENAME() para obter a parte inteira do Nr_Randomico_Decimal.

PARSENAME(CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)) , 2) AS Parte_Inteiro

 

5. Usarei a função PARSENAME() para obter a parte decimal do Nr_Randomico_Decimal.

PARSENAME(CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)) , 1) AS Parte_Decimal

Note que a função PARSENAME() é composta por dois parâmetros o Objeto e Parte do Objeto que se deseja obter, sintaxe PARSENAME ( ‘object_name’ , object_piece ).

Como nosso objeto é o Número Decimal  -121680.0284, ele é composto por 2 partes interpretadas da direita para esquerda. Portanto:

Objeto Parte Resultado Descrição
-121680.0284 1 0284 Parte Decimal do Nr_Randomico_Decimal
-121680.0284 2 -121680 Parte Inteira do Nr_Randomico_Decimal

6. Já com a Parte Inteira, -121680, preciso extrair o 1 dígito, 2 digito, etc.

Para isso usarei a função RIGHT(), obtendo N caracteres da direita para esquerda.

Parte Inteira Resultado Sintaxe
-121680 0 RIGHT(‘-121680’, 1)
-121680 80 RIGHT(‘-121680’, 2)
-121680 680 RIGHT(‘-121680’, 3)
-121680 1680 RIGHT(‘-121680’, 4)

RIGHT(PARSENAME(CAST(CHECKSUM(ID_Hex) / 10000.0000 AS decimal(10,4)), 2), 1) AS Parte_Inteiro_1dig

7. Agora vamos somar a Parte Inteira N Digitos + Parte Decimal

Nr_Randomico_Decimal Inteira N Digitos Parte Decimal Novos Valores
-121680.0284 0 0284 0.0284
-121680.0284 80 0284 80.0284
-121680.0284 680 0284 680.0284
-121680.0284 1680 0284 1680.0284

 

8. Como repetir o comando SQL, várias vezes?

Até o passo sete, foi construído o comando SELECT… que retorna um número aleatório/rondômico.

Porém, precisamos executar o comando SELECT várias vezes e ir armazenando em uma tabela.

Para executar um comando N vezes, usarei o GO que é uma instrução sqlcmd, exemplo:

SELECT ‘A’, 1

GO 5

Será executado 5 vezes o comando SELECT ‘A’, 1

Dito isto, para gerar 5 números randômicos vamos colocar no final do comando SELECT, GO 5

SELECT

  A.ID_Hex,

……

GO 5

9. Criar uma Tabela para armazenar os 5 números gerados no passo oito.

No passo anterior, vimos que o comando SELECT foi executado 5 vezes. Isso gerou 5 resultados em resultset diferentes e não uma tabela contendo 5 registros.

Para resolver isso, podemos criar uma Tabela para receber os valores gerados.

Normalmente, usamos a função CREATE TABLE().

Mas, neste exemplo não quero definir cada campo ao criar a tabela de resultado e sim aproveitar o resultado do SELEC para criar a estruturar da #Tabela_NrRandomico que receberá os números randômicos gerados.

Para isso usarei a função TOP() em conjunto com a cláusula INTO do SELECT.

SELECT TOP 0, *

INTO #Tabela_NrRandomico

FROM (

SELECT

  A.ID_Hex,

……

) Gerar_NrRandomico

No comando acima o TOP 0 (zero), * do PRIMEIRO SELECT não retorna nenhum valor, porém captura toda estrutura de campos do resultado gerado pelo SEGUNDO SELECT A.ID_HEX.

Já o INTO #Tabela_NrRandomico do PRIMEIRO SELECT, cria a tabela #Tabela_NrRandomico baseado no resultado capturado.

Atenção o # não é erro de digitação, ele significa que será criar uma tabela temporária que ao fechar a conexão com o banco de dados é eliminada, automaticamente.

Para criar uma tabela real, portanto permanente. Retire o #, INTO Tabela_NrRandomico.

 

10. Inserir na tabela #Tabela_NrRandomico os 5 números gerados no passo oito.

Para isso usarei o INSERT INTO com valores gerados no SELECT

INSERT INTO #Tabela_NrRandomico
SELECT *
FROM (

SELECT

  A.ID_Hex,

……

) Gerar_NrRandomico

GO 5

11. Vamos exibir o resultado da #Tabela_NrRandomico

SELECT * FROM #Tabela_NrRandomico
GO

12. Excluir a tabela #Tabela_NrRandomico, usando o DROP TABLE.

Para que ao executar o script várias vezes não exiba o erro de tabela já existente, pois ela é sempre criada no passo nove.

DROP TABLE #Tabela_NrRandomico
GO

Com os 12 passos, obtemos o seguinte resultado:

ID_Hex Nr_Randomico Nr_Randomico_Decimal
4CBFDEC3-F57C-433D-B145-7959B570FBC0 -1216800284 -121680.0284
0509C7E0-AEC0-4B6C-8DDF-A26142156E59 -1025729740 -102572.9740
539E79E8-12CC-45AE-9E38-2CBECE009464 718090630 71809.0630
38268135-CDCC-43B0-B8D2-68C67C3D0D14 -2028602481 -202860.2481
C0743028-43C9-43BE-93AC-5C39455BEA5C 779214164 77921.4164

… mais outras colunas com os novos valores Inteiro_1_Decimal, Inteiro_N_Decimal.

 

Fonte:

https://stackoverflow.com/questions/3418606/sql-how-do-i-get-only-the-numbers-after-the-decimal

https://stackoverflow.com/questions/16412231/how-to-get-2-digits-after-decimal-point-in-tsql

https://stackoverflow.com/questions/1045138/how-do-i-generate-random-number-for-each-row-in-a-tsql-select

Automatizar envio de E-mail usando PowerShell

29 de agosto de 2017 Deixe um comentário

Podemos automatizar diversas tarefas usando PoweShell, inclusive enviar e-mail.

Este tutorial trata o script PowerShell e também como configurar o Gmail para permitir o envio do e-mail.

psEmail003

 

Criar script PowerShell com .NET Framework para enviar E-mail

 

Abra o bloco de notas, copie/cole o código e salve em: "C:\TEMP\Email_PowerShell.ps1"


$SMTPServer = "smtp.dominio.com.br"
$SMTPPort = "587"
$Username = "seuemail@dominio.com.br"
$Password = "senha"

$to = "destinatario@dominio.com.br"
$cc = "destinatariocopia@dominio.com.br"
$bcc = "destinatariocopiaoculta@dominio.com.br"
$subject = "Assunto do E-mail"
$body = "Este e-mail foi enviado automaticamente, usando PowerShell.

Att,
Sua Assinatura"

$attachment = "C:\TEMP\Email_PowerShell.ps1"

$message = New-Object System.Net.Mail.MailMessage
$message.subject = $subject
$message.from = $username
$message.to.add($to)
#$message.cc.add($cc)
#$message.cc.add($bcc)
#$message.attachments.add($attachment)

$message.body = $body

$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message)
write-host "E-mail Enviado!"


Usando o SMTP do GMail

 

$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$Username = "seuemail@gmail.com.br"
$Password = "senha"

 

Quando usamos o GMail para autenticação no Outlook, Site e Apps. Sempre na primeira vez é perguntado se vamos permitir que o “Programa” em questão acesse nossa conta.

Ao concordarmos o acesso é liberado e o “Programa” faz login usando as nossas credencias.

Isso é uma segurança do Goggle.

No caso do “Programa” – Script PowerShell não existe a interface que solicita nossa permissão. Logo, quando o script tenta fazer o login para enviar o e-mail.

Aparece uma mensagem de erro / falha de autenticação:

Exception calling "Send" with "4" argument(s): "The SMTP server requires a secure connection or the client was not authenticated.The server response was: 5.5.1 Authentication Required. Learn more at"At line:15 char:1+ $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException+ FullyQualifiedErrorId : SmtpException

 

A solução imediata, porém menos segura, é reduzir a segurança do Google.

Configurar o GMail para permitir o Login:

a. Entre em https://myaccount.google.com/security 

b. Alterar a opção Permitir aplicativos menos seguros: DESATIVADA –> ATIVADA

c. Você receberá um e-mail de segurança do Google, não precisa fazer nada é só um aviso.

psEmail006

Outra solução é usar a autenticação em duas etapas e ativar a senha de app de 16 dígitos.

Também podemos usar a autenticação OAuth, ambas soluções tratarei outro dia.


Executar o script PowerShell

 

psEmail003

a. Abrir o PowerShell

b. Entrar na pasta “CD C:\TEMP”

c. Executar o comando “.\Email_PowerShell.ps1

.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.

d. Executar o comando mudando a permissão, apenas no contexto desta sessão

PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File "ExecPS1.ps1" -Verb RunAs

 

 

Fonte:

.NET Framework

https://technet.microsoft.com/pt-br/library/system.net.mail(v=vs.110).aspx

SMTP PowerShell using simple Authentication

http://petermorrissey.blogspot.com.br/2013/01/sending-smtp-emails-with-powershell.html

Sending e-mail with Gmail using PowerShell

https://stackoverflow.com/questions/29029364/sending-email-with-gmail-using-powershell

Windows PowerShell about_Execution_Policies

https://technet.microsoft.com/pt-BR/library/hh847748.aspx

Converter e/ou Formatar no Microsoft SQL Server

30 de maio de 2017 Deixe um comentário

Tenho um campo do tipo SmallDateTime contendo 2017-05-30 16:16:10.730.

Desejo os seguintes resultados:

GetDate yyyymmdd yyyy-mm-dd dd/mm/yyyy
2017-05-30 16:16:10.730 20170530 2017-05-30 30/05/2017

 

Solução:

Para resolver este problema usei a função CONVERT passando o parâmetro style, ele será o responsável por apresentar o resultado da conversão com um formato de exibição.

Cada código do style indica um formato, mais informações na documentação T-SQL.

 

Syntax for CONVERT: CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

 

Comando:

select getdate() AS ‘GetDate’

     , convert(varchar(10), getdate(), 112)  AS DateFormat_ISO_Long
     , convert(varchar(10), getdate(), 126)  AS DateFormat_ISO8601_Long
     , convert(varchar(10), getdate(), 103) AS DateFormat_British_French_Long

 


Desejo a Data e Hora SEM espacos

GetDate yyyy-mm-ddThh:mm:ss.mmmZ
2017-05-30 16:16:10.730 2017-05-30T16:16:10.730

 

Solução:

select getdate() AS ‘GetDate’
    
     , convert(varchar(19), getdate(), 126)  AS DateFormat_ISO8601_Long — (no spaces)


Desejo a Hora com formados diferentes

GetDate hh:mm hh:mm:ss hh:mm:ss.mmm
2017-05-30 16:16:10.730 16:16 16:16:10 16:16:10.730

 

Solução:

select getdate() AS ‘GetDate’

     
     , convert(varchar(5), getdate(), 114) AS HoraMinuto
     , convert(varchar(8), getdate(), 114) AS HoraMinutoSegundo
     , convert(varchar(12), getdate(), 114) AS HoraMinutoSegundoMilisegundo

Certificado – Maratona Xamarin 2017

29 de março de 2017 Deixe um comentário

Agora sim, ficou pronto meu certificado da Maratona Xamarin 2017

SamirMMBRxamarinmaratona2017pt

Xamarin Fest LATAM – São Paulo

25 de março de 2017 Deixe um comentário

Está acontecendo agora o evento presencial gratuíto de Xamarin.

xamarinfestlatam2017

Xamarin Fest – Zapopán, México
Tema: Cognitive Services & Xamarin
Oficinas Los Xamarinos, Calle Prado de los Cedros 867
Xamarin Fest – São Paulo, Brasil
Tema: Xamarin Fest São Paulo
Escola SENAI de Informática- Santa Cecília
Xamarin Fest – Porto Alegre, Brasil
Tema: Xamarin Fest Porto Alegre
Puc Rio Grande do Sul
Xamarin Fest – Blumenau, Brasil
Tema: Xamarin Fest Blumenau
UniSociesc de Blumenau
   

Em São Paulo:

Dia 25 de março a equipe de Microsoft MVPs estará na cidade para levar o seu conhecimento de Xamarin e nuvem para o próximo nível.

 

Organizadores:

Valerio Ferreira, e Thamirys Gameiro

https://www.meetup.com/pt-BR/Developers-SP/events/238451950/

 

O evento será um treinamento com a seguinte agenda:

• Xamarin para desenvolvimento de aplicativos;

• Definição do escopo do aplicativo;

• Como utilizar o Visual Studio Team Services para: Desenvolvimento Agile  com planejamento de tarefas (Scrum e Kanban) e colaboração de código com Git;

• Desenvolvimento do aplicativo e conexão com Azure;

• Como utilizar o Mobile Center para Testes de UI, Crashes, Analitycs e também como enviar versões betas de testes para usuários selecionados antes de publicar na loja;

• Como preparar e enviar um aplicativo para publicação na Apple Store e Google Play.

 

Fonte:

  https://goo.gl/J2kAnA

Aprovado na Maratona Xamarin 2017

10 de março de 2017 1 comentário

Hoje estou especialmente feliz Winking smile . Aprovado de primeira na #MaratonaXamarin

prova-samirmmbr-CPF-XForms-Aprovado

 

Excelente iniciativa dos MVPs:

enriqueaguilar hjaimesdev stvansolano
Enrique Aguilar Vargas
@enriqueaguilar
Humberto Jaimes Rodríguez
@hjaimesdev

Esteban Solano Granados
@stvansolano

MVPBadgeXamarin

 

Curso: https://ticapacitacion.com/curso/xamarinpt/

Data de início: 30 de janeiro de 2017

Data de término: 17 de março de 2017

Idioma:Português

Tecnologias: Xamarin, Microsoft Visual Studio, C#, XAML, .NET, Azure

Formato do curso:
O curso está disponível através de vídeos on-line que podem ser visualizadas em qualquer navegador web com suporte a vídeo HTML5. O curso apresenta material de apoio em formato PDF e laboratórios práticos.

Recursos de apoio:
Sessões de suporte on-line ao vivo com instrutores para tirar dúvidas.

Horário:
O acesso ao curso está disponível na sala virtual 24 horas por dia, 7 dias por semana.

Tempo médio de estudo diário:
A agenda do curso é projetada para que o participante invista de 30 a 90 minutos por dia de segunda a quinta-feira para assistir às aulas e realizar as atividades.

Sobre o curso:

Este treinamento proporciona os conhecimentos necessários para desenvolver aplicativos multi-plataforma utilizando o Xamarin.

O treinamento introduz ao desenvolvimento de aplicativos usando as APIs Xamarin.Android, Xamarin.iOS e Xamarin.Forms. Ele também inclui o desenvolvimento de serviços do Microsoft Azure para serem consumidos pelos aplicativos Xamarin.

Objetivo:

Ao finalizar este treinamento, o participante:

  • Conhecerá a estrutura básica dos diferentes tipos de projetos que podem ser criados em Xamarin.
  • Terá uma visão clara da estrutura de um projeto Xamarin.Android.
  • Conhecerá os controles gráficos que podem ser utilizados durante o desenvolvimento de aplicativos em Android.
  • Conhecerá o clico de vida de um aplicativo Android.
  • Terá uma visão clara da estrutura de um projeto Xamarin.iOS.
  • Conhecerá os controles gráficos que podem ser utilizados durante o desenvolvimento de aplicativos iOS.
  • Conhecerá o ciclo de vida de um aplicativo iOS.
  • Conhecerá as vantagens de utilizar Xamarin.Forms como alternativa ao Xamarin clássico.
  • Aprenderá os conceitos básicos do padrão MVVM e a forma de aplicá-lo durante o desenvolvimento de aplicativos com Xamarin.
  • Terá base para criar seus próprios aplicativos conectados aos serviços de nuvem do Microsoft Azure.
  • Conhecerá alguns serviços oferecidos pelo Microsoft Azure que permitem incorporar de maneira simples, funcionalidades que agreguem valor aos seus aplicativos.

Conteúdo do Curso:

O conteúdo deste treinamento terá 5 módulos.

Módulo 1: Introdução ao desenvolvimento móvel

Ao finalizar este módulo, os participantes conhecerão a estrutura básica dos diferentes tipos de projetos que podem ser gerados em Xamarin. Durante este módulo, os participantes realizarão os primeiros testes de ambiente de desenvolvimento que instalaram.

O conteúdo deste módulo é:

  • Lição 1: Introdução ao Xamarin.iOS
  • Lição 2: Introdução ao Xamarin.Android
  • Lição 3: Introdução ao Xamarin.Forms
  • Lição 4: Portabilidade de código .Net (Shared Code / PCL)

Módulo 2: Xamarin Android

Ao finalizar este módulo, os participantes terão uma visão clara da estrutura de um projeto Xamarin.Android. Identificarão os controles gráficos que podem ser utilizados durante o desenvolvimento de seus aplicativos e conhecerão o ciclo de vida de una aplicação Android.

O conteúdo deste módulo é:

  • Lição 1: Introdução à Interface Gráfica em Xamarin
  • Lição 2: Introdução aos Actitivities em Xamarin
  • Lição 3: Controles de UI
  • Lição 4: Introdução ao Aceso de Dados SQLite com Xamarin Android

Módulo 3: Xamarin iOS

Ao finalizar este módulo, os participantes terão uma visão clara da estrutura de um projeto Xamarin.iOS. Identificarão os controles gráficos que podem ser utilizados durante o desenvolvimento de seus aplicativos e conhecerão o ciclo de vida de una aplicação iOS.

O conteúdo deste módulo é:

  • Lição 1: Estrutura de una aplicação iOS com Xamarin
  • Lição 2: Trabalhando com o designer (XIB / StoryBoards)
  • Lição 3: Introdução aos eventos e delegates
  • Lição 4: Introdução aos Controles de UI

Módulo 4: Xamarin Forms

Ao finalizar este módulo, os participantes conhecerão as vantagens de utilizar Xamarin.Forms como alternativa ao Xamarin clássico. Aprenderão os conceitos básicos do padrão MVVM e como aplica-los durante o desenvolvimento de seus aplicativos Xamarin.

O conteúdo deste módulo é:

  • Lição 1: Introdução à Estrutura de Xamarin Forms
  • Lição 2: Modelo-Vista-Vista de Modelo (MVVM)
  • Lição 3: A Estrutura de Linguagem XAML
  • Lição 4: Armazenamento SQLite em Xamarin.Forms
  • Lição 5: Consumo de Servicios REST em Xamarin.Forms

Módulo 5: Serviços de nuvem para seu App em Xamarin

Ao finalizar este módulo, os participantes, participantes terão base para criar seus próprios aplicativos conectados aos serviços do Microsoft Azure. Conhecerão alguns serviços oferecidos pelo Microsoft Azure que o permitiram incorporar de maneira simples, funcionalidades que agreguem valor aos seus aplicativos.

O conteúdo deste módulo é:

  • Lição 1: Introdução ao Azure Mobile Apps
  • Lição 2: Sincronização de dados offline
  • Lição 3: Serviços de Autenticação para seu App
  • Lição 4: Serviços de notificações para seu App

Apache Http Server – Download

6 de fevereiro de 2017 Deixe um comentário

Instalação do Apache HTTP Server para Windows:

Os pacotes -win32-x86-no_ssl.msi não contém nenhum software de criptografia.

Exemplo: OpenSSL, mod_ssl, https.

Versão Link Data Tamanho
2.2.25 httpd-2.2.25-win32-x86-no_ssl.msi 2013-07-10 08:06 5.5 MB
2.2.22 httpd-2.2.22-win32-x86-no_ssl.msi 2012-01-30 22:06 5.4 MB
2.2.21 httpd-2.2.21-win32-x86-no_ssl.msi 2011-09-12 17:02 4.9 MB
2.2.20 httpd-2.2.20-win32-x86-no_ssl.msi 2011-08-31 05:57 4.9 MB
2.2.19 httpd-2.2.19-win32-x86-no_ssl.msi 2011-05-21 18:57 4.9 MB
2.2.19 httpd-2.2.18-win32-x86-no_ssl.msi 2011-05-11 05:34 5.4 MB
2.2.17 httpd-2.2.17-win32-x86-no_ssl.msi 2010-10-18 08:38 5.2 MB
2.2.16 httpd-2.2.16-win32-x86-no_ssl.msi 2010-07-31 18:45 5.1 MB
2.2.15 httpd-2.2.15-win32-x86-no_ssl.msi 2010-03-05 21:07 5.1 MB

Fonte: https://archive.apache.org/dist/httpd/binaries/win32/