Pular para o conteúdo principal

Postagens

Mostrando postagens com o rótulo C#

C# - Notação Big O

Falaremos hoje da notação "Big O", ela não é exclusiva do C#, muito pelo contrário, pode e deve ser aplicado a qualquer tipo de algoritmo, mas como nossos exemplos serão com essa linguagem o classificamos dessa forma. A notação big O é usada na análise de algoritmos para descrever a complexidade de um algoritmo. A ideia é fornecer uma maneira de comparar algoritmos permitindo que os desenvolvedores escolham o mais eficiente. É uma forma de descrever o limite superior da complexidade de tempo ou espaço de um algoritmo em relação ao tamanho da entrada. A notação big O é denotada por "O(f(n))", onde "f(n)" é uma função que descreve o comportamento do algoritmo. A função "f(n)" geralmente é uma expressão matemática que envolve a entrada "n" (por exemplo, "n^2" ou "2^n"). Se o tempo de execução de um algoritmo é proporcional ao quadrado do tamanho da entrada, podemos dizer que sua complexidade de tempo é O(n^2). Isso s

C# - Primeiros passos com Docker

Hoje veremos como disponibilizar uma aplicação console criada com .Net a partir de um contêiner, mas antes vamos entender melhor o que é o Docker, o que exatamente estamos criando e ai sim criar nosso primeiro exemplo. O que é o Docker? " Docker é uma plataforma de software que permite criar, testar e implantar aplicativos em contêineres. Os contêineres são ambientes isolados que contêm todo o software necessário para executar um aplicativo, incluindo código, bibliotecas, dependências e configurações. Eles permitem que os aplicativos sejam executados de forma consistente em diferentes ambientes, como desenvolvimento, teste e produção. " Em resumo, com ele conseguimos empacotar aplicativos e dependências em contêineres portáteis e executá-los em qualquer máquina que possua o Docker instalado. Podemos dizer que temos os seguintes passos para esse processo: Criar uma imagem: possui um conjunto de informações para dizer como um container deve funcionar; Criar um contêiner: com ba

C# - Design Patterns - Template Method

Olá! Seguindo a proposta de padrões de projeto com C#, falaremos hoje sobre o padrão comportamental Template Method.  Para ver outros padrões que já visitamos por aqui consulte esse link . Esse tema foi tratado de forma brilhante  aqui . Template Method Como dito anteriormente ele é um padrão comportamental que define etapas a serem seguidas, ou seja, com esse padrão podemos determinar etapas e a sequencia de execução delas, deixando a cargo de quem está implementantado como será a implementação dessas etapas. E que vantagem Maria leva? Bom, o grande diferencial aqui é poder ter um contrato que não só define o que deve ser feito mas também garante a sequencia a ser seguida, processos que seguem o mesmo roteiro porém de diferentes formas podem se beneficiar desse padrão: Frameworks fornecem métodos abstratos ou hooks para as subclasses personalizarem o comportamento; Algoritmos que têm uma estrutura comum mas detalhes diferentes, como ordenação, compilação ou  mesmo criptografia; Classe

C# - Design Patterns - Chain of Responsibility

Olá a  todos! Seguindo a proposta de padrões de projeto com C#, falaremos hoje sobre o padrão comportamental  Chain of Responsibility . Para ver outros padrões que já visitamos por aqui consulte esse link . Esse tema foi tratado de forma brilhante  aqui . Chain of Responsibility O padrão de projeto Chain of Responsibility é um padrão de design comportamental que permite passar uma solicitação ao longo de uma cadeia de objetos até que um deles a trate. Cada objeto na cadeia tem a chance de tratar a solicitação. É útil quando há múltiplos objetos que podem responder a uma solicitação e você não sabe antecipadamente qual objeto será o responsável. No C#, a implementação deste padrão envolve a definição de uma interface para as solicitações, criação de classes concretas para tratar as solicitações e definição de uma lógica de encadeamento entre essas classes. Ao receber uma solicitação, cada objeto na cadeia verifica se pode tratá-la e, se não puder,

C# - Design Patterns - Strategy

