6.11.08

Classes em JavaScript com Prototype

Aloha...

Pesquisando na net você vai encontrar muitas definições, opiniões e etc, sobre a capacidade do javascript, suas limitações e aplicações. Lá pelo ano 2000/2001, quando utilizávamos IE 5.0/5.5 e Netscape (putz!), tínhamos uma dificuldade com a utilização do script do lado do cliente pois os browsers eram fracos e havia aquela guerra entre o ie e netscape para os padrões. Quem tinha que se virar era o desenvolvedor.

Hoje em dia não é muito diferente, mas já melhorou muito, principalmente com a entrada forte do Firefox no mercado. Por ser um browser rápido e que se dá bem com o js, tem tido uma boa aceitação pelos desenvolvedores e usuários comuns. Com isso, na minha opinião, a M$ está começando a entender que não adianta empurrar os padrões dela por goela abaixo que não adianta.

No meio disso tudo que já disse, a linguagem evoluiu. O que mais gostei nessa evolução foi o framework Prototype, que deu origem a "n" outros frameworks que botam mais firulas em cima do que ele faz. O Prototype nada mais é que uma mãos na roda para o desenvolvedor, facilitando algumas tarefas que seriam chatas de fazer com o JS puro!

Chega de papo! Vou postar abaixo um exemplo do que podemos fazer com o Prototype: Classes.



var ClassTest = Class.create({
initialize: function(name) {
this.name = name
}
});

ClassTest.addMethods({
showMsg: function() {
alert('Meu nome é ' + this.name);
}
});

ClassTest.addMethods({
setName: function(name) {
this.name = name
}
});

var userTest = new ClassTest('João da Silva');
userTest.showMsg();
userTest.setName('Maria da Silva');
userTest.showMsg();



Bom, essa é uma forma interessante que encontrei de criar classes de forma elegante. Se não utilizarmos o framework, seria mais ou menos assim:



function ClassTest(name)
{
this.name = name
}

ClassTest.prototype.showMsg = function()
{
alert('Meu nome é ' + this.name);
}

ClassTest.prototype.setName = function(name)
{
this.name = name
}

var userTest = new ClassTest('João da Silva');
userTest.showMsg();
userTest.setName('Maria da Silva');
userTest.showMsg();



Fica a mesma coisa e não precisa de framework! Aí o que vale é a pessoa ver o melhor design para suas classes!

Abraços!!!

23.7.08

C#: Gerando XML com XmlTextWriter

Aloha!

Gostaria de compartilhar com vocês uma forma simples de gerar um xml no c#. Estarei utilizando o XmlTextWriter, que nos dá uma certa liberdade na criação do documento xml sem seguir modelos de forma rápida e fácil.

Vamos fazer um exemplo simples: Criar um tipo, "alimentar" uma lista e depois gerar o xml através desta lista. Coisa idiota, você deve estar pensando. Mas é um exemplo que pode abrir a sua mente para aplicações específicas. Você um dia pode precisar, não desdenhe. rs

Primeiro vamos criar o tipo Funcionarios:


public class Funcionarios
{
public string nome;
public string cargo;
public string email;
}


Agora o nosso método para gerar a lista:


public static Lista CriaLista()
{
List func = new List
{
new teste{nome="João",cargo="Analista",email="joao@oi.com.br",status="on"},
new teste{nome="Pablo",cargo="Redator",email="pablo@ig.com.br",status="off"}
};
return func;
}


Até agora tudo tranquilo, né? Uma classe simples e uma lista básica. Agora no Page_Load, vamos incluir o código abaixo, onde estaremos gerando nosso xml:


/// Carregando nossa lista
List func = CriaLista();

/// Definindo o tipo do documento como xml
Response.ContentType = "text/xml";

/// Instanciando nosso XmlTextWriter
XmlTextWriter xtw = new XmlTextWriter(Response.Output);

/// Iniciando o documento
xtw.WriteStartDocument();

try
{
/// Escrevendo nosso "root"
xtw.WriteStartElement("Qx3Funcionarios");

foreach (Funcionarios x in func)
{
/// Iniciando o elemento funcionário
xtw.WriteStartElement("funcionario");
xtw.WriteAttributeString("status", x.status);
xtw.WriteElementString("nome", x.nome);
xtw.WriteElementString("cargo", x.cargo);
xtw.WriteElementString("email", x.email);
/// Finalizando o elemento funcionário
xtw.WriteEndElement();
}

/// Finalizando o root
xtw.WriteEndElement();
}
catch (Exception ex)
{
xtw.WriteElementString("Error", ex.Message);
}

/// Finalizando o documento e liberando a instância do XmlTextWriter
xtw.WriteEndDocument();
xtw.Close();

Response.End();


Bom, espero que seja útil como foi para mim. Tem muito exemplo na net explicando como gerar o xml dinamicamente. Mas dessa forma foi a mais simples que encontrei.

Abraços!!!

27.3.08

Consumindo XML com LINQ

Aloha!

