domingo, 29 de agosto de 2010

Títulos de Livros

Conforme sugestão dada nos comentários do último post, escrevo este sobre os livros que estou lendo, relacionados a temas diferentes, na área de Desenvolvimento de Sistemas(ou não..rs), que podem ser úteis a mais gente.

Usabilidade na Web - Jakob Nielsen

Fica cada vez mais nítido pra mim, pelas minhas próprias experiências e as de profissionais que trabalham diretamente comigo que PROGRAMADOR não é DESIGNER e DESIGNER não é PROGRAMADOR.

Eu sinto dificuldades em desenvolver a chamada camada View(para quem utiliza o padrão MVC) ou a camada de apresentação(PL) pra quem utiliza a arquitetura em camadas tradicional.

Muitas vezes trabalhamos em uma empresa que não possui todos os membros recomendáveis para o desenvolvimento de sistemas, o que acarreta no acúmulo de funções. Sou analista programador e não temos um Web Designer na empresa. Acabo tendo que desempenhar este papel muitas vezes, motivo pelo qual tenho estudado conceitos de Usabilidade e Acessibilidade.

Recomendo o livro Usabilidade na Web, de Jakob Nielsen, considerado o papa na área de Usabilidade desde o ano 2000 até os dias atuais. É um dos maiores defensores da usabilidade, não somente em Websites, mas também em sistemas. Recomendo a leitura. Comprei, li e recomendo. Sugiro também outros dois que tenho: NÃO ME FAÇA PENSAR - de Steve Krug,  livro que defende o conceito de simplicidade ao desenvolver interfaces e Webdesign - Teoria & Prática

Eu acho ótimos os recursos AJAX "prontos" que o Asp.Net nos proporciona, mas sempre gostei de estudar a fundo conceitos de AJAX, porque pra mim não basta usar um componente. Sempre tento entender o que ele faz. Por esta razão, comecei a estudar um pouco mais a fundo AJAX e adquiri e estou lendo os seguintes livros:

Padrões de Projetos AJAX  - Michael Mahemoff
- Use a Cabeça - Ajax Profissional(conteúdo de nível básico)

Recomendo estes livros. Pra quem não tem nenhum conhecimento dos conceitos de Ajax eu recomendo o segundo. Pra quem já tem certa familiaridade, recomendo o primeiro.

Os outros livros que estou lendo atualmente são:

UML - Guia do Usuário (dos criadores da UML)
Teste e Análise de Software - processos princípios e técnicas
Dominando o Desenvolvimento no Iphone


Estes, citados neste post, são os que eu adquiri recentemente e atualmente estou lendo. Recomendo todos eles. Têm sido de grande ajuda e espero que sejam a mais gente.

Grande abraço a todos.

quarta-feira, 25 de agosto de 2010

Sempre dá pra melhorar

Uma das coisas que tenho percebido neste tempo em que estou trabalhando com desenvolvimento de Sistemas é que sempre, sempre mesmo, dá pra melhorar.

Tenho aprendido todos os dias coisas novas, coisas que têm me ajudado a encarar os desafios de se desenvolver coisas novas e diferentes todos os dias.

Nunca é de mais ler (e reler) livros sobre programação e/ou Análise de Sistemas.

Nos últimos três meses mais ou menos estou comprando pelo menos um livro por semana, porque a vontade de aprender pede. E, quanto mais estudo, mais dá vontade de estudar. E quanto mais leio mais percebo falhas ou erros de arquitetura nos sistemas que desenvolvi ou que estão em desenvolvimento. Percebo que poderia ter feito de forma diferente ou que, fazendo da forma que fiz, dificulta-se manutenção ou outro fator. Ao mesmo tempo que descubro deficiências e falhas no passado, vejo evolução no presente. Não me incomodo do passado, mas me gratifico com o presente e espero poder sempre melhorar.

Tenho aplicado Refactoring quase todos os dias e todos os dias consigo melhorar algo no código, torná-lo mais legível, mais robusto, mais simples, porque, como diz uma frase que li: "Não tem que ser difícil". E não tem mesmo. Tem que ser simples, fácil e eficiente. Digo com relação ao código-fonte dos sistemas. É melhor pra todo mundo. Considero lamentável a atitude de aumentar a complexidade de algo desnecessariamente só pra que haja "necessidade" do seu trabalho. Não fique amarrado em um projeto, parta pra outros, olhe pra frente.