Olá! Seguindo a proposta de padrões de projeto com C#, falaremos hoje sobre o padrão comportamental Strategy. Para ver outros padrões que já visitamos por aqui consulte esse link . Esse tema foi tratado de forma brilhante aqui . Introdução É muito comum no dia dia nos depararmos com necessidades que executam ações de formas diferentes, ou seja, apesar do trabalho ser o mesmo a forma de execução é distinta, exemplos clássicos são a cobrança de impostos (ICMS e ISS são impostos porém cada um tem seu próprio cálculo), cálculos de descontos entre outros.  Nos exemplos citados anteriormente o que temos é uma mesma tarefa que, em determinado fluxo da aplicação deverá ter um comportamento com um resultado e em outro fluxo teremos comportamentos e resultados diferentes. Uma situação muito comum é simplesmente separar o fluxo em "ifs" e em cada bloco codificar o que precisamos, no exemplo dos impostos bastaria um:  if (

C# - Design Patterns

Olá meus queridos! Hoje daremos inicio a uma série de postagens falando sobre Design Patterns e utilizaremos o C# para demonstra-los. Essa (e as próximas postagens) são uma iniciativa após o meu ingresso nos excelentes cursos da Alura sobre essa temática, porém lá a linguagem utilizada é Java. Minha intenção aqui é passar por cada padrão mostrando na prática como resolver problemas cotidianos que já foram pensados e resolvidos. Mas do que se trata "Design Patterns"? Segundo a Wikipédia "padrão de projeto (do inglês design pattern) é uma solução geral para um problema que ocorre com frequência dentro de um determinado contexto no projeto de software", ou seja, para a maioria dos "problemas" mais comuns que enfrentamos no dia a dia já existem soluções propostas, testadas e amplamente utilizadas. Desse modo evitamos "reinventar" a roda para problemas comuns e melhor, escrevemos código padronizado que qualquer pessoa que também conheça os padrões ir

C# - Tipos genéricos

A linguagem C# introduziu a funcionalidade de tipos genéricos com a versão 2.0, permitindo que desenvolvedores escrevam código mais flexível e reutilizável. Os tipos genéricos permitem que você escreva uma classe ou método que funciona com qualquer tipo de dados, em vez de estar preso a um tipo específico. Isso permite que o código seja escrito de forma mais genérica, o que aumenta a sua reutilização. Para entender melhor, vamos dar um exemplo de uma classe simples para gerenciar uma lista de objetos. Sem o uso de tipos genéricos, seria necessário escrever uma classe para cada tipo de objeto que desejássemos gerenciar. Por exemplo, uma classe "ListaDeInteiros", outra "ListaDeStrings", e assim por diante. Com o uso de tipos genéricos, é possível escrever uma única classe "Lista<T>" onde T é o tipo genérico. Isso significa que a classe pode ser usada para gerenciar uma lista de qualquer tipo de objeto, sem precisar escreve

Hangfire - processamento em background fácil no .NET

A necessidade de realizar uma tarefa em segundo plano é muito comum, seja para gravar um arquivo, enviar um e-mail, executar um processo de banco pesado, enfim, qualquer coisa que não deve "bloquear" o usuário no thread principal, e é aí que o Hangfire entra, ele recebe tarefas e as trata em filas realizando a execução em background e mais: As tarefas entram em uma fila e a execução ocorre na sequência; Uma execução só é considerada "falha" quando as tentativas já se esgotaram (por padrão são 10); Dá para criar uma tarefa simplesmente a colocando na fila; Dá para criar um fluxo de execução de tarefas constante dentro de um intervalo; Dá para agendar a execução de tarefas; Dá para condicionar a execução de tarefas após o sucesso de outra tarefa; Todo o fluxo é tratado em tabelas do próprio Hangfire, podendo ser gerido em vários bancos de dados (relacionais ou não); Os registros referentes as tarefas possuem um tempo limitado de vida, depois de concluidos são apagados

