segunda-feira, 1 de novembro de 2010

W3C: HTML5 ainda não está pronto

O World Wide Web Consortium (W3C) declarou recentemente que o HTML5 ainda não está pronto para ser usado em aplicações Web.

A Microsoft Google, Apple, Mozilla e a Opera Software adicionaram o suporte para alguns elementos do HTML5 aos seus navegadores, mas o W3C informou que o padrão ainda não está maduro o bastante e nem é suportado o bastante para ser adotado para uso geral.

Philippe Le Hegaret, do W3C, disse que a grande parte da implementação atual do HTML5 está presente em versões Beta dos navegadores e que as APIs e a compatibilidade entre os navegadores ainda não são boas o bastante.

Le Hegaret reconheceu que o HTML5 “mudará a Web”, mas também disse que no momento, usar o Microsoft Silvertlight ou o Adobe Flash ainda é a melhor opção até que todos os recursos do HTML5 tenham sido propriamente documentados e suportados.

quinta-feira, 30 de setembro de 2010

Hands On Lab – NHibernate com MVC


E ae galera! Estou aqui de novo, desculpe não ter postado coisas novas, devido ao fato de ter passado por algumas semanas meio "ocupado". Mas hoje, neste post de autoria do Denis Ferrari. O assunto abordado no post, foi um curso que fizemos em Vitória, na Mindworks, ministrado por ele, o curso foi muito bom, deu pra aproveita muita coisa, e a partir disso venho lhes mostrar o que ele comentou em seu blog.
Nesse sábado (25/09), tive a honra de ministrar o primeiro Hands On Lab da Mindworks que abordou dois temas muito interessantes: ASP.NET MVC e NHibernate. Com carga horária de oito horas, o treinamento visa construir uma projeto etapa por etapa junto com a turma, desde os conceitos até as aplicações práticas.
Partindo da camada de domínio, modelamos as classes e revisamos vários conceitos sobre essa etapa tão importante de qualquer projeto. O objetivo dessa parte é praticar a programação orientada a objetos, que é a base das técnicas de construção mais eficientes.
Com o domínio configurado, a próxima etapa é resolver como o projeto terá os seus objetos persistidos. Nessa etapa, não só criamos o banco de dados, mas também configuramos e testamos a utilização do NHibernate, desde a criação da configuração e mapeamento até as inserções, atualizações e consultas.
A parte final do curso aborda o ASP.NET MVC, desde os conceitos até a aplicação prática. Nessa etapa construímos a apresentação do projeto utilizando como base as outras camadas já desenvolvidas. Não só percebemos o poder do ASP.NET MVC, mas também como todas as coisas se encaixam.
Gostei muito desse modelo de treinamento, pois não só abordamos temas interessantes, mas também discutimos durante o dia vários aspectos importantes de um projeto de software. O treinamento não visa formar especialistas em nenhuma dessas tecnologias, mas dar o embasamento necessário para que novas empreitadas possam ser iniciadas com maior segurança.

Referência: Herois da T.I.

sexta-feira, 10 de setembro de 2010

Google lança o 'Google Instant'

O Google lançou nesta semana um novo recurso para seu site de buscas chamado “Google Instant”.

Com ele os resultados das buscas são exibidos instantaneamente sem que o usuário precise confirmar a busca. Basta começar a digitar um termo e os resultados já são exibidos na hora!




Referência : BABOO

segunda-feira, 30 de agosto de 2010

A Internet caiu! O que fazer agora?

E ae galera, estava lendo esse post e achei muito interessante. Penso que a maioria das pessoas só utiliza a internet para entrar no Orkut, MSN, Facebook, entre outras redes sociais, certo? Mas também há pessoas que utilizam a internet de uma forma ainda mais produtiva, nada contra quem só usa para entrar em redes sociais, por que eu também faço isso, kkkkkk. Mas o que vocês fazem quando a internet cai? Penso que a maioria desliga o computador e vai fazer outras coisas, outras ficam escutando músicas, ou até mesmo assistindo algum seriado ou filme, isso é bom também.

Mas vou indicar algumas dicas para vocês usarem o dia sem internet ainda mais produtivo, divertido e relaxante. Então vamos ao que interessa!?