Estou estudando simultaneamente conceitos de SOA,SCRUM,XP,Padrões de Projetos Ajax, Usabilidade e acessibilidade, Técnicas de Refactoring, UML, JavaScript, CSS, HTML, c#, Iron Ruby e por aí vai.

Nenhum desses assuntos ou temas estão sendo abordados em alguma disciplina da faculdade e muitas delas não são exigência atual na função que exerço hoje, mas APRENDER É BOM.

Programador que não gosta de ler ou estudar está na profissão errada, porque todo dia tem que aprender.


Me desculpem por não ser um post técnico. Como diriam os membros de algumas comunidades. É OFF-TOPIC.

Abraços

segunda-feira, 26 de julho de 2010

DLLs - Projeto

Olá pessoal, tudo bem?

Devido a muitos casos vivenciados recentemente, escrevo este post sobre a boa prática de se referenciar apenas arquivos .DLL que estejam realmente no projeto ou o componham.

No desenvolvimento de muitas aplicações temos a necessidade de referenciar no projeto bibliotecas que não são nativas do Asp.Net(independente da versão). Por exemplo, ao desenvolver um sistema de interface com Banco de Dados Oracle, necessitamos das bibliotecas específicas que possibilitarão trabalhar com este banco e seu driver próprio. Para isto fazemos uso da bliblioteca System.Data.OracleClient. Perceba que o nome é semelhante aos de outros BD(SqlCliente, MySqlCliente...etc). Haja vista que não é uma biblioteca que muitas vezes já vem com o Framework precimamos fazer referência a ela, na Solution através de:



Fazendo a referência a uma DLL que está contida em algum diretório da nossa máquina local, conseguimos trabalhar com a mesma.

Porém, algumas vezes, ao subirmos a aplicação para o ambiente de produção, algumas coisas e recursos não funcionam, e muitas vezes a causa é a inexistência de determinada DLL ou recurso no ambiente de servidor.

Qual a solução pra isso? Referenciar apenas arquivos que façam parte da Solution. Antes de referenciar determinada DLL, faça uma cópia para alguma pasta própria do projeto.

Em caso de DDLs ou classes, por padrão, é adicionado na pasta App_Code:


Espera que seja útil para inciantes em Asp.Net.

 Grande abraço a todos.

domingo, 25 de julho de 2010

Informações Centralizadas - Web.Config

Oi galera, tudo certo?

Este post é sobre a utilização do Web.Config do Asp.Net  para especificar valores que serão "enxergados" por toda a aplicação.

Sei que é um assunto saturado pra muitos, mas fiz este post  porque tenho feito manutenção em alguns sistemas em Asp.Net com C# e  percebido que há informações perdidas na aplicação, como referência à strings de conexão com o banco(à mesma string), mas sempre declaradas. Se há mudança de senha ou usuário de banco, se faz necessária a mudança em muitos arquivos, o que não é considerado uma boa prática.

Tenho percebido esta falha ou má prática principalmente em programadores que estão iniciando em programação ou eram de outras linguagens Web e estão indo para o Asp.Net.

Vamos a um exemplo simples:

C#

SqlConnection conexao = new SqlConnection("Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;");


string sql = "SELECT * FROM minhaTabela";
conexao.Open();
SqlCommand cmd = new SqlCommand(sql, conexao);

SqlDataReader dr = cmd.ExecuteReader();

conexao.Close();


Vejo a declaração à string destacada em vermelho em muitos arquivos .cs de aplicações. Se é necessário alterar esta string, é necessário mudar em todos os arquivos, sendo que a mesma string poderia ser especificada uma única vez, no Web.Config e chamada toda vez que se necessitasse.

No Web.Config existe a seção <connectionStrings> , própria para se especificar strings de conexão. Mas, neste exemplo específico não vou utilizá-la, porque o objetivo  não é  incentivar a centralização somente de strings de conexão, mas de qualquer coisa que seja utilizada em toda aplicação.

