Criando efeitos em fotos no ASP.NET

Bom, sei que já escrevi esse artigo no linha de código e no código fonte, e também sei que não posto nada construtivo em meu blog faz tempo…  ;-)

por isso estou dando um copy+paste dele aqui em em blog!  ;P

Vamos lá….

O .Net possui uma excelente biblioteca para tratamento de imagens,  ela nos possibilita gerar efeitos,  recortes, desenhos  e etc, tudo através de uma “simples página asp.net.

Antigamente para criar efeitos em fotos precisavamos usar alguma IDE gráfica para depois publica-las na internet. Hoje podemos fazer isso on-line, sem perder tempo.

Neste momento você deve estar pensando, “isso deve ser algo MUITO DIFICIL!”

Mas acredite, não é!

Hoje teremos uma prova de como é fácil e simples brincar com fotos usando Dot.Net.

Para começar abra o Visual Studio, em seguida crie um projeto WebSite.

Em seu WebForm,  arraste 3 controles de imagem.

Defina uma imagem para o controle Image1.

Para o controle Image2 defina a ImageUrl como fotos.apx?tipo=negativo e para o controle Image3 defina a ImageUrl como fotos.apx?tipo=cinza

Exemplo:

<asp:Image ID=”Image1″ runat=”server”

ImageUrl=”foto.jpg” /><br />

<asp:Image ID=”Image2″ runat=”server”

ImageUrl=”fotos.aspx?tipo=negativo” /><br />

<asp:Image ID=”Image3″ runat=”server”

ImageUrl=”fotos.aspx?tipo=cinza” />


Acho que já deu para entender  o que vamos fazer mais adiante, certo? :-]

No .cs de sua página, adicione os namespaces System.Drawing e System.Drawing.Imaging em seguida crie o método Efeito. Este método possui a seguinte assinatura:

public void Efeito(string tipo)

Implementação:

public void Efeito(string tipo)

{

/*Aqui estamos definindo nossa imagem. Note que estamos carregando a imagem definida no Image1.
*No artigo gerando barras expliquei como funciona a classe Bitmap.*/

Bitmap bmp = new Bitmap(Server.MapPath(this.Image1.ImageUrl));

int x, y;

Byte RGB;

Color cor;

for (y = 0; y < bmp.Height; y++)

{

for (x = 0; x < bmp.Width; x++)

{

/*O metodo getPixel como o nome já diz,passa a cor do pixel nas posições de x,y.*/

cor = bmp.GetPixel(x, y);

RGB = cor.G;

/*Neste ponto escolhemos qual efeito usar. Lembrando que você pode criar seus próprios efeitos, basta modificar os valores do RGB.*/

if(tipo == ”negativo”){

// Configuração para gerar o efeito de NEGATIVO

bmp.SetPixel(x, y,

Color.FromArgb(255, 255 – cor.R,

255 – cor.G, 255 – cor.B));

}

else

{

/* ajuste para gerar efeito cinza em sua foto! */

bmp.SetPixel(x, y, Color.FromArgb(RGB, RGB, RGB));

}

}

}

/* Neste ponto você informa ao browser que o documento enviado a ele, é uma imagem;*/

Response.ContentType = ”image/jpeg”;

bmp.Save(Response.OutputStream,ImageFormat.Jpeg);

bmp.Dispose();

}

No Page_load de sua página adicione a instrução abaixo.

if(Request.QueryString["tipo"] != null)

Efeito(Request.QueryString["tipo"]);

O resultado será semelhante a imagem abaixo:

viu como a mágica acontece?  ;-)

[]’s

Animação com javascript puro em 45 linhas

Alguns dias atrás tirei 15 minutos de meu trabalho para fazer algo com um efeito de uma bola quicando em uma area definida no browser usando javascript ( não irei contar a verdadeira história que me levou a fazer isso, pois é algo longo…. :P ),  e como vi que ficou legal, achei bacana mostrar isso para vocês.

Espero que esse exemplo ajude alguém a ter novas ideias!  ;-)

Antes de colar o fonte + o link demo, quero dizer que somente testei esse efeito no Firefox e Chrome se alguém puder me da um feedback, ficarei feliz!  :-)

FONTE:

