come the next one

19951004

Publicado em:  on Setembro 9, 2009 at 10:55 am Deixe um comentário

Funny Post

youwereborn

Publicado em:  on Setembro 1, 2009 at 3:35 pm Deixe um comentário
Tags: , ,

Introdução à sistemas distribuídos

Um sistema distribuído é uma coleção de computadores independentes que parecem um sistema único para o usuário. A computação distribuída consiste em adicionar o poder computacional de diversos computadores interligados por uma rede de computadores ou mais de um processador trabalhando em conjunto no mesmo computador, para processar colaborativamente determinada tarefa de forma coerente e transparente

A principal diferença entre os sistemas centralizados e os distribuídos está na forma de comunicação e de sincronização entre os processos. Enquanto nos sistemas centralizados a sincronização é realizada por áreas compartilhadas de memória nos sistemas distribuídos a sincronização é obtida através da troca de mensagens.

Exemplos:

  • Caixas automáticas de bancos
  • Sistema de reserva de passagens aéreas
  • Internet e intranet
  • Computação móvel
Modelo Cliente-Servidor

Modelo Cliente-Servidor

Modelos de computação distribuída

Cliente/Servidor

O cliente manda um pedido para o servidor e o servidor o retorna.

Peer-to-peer (P2P)

O banco de dados manda um pedido para o gerenciador, o gerenciador retorna para o banco de dados e pede confirmação, e o banco de dados retorna para o gerenciador.

Objetos Distribuídos

Semelhante ao peer-to-peer, mas com um Middleware (mediador) intermediando o processo de comunicação.


No próximo post haverá uma video-aula com um exemplo de aplicação cliente/servidor

Publicado em:  on Agosto 26, 2009 at 12:23 am Deixe um comentário

Instalação do Kohana Framework

Primeira experiência com vídeo.

Nada de novo e nada que vocês não encontram no google.

prometo publicar posts melhores..

enjoy..

Publicado em:  on Agosto 21, 2009 at 1:11 pm Deixe um comentário

DILBERT!

DILBERT!

Publicado em:  on Agosto 10, 2009 at 4:31 pm Deixe um comentário

Desenvolvimento em Camadas

Olá a todos.

Desde o surgimento da arquitetura cliente/servidor, o desenvolvimento de software em camadas passou a ser adotado como base de arquitetura de sistemas. Porém, muitos desenvolvedores de aplicações web ainda fogem deste modelo.

Na web, onde sistemas atendem milhares de usuários simultaneamente, preocupações como estabilidade, desempenho e escalabilidade são essenciais.

Algumas vatagens da divisão em camadas:

  • Diminuição de dependência entre camadas;
  • Facilidade em manutenção, alteração e inclusão de funcionalidades;
  • Compreensão de cada camada como um todo;
  • Possibilita a implementação de views diferentes de maneira fácil;

3 Camadas

As famosas 3 camadas são:

  1. Massa;
  2. Recheio;
  3. Cobertura.

Porém, no desenvolvimento de softwares geralmente são utilizadas mais que três camadas. Para efeito didático, geralmente as camadas são divididas em “camada de dados”, “camada de negócio” e “camada de apresentação”.

Camada de Apresentação

É conhecida como GUI (Graphical User Interface). É a camada que realiza a entrada de valores e a apresentação de dados. Esta camada interage diretamente com o usuário. Na web, é aqui que é definido o layout do sistema/site e é onde são utilizadas as tecnologias de apresentação como CSS, HTML, Flash, Flex, Silverlight, Javascript, etc..

Camada de Negócio

É na camada de negócio ou domínio que são definidas as funcionalidades do sistema. Não existe uma Interface com o usuário e seus dados são voláteis, ou seja, para persistir algum dado deve ser utilizada a camada de dados.

Camada de Dados

A última camada compõe o repositório de dados e as classes que os manipulam. Esta camada recebe requisições da camada de negócio e seus métodos executam essas requisições no repositório de dados. Uma alteração no banco de dados, por exemplo, só seria refletida nessa camada e as outras não necessitariam ser alteradas.


Em um próximo post serão apresentadas as dificuldades e mitos no desenvolvimentos de camadas.

Live long and prosper and may the Force be with you.

@fabioalves10101

Publicado em:  on at 3:32 pm Deixe um comentário
Tags: , ,

Padrões de Projeto – Parte 1 – Introdução

Bem vindos.

Este é o primeiro post de uma série de posts sobre Padrões de Projeto (Design Patterns). Pretendo, nesta série, abordar alguns dos padrões mais utilizados. Pretendo usar Java nos exemplos de código, porém, em certas circunstâncias, disponibilizarei também os códigos em PHP.

Neste primeiro post dou uma idéia geral da história e do que são Padrões de Projeto.

