.NET – Saiba como gerar um boleto bancário com apenas duas linhas de código

Vamos criar um boleto bancário com duas linhas de código? Não acredita? Então olhe o exemplo abaixo:

Cobranca c = new Cobranca("token_conta", "cedente_token");
var boleto = c.Gerar("Joaquim Lima", "445454555", "email@email", 3m);

A tarefa de criar um software para emitir boleto bancário, e em seguida , integrar a carteira de cobrança com o banco pode exigir um tempo muito considerável de trabalho de desenvolvimento, pensando nisso, procurei na internet um serviço que possibilitasse a criação de boleto bancário via internet (para qualquer banco) , e que me desse a possibilidade de integrar de forma fácil com o meu aplicativo… Achei vários… Mas optei pela plataforma Pagamento Ágil (www.pagamentoagil.com.br)

Após uma lida na documentação do site de cobrança, iniciei um projeto open source de classe no GitHub para ser utilizado em aplicativos .NET , basicamente você deverá fazer o download do componente PagamentoAgil.Net.dll , em seguida, adicioná-lo como referência em seu projeto, e repetir o código acima.

O Download desta biblioteca pode ser realizado através do site: https://github.com/ivaldojunior/PagamentoAgil.Net

Se eu puder ajudar em algo…

Obrigado pela leitura 😉

C# Paralelismo

Neste artigo, menciono exemplos de códigos feitos em C#, onde tento explorar um pouco mais da computação paralela de tarefas.

Falando a grosso modo, basicamente, o programa cliente quando executado, começa em uma única thread  (“main” thread),  segmento este, criado automaticamente pelo CLR e o Windows.

Quando usamos o paralelismo, este segmento (thread) é dividido em vários outros segmentos (threads), criando segmentos adicionais, desta forma, aproveitamos melhor o poder do processamento da máquina e fazemos o programa fluir mais rapidamente.

Vamos na prática entender melhor o seu funcionamento.

class TarefaTeste
{
 static void Main()
 {
     Thread t = new Thread (EscreveLetra); // INICIAMOS UM NOVO SEGMENTO
     t.Start(); // EXECUTANDO...

// Ao mesmo tempo, vamos fazer alguma coisa no segmento principal.
for (int i = 0; i < 1000; i++) Console.Write ("1");

}

static void EscreveLetra()
{
for (int i = 0; i < 1000; i++) Console.Write ("a");

}
}

O thread principal cria uma nova thread t em que é executado um método que imprime repetidamente o caráter “a”. Simultaneamente, o segmento principal imprime repetidamente o número 1.

No próximo código, vejamos um exemplo onde notamos que o CLR atribui para cada Thread uma pilha de memória individual mantendo desta forma uma cópia da variável “z” para cada thread em execução.

static void Main() 
{
  new Thread(Imp).Start();      // Chamada do método Imp() em um novo segmento
  Imp();                         // Chamada Imp()na thread principal
}
 
static void Imp()
{
  // declarar e usar uma variável local - "z"
  for (int z = 0; z < 5; z++) Console.Write('Z');
}

No exemplo acima, definimos um método com uma variável local, em seguida, chamamos o método simultaneamente no segmento principal.

Abaixo exemplifico uma lógica viável para lidar com uma situação similar.

class TarefaTest
{
  bool feito;
 
  static void Main()
  {
    TarefaTest t = new TarefaTest();   // cria uma instancia comum
    new Thread (t.Imp).Start();
    t.Imp();
  }
 
  // Note que Imp é agora um método de instância
  void Imp() 
  {
     if (!feito) { feito = true; Console.WriteLine("pronto"); }
  }
}

Como os dois segmentos chamam o método Imp() na mesma TarefaTest, note que eles compartilham a variável “feito”. Isso resulta em “pronto”  impresso uma vez… ao invés de duas vezes.

Falando de variáveis estáticas, as  mesmas oferecem uma outra maneira de compartilhar dados entre as threads. Veja um exemplo similar de código logo abaixo:

class TarefaTest
{
  static bool feito;
 
  static void Main()
  {
    new Thread (Imp).Start();
    Imp();
  }
  
  static void Imp() 
  {
     if (!feito) { feito = true; Console.WriteLine("pronto"); }
  }
}

