sexta-feira, 20 de novembro de 2009

Utilizando o Ping.exe em endereços IPv6 no Windows XP, Vista e Server (2003/2008)



Importante: Somente os seguintes sistemas operacionais windows suportam o ping ipv6:

- Windows Vista
- Windows Server 2008
- Windows XP SP1 ou maior
- Windows Server 2003

1. Ping IPv6 usando o hostname:


Sintaxe:
ping -6 [IPv6ServerName]

Exemplo:
ping -6 ipv6.google.com


2. Ping IPv6 usando endereço ip:


Sintaxe:
ping IPv6Address [%ZoneID]

Exemplo:
ping 2001:4860:b004::68

quinta-feira, 29 de outubro de 2009

Top 5 jQuery plugins para seu site



Neste artigo, mostraremos alguns interessantes plugins para JQuery, que facilitarão sua vida ao desenvolver um site ou sistema web.

1. A jQuery

jQuery é um framework para ajudar os desenvolvedores a se concentrarem na lógica dos sistemas da web e não nos problemas de incompatibilidade dos navegadores atuais.

Suas principais funcionalidades são:

* Resolução da incompatibilidade entre os navegadores.
* Redução de código.
* Reutilização do código através de plugins.
* Utilização de uma vasta quantidade de plugins criados por outros desenvolvedores.
* Trabalha com AJAX e DOM.
* Implementação segura de recursos do CSS1, CSS2 e CSS3.

Mais informações podem ser encontradas em www.jquery.com.

A Microsoft está integrando o código aberto do jQuery no ASP.NET e ASP.NET MVC que proporciona total suporte do produto.

2. Top 5 Plugins:

2.1 qTip



O qTip é um plugin para a jQuery para a crição de tooltips em seu site. Fornece recursos como a criação de balões de fala para um determinado elemento da página.

2.2 Boxy



Boxy é um plugin que permite a criação com facilidade de modals em sua página, melhorando a expêriencia do usuário.

2.3 uploadfy



Este plugin permite que você altere qualquer elemento com um ID na sua página em um elemento para uploads únicos ou múltiplos de arquivo. O plugin utiliza uma mistura de JQuery, Flash e um script de back-end de sua escolha para enviar arquivos ao seu site.

2.4 jQuery Grid



Excelente plugin para criação de um datagrid em seu site.

2.5 Sparklines jQuery



O Sparklines gera gráficos inline no browser utilizando os dados fornecidos via ajax.

terça-feira, 27 de outubro de 2009

Criando novas sessões no Web.Config (custom web.config section)



Neste artigo mostraremos como personalizar uma section da maneira que sua aplicação necessita.

1. Web.Config

No web.config de sua aplicação, começaremos declarando a nova section a ser utilizada.
Chamaremos ela de mySection. Como nodo filho de Configuration, Adicionaremos:

<configSections>

    <section name="mySection" type="MySectionClass"/>
  
</configSections>

Onde name é o nome da section que deverá ser escrita no Web.Config e MySectionClass é a classe que implementa essa sessão do web.config.

2. A classe MySectionClass.cs

Adicionaremos ao nosso projeto uma nova classe chamada MySectionClass.cs que implementa a interface IConfigurationSectionHandler

//custom web.config section

public class MySectionClass: Hashtable, IConfigurationSectionHandler
{
#region IConfigurationSectionHandler Members

public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
XmlNodeList NodeSettings = section.SelectNodes("/mysection/*");
foreach (XmlNode NodeSetting in NodeSettings)
{
this.Add(NodeSetting.Attributes.GetNamedItem("name").Value.ToString(), NodeSetting.Attributes.GetNamedItem("value").Value);
}
return this;

}

#endregion
}