No Web.Config existe a seção <appSettings>na qual podemos especificar chaves com seus respectivos valores, como abaixo:


Web.Config

<appSettings>


<add key="StringConexao" value="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword">

</appSettings>
 
 
Toda vez que precisarmos fazer referência à string de conexão, não declararemos  uma nova string, mas referenciaremos a chave "StringConexao" que está no Web.Config, em AppSettins, como abaixo:.
 
C#
 
SqlConnection conexao = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings.Get("StringConexao").ToString());


conexao.Open();
string sql = "SELECT * FROM minhaTabela";
SqlCommand cmd = new SqlCommand(sql, conexao);

SqlDataReader dr = cmd.ExecuteReader();

conexao.Close();
 
Perceba que a string especificada foi o valor contido na chave "StringConexao" do Web.Config.
 
Quer mudar a string de conexão agora? Muda apenas no Web.Config ;). Uma única vez :)
 
Espero que seja útil de alguma forma aos que estejam bem no início da sua caminhada em Asp.Net com C#.
 
Abraços a todos

sábado, 1 de maio de 2010

Controles de Navegação do Asp.Net

Olá pessoal

O tema do TCC que estou fazendo na faculdade é Interface Homem-Máquina para Web, e o assunto diz respeito à usabilidade.

Eu não consigo pensar em qualquer conceito de desenvolvimento para Web e não pensar imediatamente em Dot.Net e nos recursos de sua principal IDE: Visual Studio.

Mesmo a Web sendo um meio de divulgação já  totalmente consolidado, tendo milhões de sites já hospedados e a taxa de utilização semanal em horas da internet por usuário esteja aumentando gradativamente a cada ano, em todos os países, ainda existem muitos sites(e não são poucos) que perdem potenciais usuários e a fidelização dos mesmos por falta de obsrvância às diretrizes universais de Usabilidade.   E a Navegação é uma delas.


Analisando os controles do Asp.Net da ToolBox à luz dos conceitos de Usabilidade, me ative aos controles da Aba Navigation da ToolBox, que são ótimos de trabalhar e objetos cuidadosamente criados e desenvolvidos por profissionais que sabiam o que estava fazendo quando os criaram, pois possuem as "regras" exatamente como se recomenda que tenham.

Considero interessante utilizá-los, justamente por estas regras, haja vista que a maioria dos programadores e desenvolvedores da Web gostam de implementar estes recursos "manualmente".

Vamos aos problemas de usabilidade e às alternativas que o Asp.Net nos dá para previní-los, minimizá-los e/ou corrigí-los.


A maioria das pessoas não se sente à vontade em alguns sites, pois se sentem "perdidas". Vão navegando, navegando até que, se perdem. Às vezes querem retornar a algum ponto(o que seria interessante para o site e para o usuário) e não conseguem, porque há falta de informação para o usuário de onde o mesmo se encontra dentro da sua aplicação. Portanto, se faz necessária a existência de alguma indicação que lhe mostre em que ponto  está situado, segundo a hierarquização proposta pelo desenvolvedor ou mentor do site.

Para isto têm-se os controles da Aba Navigation da Toolbox:

Menu Web Server Control
SiteMapPath Web Server Control
Treeview Web Server Control


 Todos utilizam menu, então não há necessidade de explicar o que é. Neste caso só queria ressaltar a facilidade de se trabalhar com Styles utilizando o controle nativo do Asp.Net ao invés de implementá-lo manualmente. Uma das principais dificuldades de programadores Web está na manipulação de códigos de front-end(HTML e CSS), justamente porque não constituem "programação". Gerar o resultado e comportamento esperado de algum elemento da página, muitas vezes, é algo penoso, seja pela diversidade de navegadores disponíveis, seja pelo  seu grau de personalização. E montar menus horizontais e verticais, com vários submeunus, num estilo aceitável é um belo exemplo disso. Então, utilizemos este controle Asp.Net, para ganharmos tempo. Considero uma boa prática não "reiventar" a roda. Se já há pronto e atende às nossas necessidades, porque não utilizar?

