Mês: março 2014

Randomizer: Gerar números aleatórios sem repetição, letras, palavras e mais – C#

Nos últimos tempos tenho visto algumas perguntas nos Fóruns do MSDN sobre como gerar um número aleatório sem repetição. Resolvi estudar o problema e então criei uma classe chamada Randomizer que permite gerar números aleatórios sem repetir, letras aleatórias, palavras aleatórias (leia-se: aglomerado de várias letras aleatórias), caracteres, e dígitos (leia-se: um número de 0 a 9).

Segue o código:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HL
{
    /// <summary>
    /// Métodos avançados para randomização
    /// </summary>
    static class Randomizer
    {
        static Randomizer()
        {
            listRandom = new Random();
            nextRandom = new Random();
            nextRandomHistory = new ArrayList();
        }
        private static Random listRandom;
        private static Random nextRandom;
        private static ArrayList nextRandomHistory;
        /// <summary>
        /// Gera uma lista preencida com números organizados de forma aleatória
        /// </summary>
        /// <param name="min">O número de partida</param>
        /// <param name="count">Quantidade de números</param>
        /// <returns></returns>
        public static IList<int> Random(int min, int count)
        {
            IList<int> list = Enumerable.Range(min, count).OrderBy(r => listRandom.Next()).ToList();
            return list;
        }
        /// <summary>
        /// Gerar um número aleatório único
        /// </summary>
        /// <returns>Retorna um número aleatório único nesta instância do aplicativo</returns>
        public static int Next()
        {
            int value = nextRandom.Next();
            while (true)
            {
                if (!nextRandomHistory.Contains(value))
                {
                    nextRandomHistory.Add(value);
                    return value;
                }
                value = nextRandom.Next();
            }
        }
        /// <summary>
        /// Gerar uma letra aleatória
        /// </summary>
        /// <returns></returns>
        public static char RandomLetter()
        {
            return (char)((new int[] { nextRandom.Next(65, 90), nextRandom.Next(97, 122), nextRandom.Next(128, 166) })[nextRandom.Next(0, 3)]);
        }
        /// <summary>
        /// Gerar um número de 0 a 9 aleatóriamente
        /// </summary>
        /// <returns></returns>
        public static int RandomDigit()
        {
            return nextRandom.Next(0, 10);
        }
        /// <summary>
        /// Gerar um caractere aleatório
        /// </summary>
        /// <returns></returns>
        public static char RandomChar()
        {
            return (char)nextRandom.Next(1, 256);
        }
        /// <summary>
        /// Gerar uma palavra com letras aleatórias
        /// </summary>
        /// <param name="charCount">Quantidade de letras</param>
        /// <returns></returns>
        public static string RandomWord(int charCount)
        {
            StringBuilder str = new StringBuilder();
            char previous = (char)0;
            for (int i = 1; i <= charCount; i++)
            {
                char rnd = RandomLetter();
                while (true)
                {
                    if (rnd != previous) break;
                    rnd = RandomLetter();
                }
                str.Append(rnd);
                previous = rnd;
            }
            return str.ToString();
        }
    }
}

A função Next() gera um número aleatório único na instância do aplicativo, ou seja, se você fechar o aplicativo e abrir novamente pode ser que seja gerado um mesmo número gerado anteriormente na outra instância.

Intelli Clip 1.0 Beta

[ATUALIZAÇÃO]

Versão final lançada: Intelli Clip 1.1

[ATUALIZAÇÃO]

 

Bom, depois de vários testes resolvi disponibilizar o Intelli Clip para download, mesmo assim, ainda está em versão beta.

É apenas um arquivo zipado, basta descompactar e rodar!

Ele é bem pequeno, só ocupa 200KB em disco.

Intelli Clip 1.0 Beta.zip

Ah, e para executá-lo é necessário ter o .Net Framework 4 instalado. Se você não tiver ele instalado, baixe nesse link:

Baixar Microsoft .NET Framework 4 (Instalador da Web)

ou

Baixar Microsoft .NET Framework 4 (Instalador Autônomo)

E se você ainda não sabe o que é o Intelli Clip, veja aqui.

.NET: As várias maneiras de sair de um aplicativo

Neste post irei apresentar e falar um pouco sobre as várias maneiras de sair, fechar, um aplicativo em execução.

No Windows Forms, quando precisamos sair do aplicativo é só chamar o método System.Windows.Forms.Application.Exit (System.Windows.Forms).

No Windows Presentation Foundation é só chamar o método System.Windows.Application.Current.Shutdown (System.Windows).

Contudo, em determinados casos e/ou se o aplicativo for multi-threading e possuir uma ou mais threads em execução fazendo algum trabalho, esses métodos citados acima fecharão as janelas do aplicativo, porém só irão terminar o processo após a conclusão da execução de todas as outras threads.

Para tais situações, a forma mais apropriada é chamar o método System.Environment.Exit (System) informado 0 no parâmetro. Basicamente esse método irá tentar terminar o aplicativo numa boa, mas se não conseguir então ele vai fechar na marra mesmo!

Vale citar, também, que no Visual Basic nós temos a instrução End que finaliza a execução do aplicativo instantaneamente. Internamente, essa palavra-chave chama o método System.Environment.Exit (System). Sendo assim, esse é o equivalente de End no C#.

Uma outra forma de terminar o aplicativo instantaneamente é chamar o método System.Diagnostics.Process.GetCurrentProcess().Kill (System.Diagnostics). Mas eu acho que essa seja uma forma um tanto radical…

Bom, é isso! 😉

Editores de HTML online e gratuitos

Certas vezes precisamos editar ou criar alguns pequenos trechos HTML. Para essa tarefa existem editores online que podem nos auxiliar bastante nessas tarefas mais simples:

Online HTML Editor: Real time online with preview

Free HTML Editor

HTML EDITOR.in: Free Online WYSIWYG HTML and HTML5 Editor

Eu usei o primeiro para criar a minha assinatura (Com os links pro meu blog) dos Fóruns do MSDN, e achei muito prático. 😀

WPF: Aplicativo de instância única

No Wpf não existe a opção (nas propriedades do aplicativo) para configurar o app como Single Instance (Instância única, ou seja, só será mantido um por vez em execução).

Mas isso não é difícil de implementar. Segue o código do arquivo App.xaml.cs:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Windows;

namespace Meu_App
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {

        protected override void OnStartup(StartupEventArgs e)
        {
            if (IsAppAlreadyRunning())
            {
                MessageBox.Show("O aplicativo já está em execução!", "Já está em execução", MessageBoxButton.OK, MessageBoxImage.Warning);
                Process.GetCurrentProcess().Kill();
            }
            base.OnStartup(e);
        }

        private static bool IsAppAlreadyRunning()
        {

            Process currentProcess = Process.GetCurrentProcess();

            if (Process.GetProcessesByName(currentProcess.ProcessName).Any(p => p.Id != currentProcess.Id && !p.HasExited))
            {
                return true;
            }

            return false;

        }

    }
}

Problema resolvido! Como mostrado, dessa forma é possível exibir uma MessageBox ao usuário informando que o aplicativo já se encontra em execução.

😀

EPaint: Meu programa de desenho – VB.NET

Há alguns anos, quando eu ainda era noob na programação eu criei um programa de desenho bem simples, mas que acabou se tornando o projeto mais divertido que eu já criei, e um dos melhores, apesar da extrema simplicidade. Segue um print, e um link para download (EXE e código fonte):

EPAIN Print

PS.: Eu esqueci de desenhar o N kkkk

Bom, segue o link para download:

EPaint.zip

É muito bom para aliviar o stress 😉