Experiência do usuário com interfaces by Dilbert

domingo, 17 de janeiro de 2010 Postado por Luis Fernando 0 comentários

Essa é uma tira rapidinha, mas que demonstra muito bem a realidade (infelizmente) na grande maioria dos projetos de software:

 

image

Marcadores: ,

Importando uma planilha Excel no SQL Server

Postado por Luis Fernando 0 comentários

O objetivo desse script é importar de uma forma bem simples, uma planilha XLS do Excel para o Banco de Dados.


O procedimento é útil principalmente quando o cliente já possui, por exemplo, uma base de dados legada e a única fonte é uma planilha do Excel.


Para isso, utilizaremos a função OPENROWSET.


/* 
 * Projeto: Importação de planilhas Excel no SQL Server 
 * Autor: Luis Fernando de Souza Santos
 * Data: 17/01/2010 
 * Versão SQL Testada: 2008 Express Edition
**/

-- Habilitando as opções avançadas 
-- Por default e por questões de segurança, essas 
-- opções vêm desabilitadas.
sp_configure
   'show advanced options', 1
reconfigure
sp_configure
   'Ad Hoc Distributed Queries', 1 
reconfigure

-- Criando a tabela com os meus atributos da planilha
create table funcionario(
   Código INT NOT NULL PRIMARY KEY,
   Nome VARCHAR(100) NOT NULL,
   Admissão SMALLDATETIME NULL,
   Departamento VARCHAR(100) NULL
);

-- Comando para importar a planilha na tabela
INSERT INTO FUNCIONARIO SELECT
   * FROM OPENROWSET ('Microsoft.Jet.OleDB.4.0',
   'EXCEL 8.0;Database=C:\departamento.XLS',Func$
);

-- Em "Database=C:\departamento.XLS',Func$", deve-se informar 
-- o nome do arquivo, seguido do nome da "planilha" + $.
-- Exemplo: Arquivo DEPARTAMENTO.XLS, Planilha Func.

-- Pronto! Aí para visualizar, é só dar um SELECT na tabela.

Para saber mais: http://msdn.microsoft.com/en-us/library/ms190312.aspx

Marcadores: ,

Você tem dificuldades em ver certas cores?

sábado, 16 de janeiro de 2010 Postado por Luis Fernando 0 comentários

Você deveria ser capaz de ver números dentro dos círculos na imagem abaixo. Se você não consegue vê-los talvez seja cego para algumas cores. Faça o teste.

Essa estranha característica é quase sempre uma herança genética e é mais comum em homens.

Mas não se preocupe, por mais estranho que parece isso é bem comum.

 

colour_test

Marcadores:

[vídeo] Acidentes engraçados

Postado por Luis Fernando 0 comentários

 

Mais um daqueles milhares de vídeos de acidentes engraçados... haha, mas é engraçado!! e a musica é legal.

Marcadores:

Hibernate Tools Eclipse Plugin

sexta-feira, 15 de janeiro de 2010 Postado por Luis Fernando 0 comentários

Hibernate Tools Eclipse Plugin 

O Hibernate Tools facilita muito o desenvolvimento de aplicativos com Hibernate no Eclipse.

Algumas características são:

  • * Engenharia reversa
  • * Configurador do hibernate.cfg.xml
  • * Editor de Hibernate HQL com intelisense
  • * Execução de consultas e seus resultados
  • * Gera código SQL
  • * Ajuda a configurar arquivos hbm.xml ...e muito mais...
Marcadores: , , ,

Implementação Explícita de Interface em C#

quarta-feira, 13 de janeiro de 2010 Postado por Luis Fernando 1 comentários

Alguns livros, como por exemplo o Visual C# 2008 passo-a-passo, recomendam fortemente o uso de implementação explícita de interface.

Considere o código;

interface IExemplo
{
    void imprime();
}

class ClasseA : IExemplo
{
    public void imprime() { }
    public void carrega() { }
}

class ClasseB : IExemplo
{
    void IExemplo.imprime() { }
    public void carrega() { }
}

class Program
{
    static void Main(string[] args)
    {
        ClasseA a = new ClasseA();
        a.imprime();
        a.carrega();

        IExemplo b = new ClasseB();
        b.imprime();
        // O método "carrega()" é inacessível a "b"!
    }
}

A questão é: dessa forma, o objeto “b” não pode acessar o método “carrega()”, então, eu perco o acesso aos métodos próprios da classe ClasseB?

Não é bem assim...