O SiteMapPah  indica ao usuário aonde está na sua aplicação, lhe mostrando em que ponto se encontra na arquitetura da informação do site. É chamado por alguns de "caminho de migalhas de pão" pois permite que os usuários, mesmo depois de navegarem por muitas páginas, retornem ao ponto que quiserem, se sentindo seguros, tendo uma possiblidade maior de passar mais tempo dentro do seu site.

Todos esses controles possuem características e propósitos semelhantes, podendo também ser manipulados praticamente da mesma forma, permiindo vincular o objeto a uma fonte de dados que indique como estão dispostos e divididos os links dentro da sua aplicação, seja a uma base de dados SQL, um arquivo XML ou outra fonte de dados.

Acho bem interessante neste caso optar por XML, pois pode ser melhor validado e por este motivo(na minha opinão) atende melhor a proposta.

Caros, não vou, neste post, dar demonstração da implementação, mas abaixo segue link muito útil que cumpre esta finalidade:  Navigation ToolBox Controls

Grande abraço a todos.

quarta-feira, 24 de março de 2010

Controles ASP.Net

Olá pessoal,

uma das propostas da Microsoft com a Plataforma .Net, juntamente com a IDE Visual Studio(independente da versão) é fazer com que o desenvolvimento para Web fosse parecido ao Desktop. Com esta proposta, desenvolvedores acostumados com linguagens compiladas/desktop como Delphi e Vb, conseguem desenvolver para Web sem problemas com C# ou VB.Net. O tempo de adaptação é rápido, porque a programação da camada de visão é em ambiente visual(arrasntando controles à tela/formulário) e o conceito de Orientação a Objeto totalmente incorporado, bem como Orientação a Eventos.

Uma grande facilidade que a Plataforma.Net proporcionou também é a facilidade de se trabalhar com layout, pois não há tanta necessidade de se programar "na mão" o HTML das páginas, ganhando em tempo e eficiência na elaboração de projetos. A IDE permite que o desenvolvedor se preocupe mais com as regras de negócio e modelagem que qualquer outra coisa, não se gastando tanto tempo com codificação.

Abaixo segue a correposdência de alguns controles Asp.Net com tags tradicionais do HTML.

Label - div ou span
TextBox - input text
Buttom - input submit
LinkButton - href com funções javascript associadas
HyperLink - href(link tradicional)
DropDownList - select com seus options
ListBox - select com múltiplas seleções
CheckBox - input checkbox
CheckBoxList - Coleção de checkbox
RadioButton - input radio
RadioButtonList - coleção de inputs do tipo radio
Image - tag img
ImageMap - Imagem mapeada(links através de coordenadas)
Table - tag table
HiddenField - input hidden
FileUpload - input file

Acima estão apenas alguns controles, os mais básicos. Todos estes controles do Asp.Net têm algo em comum: possuem o atributo RUNAT setado para SERVER. Quando se especifica este atributo com este valor, isto significa que há a intenção de acessar e manipular o controle com "Códigos de Servidor", ou seja, poderá acessar os controles utilizando linguagens de servidor como C#, VB.Net.

Cada controle deste, a partir do momento que é criado, se torna um objeto de uma classe específica.
Por exemplo:

<asp:textbox id="MinhaTextBox" runat="server"></asp:textbox>

Acima temos um OBJETO chamado MinhaTextBox da CLASSE TextBox.  Notem o atributo RUNAT, sobre o qual falei.

Haja vista que MinhaTextBox é um objeto, o mesmo possui atributos e pode ter eventos(métodos) associados.

Abaixo estão listados alguns atributos/propriedades do Objeto típico da classe TextBox:

Text - permite acessar o conteúdo/valor do controle
TextMode - permite especificar se o controle fará correspondência a um input text(single line) ou textarea(MultiLine)
MaxLenght - quantidade máxima de caracteres permitida
ReadOnly - Somente Leitura

Estes são apenas cinco de MUITAS propriedades manipuláveis deste controle.
Todos os controles possuem suas propriedades específicas e convenientes, sendo que as classes foram muito bem projetadas pela Microsoft, com um nível de detalhamento e recursos impressionante.

