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

9.3.08

C# 3.0 - Implicitly typed

Aloha!

Outro recurso bastante interessante e produtivo na versão 3.0 é a declaração de variáveis sem a necessidade declaração explícita de seu tipo. Agora com a palavra "var" - conhecida por quem trabalha com javascript - aparece justamente para executar esta função.

Antes era necessário declarar da seguinte forma:

int number = 10;
string myTitle = "Nerd, Linux, Ubuntu e Cia";

Agora fica mais simples:

var number = 10;
var myName = "Bruno";

A variável foi criada sem determinarmos seu tipo. Esse papel fica na responsabilidade do próprio compilador.

Flws?!!!

8.3.08

Inicializadores de Objetos - C# 3.0

Olá!

Esta semana ralei em um projeto que estava sendo desenvolvido em C# 3.0 + .net 3.5 + LINQ. O prazo era curto e tive que catar muita coisa na net pra aprender rápido, pois mal havia começado em .net com C# 2.0 e .Net 2.0!!!

Graças a Deus tá tudo dando certo até agora e achei algo interessante dentre muitas novidades no C# 3.0: Auto Implemented Properties. Quer ver um exemplo? Dá uma olhada....

Código em C# 2.0:

protected void Page_Load(object sender, EventArgs e)
{
    Computador computador = new Computador(10);
    computador.Marca = "Sony";
    computador.Modelo = "Vaio";
    Response.Write(computador
}

public class Computador
{
    public int codigo;
    public int Codigo
    {
       get { return codigo; }
       private set { codigo = value; }
    }
    public string marca;
    public string Marca
    {
       get { return marca; }
       set { marca = value; }
    }
    public string modelo;
    public string Modelo
    {
       get { return modelo; }
       set { modelo = value; }
    }
    public Computador(int iCod)
    {
       Codigo = iCod;
    }
    public override string ToString()
    {
       return Codigo + " < br > " + Marca + " < br > " + Modelo;
    }
}

O mesmo código em C# 3.0:



protected void Page_Load(object sender, EventArgs e)
{
    Computador computador = new Computador(10);
    computador.Marca = "Sony";
    computador.Modelo = "Vaio";
    Response.Write(computador
}

public class Computador
{
    public int Codigo { get; private set; }
    public string Marca { get; set; }
    public string Modelo { get; set; }
    public Computador(int iCod)
    {
       Codigo = iCod;
    }
    public override string ToString()
    {
       return Codigo + " < br > " + Marca + " < br > " + Modelo;
    }
}

Legal né? Economizamos em linhas de código + organização + beleza!!!

Flws!!!

26.12.07

.NET

Não tem mais jeito....

Agora eu preciso do windows mais do que nunca. Descolei um trampo onde trabalho com ASP.Net + C# + SQLServer 2005. Tô M$ até na veia!!! aff....

Até que o .net com framework 2.0 ficou legalzin... E parece que o VS 2008 + Framework 3.0 vão vir arrebentando. Mas mesmo assim ainda acho que o PHP + Linux tem muito à oferecer!

Que 2008 seja repleto de realizações na vida de todos nós! Entrei 2007 totalmente sem inspiração e termino com muita expectativa! Muitas coisas aconteceram na minha vida! Casei, mudei minhas metas profissionais e pessoais. Espero que 2008 seja muito positivo!!!

abraço à todos e feliz 2008!!!

Mais do SONY

Caramba, quanto tempo não escrevo!

Enfim consegui instalar todos os drivers do notebook.

Acho que alguém da Sony viu o blog e resolveu soltar os drivers.

[]'s

14.9.07

Sony VGN-SZ 440

Como andam as coisas...

Esta semana meu cliente me pediu para tirar o Vista (mas não ficou cego... rsrsrs) e colocar o XP :-( neste notebook. Pois bem, lá fui eu....

E constatei o seguinte: a SONY não disponibiliza em seu site drivers para XP para este modelo. Pq?! Bom, isso não é novidade nenhuma nos notes atuais... Está virando uma epidemia esta coisa de nos prender a sistemas M$!!! Mas, como a única coisa na vida que não tem jeito é a morte, consegui vasculhar a net e achei um ftp da própria sony com suas pastas: VISTAUPGRADE e XPDOWNGRADE ==> Pq será??? rsrsrs

Nem eles levam tanta fé no Vista, mas não tornam isso público. Isso é coisa do Titio Bill... Mas deixa pra lá.

Bom, mas e aí? Novidade nenhuma até agora.... Até agora.

Instalei o Ubuntu 7.04 e........

.......funcionou tudo, sem a necessidade de catar nada na net. Pq será??? Incrível né?

Um abraço!

Partição SWAP

Para que serve???

Quando comecei a trabalhar com Linux eu ficava fazendo a mesma pergunta sempre. SWAP nada mais é do que um espaço para, no caso de sua RAM faltar, ser complementada por ela.

É uma memória virtual. Mas.... Se você acha que tendo 256 de RAM e criar uma SWAP de 2Gb irá deixar sua máquina melhor, está enganado. A velocidade da SWAP é bem menor que a da RAM. Como disse antes, é um complemento para a falta de RAM!!!

Vocês podem pesquisar na net e vão ver várias maneiras de configurar a SWAP. Uns dizem que não é necessária e outros que, se ela estiver no meio de outras partições, terá maior velocidade de acesso. Bom, como tenho 512 de RAM e programas no linux não sugam a memória como no ruindows, deixo minha SWAP com 600Mb mesmo... só pra ficar na dela. Se precisar usar, tá lá!

Falows?!

31.7.07

Velocidade, queremos velocidade!!!

Tava navegando pela net - num blog de um amigo amadorasdomundo.blogspot.com - e vi uma coisa interessante.

Um guru das redes chamado Peter Löthberg colocou à disposição da mãe dele - uma senhora de 75 anos - uma conexão básica com a internet: 40Gb/s.

Imaginem eu com uma conexão dessas??? Aff... Ia ser difícil me tirar daqui!!!

A notícia na íntegra tá aqui: http://tecnologia.terra.com.br/interna/0,,OI1759975-EI4802,00.html

Abraços!!!

23.7.07

Dual Boot com XOSL

Infelizmente alguns programas M$ não rodam no linux. Eu, particularmente, necessito muito dos pacotes da Adobe. Tentei rodar windows com VirtualBox, Wine e etc, mas... O rendimento fica a desejar. Solução: Dual Boot com XOSL e 2 HD's. Porque não vou misturar "nem à pau" meu linux redondinho com a instalação do XP. Hehe...

O XOSL é um gerenciador de boot tranquilo de usar. Instala fácil e a configuração idem.

Link para download: http://www.ranish.com/part/xosl.htm

A instalação é no modo MS-DOS com praticamente "next, next, next" rs. Você pode instalar ele na mesma partição do M$ XP - mas aconselho criar uma partição exclusiva. Pq vcs sabem como é o windows: dá pau e perde-se tudo.

Aí você colocando ele em uma partição sozinho, fica fácil reinstalar o sistema.

Vlw?!!!

12.6.07

À Procura da Felicidade

Felicidade....

Segundo os dicionários é "qualidade ou estado de feliz"; "ventura"; "bom êxito".

Existem diversas formas de expressar a felicidade. Seja por um sorriso ou pelo olhar de "criança ao abrir um presente". E como encontrar ou chegar à tal da felicidade? Tem gente que alcança através de presentes, outras dinheiro, alguns realização pessoal ou profissional. Escutei um samba, da Acadêmicos da Rocinha, que dizia que "a felicidade não tem preço". A minha visão da relação Felicidade X Preço é de que o preço não quer dizer dinheiro, mas sim o meio pelo qual se chega à felicidade. As dificuldades e a persistência são exemplos para mim de preço para se chegar à felicidade.


Neste final de semana eu vi este filme aí. Já li algumas críticas como "dramalhão americano" ou "propaganda de sou americano e não desisto nunca". Se você ler apenas a sinopse, pode até concordar. Mas pense bem: só porque o "cenário" é americano pode-se rotular assim??? Com certeza quem assistir esse filme e parar pra pensar um pouco, vai lembrar de alguma história que tenha acontecido ou com um vizinho ou com alguém do trabalho etc.

Vale muito a pena ver!!!


Sinopse:

Chris Gardner (Will Smith) é um pai de família que enfrenta sérios problemas financeiros. Apesar de todas as tentativas em manter a família unida, Linda (Thandie Newton), sua esposa, decide partir. Chris agora é pai solteiro e precisa cuidar de Christopher (Jaden Smith), seu filho de apenas 5 anos. Ele tenta usar sua habilidade como vendedor para conseguir um emprego melhor, que lhe dê um salário mais digno. Chris consegue uma vaga de estagiário numa importante corretora de ações, mas não recebe salário pelos serviços prestados. Sua esperança é que, ao fim do programa de estágio, ele seja contratado e assim tenha um futuro promissor na empresa. Porém seus problemas financeiros não podem esperar que isto aconteça, o que faz com que sejam despejados. Chris e Christopher passam a dormir em abrigos, estações de trem, banheiros e onde quer que consigam um refúgio à noite, mantendo a esperança de que dias melhores virão.
Curiosidades:

- O título original contém a grafia incorreta da palavra happiness, substituindo a letra I por Y. Este erro foi intencional, sendo uma referência a uma cena importante do filme.

- Jaden Smith é realmente filho de Will Smith, com a atriz Jada Pinkett.

- Foram contratados como extras para as filmagens pessoas que realmente moravam nas ruas.

- O verdadeiro Chris Gardner e seu filho são vistos em uma pequena ponta no fim do filme, cruzando o caminho de Will Smith e Jaden Smith.

Nvidia+Beryl no Ubuntu 7.04

Tô trazendo aqui um tutorial simples para instalar o Beryl em placas Nvidia no Ubuntu faisty fawn. Testei na minha placa GeForce MX 440, não ficou 100% mas acho que dá pra usar bem. Tem alguns bugs que não sei ao certo se é problema da minha instalação do Ubuntu ou do Beryl. Mas vale a pena tentar.

Instalando o Automatix2 e o driver da Nvidia:

#adicionando ao sources.list
$ echo "deb http://www.getautomatix.com/apt feisty main" | sudo tee -a /etc/apt/sources.list

#download da chave
$ wget http://www.getautomatix.com/keys/automatix2.key

$ gpg --import automatix2.key


$ gpg --export --armor E23C5FC3 | sudo apt-key add -

#atualização dos pacotes
$ sudo apt-get update

#instalação do automatix2
$ sudo apt-get install automatix2

Para chamar o automatix2: Aplicações>Ferramentas de sistema>automatix

Ele vai abrir uma tela com aviso de softwares non-free, isentando-se de qualquer responsabilidade pela instalação dos mesmos. Como somos linusers, escolheremos "no" e "ok". Temos agora duas abas: "install" e "uninstall". É simples mesmo! Vá na aba install e selecione drivers. Lá vai ter o driver da Nvidia. Depois de instalar ele deve pedir para reiniciar.

Beryl:

Abra o Synaptic, procure e instale os seguintes pacotes: beryl, beryl-core, beryl-manager, beryl-plugins, beryl-plugins-data, beryl-settings, beryl-settings-bindings, beryl-ubuntu, emerald, emerald-themes, heliodor, libberyldecoration0, libberylsettings0, libberylsettings0-gconf, libemeraldengine0.

Configurando o xorg.conf:

Abra o terminal e digite:

#
sudo gedit /etc/X11/xorg.conf
Neste arquivo está a configuração do comportamento do seu servidor X. Tenha muito cuidado ao editar. Procure e deixe exatamente igual ao que estiver abaixo, obedecendo sim as regras de tabulação, para que fique organizado.

Em Section "Module"
adicione as linhas:

Load “dri”
Load “dbe”
Load “glx”

Em Section "Device"
adicione as linhas:

Option “XAANoOffscreenPixmaps”
Option “AddARGBGLXVisuals” “True”

Vá até o final do arquivo e adicione:

Section “DRI”
Mode 0666
EndSection

Section “Extensions”
Option “Composite” “Enable”
EndSection

Salve o arquivo e feche. Reinicie o X pressionando as teclas Ctrl+Alt+Backspace. Após logar na máquina pressione ALT+F2 e digite beryl-manager.

6.6.07

Voltando...


Galera, voltei!

E voltei com tudo: Ubuntu 7.04+Beryl+Emerald!!!

Depois escrevo mais, mas deixo uma bela imagem para vocês!!!