Mais uma coisa legal de fazer com LINQ: consumir XML! Abaixo um exemplo básico de um arquivo RSS:

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>Teste Nerd RSS</title>
<link>http://www.qx3.com.br</link>
<description>Teste RSS</description>
<ttl>5</ttl>
<item>
<title>NERD S/A</title>
<link>http://nerd-rj.blogspot.com</link>
</item>
<item>
<title>Gusmão</title>
<link>http://www.microsoft.com</link>
</item>
<item status="disabled">
<title>Francke</title>
<link>http://xmasters.com</link>
</item>
</channel>
</rss>



Para começar a brincadeira, vamos criar um repeater no aspx da seguinte forma:


<asp:Repeater ID="rptRSS" runat="server">
<HeaderTemplate>
RSS Ativos:<br /><br />
</HeaderTemplate>
<ItemTemplate>
<asp:Label
Text='<%# Eval("Nome") %>'
runat="server" /> -
<asp:HyperLink
Text='<%# Eval("Url") %>'
NavigateUrl='<%# Eval("Url") %>'
runat="server" />
<hr style="width:75%;text-align:left" />
</ItemTemplate>
</asp:Repeater>



Agora, apenas para efeitos de teste, vamos colocar nosso código no Page_Load do cs mesmo:


public partial class ReadFeedRSS : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XDocument feedXML = XDocument.Load(@"C:\FeedRSS.xml");

var feeds = from feed in feedXML.Descendants("item")
where feed.Attribute("status") == null ||
feed.Attribute("status").Value != "disabled"
select new {
Nome = feed.Element("title").Value,
Url = feed.Element("link").Value
};

rptRSS.DataSource = feeds;
rptRSS.DataBind();
}
}



Se tudo correr bem, vc verá algo simples... Mas com imaginação e criatividade, pode-se tirar uma aplicação muito legal com esse recurso.

flws!

Gerando XML com LINQ

Continuando a série linq, a pedido do Francke, segue abaixo um exemplo de como gerar um arquivo xml através de linq e base de dados.

Supondo que você já saiba criar classes LINQ, é claro.


DataClassesDataContext db = new DataClassesDataContext();

XElement xmlDb = new XElement("Artistas",
from art in db.Artists
orderby art.ArtistName
select new XElement("Artista",
new XAttribute("ArtistaID", art.ArtistId),
new XElement("Nome", art.ArtistName)
)
);

xmlDb.Save(@"C:\artistas.xml");



Flws?!

25.3.08

LINQ: Where

Da série LINQ, vamos ver neste post o uso da cláusula WHERE em nossa consulta. Veja o trecho abaixo:


string[] digits = { "zero", "um", "dois", "tres", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez" };
var shortDigits = digits.Where((digit, index) => digit.Length < index);

Response.Write("Short Digits:

");

foreach (var d in shortDigits)
{
Response.Write("The word " + d + " is shorter than its value.");
Response.Write("
");
}


Simples né?! Para os mais atentos e interessados, podemos contar no C# 3.0 com essa fabulosa "=>" setinha! Notem que no trecho '(digit, index) => digit.Length < index)' estamos nada mais nada menos que retornando o resultado! A grosso modo, é uma forma fácil de fazer um return em um if, por exemplo.

LINQ: Distinct + Count

Continuando a série LINQ você verá abaixo a utilização de Distinct e Count.


int[] factorsOf300 = { 2, 2, 3, 5, 5 };
int uniqueFactors = factorsOf300.Distinct().Count();

Response.Write(uniqueFactors);


No post anterior utilizamos a forma "tradicional" de consulta, neste post estamos utilizando a facilidade que as tão faladas LAMBDA Expressions nos fornecem. Temo um array de inteiros na primeira linha. Na segunda linha vocÊ pode ver que o intellicense lista uma série de alternativas para tratarmos os dados.

Replique o código e comece a babar com o VS2008!!!

Exemplo básico de consulta com LINQ

Segue abaixo um exemplo muito básico de consulta.


int[] text1 = { 1, 2, 3, 4};

var data = from t in text1
select t + 1;

Response.Write("Exemplo básico de select no LINQ: < br > ");

foreach (var x in data)
{
Response.Write(x + "< br >");
}

Response.Write("Com o LINQ, percorremos o array com os numeros 1,2,3 e 4 selecionamos e incrementamos cada um.");


Replique este trecho de código e veja como é fácil usar o LINQ! A instrução SQL é criada de forma "inversa" ao que estamos acostumados a fazer, mas é facil de entender..

17.3.08

IRPF 2008 no Linux

Graças a Deus o programa da receita tem uma versão for linux!!! =)

http://imasters.uol.com.br/artigo/8234/linux/sua_declaracao_de_imposto_de_renda_com_linux/

No link acima o colunista ensina a instalar. É necessário realizar algumas tarefinhas com o JVM mas aparentemente nada difícil.

Vou tentar instalar hoje no meu ubuntu, depois comento mais.

[]'s