A Manutenção tem prioridade

Uma coisa que as pessoas costumam ignorar esta diretamente ligada ao bom desempenho do computador. Já que não tem muita coisa para se fazer, que tal da uma limpeza, começar a desinstalar programas que você nem sabe o porquê instalou, ou aqueles que você não os utiliza mais. Na internet existem vários programas para realizar esta tarefa, (com o Revo Uninstaller a eliminação de programas pode ser mais eficiente, mas caso você não tenha este software instalado, use o gerenciador do Windows).

Se você já possui um aplicativo dessa natureza como o CCleaner, elimine arquivos temporários e conserte o registro do Windows. Outra coisa, faça uma varredura no disco e aproveite para desfragmentá-lo.

Organize a bagunça

Como todo mundo faz, penso que você possa baixar grandes quantidades de arquivos. É comum que de vez em quando o Windows reclame aquele mensagem chata que não possui mais espaço suficiente, e para evitar que isso aconteça nada melhor que arruma a bagunça, escolhendo quais arquivos são realmente importantes para você, e eliminar aqueles que não são mais utilizados.

Imagino que vocês saem baixando tudo o que vê pela frente, como musica e vídeos, aproveite este tempo para organizá-los em pastas que as possam identificá-las.

Divirta-se

Se você é um viciado em jogos on line, o que fazer neste momento? A solução seria jogar os jogos que você tem instalado no PC, para quem não é muito fã de jogos podem se divertir em assistir filmes ou ouvir as muitas músicas que tem.

Fique longe do PC!

Apesar de haver diversas tarefas para realizar no seu computador, a melhor idéia talvez seja ficar longe do PC, ainda mais se você o usa sete dias por semana. Há todo um mundo para conhecer fora da sua casa.
Aproveite o problema com a internet e vá ao parque, visite seus familiares, saia com os amigos, dance, cante, limpe a casa, namore ou faça qualquer outra coisa!

Referência: Baixaki

quarta-feira, 25 de agosto de 2010

Trabalhando com classes abstratas, classes seladas e interfaces em C#

Saudações galera!!

Bom, hoje resolvi disponibilizar para meus amigos este post do Rudson Kiyoshi Souza Carvalho, que explica muito bem como usar classes abstratas, classes seladas e interfaces. Na verdade, a minha idéia era tentar tirar dúvidas de amigos e até algumas minhas, espero que gostem e que através deste post possa esclarecer um pouco mais para vocês.

Trabalhando com classes abstratas, classes seladas e interfaces em C#
Por Rudson Kiyoshi Souza Carvalho


Resumo

Este artigo descreve o que são Classes Abstratas, Seladas e Interfaces, e também explica quando devemos implementar cada uma delas em nosso código.

Introdução

Utilizar classes seladas é um novo conceito adicionado ao C#. O conceito de quando utilizar cada tipo de classe pode parecer um pouco confuso no início, mas após ter entendido bem os conceitos de cada uma e entender suas similaridades, poderemos partir para um desenvolvimento mais seguro e escalável, tentarei neste artigo descrever não só cada tipo de classe, mas também descrever algumas situações que devemos usar este tipo de codificação. Os exemplos de códigos abaixo utilizam a linguagem C#.

O que é uma classe abstrata? (Abstract Class)
A classe abstrata é um tipo de classe que somente pode ser herdada e não instanciada, de certa forma pode se dizer que este tipo de classe é uma classe conceitual que pode definir funcionalidades para que as suas subclasses (classes que herdam desta classe) possam implementá-las de forma não obrigatória, ou seja ao se definir um conjunto de métodos na classe abstrata não é de total obrigatoriedade a implementação de todos os métodos em suas subclasses, em uma classe abstrata os métodos declarados podem ser abstratos ou não, e suas implementações devem ser obrigatórias na subclasse ou não, quando criamos um método abstrato em uma classe abstrata sua implementação é obrigatória, caso você não implemente o mesmo o compilador criará um erro em tempo de compilação.

Exemplo de implementação retirado do books online em C#.

    abstract class formaClasse
    {
        abstract public int Area();
    }
    class quadrado : formaClasse
    {
        int x, y;
        // Se não for implementado o método Area()
        // será gerado um compile-time error.
        public override int Area()
        {
            return x * y;
        }
    }

