Meus Projetos

Nesta categoria serão postados assuntos referentes à meus projetos pessoais.

MVVM Starter Pack – Iniciando no MVVM – C#

Introdução

Fala pessoal, tudo bom?

Nesse post irei falar um pouco sobre o padrão de projetos chamado MVVM (Model – View – ViewModel) usado principalmente em aplicações XAML (WPF, UWP, Xamarin e etc).

Saliento, que a intenção aqui não é desenvolver um curso, ou um material completo sobre o assunto. Existem inúmeras fontes sobre. Se trata de um manual básico para a implementação desse padrão para pessoas que já possuem um conhecimento, ainda que básico, sobre o XAML e programação em geral.

Embora o projeto de exemplo que iremos desenvolver e eu disponibilizarei ao final tenha sido escrito para o WPF (Windows Presentation Foundation), os conceitos, classes e técnicas que abordarei neste post são como se fossem um Starter Pack para o MVVM. Independente de quem seja você ou qual seja o segmento do sistema/software/aplicativo ou plataforma (WPF, UWP, Xamaring…) que você pretende desenvolver usando MVVM, você irá, com toda certeza, usar a grande maioria do conteúdo que vou apresentar.

Então, fique tranquilo and here we go!

Conceitos

Para começar, vamos tentar entender o porquê de implementar um padrão de projeto.

(mais…)

Anúncios

.NET CORE: API para conversão de moedas – Yahoo Currency

Yahoo Currency

Salve galera. Na verdade, eu já havia feito uma postagem sobre isso no passado. Mas decidi reescrever algumas partes do código e atualizar o projeto (de Portable Class Library) para uma Class Library(.NET CORE 2) que é multi plataforma.

O funcionamento é o mesmo, a diferença principal fica pelo suporte à assincronicidade permitindo que você use métodos async e use await.

Esse é mais um projeto livre e open source que estou disponibilizando no meu GITHUB.

Os códigos estão sumarizados(documentados) e acompanham um Demo em WPF.

Abaixo uma pequena porção de código:

        ///

        /// O código abaixo é um exemplo simples de como usar os webservices de moeda de forma assíncrona
        /// 

        /// 
        public static async Task AsyncExample()
        {
            HL.YahooCurrency.Currency currency = new HL.YahooCurrency.Currency();

            //VOCÊ DEVE INCLUIR A LINHA ABAIXO OBRIGATORIAMENTE
            //É de extrema importância que você use o método WaitLoad() para aguardar a inicialização desse objeto, que ocorre de forma assíncrona
            await currency.WaitLoad();

            //Seleciona a moeda de origem
            currency.SourceUnit = currency.Units.ElementAt(0);
            //Seleciona a moeda de destino, para a qual se quer converter um valor
            currency.OutputUnit = currency.Units.ElementAt(1);
            //Dá um valor para conversão
            currency.SourceValue = 2.32f;
            //Mostra o valor convertido para a moeda de destino
            System.Diagnostics.Debug.WriteLine(currency.OutputValue);
        }

        ///

        /// O código abaixo é um exemplo simples de como usar os webservices de moeda de forma síncrona(normal)
        /// 

        public static void SynchronousExample()
        {
            HL.YahooCurrency.Currency currency = new HL.YahooCurrency.Currency();

            //VOCÊ DEVE INCLUIR A LINHA ABAIXO OBRIGATORIAMENTE
            //É de extrema importância que você use o método WaitLoad() para aguardar a inicialização desse objeto, que ocorre de forma assíncrona
            //Ao invés de usar await, você pode usar o método .Wait() em contextos síncronos.
            //Dessa forma, a thread em execução irá ser bloqueada por algumas frações de tempo, até que o carregamento dos dados seja feito completamente
            //Normalmente, isso deverá tomar cerca de 1 segundo, mas em conexões de internet mais lentas, pode levar até 6. Ou seja, a interface de usuário irá ficar bloqueada durante esse tempo
            currency.WaitLoad().Wait();

            //Seleciona a moeda de origem
            currency.SourceUnit = currency.Units.ElementAt(0);
            //Seleciona a moeda de destino, para a qual se quer converter um valor
            currency.OutputUnit = currency.Units.ElementAt(1);
            //Dá um valor para conversão
            currency.SourceValue = 2.32f;
            //Mostra o valor convertido para a moeda de destino
            System.Diagnostics.Debug.WriteLine(currency.OutputValue);
        }

Gostou?