A idéia original de Padrões de Projeto surgiu com Christopher Alexander, um engenheiro civil que propôs a criação de catálogos de padrões para arquitetura na década de 70. Segundo Alexander, “Um padrão descreve um problema que ocorre inúmeras\par vezes em determinado contexto, e descreve ainda a solução para esse problema, de modo que essa solução possa ser utilizada sistematicamente em distintas situações.

Em 1987, a partir dos conceitos criados por Alexander, os programadores Kent Beck e Ward Cunningham propuseram os primeiros padrões de projeto para a área da ciência da computação.

Padrões para arquitetura de software são soluções de eficiência já comprovadas e amplamente utilizadas para a resolução de problemas comuns em projeto de software. Estas soluções são desenvolvidas e conhecidas por especialistas e tornam-se padrões por serem reutilizadas várias vezes em vários projetos e por terem eficácia comprovada.

A idéia de aplicar padrões de projeto no desenvolvimento de softwares ganhou popularidade com o livro Design Patterns: Elements of Reusable Object-Oriented Software , de 1995. Os autores, Eric Gamma, Richard Helm , Ralph Johnson e John Vlissides, conhecidos como Gang of Four(Gangue dos Quatro) descrevem no livro 23 padrões, hoje conhecidos como padrões GoF.

Os padrões GoF são divididos em 3 famílias: de criação, estruturais e comportamentais. Os padrões de criação são relacionados à criação de objetos, os estruturais tratam das associações entre classes e objetos e os comportamentais das interações e divisões de responsabilidades entre as classes ou objetos.

Posteriormente outros livros descreveram outros padrões de projeto, como o conjunto de padrões GRASP.

Dentre as principais propriedades dos padrões de projetos estão:

  • Capturam o conhecimento e a experiência de especialistas em projeto de software;
  • Especificam abstrações que estão acima do nível de classes ou objetos isolados ou de componentes;
  • Definem um vocabulário comum para a discussão de problemas e soluções de projeto;
    Facilitam a documentação e manutenção da arquitetura do software;
  • Auxiliam o projeto de uma arquitetura com determinadas propriedades;
  • Auxiliam o projeto de arquiteturas mais complexas.

Dentre os principais benefícios para que a utilização dos padrões de projeto seja justificada estão:

  • Fornecem soluções que já foram testadas e aprovadas;
  • Tornam o sistema mais fácil de entender e manter;
  • Facilitam o desenvolvimento de módulos coesos;
  • A comunicação entre os participantes do projeto fica mais eficiente.

Estação de Trabalho em PHP

Depois que ouvi falar que certo sujeito programava em PHP com o notepad não aguentei, depois de rir muito, decidi postar qual a minha estrutura para desenvolver em PHP.

Há muito tempo, percebi o valor da utilização de ferramentas de apoio ao desenvolvimento, principalmente na produtividade, adequação à padrões e diminuição de erros.

Análise e Projeto

Por muito tempo utilizei o Jude Community. Ferramenta fantástica, porém (sempre tem um porém) via difilculdade na geração de código com ela, já que ela só gera código para C# e Java. Procurei muito até encontrar uma ferramenta que satisfizesse (sim, essa palavra existe) minhas necessidades na área de modelagem UML. Decidi adotar o ArgoUML pela facilidade de integração com o PHP. O ArgoUML é uma ferramenta OpenSource e pode ser adquirida gratuitamente no site argouml.tigris.org

Modelagem de Banco de Dados

Apesar de muitos acharem desnecessária a utilização de uma ferramenta de modelagem de banco de dados quando se tem um diagrama de classes bem definido, acho interessante a visualização que eu posso ter do banco de dados, com suas respectivas ligações e dependencias demonstradas de modo gráfico. Articulo meus pensamentos melhor assim. Uso o DB Designer, uma ferramenta simples, para criação de DER e modelos de banco. Na versão free permite importação apenas para MySQL.

IDE

Há muito tempo deixei de usar o Dreamweaver (urgh), que está muito mais para editor de texto que para IDE. A ferramenta, para quem trabalha com a parte visual é até interessante, mas para o trabalho com código “bruto” não vale a pena.

Inicialmente busquei o Eclipse, ferramenta que já conhecia das aulas de Programação Orientada a Objetos com Java, com o plugin PHPEclipse. Me dei bem, muitos recursos, como controle de projetos, code completion e controle de versão.

Depois de um tempo, li no site netbeans.org que sairia uma versão beta de suporte ao PHP pelo NetBeans. Fiquei muito feliz, pois já utilizava essa ferramenta para desenvolvimento em Java. Utilizei com PHP por mais ou menos um mês e não aguentei. A versão beta estava muito insconsistente ainda, sem muita estabilidade e tal.