O que é uma Interface? (Interface)

As interfaces são fundamentais em um sistema orientado a objetos, quando dizemos que um objeto é a instância de uma classe, na verdade queremos dizer, que este objeto implementa a interface definida pela classe, ou seja uma interface define as operações que um objeto será obrigado a implementar. Para cada operação declarada por um objeto deve ser especificado o nome da operação, os objetos que esta operação aceita como parâmetro e o tipo de valor retornado pela operação; este conjunto de informações sobre uma determinada operação tem o nome de assinatura da operação, e um conjunto de assinaturas de operações dá-se o nome de interface.

É importante lembrar que uma interface nunca contém implementação, ou seja numa interface não se pode definir campos, pois o mesmo é uma implementação de um atributo objeto, a interface também não permite construtores pois num contrutor temos as instruções usadas para inicializar campos. Para podermos usar uma interface devemos criar uma classe ou estrutura e herdar da interface, com isso é obrigatório implementar todos os métodos da interface.


Exemplo de implementação retirado do books online em C#.

    interface IExemploInterface
    {
        void ExemploMetodo();
    }

    class Implementacaoclasse : IExemploInterface
    {
        // Implementação explicita da interface
        void IExemploInterface.ExemploMetodo()
        {
            // Implementação do método
        }

        static void Main()
        {
            // Declarando uma instancia de uma interface
            IExemploInterface obj = new Implementacaoclasse();

            // chame o método.
            obj.SampleMethod();
        }
    }

Classes Abstratas X Interfaces

Uma classe abstrata pode conter métodos completos ou incompletos. Uma Interface pode conter apenas a assinatura de um método, mas nenhum corpo ou implementação. Portanto, em uma classe abstrata pode-se implementar métodos, mas em uma Interface não. Uma classe abstrata pode conter campos, construtores, ou destrutores e aplicar propriedades. Uma interface não pode conter campos, construtores, ou destrutores pode possuir apenas a propriedade da assinatura, mas não a implementação. Uma classe abstrata não suporta múltiplas heranças, mas uma interface pode suportar múltiplas herança. Assim, uma classe pode herdar várias interfaces, mas apenas uma classe abstrata. Uma classe que implementa uma interface tem de obrigatoriamente implementar todos os métodos da interface, mas o mesmo não é exigido no caso de uma classe abstrata. As classes abstratas são mais rápidas que as interfaces.

O que é uma classe selada? (Sealed Class)
Uma classe selada é utilizada para restringir características da herança do objeto, quando uma classe é definida como sealed, está classe não poderá ser herdada, caso você tente o compilador criara um erro em tempo de compilação, após criar uma classe selada pode se observar que o intelisense não mostra o nome da classe definida como sealed quando você tenta criar uma herança para novas classes.

Exemplo de implementação retirado do books online em C#.

    sealed class ClasseSelada
    {
        public int x;
        public int y;
    }

    class MainClass
    {
        static void Main()
        {
            ClasseSelada sc = new ClasseSelada();
            sc.x = 110;
            sc.y = 150;
            Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
        }
    }

Então, quando devo utilizar o que?

Classes Abstratas podem adicionar mais funcionalidades, sem destruir as funcionalidades das classes filhos que poderiam estar usando uma versão mais antiga. Classes abstratas fornecem uma maneira simples e fácil para versionar nossos componentes. Através da atualização da classe base, todas as classes que herdam são atualizadas automaticamente com a mudança. Em uma interface, a criação de funções adicionais terá um efeito sobre suas classes filhos, devido à necessidade de implementação dos Métodos criados na interface. Classes abstratas deveriam ser usadas principalmente para objetos que estão estritamente relacionados, enquanto o uso de interfaces é mais adequado para fornecer funcionalidade comum a classes independentes.

Digamos que existem duas classes, de pássaros e de aviões, e nas duas exista os métodos chamados voar(). Seria estranho para uma classe aviões herdar a partir de umas classe pássaros apenas porque necessita do método voar(). Em vez disso, o método voar() deve ser definido em uma interface e em ambas as classes pássaros e aviões devem implementar a interface. Se quisermos proporcionar uma funcionalidade em comum para os componentes, devemos utilizar uma classe abstrata.