Detalhe, esse objeto YahooCurrency pode ser usado diretamente no XAML, pois ele implementa a interface INotifyPropertyChanged, permitindo que seja feito Data Bindings. Quando usando em XAML ele irá operar, por padrão, de forma assíncrona. Você deverá utilizar a propriedade IsLoading para exibir alguma mensagem de carregamento para o usuário (enquanto os dados são baixados) e/ou desabilitar os controles da interface.

Isso tudo que mencionei acima está implementado no exemplo em WPF que acompanha a API.

Chega de papo, aí está o link:

GitHub – HerbertLausmann/HL.YahooCurrency: .NET C# Multiplatform wrapper for Yahoo Currency Web Service. Convert between over 100 different currencies.

Lembrando, que como ela é escrita sob os padrões do .NET STANDARD 2, você poderá usa-la no Xamarin, Mono e etc.

Um abraço!

.NET CORE: API de previsão do tempo – Yahoo Weather

Surprise modafocas!

Queridos colegas, amigos, parceiros, compatriotas, conterrâneos, irmãos!

Nesse post venho apresentar-vos a minha API (escrita em C#/.NET CORE2) para previsão do tempo.

Ela é, basicamente, uma ponte em C# para o WebService de clima do Yahoo. Com ela você consegue obter muitas informações sobre o clima numa dada região, como por exemplo:

  1. Horário do nascer e pôr do sol
  2. Umidade e pressão atmosférica
  3. A sensação térmica, direção e velocidade do vento
  4. As temperaturas máxima e mínima previstas para a previsão
  5. Previsão do dia atual e dos 9 dias à frente

O webservice do yahoo, originalmente, retorna apenas os resultados em inglês. Mas eu adicionei suporte à globalização e assim ela emite os textos da previsão (Ex: Parcialmente Nublado, Chuvoso) em português.

Vale destacar que, sendo uma api escrita para o .NET CORE, ela pode ser usada em múltiplas plataformas, incluindo o XAMARIN e o MONO.

Ela também implementa a interface INotifyPropertyChanged podendo ser usada tanto em código (C#/VB.NET, whatever) quanto no XAML com Data Binding.

Saliento, também, que implementei suporte assíncrono. Você pode fazer umas coisinhas assim:

            YahooWeather weather = await YahooWeather.LoadAsync("New York city");
            Console.WriteLine(weather.Condition.Text);

Bacana né?

Isso tudo disponibilizado gratuitamente e com código aberto no GITHUB:

GitHub – HerbertLausmann/HL.YahooWeather: A .NET C# Multiplatform wrapper for the Yahoo Weather API

Divirta-se!
That’s all folks!

Criando um ícone personalizado para seu Aplicativo Windows – DICA

Icon Pro

Criando um ícone a partir de um arquivo SVG

GitHub – HerbertLausmann/HL.IconPro

Fala galera, beleza?!

Neste post eu venho lhes (re)apresentar minha ferramenta open source para criação de ícones para o Windows.

Como vocês podem ver acima, no GIF, é bem simples!! Basta selecionar uma imagem (PNG ou SVG), selecionar os tamanhos que irão para dentro do ícone, e pronto! Só salvar!

(mais…)

.NET: Medir força de senhas – C#

Password Strength.gif

Visualizando em tempo real a força da senha

Salve internautas! Tudo tranquilo?!

Então, depois de quase um ano após a última postagem, eis que eu retorno da cinzas, e mais zika dos códigos ainda haha! Aproveitando que entrei de férias (permanentes) agora posso me dedicar a uma coisa que gosto muito: Programação!

E nada melhor que elaborar uma postagem didática e útil, pois eu amo compartilhar conhecimento!

Chega de papo, and let’s go!

Já precisou alguma vez medir a força de uma senha? Bom, eu nunca, mas como precisava de um passatempo, resolvi estudar uma maneira de como fazer isso.

(mais…)

.Net Portable: API de conversão de moedas com WebService do Yahoo – +100 Moedas – C#

Pode parecer tarefa fácil, mas não é. O fato é que, encontrar um bom WebService, que atenda às suas necessidades, que seja gratuito e simples de usar é algo um pouco complicado. Por isso, escrevo este post!

Recentemente eu descobri que o Yahoo possui um WebService de financias, e que o mesmo disponibiliza uma tabela para conversão de moedas, com as principais moedas do mundo. Para obter os dados do WebService é necessário, apenas, fazer um Request e pegar o Response do link abaixo:

http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote

Ele vai retornar um arquivo XML contendo os valores das moedas, e isso de forma atualizada.

Tendo isso em mãos, já é possível criar um ótima API para conversão de valores monetários. Mas eu fui além. Baseado na página web abaixo, eu criei um pequeno banco de dados que reúne as principais informações de cada moeda, como por exemplo: País, Código, Simbolo, Imagem da Bandeira do País, e o Nome da moeda.

Currency Symbols – All existing currency symbols

E eu fui ainda mais além!! A API foi projetada para funcionar offline também, pois é possível salvar a tabela de conversão e carrega-la quando não quiser baixar o da internet.

E para fechar com chave de gold: A API é multiplataforma. É uma Portable Class Library, que pode ser referenciada em programas desktop, aplicativos Windows Phone e Windows Store, Silverlight, e um outro que eu esqueci.

Ah, e sem falar que as classes foram projetadas para funcionarem em harmonia com o XAML. De fato, você pode fazer Data Binding e fazer conversões monetárias sem usar praticamente nenhum código. Um exemplo (WPF):

Yahoo Currency Demo

E graças à forma como foi projetado, a DLL garante conversão em tempo real! Isso porque a tabela de conversão é baixada e armazenada de uma única vez na memória. E o banco de dados que possue as informações de cada moeda foi incluído dentro da API.

Algo muito útil, em sistemas financeiros e demais da categoria…

Bom, segue o projeto completo da API, do aplicativo demo, e da ferramenta que eu criei para montar o base de dados:

HL.Yahoo.Currency

Espero que possa ser útil à vocês!

Grande abraço.

Kernel: Obtendo os processos que estão usando um arquivo – C#

Pode parecer tarefa fácil, mas não é. O fato é que, obter o processo ou os processos que estão usando um arquivo/pasta é uma tarefa com uma pitada de complexidade em C++ e realmente complexa em C#/VB devido às diversas importações de funções necessárias.

No entanto, existe um utilitário gratuito que lhe permite descobrir essas coisas de forma super simples. Falo do Handle:

O Handle é um Console Application que faz todo o trabalho árduo; Você apenas especifica o caminho para um arquivo ou pasta e ele lhe retorna os processos que o estão usando.

Sendo assim, vou mostrar como usar este utilitário. Primeiro, obviamente faça o Download dele no link acima. Descompacte o arquivo zip e copie o arquivo Handle.exe para a pasta da sua aplicação. Então o poderá colocar em funcionamento o código abaixo:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;

namespace System.IO
{
    public static class Kernel
    {
        /// <summary>
        /// Returns all the processes locking a file/folder
        /// </summary>
        /// <param name="path">The full path to file/folder to inspect</param>
        /// <returns>A IEnumerable containing all the processes locking the file/folder</returns>
        public static IEnumerable<Process> GetProcessesLockingFile(string path)
        {
            string currentDirectory = System.IO.Path.GetDirectoryName(new Uri(
                System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath);
            string handlePath = currentDirectory + "\\handle.exe";
            ProcessStartInfo handleStarting = new ProcessStartInfo(handlePath);
            handleStarting.UseShellExecute = false;
            handleStarting.RedirectStandardOutput = true;
            handleStarting.Arguments = "\"" + path + "\" /accepteula";
            handleStarting.Verb = "runas";
            handleStarting.CreateNoWindow = true;
            Process handleProcess = Process.Start(handleStarting);
            handleProcess.WaitForExit();

            string outputTool = handleProcess.StandardOutput.ReadToEnd();

            string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
            foreach (Match match in Regex.Matches(outputTool, matchPattern))
            {
                Process pr = null;
                try
                {
                    pr = Process.GetProcessById(int.Parse(match.Value));
                }
                catch { }
                if (pr != null)
                    yield return pr;
            }
            yield break;
        }
    }
}

Esse código, basicamente, executa o utilitário e faz a leitura do resultado convertendo-o em um Enumerable de processos que estão usando o arquivo/pasta.

Mas, devo salientar algo muito importante:

O fato de um programa abrir um arquivo não quer dizer que ele esteja usando este arquivo. Se você abrir uma música no Windows Media Player ele irá carregar o conteúdo do arquivo para a memória, fechar este arquivo e então reproduzir. No fim das contas o código não irá detectar nenhum programa usando este arquivo de música, pois, realmente, nenhum está utilizando.

O mesmo pode acontecer com qualquer arquivo, pasta e software…

E, de brinde, vou disponibilizar para download um projeto de um programa pequeno para inspecionar arquivos e pastas para saber se estão sendo usados:

File Locker.zip

That’s all folks!

Fonte: c# – How do I find out which process is locking a file using .NET? – Stack Overflow