Ambos os exemplos ilustram um outro conceito fundamental: o de thread safety (ou melhor, a falta dela!).

Note que a saída é na verdade indeterminada, é possível que a variável “feito” poderia ser impressa duas vezes, e este risco aumenta se você trocar a ordem das declarações do método Imp, veja abaixo um exemplo:

 
  static void Imp() 
  {
     if (!feito) { Console.WriteLine("pronto"); feito = true;  }
  }

O problema é que uma thread enquanto avalia a condição if, a outra poderia já estar executando o WriteLine, isso antes que tivesse a chance de definir o feito para true.

A solução seria obter um bloqueio exclusivo ao ler e escrever para a variável comum.

Veja o exemplo abaixo:

class TarefaTest
{
  static bool feito;
  static readonly object protege = new object() 
  static void Main()
  {
    new Thread (Imp).Start();
    Imp();
  }
  
  static void Imp() 
  {
     lock (protege)
     {
       if (!feito) { Console.WriteLine("pronto"); feito = true;}
     }
  }
}

No exemplo acima, quando duas threads simultaneamente enfrentar um bloqueio (neste caso, protege) , uma thread espera, até que o bloqueio se torna disponível. Neste caso, ele garante apenas que uma thread execute a seção do código protegida.

A seção do código protegida é denominada thread-safe.

Hoje em dia a maior complexidade em programação multithreading é a questão do compartilhamento de campos (variáveis).

No exemplo abaixo, mostro como fazer uma thread aguardar a finalização de outra.

class TarefaTest
{
 
  static void Main()
  {
    Thread t = new Thread(Imp);
    t.Start();
    t.Join();
    Console.WriteLine("A thread t acabou...!!");
  }
   
  static void Imp() 
  {
      for (int z = 0; z < 5; z++) Console.Write('Z');
  }
}

Existe também uma forma de criar um tempo limite, seja em milisegundos ou como um TimeSpan. Em seguida, retorna true se a thread terminou, ou false se esgotou..

No próximo artigo mostro como faremos isso..

 

 

Método Subtract() da classe DateTime da linguagem C#

Utilizando o método Subtract() da estrutura DateTime da linguagem C#

Neste artigo, mostro um exemplo de código na linguagem C# que foi utilizado para pesquisar clientes pela faixa de idade em uma lista da classe pessoa, para isto, foi utilizado a classe LINQ e o método Subtract().

O método Subtract subtrai a data e hora especificadas, veja no exemplo de código a seguir uma consulta de clientes por faixa de idade.

Ivaldo de Oliveira é desenvolvedor sênior de software

C# Exemplo de um leitor de feed RSS (RSS feed Reader)

C# Exemplo de um leitor de feed RSS  (RSS feed Reader)

Neste post vou mostrar um exemplo simples da utilização da classe LINQ para consultar um xml, neste caso, um “feed ” RSS. Se você tem dúvida do que é a tecnologia RSS sugiro uma busca prévia na web para entender sua funcionalidade.

No exemplo abaixo, crio um projeto do tipo console no Visual Studio.
Abaixo segue o exemplo da estrutura xml do RSS.




Ivaldo de Oliveira é desenvolvedor sênior de softwares






Como pegar uma página ou um arquivo da web utilizando C#

Como pegar uma página ou um arquivo da web utilizando C#

Voltando a falar da linguagem C# (.net) , a proposta desta vez seria como pegar uma página da web e salvá-la no disco ou no banco de dados por exemplo, note que através deste mesmo código você poderia pegar uma imagem da web (de um endereço url) dentre outras muitas coisas possíveis…

Existem várias situações que nos fazem pensar da utilidade desta função, no meu caso, eu tinha que armazenar um valor diário de uma determinada página web dinâmica no meu banco de dados, contudo, visando a confecção deste artigo, criei uma função mais “genérica”  , desta forma, você poderá ter uma direção mais segura de como proceder como o seu código.

Conforme a tecnologia utilizada , optei desta vez pela classe System.Net , disponível no .Net framework .

De forma prática o código abaixo foi escrito com várias linhas de comentários .

I

Ivaldo de Oliveira é desenvolvedor sênior de software