Classes abstratas nos permitem implementar parcialmente uma classe, enquanto a interface não contem a implementação de qualquer membro. Por isso, a seleção de interface ou classes abstratas depende das necessidades e design do nosso projeto. Podemos fazer uma classe abstrata, interface, ou até uma combinação de ambas dependendo de nossas necessidades. Se desejarmos criar uma classe ou método interno para um componente ou library o ideal é utilizar o tipo sealed porque qualquer tentativa de anular algumas das suas funcionalidades não será permitida.

Nós podemos marcar uma classe ou método como selados por motivos comerciais, a fim de impedir um terceiro de modificar nossa classe. Por exemplo, no .NET a string é uma classe selada. Não devemos usar a palavra-chave sealed com um método a menos que o método seja uma mudança de outro método, ou se estamos definindo um novo método e não queremos que ninguém mais o sobreponha, não se deve declará-lo como virtual em primeiro lugar. a palavra-chave selado fornece uma maneira de garantir que ao sobrepor um método seja fornecido um "final" significa que ninguém mais poderá sobrepor-lo novamente.

Conclusão

Devemos utilizar classes abstratas quando queremos compartilhar funcionalidades em comum entre classes, e utilizar interfaces quando desejamos que uma classe possua as mesmas assinaturas porem a implementação de cada método não precise ser a mesma.

Referências

Working with Abstract classes, Sealed Classes, and Interfaces in C# by SANJIT SIL

Books online Microsoft

quarta-feira, 18 de agosto de 2010

Como reconhecer um bom programador?

Saudações Pessoal!!!

Estava pensando qual seria o meu próximo post, então decidi pedir há um amigo uma sugestão, ele me mandou um blog que tinha como post “Como reconhecer um bom programador”, achei interessante e resolvi postá-lo também.

Este post apresenta uma lista contendo algumas características que distinguem um bom programador, vamos então conferi-los.

Paixão.
Os motivos que levam uma pessoa a começar a programar são diversos. O mais comum que conheço, é que tecnologia/programação, é uma área que “paga bem”, uma área que “nunca falta emprego”.

Verdade, e cada vez mais verdade. Porem é fácil perceber na maioria destas pessoas a falta de paixão, (paixão real mesmo) em programar. Estes programadores que estão na área porque a acham “legal e lucrativa”, dificilmente vão ter iniciativa de aprender ou testar alguma coisa nova, geralmente seu conhecimento é sob demanda, é feito a partir da necessidade de aplicar determinado conhecimento em determinada situação. Estas pessoas dificilmente debatem o assunto programação fora do trabalho, e quando fazem o entusiasmo é mínimo. Falta de paixão.

Programar envolve código. Muito código. Já cansei de ver gente dizer que estava cansado de programar, que queria novos desafios (mas quando ganhavam algum trabalho realmente desafiador, não demorava para eles desanimarem novamente). Quem tem paixão pelo que faz, FAZ. Mesmo que não seja bem pago para isso.

Os apaixonados programam mesmo. Imagine um médico cansado de operar? Não seria hora de parar então? Mudar de ramo, de setor? Eu acho que sim.

O prazer em aprender.
A tecnologia avança muito rápido em todos seus segmentos. As linguagens de programação, lutam para conseguirem cada vez mais abraçar mais o mercado com diferentes braços e nem todos programadores estão dispostos a aprender alguma coisa nova. Claro que ser um bom programador, não significa ficar sedento por tudo que é novo, e morrer de “ler os twitter de tecnologia” todos os dias para não ficar desatualizado…

Mas eu quero me referir aos programadores que realmente tão pouco se lixando para o que há de novo. Geralmente quem passou mais de 2 anos na faculdade de tecnologia para só depois, começar a programar têm essa dificuldade em querer algo novo.