Para quem não programa para Web, logo vê a semelhança de programação com Desktop. E quem antes programava na mão, entende um pouco da proposta do Asp.Net de tornar a programação Web mais
amigável aos programadores que outrora programavam manualmente.

Pra mim, umas das principais vantagens de se trabalhar com controles é a possibilidade de poder manipulá-los e trabalhar com eventos na página via servidor, sem a necessidade de frameworks complicados de implementação de AJAX e sem a necessidade de se trabalhar  tanto com JavaScript manualmente, ganhando tempo, com certeza e maior segurança, pela possibilidade de maior controle.


Bom, fica aí um post simples, mas espero que seja esclarecedor pra muitos que estejam querendo migrar para Asp.Net ou começar a desenvolver para Web.

Grande abraço a todos e até breve.

sábado, 20 de março de 2010

Paginação PHP/Mysql - Exemplo

Este post sobre a implementação do recurso de paginação em php, proposto por um ilustre colega de faculdade que estava necessitando disto em PHP/Mysql.

Quando, numa página web, precisamos exibir muitos registros resultantes de uma query, para melhor perfomance e estética se faz necessária a utilização de paginação. É uma prática comum e amplamente utilizada.

Pra começar, criemos passo a passo o nosso arquivo PHP.


<?php

include "include/php/conecta.php"; // Referência ao arquivo que abre conexão com o Mysql
// Banco utilizado no exemplo

//Variável que armazena a quantidade máxima de registros que desejamos exibir por
// página(índice)
$TOTAL_REGISTROS_PAGINA = 10;

//Verifica-se se o usuário está acessando o primeiro índice(primeiro resultado da query)
$pagina_indice = $_GET["pagina_indice"]; //Verifica se possui a Querystring "pagina_indice"

if (!$pagina_indice) { // Se a ocorrência da querystring for falsa
$inicio = 0;
$pagina_indice=1; // Primeira paginação(índice)
}
else { //caso não seja a "primeira" página
$inicio = ($pagina_indice - 1) * $TOTAL_REGISTROS_PAGINA;
}


// O primeiro passo é verificar a quantidade de registros retornados pela query desejada
$sql = "select * from cliente ";
$record_set = mysql_query($sql,$conn);
$total_registros_retornados = mysql_num_rows($record_set);
//Próximo passo é fazer o cálculo de quantas páginas será necessário gerar.
$quantidade_paginas = ceil($total_registros_retornados / $TOTAL_REGISTROS_PAGINA);




//Para mostrarmos o resultado das variáveis que setamos lá em cima, vamos fazer isso:

echo "<b>Número de registros retornados na busca :</b> " . $quantidade_paginas . "<br>";

echo "<b>Total de registros por página: </b>" . $TOTAL_REGISTROS_PAGINA . " registros <br> ";
echo "<b>Estou mostrando a página " . $pagina_indice . " de " . $quantidade_paginas. "

<br></b>";



//Próximo passo é buscar os dados no banco efetivamente
$sql ="select * from cliente limit " . $inicio . ",". $TOTAL_REGISTROS_PAGINA;
$record_set = mysql_query($sql);
while ($linha = mysql_fetch_object($record_set)){
echo $linha->nome . "<br>";
}

//índices de paginação
if ($quantidade_paginas > 1){
for ($i=1;$i<=$quantidade_paginas;$i++)

{

if ($pagina_indice == $i) //tira o link da página atual

echo $pagina_indice . " ";

else // se não for a página atual insere o link

echo " <a href='paginacao.php?pagina_indice=" . $i . "' > " . $i . " </a> ";

}

}


include "include/php/desconecta.php"; // referência ao arquivo que fecha conexão com bd


?>


Neste exemplo foi utilizada a busca numa tabela chamada cliente e se mostrou uma relação(dez por dez) de clientes, mostrando apenas seus nomes.

Espero ter ajudado quem precisava disto. Qualquer problema com o script desenvolvido, sugestão, opinião ou consideração a fazer, por favor, postem comentários que respondo o mais rápido possível, pois esta é uma das propostas do blog.

Um grande abraço a todos