Essa classe buscará no Web.Config o XPath /mysection/* e buscará todos em todos os nodos filhos os atributos name e value.


3. Voltando ao Web.Config

Após o appSettings, vamos iniciar a declaração dos itens que terá nossa configuração. Adicionando as seguintes linhas:

<mySection>

<add name="teste1" value="Valor de Teste 1" />

<add name="teste2" value="Valor de Teste 2" />

<add name="teste3" value="Valor de Teste 3" />

</mySection>

Você poderá definir os valores para cada atributo nessa parte.

4.Lendo a nova section em sua aplicação


Sempre que precisar ler essa nova sessão em seu web.config, voce deve delarar o tipo conforme definido no type="MySectionClass":

MySectionClass msc = (MySectionClass)WebConfigurationManager.GetSection("mySection");
Response.Write(msc["teste1"].ToString());
//output "Valor de Teste 1


Espero ter ajudado.

sábado, 24 de outubro de 2009

Como Criar uma classe genérica de acesso à dados com .NET C# utilizando o namespace System.Data.Common



Bom hoje vou deixar aqui uma dica de como trabalhar em .net com uma classe de acesso a dados genérica.

O namespace System.Data.Common, possui classes prontas com esta finalidade. Se você precisa, ou pensa em criar
um aplicativo que no futuro pode ser migrado de banco de dados, como por exemplo trocar do SQL Server para Oracle,
utilize este namespace.

Com estas classes, os prividers são carregados dinâmicamente, basta configurar no web.config:

<connectionStrings>
<add name="site_db" connectionString="Server=localhost;Initial Catalog=loja;User Name='root';Password='xxx'" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>


A opção providerName="MySql.Data.MySqlClient" faz com que as classes do .net usem o privider do MySql. Se um dia você decidir migrar para Sql Server, basta trocar o providerName para System.Data.SqlClient. Bom isto não quer dizer que todas suas querys vão funcionar perfeitamente, mas se você utilizar o ANSI SQL, todas devem funcionar sem erros pois ele é padrão para todos bancos de dados.

Como o MySql não é um provider padrão que vem instalado com o .net framework, se você não inserir as linhas abaixo no web.config:

<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,Version=6.1.2.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"/>
</DbProviderFactories>
</system.data>

Pode ocorrer o seguinte erro quando tentar executar o seu código:

Unable to find the requested .Net Framework Data Provider. It may not be installed.


Abaixo uma classe de exemplo de como utilizar as classes do namespace System.Data.Common:


using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Common;
using System.Data;
using System.Configuration;


public class DAHelper:IDisposable
{
private DbProviderFactory factory;
DbConnection con;
public DAHelper()
{
factory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["site_db"].ProviderName);
}
public DbConnection GetConnection()
{
if (con == null)
{
con = factory.CreateConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["site_db"].ConnectionString;
con.Open();
}

return con;
}
public void CloseConnection(DbConnection con)
{
try
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
catch
{ }
finally
{
con = null;
}
}
public DbDataReader GetReader(string sql, CommandType cType, params DbParameter[] pars)
{
DbConnection con = this.GetConnection();
try
{
DbCommand cmd = factory.CreateCommand();
cmd.Connection = con;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
DbDataReader reader = cmd.ExecuteReader();

return reader;
}
catch
{
throw;
}

}
public DataTable FillDataTable(DataTable dt, string sql, CommandType cType, params DbParameter[] pars)
{
DbConnection con = this.GetConnection();
try
{
DbDataAdapter adpt = factory.CreateDataAdapter();
DbCommand cmd = factory.CreateCommand();
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
if (pars != null && pars.Length>0)
{
foreach (DbParameter p in pars)
{
cmd.Parameters.Add(p);
}
}
adpt.SelectCommand = cmd;

adpt.Fill(dt);
con.Close();
con.Dispose();
con = null;
cmd.Dispose();
cmd = null;
adpt.Dispose();
adpt = null;
return dt;
}
catch
{
throw;
}
}


#region IDisposable Members

public void Dispose()
{
if (con != null && con.State != ConnectionState.Closed)
{
con.Close();
con.Dispose();
con = null;
}
}

#endregion
}


sexta-feira, 23 de outubro de 2009

Lendo arquivos INI em C#



Neste artigo veremos como ler arquivos INI em C# utilizando o Ini.cs.


1. A Classe Ini.cs


using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;


namespace Ini
{
///
/// Create a New INI file to store or load data
///

public class IniFile
{
public string path;

[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);

///
/// INIFile Constructor.
///

/// public IniFile(string INIPath)
{
path = INIPath;
}
///
/// Write Data to the INI File
///

/// /// Section name
/// /// Key Name
/// /// Value Name
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.path);
}

///
/// Read Data Value From the Ini File
///

/// /// /// ///
public string IniReadValue(string Section,string Key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section,Key,"",temp,255,this.path);
return temp.ToString();

}
}
}


2. Utilizando em seu código


IniFile iniFile = new IniFile("C:\\boot.ini");
string timeout = iniFile.IniReadValue("boot loader", "timeout"));
string default = iniFile.IniReadValue("boot loader", "default"));


Espero ter ajudado.

Enviando e-mails em Perl



Nesse tutorial, apresentamos um rápido exemplo de como enviar e-mails utilizando o Perl.


#!/usr/bin/perl
use Net::SMTP;
my $smtp_server = "smtp.mysite.net";
my $from = "eu@provider.net";
my $to = "voce@provider.net";
my $user = "eu";
my $pwd = "senha";
$smtp = Net::SMTP->new($smtp_server);
$smtp->mail('provider.net');
$smtp->auth($user,$pwd);
$smtp->to($to);
$smtp->data();
$smtp->datasend("To: ".$to);
$smtp->datasend("From: ".$from);
$smtp->datasend("Enviado.");
$smtp->quit;
exit;

quinta-feira, 22 de outubro de 2009

Utilizando o Microsoft Log Parser



O Microsoft Log Parser é uma ferramenta poderosa e versátil que permite a consulta de dados baseados em texto como arquivos de log, arquivos XML e CSV, bem como as principais fontes de dados sobre o sistema operacional Windows.
Neste artigo daremos alguns exemplos de utilização do Log Parser.

1. Instalando o Log Parser

Faça o download do Log Parser e execute o arquivo LogParser.msi.

2. Excute o LogParse

Clique no menu Iniciar > Executar e colocque a linha abaixo:

%COMSPEC% /k "%PROGRAMFILES%\Log Parser 2.2\LogParser.exe"

Clique em OK.

3. Exemplos de Queries

Assumindo que o seu o seus arquivos de log atendam pelo critério ex0902*.log, navegue até a pasta onde eles estão e execute as queries:

Exemplo 1: Retorna a lista de páginas que retornaram o status Ok.


logparser -rtp:-1 "SELECT cs-uri-stem, cs-uri-query, date, sc-status, cs(Referer) INTO 200sReport.txt FROM ex0902*.log WHERE (sc-status >= 200 AND sc-status < 300) ORDER BY sc-status, date, cs-uri-stem, cs-uri-query"


Exemplo 2: Retorna a lista de páginas que retornaram o status Redirect.


logparser -rtp:-1 "SELECT cs-uri-stem, cs-uri-query, date, sc-status, cs(Referer) INTO 300sReport.txt FROM ex0902*.log WHERE (sc-status >= 300 AND sc-status < 400) ORDER BY sc-status, date, cs-uri-stem, cs-uri-query"


Exemplo 3: Retorna a lista de páginas que retornaram o status de erro.


logparser -rtp:-1 "SELECT cs-uri-stem, cs-uri-query, date, sc-status, cs(Referer) INTO 500sReport.txt FROM ex0811*.log WHERE (sc-status >= 500 AND sc-status < 600) ORDER BY sc-status, date, cs-uri-stem, cs-uri-query"


Exemplo 4: Retorna o uso de banda do seu site


logparser -rtp:-1 "SELECT date, SUM(cs-bytes) AS [Bytes received], DIV(SUM(cs-bytes), 1024) AS [KBytes received], DIV(DIV(SUM(cs-bytes), 1024), 1024) AS [MBytes received], SUM(sc-bytes) AS [Bytes sent], DIV(SUM(sc-bytes), 1024) AS [KBytes sent], DIV(DIV(SUM(sc-bytes), 1024), 1024) AS [MBytes sent], COUNT(*) AS Requests INTO Bandwidth.txt FROM ex0811*.log GROUP BY date ORDER BY date"


Exemplo 5: Retorna o a quantidade de dados enviados e recebidos por tipo de arquivo.


logparser -rtp:-1 "SELECT EXTRACT_EXTENSION(cs-uri-stem) AS [File Type], DIV(SUM(sc-bytes), 1024) AS [Sent (KB)], DIV(SUM(cs-bytes), 1024) AS [Received (KB)] INTO FileTypeDataSentRec.txt FROM ex0902*.log GROUP BY [File Type] ORDER BY [File Type]"


Exemplo 6: Retorna a lista de dominios que geraram acesso para o site


logparser -rtp:-1 "SELECT EXTRACT_TOKEN(cs(Referer), 2, '/') AS [Domain], COUNT(*) AS [Requests] INTO ReferringDomains.txt FROM ex0902*.log GROUP BY [Domain] ORDER BY [Requests] DESC"


Exemplo 7: Retorna a lista das requisições por hore e dia.


logparser -rtp:-1 "SELECT TO_TIME(TO_LOCALTIME(QUANTIZE(TO_TIMESTAMP(date, time), 3600))) AS [Hour], COUNT(*) AS [Requests], MUL(PROPCOUNT(*), 100) AS [PercentOfTotal] INTO HourlyReport.txt FROM ex0902*.log GROUP BY [Hour] ORDER BY [Hour]"


4. Utilizando o LogParser no seu código.

Você pode utilizar o LogParser em seu código C# da seguinte maneira:


using MSUtil;

(...)


ILogRecordset rsLP = null;
ILogRecord rowLP = null;
LogQueryClassClass LogParser = null;
COMW3CInputContextClassClass W3Clog = null;
string strSQL = null;
LogParser = new LogQueryClassClass();
W3Clog = new COMW3CInputContextClassClass();
double UsedBW = 0;

try
{

strSQL = @"SELECT SUM(sc-bytes) from C:\\logs" +
@"\\*.log WHERE cs-uri-stem LIKE '%/" +
userID + "/%' ";
rsLP = LogParser.Execute(strSQL, W3Clog);
rowLP = rsLP.getRecord();
if (rowLP.getValue(0).ToString() == "0" ||
rowLP.getValue(0).ToString() == "")
{
UsedBW = 0;
return UsedBW;
}

double Bytes = Convert.ToDouble(rowLP.getValue(0).ToString());
UsedBW = Bytes / (1024 * 1024);
UsedBW = Math.Round(UsedBW, 3);
}
catch
{
throw;
}