Os bons programadores são autodidatas. E tudo de novo que lhe é proposto, ele vai atrás da informação e consegue aprender sozinho. Nenhum programador que se preze realmente precisa de um curso para conseguir trabalhar com qualquer coisa (qualquer coisa, é qualquer coisa…). Eles têm prazer em ler, prazer em aprender algo novo, e geralmente também, em ensinar, em passar para frente o que foi aprendido. Nem todos estes programadores possuem faculdades ou cursos, pois estes mesmos, dificilmente ensinam o que realmente o programador precisa aprender, e um bom programador sabe disto.

Social.
Um clichê que deve ser derrubado de uma vez por todas, é que programador é nerd, e que nerds são aqueles sujeitos que não sabem conversar sobre outras alem de programação e similares…

Uma coisa não tem nada haver com a outra. Nem todo nerd é programador, e nem todo programador é nerd, e os “Nerds” que conheço, programadores ou não, são sujeitos extremamente inteligentes e sociáveis, e não aqueles estereótipos de sujeitinho magricela, com óculos de acetato, e que fica o dia inteiro fazendo algoritmos num cantinho escuro de um lugar qualquer. Mas, realmente existem programadores que vivem em uma bolha.

Antes de contratar um programador, experimente conversar sobre qualquer outra coisa de aspecto social, e veja como ele se comporta. Um grande programador possuem um tipo de inteligência social, algo que os possibilita desligar seus “deveres tecnológicos” quando for preciso e poder dialogar ou fazer qualquer outra coisa que lhe dar prazer, desde passar a tarde sem fazer nada à brincar com seus filhos. Um bom programador não vive isolado do mundo.

No meu atual trabalho nós costumamos reunir a galera para eventos bem casuais, com cinemas, barzinho no fim da tarde, e até mesmo uma tarde bem nerd com campeonato de vídeo game, mas que nem todos participantes são, programadores. É gostoso viver, e um bom profissional, indiferente da sua área, sabe o valor de saber separar as coisas.

Experiência Oculta.
Todo bom programador, sempre tem algum projeto pessoal, ou está envolvido no de alguém, e que por não ser o projeto de “uma empresa”, acaba não indo para seu currículo.

Experimente em uma entrevista perguntar como anda o projeto pessoal que o candidato está desenvolvendo. Se este é realmente um bom programador, prepare-se para se surpreender com as idéias mais ousadas que este está (ou mesmo já esteve) trabalhando, ou querendo trabalhar.

Eu particularmente há anos venho tentando construir algumas redes sociais especificas (e já estou acabando!), um amigo aqui construiu um sistema de busca avançadíssimo para um nicho de mercado em particular, o outro tem um gerenciador de leilões… E por ai vai. Todo projeto particular, deve ser contado como experiência, pois é aonde o programador geralmente descobre coisas novas, testa tecnologias sem medo nenhum. Por isso, não é muito dizer que este item, é relacionado ao nosso primeiro: Paixão.

Poliglota na tecnologia.
É impossível negar que qualquer bom programador saiba mais de uma linguagem de programação. Mesmo que ele não seja expert em linguagens que não seja a que ele utiliza no dia-a-dia. Isto é algo comum ao programador apaixonado pelo que faz. Nada é mais gostoso do que aprender algo novo, ver resultados novos na tela!

É muito comum que programadores de .net conhecerem VB, C#, HTML, CSS, Javascript, XML e até brincam com Silverlight. Para quem já programa com as linguagem acima pode achar o conjunto algo “essencial” e que “todo programador deve dominar”, mas bem sabemos que a realidade não é esta, nem todos que colocam HTML no currículo realmente sabem concertar problemas de Layout com CSS por exemplo.

Outra coisa importante neste aspecto de múltiplas linguagens, é não ter preconceito com linguagem alguma. Mesmo que sejam de plataformas diferentes, já vi muito programador Microsoft criticar softwares Linux ou Mac, por algum tipo de “elitismo” ridículo. Sou programador Microsoft apaixonado por Ruby, mas ainda não domino, e sempre vou tirar dúvidas com os meus amigos de Java, que é outra linguagem que conheço pouco, mas não só a respeito, como tenho interesse em conhecer mais afundo, nenhum conhecimento é em vão.

Qualificação Formal.
Para fechar, uma bem relativa, mas cada vez mais, é uma realidade. Não se pode julgar se o programador é bom ou não, olhando somente suas qualificações no currículo.