Aplicação em três camadas (ASP .NET C#)

Quando iniciamos uma nova aplicação é sempre uma boa ideia (e boa pratica) adotar uma forma de organizarmos os recursos que serão desenvolvidos, seja para garantirmos uma melhor manutenção do que esta sendo construído, uma segurança maior ou mesmo para garantir que determinadas responsabilidades da aplicação (apresentação da informação, regras ou acesso a dados) não influenciem uma nas outras quando for necessária sua alteração (correção ou substituição). Vamos pensar na seguinte situação, em determinado momento no passado nós construímos uma aplicação em ASP para uma empresa, que acessava um repositório em access (jóia não?), ai depois de algum tempo nosso cliente começou a perceber a evolução da internet e solicita a você ajustes nessa aplicação, pois agora ele adquiriu um outro banco de dados e deseja uma nova aplicação web.  Bom, se sua aplicação não foi bem estruturada, ou seja, as coisas acontecem de forma "misturada" com regras de negocio alterando diretamente

Subindo uma solução para o GIT (VS2013)

Segue abaixo uma "receita de bolo" para realizar o controle do código fonte de uma solução desenvolvida no Visual Studio com o Git ( fonte ): Com nossa solução aberta no Visual Studio 2013: Selecionar File | Add to Source Control; Selecionar Microsoft Git Provider; As duas etapas acima irão criar um repositório local do GIT. Agora no Git: No browser de sua preferência (IE 6) abrir a página do GitHub e logar em sua conta; Criar um novo repositório (IMPORTANTE não escolher a opção "Initialize this repository with a README") As duas etapas acima irão criar um repositório vazio sem uma master branch; Uma vez que o repositório tenha sido criado será disponibilizado seu endereço, na primeira página do mesmo, copiar essa URL. De volta ao Visual Studio: É importante que o Git Provider tenha sido escolhido como provedor, verificar em Tools/Options/Source Control/Plug-in Selection Abrir o Team Explorer; Selecionar Home | Unsynced Commits;

Click com botão direito e menu de contexto no Silverlight

Quando o Silverlight 4 foi lançado um dos recursos mais aguardados era o clique do botão direito, até então não era possível incluir nada nessa funcionalidade. Hoje contamos com o "Context Menu control", sendo ele quem iremos mostrar ao clicar com o botão direito. Já apresentamos aqui um exemplo de como realizar isso, hoje mostraremos com mais detalhes. Novo projeto Vamos iniciar o Visual Studio 2010 e criar uma nova aplicação Silverlight (Silverlight Application Project), com o nome ContextMenuSample: Em seguida vamos adicionar as referencias para o "Toolkit", que ira nos permitir trabalhar com "ContextMenu" e "MenuItem": Agora vamos incluir um "TextBox". O click direito apresentará o "context menu", nele teremos dois menus, sendo eles "Grow Font" e "Shrink Font", ao selecionar uma das opções o tamanho da fonte será alterado. Dando continuidade, adicionaremos dois eventos importantes, "Mo

Realizando upload de grandes arquivos para o IIS / ASP.NET

Tamanho máximo de upload no IIS and ASP.NET Ao hospedar uma aplicação web em servidores IIS/ASP.NET devemos especificar o tamanho máximo de upload e o tempo de execução no web.config. Por padrão o valor máximo para upload é de 4096 KB (4 MB), para aumentar esse limite devemos fazer o seguinte: IIS 7.x, para os modos integrado e clássico: < system.webServer > < security > < requestFiltering > < requestLimits maxAllowedContentLength ="2147483648" /> </ requestFiltering > </ security > </ system.webServer >   maxAllowedContentLength : Especifica o tamanho máximo de uma requisição. IIS 6.0: < system.web > < httpRuntime maxRequestLength ="2097151" /> </ system.web > maxRequestLength : Especifica o tamanho máximo de uma requisição. IMPORTANTE! O valor máximo de upload tanto no ASP.NET 2.0 quanto no ASP.NET 4.0 é de 2097151Kb (2Gb). Se for necessário a transferência de arquivos maiores que 2Gb dev

Clique direito em Datagrid (Silverlight)

Uma das coisas mais frustrantes no Silverlight com toda certeza é ver aquela "caixinha" com informações quando clicamos com o botão direito, porque quando executamos essa ação estamos, na maioria das vezes, buscando novas funcionalidades ou informações que dizem respeito ao que estamos vendo naquele momento, mas esse comportamento original pode ser alterado para nossa alegria. No exemplo a seguir iremos apresentar um menu de contexto codificando o evento "MouseRightButtonDown" do DataGrid: xmlns:grid="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" > < grid :DataGrid MouseRightButtonDown="_grid_MouseRightButtonDown" > < toolkit:ContextMenuService.ContextMenu > < toolkit:ContextMenu> < toolkit:MenuItem

Netduino + Arduino Ethernet Shield

Depois de um bom tempo sem postar, nada como uma ameaça de processo por uma postagem de 2010 para dar aquela vontade de voltar a escrever (não, não é sobre politica). No final do ano passado travei uma pequena e peculiar batalha com o Arduino Ethernet Shield , ele deveria ter sido a parte mais simples do meu projeto já que a conexão é simples, basta apenas encaixar e o driver já esta todo escrito em C#, porém não foi bem assim. A principio fui por eliminação, revisei as configurações de rede (roteador, notebook e projeto), depois revisei as configurações de acesso e permissão, desativei firewall, antivírus e nada. Em seguida testei portas, troquei cabo, troquei roteador, testei em ambiente completamente diferente (roteador, notebook). O mais estranho era ver que a porta do roteador ficava acesa, assim como o da placa, mas nada de comunicação. A essa altura já comecei a temer o pior, importar outras placas literalmente não estava em meus planos, mais uma vez recorri ao fórum mas min

Netduino + LCD Nokia 5110

Em meu post anterior falei um pouco sobre o Netduino, fizemos nosso primeiro “Hello World” com a luz da própria placa piscando e agora vamos escrever em uma tela de LCD. O LCD que eu escolhi foi o Nokia 5110, ele é bem simples, tem baixo consumo de energia e possui um único chip para todas as suas funções, tem 84 colunas por 48 linhas e originalmente foi desenvolvido para celulares. Eu o escolhi por ser diferente dos tantos LCDs menores (16 colunas por 2 linhas) que eu vi em vários tutoriais, como encontrei no próprio fórum um post dedicado a ele me empolguei e decidi que ele seria minha escolha (para quem estiver interessado eu comprei aqui ). Quando abri a caixinha vermelha da sparkfun e peguei o LCD a primeira coisa que me vaio a cabeça foi “e agora como eu ligo esse cara no Netduino”, como eu não tinha ideia entrei no fórum e perguntei e prontamente me ajudaram, em menos de dois dias meu amigo Stefan (moderador do fórum) documentou como fazer essa conexão ( para mais detalhes ).

Netduino

Recentemente o adquiri para um projeto da especialização, mas o que ele é e porque foi minha escolha? Bom primeiramente como era necessário o uso de .net para esse projeto comecei a procurar algo diferente e então encontrei o netduino , que é uma plataforma eletrônica open source que usa o .net micro framework. Maravilha não? Com isso poderei usar c# para controlar um hardware! Infelizmente não o encontrei no Brasil, tive que importar, acabei escolhendo a Proto Advantage para fazer a compra e como meu primeiro pedido acabou no buraco negro dos correios o pessoal de lá acabou me mandando outro sem custo algum, tive apenas que arcar com metade do frete (fica ai a dica para os interessados, o atendimento dessa empresa é ótimo). Já existe uma comunidade relativamente ativa, no fórum do site oficial existem vários projetos já em andamento com drivers para lcds, rfids, rede, sensores entre outros, tudo bem explicado, com os esquemas eletrônicos e exemplo dos códigos (sem contar a boa v

Envio de e-mail no Silverlight

  Enviar e-mail é algo corriqueiro mas ainda existem alguns sites que se descuidam na hora de deixar aquele espaço reservado para que possamos entrar em contato, com dúvidas, sugestões ou reclamações. Usando o Silverlight não pode ser diferente, seja qual for a funcionalidade envolvida, iremos disponibilizar hoje uma maneira para mandar e-mails, abaixo mostraremos a classe responsável pelo envio, o projeto pode ser baixado aqui , dúvidas e sugestões são bem vindas nos comentários. 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; 5: using System.Web.Services; 6: using System.Net.Mail; 7: using System.Configuration; 8: using System.Net.Configuration; 9: using System.Net; 10: using System.Web.Configuration; 11: using System.Text; 12:   13: namespace Email_Silverlight.Web 14: { 15: /// <summary>