Testei o Aptana, uma ferramenta desenvolvida a partir do core do eclipse, mas acabei não me adaptando. O code completion era bem limitado, porém a ferramenta é muito interessante para quem trabalha com design e quer uma alternativa grátis ao dreamweaver. A ferramenta já vem com bibliotecas e frameworks de JS, como JQuery, Dojo, Prototype, já configuradas e experando serem utilizadas.

Então, voltei para o Eclipse. Mas ao invés de usar o PHPEclipse, encontrei uma alternativa muito interessante: o PDT (PHP Development Tools).
Foi paixão à primeira vista. Adorei a estabilidade da ferramenta, além da extensibilidade que o Eclipse provê. Com a infinade de plugins que ele possui tenho uma estação de desenvolvimento bem ali, sem precisar ficar alternando entre janelas. Plugins como SQL Explorer (para gerenciamento do BD), Maven (Gerenciamento de Projetos), MyLin (Gerenciamento de Requisitos), PMD (Verificação de complexidade e padrões de projeto no código).

O PDT, das ferramentas gratuitas, é a melhor opção para o desenvolvimento em PHP. Experimentei por esses dias o suporte do PHP no Netbeans novamente, e gostei muito do que vi. Todos os problemas que vi na versão beta (afinal era beta né) foram resolvidos.

Das opções não-gratuitas temos o Zend Studio. Ainda não testei, mas quero muito (acho que vou pedir de aniversário =D ). Baseada no eclipse, possui uma estrutura realmente completa. Tudo que um programador em PHP sonha. Quando testar posto alguma coisa sobre ela aqui.

Que a força esteja com vocês!

Publicado em:  on Maio 15, 2009 at 12:50 pm Deixe um comentário
Tags: , , , , , ,

Visão inicial do C# e uma comparação com o Java

Sempre trabalhei com PHP e Java, duas linguagens que adoro.
A instituição em que trabalho desenvolve sistemas utilizando várias plataformas, inclusive o Java e o PHP, mas principalmente o C#.
Acabei sendo obrigado a aprender a linguagem e, nas linhas que se seguem, mostro as minhas primeiras impressões do framework .NET, do ASP.NET e do C#.

Ao ler sobre o framework .NET me deparei com uma ferramenta extremamente produtiva. A utilização do Visual Studio realmente facilita a criação de layouts, poupando, assim, a necessidade de gastar horas desenvolvendo Forms ou páginas em HTML.

O ASP.NET não tem nada a ver com o ASP clássico (VB Script). A linguagem na verdade tornou-se apenas uma forma de descrever os componentes HTML de forma que os eventos gerados por esses possam ser tratados em uma classe, que pode ser desenvolvida utilizando cerca de 20 linguagens.

O C# é, como dizem, muito parecido com o Java mesmo. Apesar disso possui algumas diferenças visíveis. Ainda não sei o quanto essas diferenças vão dificultar ou facilitar o meu desenvolvimento.

Algumas diferenças básicas:

Namespaces x Packages

Os dois conceitos são basicamente o mesmo, porém em Java a estrutura dos pacotes refletia diretamente na estrutura dos diretórios, em C# isso não é necessário.

Herança
Em C# não existe a palavra reservada extends ou implements, tudo é feito através do ‘:’ na própria assinatura da classe.

C#:

public class MinhaClasse : SuperClass {
}

JAVA:

public class MinhaClasse extends SuperClass{
}

Sobreescrita de um método

Em C# é possível sobrescrever um método através da palavra reservada overrides, porém tem um pequeno detalhe, em Java todos os métodos podiam ser reescritos, salvo exceção os métodos com o modificador final, em C# todos os métodos são considerados final, você precisa explicitamente dizer que vai sobreescrever o método usando a palavra reservada virtual.

C#:
public void facaAlgo(){
}

public overrides void facaAlgo(){
}

Java:
public void facaAlgo(){
}

public void facaAlgo(){
}

Getters e Setters

Em C# temos a introdução de um novo conceito, as propriedades, elas que são responsáveis por atribuir e retornar o valor de um atributo. As propriedades são basicamente “métodos capados”, pois podemos fazer processamento dentro delas mas ela não pode receber paramêtros explicitamente, porém temos acesso a todos os atributos que a visibilidade daquela instância lhe permite.

Por enquanto é isso. Ainda preciso me organizar melhor e definir padrões de desenvolvimento utilizando o .NET, mas me pareceu uma solução bastante agradável para desenvolvimento rápido.

Publicado em:  on Maio 14, 2009 at 5:14 pm Deixe um comentário
Tags: , , ,

Classes

“Uma classe é o estêncil a partir do qual são criados (gerados) objetos. Cada objeto tem a mesma estrutura e comportamento da classe na qual ele teve origem. Se o objeto obj pertence à classe C, dizemos que obj é uma instância de C” (PAGES – JONES).

Poesia!