Muitos programadores possuem diplomas mas não são bons programadores. Certificações nos dias de hoje também não são indicadores de 100% de capacidade, estes itens são usados geralmente como “filtros” na hora da seleção de candidatos em empresas grandes, mas se você possui um pequeno negócio é muito mais importante que você contrate alguém com experiência de sobra, do que teoria.

Não estou dizendo que certificações e diplomas são coisas ruins! De forma alguma. São importantes para a formação do profissional.

Mas carga de teoria que se aprendia no passado, nos dias de hoje não é mais tão fundamental quanto a prática. Prática esta, que permite aos programadores aprenderem as coisas muito mais rápido lendo livros e artigos do que assistindo aulas. Mas é claro, o mercado exige (e sempre vai exigir) profissionais qualificados, e é muito importante procurar cursos mais objetivos e de menor tempo, para que você possa estar pronto para o mercado tão rápido quanto a velocidade em que você precisará se especializar em algo aprendido na faculdade (e com certeza irá…)

e antes de acabar…
Humildade. Todos nós precisamos ter, e muitos programadores esquecem isso quando querem se tornar Rockstar do código…

(e agora sim)Para acabar.
Bom, a listagem acima não é lei. Você com certeza irá encontrar grandes programadores que não se adéqua a algumas coisas acima. Mas com certeza, em um aspecto geral, programadores inteligentes, sociáveis, apaixonados e experientes vão se identificar com estes tópicos!.

Até a próxima galera!

Referência: Blog Inter-Sections

segunda-feira, 9 de agosto de 2010

Vantagens de se Investir na Virtualização

Saudações Pessoal, venho aqui mostra-lhes alguns motivos para se investir em virtualização!!! Espero que gostem.


O que é virtualização?
Virtualização pode ser definida como a criação de um ambiente virtual que simula um ambiente real, propiciando a utilização de diversos sistemas e aplicativos sem a necessidade de acesso físico à máquina na qual estão hospedados. Isso possibilita que o usuário possa usar o Word através do Linux, isso porque usando conceitos de virtualização podemos reduzir a dependência que os recursos computacionais exercem entre si.

E quais são suas vantagens?
Algumas das muitas vantagens que a virtualização proporciona são:

- Segurança: as VM’s (virtual machines) são isoladas e independentes umas das outras.
- Redução de custos: necessita-se de menos hardware (menos dispositivos físicos, como computadores, switches etc.) para gerenciar uma rede.
- Redução do consumo de energia: devido à redução na quantidade de dispositivos.
- Melhor aproveitamento do espaço físico: com menos máquinas a necessidade de espaço diminui.
- Melhor aproveitamento do hardware: com o compartilhamento de hardware entre as VM’s numa mesma máquina, reduz-se a ociosidade do mesmo.
- Possibilidade de simular redes de computadores com menor demanda de hardware.
- Possibilidade de utilizar de SO’s (sistemas operacionais) que não possuam compatibilidade com o hardware sobre o mesmo: caso o software gerenciador de máquinas virtuais seja compatível com esse hardware e possibilite a emulação do mesmo para um SO incompatível.
- Facilidade ao migrar ambientes: evita reinstalação e reconfiguração dos sistemas a serem migrados.
- Utilização de uma VM como ambiente de desenvolvimento: possibilita testes em SO’s distintos e, por prover um ambiente isolado, evita que falhas na configuração e/ou execução, ou até mesmo vírus, danifiquem o hardware da máquina.

Mas o ponto que eu queria mostrar a vocês é que utilizando a virtualização podemos preservar o meio ambiente. Como assim?

Com a virtualização conseguimos rodar em servidores físicos vários computadores virtuais fazendo com que diminua o número de servidores físicos nos datacenter das empresas. Isso é um fator positivo que se deve levar em conta, pois estamos buscando formas sustentáveis e menos prejudiciais o nosso uso da computação.

Como a virtualização esta em evolução, podemos espera muito ainda por vir. Mas já não é uma grande coisa a possibilidade de se economizar dinheiro e ainda por cima de forma ecológica?

Referências: Olhar DigitalDemasio