Essa implementação é boa para o caso de uma classe implementar várias interfaces que podem ter métodos com a mesma assinatura.

Acompanhe mais um exemplo;

interface IExemplo
{
    void imprime();
}

class Classe : IExemplo
{
    void IExemplo.imprime()
    {
        Console.WriteLine("Impressão da IExemplo");
    }

    void imprime()
    {
        Console.WriteLine("Impressão da classe");
    }

    static void Main(string[] args)
    {
        IExemplo ex = new Classe();
        ex.imprime();
        (ex as Classe).imprime();
        Console.ReadKey();
    }
}
  • output
  • Impressão da IExemplo
  • Impressão da classe
    Não, você não perde acesso aos métodos da classe, mas programar com abstração leva a esse tipo de "problema" (se é que podemos chamar isso de problema).
    O que você pode fazer é, já que a variável é do tipo interface, e a classe implementa essa interface, a variável pode sofrer casting pro tipo da classe, fazendo você "ganhar" acesso a tudo que a classe tem de métodos.
    E sim, é muito mais limpo programar DESTA forma, do que criar um bilhão de classes com vários métodos diferentes e sair criando levas de objetos pra poder acessar métodos distintos quando tudo que você tem de fazer é criar uma abstract class ou uma interface.

Instalando Javadocs do Hibernate 3 no Netbeans

Postado por Luis Fernando 5 comentários

*** Pode ter certeza, você NÃO vai achar uma dica dessas facilmente por aí!!! ***

A documentação do Hibernate é riquíssima e muito consistente, mas é ridículo ser obrigado a parar bruscamente o seu trabalho para recorrer ao website/pdf/chm, ou seja lá qual o meio de acesso que você usa para buscar informações ou tirar dúvidas, muitas vezes simples, na vasta documentação deste poderoso framework.

Eu já cheguei a desistir de entender melhor as características de um determinado método depois de me perder nos milhares de tópicos.

Esse processo trabalhoso se torna ainda mais desnecessário quando usamos uma ferramenta de rápido desenvolvimento, as famosas IDEs, como por exemplo o Netbeans. Isso porque elas nos dão a possibilidade de acessar a documentação de qualquer biblioteca ou projeto diretamente no código, sem a necessidade de quebrar a linha de raciocínio só para descobrir quais são as sobrecargas (overload) para um determinado método. É fácil perceber isso quando usamos objetos da API do próprio Java, um exemplo seria o String.

Aqui vai uma print screen com o javadoc do Hibernate já funcionando;

image

Resolvi fazer este tutorial quando percebi que não é fácil encontrar a documentação mais nova e muitos fóruns tem tópicos e tópicos com dúvidas sobre isso.

Bom, chega de enrolação, vamos ao que interessa.

Ferramentas usadas neste tutorial;

  • * Netbeans 6.8
  • * Hibernate-distribution-3.3.2.GA

Para fazer uso da documentação diretamente no código você precisa associar sua biblioteca (library) ou projeto a um arquivo Javadoc (.jar contendo toda a documentação) específico daquela biblioteca ou projeto.

Deste a versão 3.2.6 o Hibernate não vem com seu Javadoc (não me pergunte porque) e muitos fazem uso da documentação antiga, já seria de grande ajuda e claro que quebra o galho, mas eu não fiquei satisfeito e tratei de procurar pela versão mais nova.

Ela se encontra aqui ==>

hibernate-core-3.3.2.GA-javadoc.jar

Se quiser, aproveite também pra pegar o código fonte aqui ==>

hibernate-core-3.3.2.GA-sources.jar

Crie um projeto no Netbeans e adicione as bibliotecas do Hibernate como de costume.

  • Agora clique com o botão direito sobre o Projeto
  • Selecione a opção Propriedades (Properties)
  • Clique em Bibliotecas (Libraries).

Muita atenção nessa parte...

  • Clique sobre a biblioteca com a qual você quer adicionar o javadoc
  • No caso do Hibernate 3.3.2 é a hibernate3.jar
  • Do lado direito dessa mesma tela tem a opção Editar (Edit), clique nela
  • Agora ficou fácil, né? é só clicar em Procurar (Search)
  • Selecione o arquivo hibernate-core-3.3.2.GA-javadoc.jar
  • Marque OK em todas as telas e pronto!

É só isso! Seu projeto já está pronto, faça os testes.

Se tiver qualquer dúvida comente aqui que eu respondo o mais rápido possível.

Obrigado pela visita e boa sorte!!!

Marcadores: ,