<script language=javascript>
var LIMITE_Y = 200,LIMITE_X = 200,LIMITE_BARRA = 0,DELAY = 10, VELOCIDADE = 2, X = 0, Y = 0;
var PAUSE = false;
var SENTIDO_Y = “D”, SENTIDO_X= “B”;
window.onload = function(){
var BOX = document.getElementById(“box”);
var BARRA = document.getElementById(“bloco”);
var AREA = document.getElementById(“area”);
BARRA.style.left = 75;
BARRA.style.top = 100;
BOX.style.left = X;
BOX.style.top = Y;
var LIMITE_BARRA_X = parseInt(BARRA.style.top.replace(“px”,”"))-parseInt(BOX.offsetHeight)-parseInt(BARRA.offsetWidth);
var LIMITE_BARRA_Y = parseInt(BARRA.style.left.replace(“px”,”"))+parseInt(BOX.offsetWidth);
window.setInterval(function() {
if(PAUSE) {
if (Y >= LIMITE_Y) SENTIDO_Y = “E”;
if (Y <= 0) SENTIDO_Y = “D”;
Y = (SENTIDO_Y == “D”) ? (Y+VELOCIDADE): (Y-VELOCIDADE);
if (X >= LIMITE_X) SENTIDO_X = “C”;
if (X <= 0) SENTIDO_X = “B”;
X = (SENTIDO_X == “B”) ? (X+VELOCIDADE) : (X-VELOCIDADE);
if((X == LIMITE_BARRA_X  && Y <= LIMITE_BARRA_Y)) SENTIDO_X = “C”;
if(X <= (LIMITE_BARRA_X+parseInt(BARRA.offsetWidth)+parseInt(BARRA.offsetHeight)) && Y <= parseInt(BOX.offsetHeight+BARRA.offsetHeight)) {
if(X == (LIMITE_BARRA_X+BARRA.offsetWidth+BARRA.offsetHeight))SENTIDO_Y = “E”;
else if (X > LIMITE_BARRA_X &&  X <= (parseInt(BOX.offsetHeight)+LIMITE_BARRA_X)){
SENTIDO_X = “B”;
SENTIDO_Y = “D”;
}
AREA.style.backgroundColor= (AREA.style.backgroundColor == ‘green’ ? ‘white’ : ‘green’);
}
BOX.style.left = Y;
BOX.style.top = X;
}
},DELAY);
}
</script>

var LIMITE_Y = 200,LIMITE_X = 200,LIMITE_BARRA = 0,DELAY = 10, VELOCIDADE = 2, X = 0, Y = 0;
var PAUSE = false;
var SENTIDO_Y = "D", SENTIDO_X= "B";
window.onload = function(){
var BOX = document.getElementById("box");
var BARRA = document.getElementById("bloco");
var AREA = document.getElementById("area");
BARRA.style.left = 75;
BARRA.style.top = 100;
BOX.style.left = X;
BOX.style.top = Y;
var LIMITE_BARRA_X = parseInt(BARRA.style.top.replace("px",""))-parseInt(BOX.offsetHeight)-parseInt(BARRA.offsetWidth);
var LIMITE_BARRA_Y = parseInt(BARRA.style.left.replace("px",""))+parseInt(BOX.offsetWidth);
window.setInterval(function() {
if(PAUSE) {
if (Y >= LIMITE_Y) SENTIDO_Y = "E";
if (Y <= 0) SENTIDO_Y = "D"; Y = (SENTIDO_Y == "D") ? (Y+VELOCIDADE): (Y-VELOCIDADE); if (X >= LIMITE_X) SENTIDO_X = "C";
if (X <= 0) SENTIDO_X = "B";
X = (SENTIDO_X == "B") ? (X+VELOCIDADE) : (X-VELOCIDADE);
if((X == LIMITE_BARRA_X && Y <= LIMITE_BARRA_Y)) SENTIDO_X = "C";
if(X <= (LIMITE_BARRA_X+parseInt(BARRA.offsetWidth)+parseInt(BARRA.offsetHeight)) && Y <= parseInt(BOX.offsetHeight+BARRA.offsetHeight)) { if(X == (LIMITE_BARRA_X+BARRA.offsetWidth+BARRA.offsetHeight))SENTIDO_Y = "E"; else if (X > LIMITE_BARRA_X && X <= (parseInt(BOX.offsetHeight)+LIMITE_BARRA_X)){
SENTIDO_X = "B";
SENTIDO_Y = "D";
}
AREA.style.backgroundColor= (AREA.style.backgroundColor == 'green' ? 'white' : 'green');
}
BOX.style.left = Y;
BOX.style.top = X;
}
},DELAY);
}

DEMO :   http://aspx.xmasters.com.br/bolinha/

Geração framework (qual é a sua opinião?)

Tenho notado que em fóruns,comunidades e até mesmo em chats, muitos programadores (“não todo, mas na sua grande maioria os novos programadores”) estão muito dependentes do uso de frameworks para seus desenvolvimentos.

Antes que pensem que estou aqui para pregar algo do tipo “morte aos frameworks”, quero deixar bem claro que uso e adoro usar alguns frameworks do mercado, sou usuário dos seguintes frameworks:
1 – Prototype (http://www.prototypejs.org/)
2 – Script.aculo.us (http://script.aculo.us/)
3 – JQuery (http://jquery.com/)

Entre outros…

O que está me deixando preocupado é que, geralmente quando ocorre algum problema com o framework, tais como:
1 – “Não atenda na solução do problema”
2 – ”Bugs encontrado”
3 – “Problemas em usar”

Muitos programadores não sabem como resolver ou não possuem conhecimento ou esperiência para resolver esses problemas.

Será que eles esqueceram ou não sabem como realmente as coisas funcionam por dentro do framework ?

Claro que ninguém é obrigado a saber tudo, mas acredito que o básico se faz necessário nessas horas…

Na empresa que trabalho, aconteceu algo muito parecido com a questão supracitada.

Lá existe um “Programa de Qualificação Profissional”, onde os estagiários passam por um ciclo de aprendizado ou treinamento para poder entrar na fabrica de software com uma base…

Pois bem….

Certo dia um dos estágiarios estava com muita dificuldade para usar alguns recursos do Javascript (sem framework). Para ajuda-lo chamei um programador que por sinal sabe tudo de jquery tanto nas coisas básicas quanto nas coisas avançadas
(criação de plugins para jquery, utilização de seletores avançados e etc..).

Para minha surpresa, ele teve uma grande dificuldade para ajudar o estagiário, o que me deu a entender é que de tanto usar frameworks, ele não sabia mais como usar o “javascript puro”…

Será que é seguro somente usar frameworks ?

Gostaria de saber a opinião de vocês…

PS: Sei que meu português é um pouco falho, se encontrar algum erro gramatical, não se espante!

Criando um carrinho de compras com javascript

Para implementar o carrinho de compras, usaremos como base o framework Prototype (http://www.prototypejs.org/) e script.aculo.us (http://script.aculo.us/).

Elementos :

http://aspx.xmasters.com.br/carrinho/img/1.JPG

Classe Produto:
http://aspx.xmasters.com.br/carrinho/img/2.JPG

Classe Carrinho:
http://aspx.xmasters.com.br/carrinho/img/3.1.JPG
http://aspx.xmasters.com.br/carrinho/img/3.2.JPG
http://aspx.xmasters.com.br/carrinho/img/3.3.JPG
http://aspx.xmasters.com.br/carrinho/img/3.4.JPG

Instanciando o Carrinho e os Produtos:
http://aspx.xmasters.com.br/carrinho/img/4.JPG

Segue o endereço do fonte e demo:

http://aspx.xmasters.com.br/carrinho/Carrinho.html

http://aspx.xmasters.com.br/carrinho/Carrinho.rar

Faculty Connection Experience com novo conteúdo para professores

Faculty Connection

A área acadêmica da Microsoft disponibiliza aos professores de todo o Brasil um conjunto de vídeos com aulas conceituais sobre as tecnologias Microsoft. Este conteúdo pode ser usado pelo professor para complementar a teoria apresentada em sala de aula. A maior parte destes vídeos foi desenvolvido por professores de renomadas instituições, como USP e UNESP. A lista completa dos cursos está disponível no Faculty Connection Experience!

expressões regulares

1. O que são expressões regulares?

Trata-se de um método formal para se especificar um padrão de texto.
O uso de expressões regulares na computação é abundante e praticamente
pré-histórico. Isto se deve pela facilidade de se fazer comparações, a fim de achar
uma dada palavra (ou parte dela) em um texto.

2. Aplicações

Quando, em um SO de modo texto, deseja-se listar todos os arquivos começados por J
em um determinado diretório, basta fazer:

ls J* (unix like) ou
dir J* (dos)

Neste caso, o uso do caractere * dá-se de forma especial, significando “qualquer
cadeia de caractere (String)”. Assim serão mostrados arquivos como:

Java.txt;
JavaFree.rox;
JavaDetona.net;
Entre outros começados com J.

Chamamos J*, então, de expressão regular.
Como esse exemplo, existem centenas de aplicações onde as expressões regulares
poupam um bom trabalho na implementação.

Para fim de exemplo didático, será mostrado um código simples para validar endereços
de email (hello world das expressões regulares :D ).

3. Gramática das Expressões Regulares

Antes do exemplo, porém, seria de bom tom o conhecimento dos caracteres especiais
usados em expressões regulares. Apesar de ser um assunto extenso, será abordado
somente alguns dos caracteres especiais mais usados e aceitos pela API do Java, a
saber: [\^]?*+-.

*
Qualquer cadeia de caractere.

Expressão Regular: J*Free // Qualquer coisa que comece com J e termine com Free

String comparada: JavaFree
String válida: sim

String comparada: JavaPago
String válida: não

[ ]
Um dos elementos do conjunto

Expressão Regular: [rgp]ato // Qualquer palavra com a primeira letra sendo ou ‘r’ ou
‘g’ ou ‘p’, e as letras seguintes sendo “ato”

String comparada: pato
String válida: sim

String comparada: gato
String válida: sim

String comparada: xato
String válida: não

^
Exclusão

Expressão Regular: [^rgp]ato // Qualquer palavra cuja primeira letra NÃO é ‘r’ nem
‘g’ nem ‘p’, sendo “ato” o resto da palavra

String comparada: rato
String válida: não

String comparada: xato
String válida: sim

-
Intervalo

Expressão Regular: [H-L]avaFree // A primeira letra da palavra deve está entre H e L
(inclusive H e L)

String comparada: JavaFree
String válida: sim

String comparada: RavaFree
String válida: não

.
Qualquer caractere

Expressão Regular: JavaFre.

String comparada: JavaFree
String válida: sim

\
Classe de caracteres pré-definidos. São eles:

\d : Um dígito,
\D : Algo que não seja um dígito,
\s : Um espaço em branco,
\S : Algo que não seja um espaço em branco,
\w : Qualquer letra, dígito ou underscore ( _ )
\W : Algo que não seja letra, dígito ou underscore

Expressão regular: \wJavaFree\s200\d\w

String comparada: _JavaFree 2004_
String válida: sim
?
Uma ou nenhuma vez, assim como ‘*’, ‘?’ é um elemento quantificador.

Expressão regular: a? // Uma ou nenhuma ocorrência de ‘a’

String comparada:
String válida: sim

String comparada: a
String válida: sim

+
Uma ou mais vezes, assim como ‘*’ e ‘?’, é um elemento [i]quantificador[i].

Expressão regular: a+ // Uma ou mais ocorrências de ‘a’

String comparada:
String válida: não

String comparada: aaa
String válida: sim

ASP.NET MVC

Vou colocar alguns links sobre o MVC no ASP.NET que achei interessantes.
MVC no ASP.NET
http://www.asp.net/mvc
MVC na Wikipedia
http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework

MVC .NET
Esse video muito é interessante porque explica de forma simples o funcionamento do MVC no .NET
http://www.asp.net/learn/mvc-videos/video-395.aspx

MVC com Repository Pattern
http://www.asp.net/learn/mvc-videos/video-403.aspx

Pipes e Filtros usando TDD
http://www.asp.net/learn/mvc-videos/video-352.aspx

Form Posting Scenarios
Um dos artigos mais completos sobre utilização de formulários e captura de informações usando MVC
http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-previ…

Incluindo validação nos campos de um formulário
http://www.asp.net/learn/mvc-videos/video-423.aspx

Microsoft DreamSpark – Software profissional grátis para os estudantes

A Microsoft lançou um programa “novo” de oferta de software profissional a todos os estudantes.

Para aderir a este programa basta fazer login com a conta live, registar, dizer em que escola e país é que estudam. Depois disso a Microsoft confirma que são alunos dessa escola e disponibiliza as versões profissionais gratuitamente.

Exemplos de Software incluídos neste programa:

  • Visual Studio 2005 Professional Edition
  • Studio 2008 Professional Edition
  • XNA Game Studio 2.0
  • Expression Studio
  • SQL Server 2005
  • Windows Server

Ou seja incluem tudo o que é necessário para um profissional deste área, grátis para todos os estudantes. Com este programa a Microsoft aposta numa adopção em grande escala das suas ferramentas de desenvolvimento, pelos profissionais de amanhã.

mais informações:
https://www.dreamspark.com/default.aspx

Gravando no arquivo web.config

Configuration webConfig = WebConfigurationManager.OpenWebConfiguration(“~”);

ConnectionStringsSection dbConnString = webConfig.ConnectionStrings;

//Alterando
dbConnString.ConnectionStrings["GUSMAO"].ConnectionString = “TAY,BRUNO,LUIZ”;

//Adicionando
dbConnString.ConnectionStrings.Add(new ConnectionStringSettings(“LERO”, “ConnString”, “System.Data.OleDb”));

Criando NameSpaces no JavaScript

Criar NameSpaces no JavasCript é relativamente simples, segue o exemplo:

var Empresa = {};

Empresa.Servicos = {};

Empresa.Servicos.Validacao = function() { // code };

Empresa.Servicos.Validacao.prototype.toString = function() { // code };

var validacao = new Empresa.Servicos.Validacao();

validacao.toString();