09 dezembro 2012

* »« † Mick D'arc ™† »« *

Trabalhando com o SVN no Eclipse

 

Introdução

Neste pequeno tutorial vou apresentar uma descrição básica de como se trabalhar com o Subversion (SVN) no Eclipse.
Embora outros servidores de controle de versão estejam sendo utilizados cada vez mais pelo mercado, como o Git, por exemplo, o SVN ainda é, sem dúvida, utilizado por uma grande quantidade de usuários nas empresas.
Apesar da grande utilização, nem sempre as melhores práticas são adotadas quando se trabalha com este tipo de ferramenta, nem mesmo recursos como merging e branching são utilizados na maioria das vezes (ou pela maioria dos usuários), o que acaba por provocar a  subutilização da ferramenta, afetando consequentemente a produtividade das equipes.

Objetivos

Apresentar orientações básicas de como trabalhar com o SVN no Eclipse, que é um dos ambientes de desenvolvimento Java mais utilizados do mercado.
Serão apresentados exemplos de como criar um branch, realizar um merge entre o branch e o trunk, e resolver problemas de conflito durante o merge.
Os conceitos apresentados são válidos para outros ambientes de desenvolvimento, mas os procedimentos podem mudar de acordo com os plugins utilizados em cada um.

Pré-Requisitos

Como não é o foco do tutorial apresentar a instalação do servidor SVN, é necessário ter um repositório disponível para os testes. Uma dica, para se testar em uma máquina local, é instalar o VisualSVN Server Manager.
É necessário também ter o plugin do SVN instalado no Eclipse. Um exemplo de como a instalação do plugin pode ser feita pode ser encontrado no seguinte endereço: http://luizgustavoss.wordpress.com/2009/12/13/preparando-um-ambiente-de-desenvolvimento-java-ee-baseado-em-eclipse/

Mão na Massa!

Configurando o repositório no Eclipse

Para começar a utilizar um repositório do SVN é necessário configurá-lo n o Eclipse. Para isso é preciso ter a URL do repositório, o que pode ser conseguido com o administrador do repositório.
Com a URL em mãos, abra a perspectiva do repositório SVN no Eclipse:


Clicando com o botão auxiliar do mouse, selecione a opção para adicionar um novo local:

Adicione a URL do repositório de testes no campo indicado:


Pode ser necessário informar o usuário e senha para acesso. Esta informação pode ser conseguida com o administrador do servidor:

Após estes passos, o repositório será apresentado na perspectiva, conforme abaixo:


A estrutura sugerida pelo SVN possui três diretórios: branches, tags e trunk.
/trunk -  o diretório onde o desenvolvimento principal do projeto ocorre, ou seja, onde sempre está a versão mais recente e estável dos artefatos oficiais;
/branches – o diretório onde pode-se criar ramificações da linha principal de desenvolvimento (trunk);
/tags – o diretório onde se pode armazenar ramificações da linha principal que são criadas, e talvez destruídas, mas nunca modificadas.

Criando uma aplicação Java

Crie, no C:\, um diretório chamado workspace, e nele crie dois diretórios chamados work1 e work2. Estes serão os workspaces usados para os testes.
Abra o Eclipse apontando para o workspace work1. Após configurar o ambiente (adicionar um JDK apropriado) crie um projeto Java simples, chamado Calculadora. Neste projeto crie um pacote chamado testes.svn, e nele crie uma classe chamada Calculadora.java, com os seguintes métodos:



01public class Calculadora {
02
03public BigDecimal somar(BigDecimal param1, BigDecimal param2) throws Exception{
04return null;
05}
06
07public BigDecimal subtrair(BigDecimal param1, BigDecimal param2) throws Exception{
08return null;
09}
10
11public BigDecimal multiplicar(BigDecimal param1, BigDecimal param2) throws Exception{
12return null;
13}
14
15public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
16return null;
17}
18}


Esta é a estrutura do projeto após a criação da classe:

Vamos agora colocar o projeto no repositório que configuramos anteriormente. Clique com o botão auxiliar do mouse sobre o projeto, vá até a opção de menu “Team” e escolha a opção “Share Project”:
Na próxima tela, escolha a opção SVN e prossiga. Na tela seguinte, escolha o repositório configurado anteriormente e prossiga:


Na próxima tela, temos a opção de configurar o nome sobre o qual o projeto será armazenado no repositório, e sua localização. Marque a segunda opção, e clicando no botão “Select…” informe o diretório trunk:

Ao retornar da tela, esta deverá ser a configuração da tela:

Prossiga, e na tela final digite uma mensagem inicial para o versionamento e confirme:


O seguinte comando será executado contra o servidor, adicionando o projeto ao repositório:
mkdir –parents -m “Versionamento do projeto Calculadora.” https://votti/svn/calculadora/trunk/Calculadora
checkout https://votti/svn/calculadora/trunk/Calculadora -r HEAD –depth=immediates –force
Logo em seguida, será apresentada a perspectiva de sincronização, onde poderemos “commitar” o projeto no repositório, ou seja, enviar o conteúdo do projeto para o repositório, literalmente.
As setas cinza sobre os arquivos e diretórios indicam que estes arquivos devem ser comitados, então selecione os mesmos e, clicando com o botão auxiliar do mouse sobre os itens selecionados, escolha a opção “commit”:


Na tela seguinte, inclua um comentário inicial e confirme:


Os seguintes comandos serão executados, indicando que os artefatos foram “commitados” com sucesso:
add -N C:\workspace\work1\Calculadora\.settings
A         C:/workspace/work1/Calculadora/.settings
add -N C:\workspace\work1\Calculadora\src
A         C:/workspace/work1/Calculadora/src
add -N C:\workspace\work1\Calculadora\src\testes
A         C:/workspace/work1/Calculadora/src/testes
add -N C:\workspace\work1\Calculadora\src\testes\svn
A         C:/workspace/work1/Calculadora/src/testes/svn
add -N C:\workspace\work1\Calculadora\.settings\org.eclipse.jdt.core.prefs
A         C:/workspace/work1/Calculadora/.settings/org.eclipse.jdt.core.prefs
add -N C:\workspace\work1\Calculadora\.project
A         C:/workspace/work1/Calculadora/.project
add -N C:\workspace\work1\Calculadora\src\testes\svn\Calculadora.java
A         C:/workspace/work1/Calculadora/src/testes/svn/Calculadora.java
add -N C:\workspace\work1\Calculadora\.classpath
A         C:/workspace/work1/Calculadora/.classpath
commit -m “Versionamento inicial dos artefatos.” (8 paths specified)
Adding         C:/workspace/work1/Calculadora/.classpath
Adding         C:/workspace/work1/Calculadora/.project
Adding         C:/workspace/work1/Calculadora/.settings
Adding         C:/workspace/work1/Calculadora/.settings/org.eclipse.jdt.core.prefs
Adding         C:/workspace/work1/Calculadora/src
Adding         C:/workspace/work1/Calculadora/src/testes
Adding         C:/workspace/work1/Calculadora/src/testes/svn
Adding         C:/workspace/work1/Calculadora/src/testes/svn/Calculadora.java
Transmitting file data …
Voltando à perspectiva Java, podemos perceber que o projeto está no repositório, pela notação à frente do nome do projeto, e podemos ver ainda qual usuário realizou o “commit” da classe Calculadora:



Pois bem, temos o projeto versionado no trunk. Como dito anteriormente, no trunk deveriam ser mantidos os códigos estáveis de um projeto. Para a realização de testes ou implementações que podem ser instáveis por um longo período, pode ser preferível criar um branch. No branch colocamos uma cópia do projeto que está no trunk, mas sem perder a referência. A equipe que trabalha no código do branch pode ainda manter uma sincronização com o trunk, trazendo deste as atualizações pertinentes, evitando que o código do branch fique desatualizado com relação ao trunk,  mas evitando que o código instável do branch influencie negativamente o código do trunk.
Para nosso tutorial, vamos supor que a implementação dos métodos da classe Calculadora serão  realizados no branch. No dia-a-dia tal implementação poderia ser feita no trunk, mas como nosso objetivo é aprender a criar branches, vamos supor que esta seja uma necessidade real.

Criando um Branch

Para criar um branch vá até a perspectiva do repositório SVN e, expandindo os diretórios, clique com o botão auxiliar do mouse sobre o projeto Calculadora, e no menu de contexto escolha a opção “Branch/Tag…”:

Na tela seguinte precisamos informar o diretório destino, no repositório, para o projeto. Como estamos criando um branch, o diretório destino será o branch. Porém, como podem existir vários branches de um mesmo projeto ao mesmo tempo, é conveniente criar um subdiretório com um nome que identifique o objetivo do branch.
Para fazer isso, selecione o branch através do botão “Select…”:


Ao voltar para a tela anterior, dê um nome ao subdiretório. Isso pode ser feito adicionando o nome à URL resultante do processo anterior. Para este exemplo, o diretório será “metodos_calculadora”. Eis a URL final:
https://votti/svn/calculadora/branches/metodos_calculadora
Lembre-se de marcar na tela a opção que permite que o diretório adicional seja criado (Create any intermediate folders that are missing.):

Na próxima tela podemos escolhar qual revisão queremos para o branch. No nosso caso vamos escolhar a opção HEAD, que indica que será enviada para o branch a versão mais atual existente no trunk. Porém, se necessário, uma versão específica poderá ser selecionada:

Na tela seguinte adicione um comentário pertinente, e faça a confirmação:

Se formos agora à perspectiva do repositório, poderemos ver que o conteúdo do trunk foi copiado para o branch configurado:


Veja que até o momento copiamos o conteúdo do projeto para o trunk e a partir do trunk criamos um branch para realizar a implementação, mas no nosso workspace temos apenas o projeto que está “ligado” ao trunk. Isso significa que se fizermos qualquer modificação, e fizermos um commit, estas modificações serão enviadas ao trunk.

Realizando modificações no branch

Se quisermos realizar modificações no branch criado, teremos que configurar um projeto que esteja “ligado” a ele.
Para fazer isso, vamos reiniciar o Eclipse e como workspace vamos selecionar o diretório work2, criado no início do tutorial. Assim que tiver aberto o Eclipse no novo workspace faça as configurações necessárias (configuração de uma JDK padrão, por exemplo).
Abra a perspectiva do SVN e, assim como no início do tutorial, insira uma novo local de repositório, informando a URL do repositório de exemplo.
Ao terminar o processo de configuração do repositório, abra o diretório branch. Clique com o botão auxiliar do mouse sobre o diretório “metodos_calculadora”, e no menu de contexto escolha a opção “Checkout…”:




Com isso vamos copiar o conteúdo do branch para o repositório, para trabalhar nele.
A próxima tela apresenta os dados para o projeto que será criado

Repare que o nome do projeto foi recuperado e dado como sugestão. Também há a possibilidade de escolher uma revisão específica, ou então a última (HEAD). Vamos manter as configurações sugeridas.
Na próxima tela será sugerido como workspace o workspace atual (work2). Mantenha o valor sugerido e prossiga, clicando em “Finish”.
Ao voltar para a perspectiva Java, é possível verificar que o projeto foi configurado, e que referencia o branch criado:

Agora vamos simular a situação real de ter que alterar o código em ambos os locais, trunk (work1) e branch (work2) e ter de mantê-los sincronizados.
Vamos começar codificando a classe Calculadora no workspace work2, que referencia o branch, no qual estamos:

01
public class Calculadora {
02
03    public BigDecimal somar(BigDecimal param1, BigDecimal param2) throws Exception{
04        return param1.add(param2);
05    }
06
07    public BigDecimal subtrair(BigDecimal param1, BigDecimal param2) throws Exception{
08        return param1.subtract(param2);
09    }
10
11    public BigDecimal multiplicar(BigDecimal param1, BigDecimal param2) throws Exception{
12        return param1.multiply(param2);
13    }
14
15    public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
16        return param1.divide(param2);
17    }
18}

Depois de codificar a classe, faça o commit das modificações no branch, descrevendo as modificações:

É extremamente importante realizar o commit de todas as alterações do workspace no brach/trunk antes de realizar qualquer operação de merge. Aliás, é uma exigência!
Vamos agora realizar uma modificação no projeto do trunk, para ver como recuperar esta modificação, depois, no branch. Mude de workspace, voltando para a workspace work1.
Você verá que, como esperado, os métodos na classe Calculadora do workspace work1 estão como antes, sem implementação.
Adicione então, à classe Calculadora, um método a mais:

1public BigDecimal potencial(BigDecimal param1, BigDecimal param2) throws Exception{
2return null;
3}


Faça o commit da modificação, adicionando um comentário pertinente:


Retorne para o workspace work2.

Realizando um merge do trunk para o branch

Agora, no workspace work2, vamos realizar um merge para receber as atualizações do trunk, ou seja, o novo método adicionado à classe Calculadora.
Este procedimento deveria ser, como comentado anteriormente, uma prática realizada frequentemente para que o branch não fique muito tempo desatualizado em relação ao trunk. Isto minimiza problemas de conflito na hora de mover para o trunk as modificações do branch, procedimento este que realizaremos depois.
Selecione a classe Calculadora no projeto, e clicando com o botão auxiliar do mouse sobre ela escolha a opção de “Merge…” no menu “Team”:


A tela seguinte nos apresenta algumas opções para a operação de merge:

Para este tutorial as duas primeiras opções são as que interessam.
Para esta operação que realizaremos agora, mantenha selecionada a primeira opção. Esta opção é usada para capturar mudanças que foram realizadas no trunk ou outro branch, e trazê-las ao branch no qual estamos trabalhando. Confirme a operação, clicando em “Next”:

A próxima tela apresenta uma sugestão do artefato a partir do qual desejamos realizar o merge, ou seja, a classe Calculadora  presente no projeto do trunk. Neste ponto você poderia apontar para a mesma classe presente em algum outro branch, caso existisse, ou seja, não precisa ser necessariamente um merge a partir do trunk. Mas no nosso caso manteremos a sugestão, pois realmente precisamos realizar o merge com o trunk.
Na próxima tela são apresentadas opções para a operação. Basicamente, as sugestões marcadas por padrão são melhores, pois indicam que a cada problema encontrado, o usuário deverá ser consultado sobre o que fazer. Mantenha as sugestões apresentadas por padrão:

Ao confirmar, a seguinte tela é apresentada, indicando que uma atualização foi encontrada:
Após a conclusão da operação, você verá que o método adicionado na classe Calculadora do trunk apareceu na classe Calculadora do branch:

Vale lembrar que, apesar de termos realizado esta operação para apenas uma classe, ela pode ser realizada para vários artefatos ao mesmo tempo.
Agora que a classe foi modificada, faça o commit das alterações no branch, informando um comentário pertinente para a mudança:


Realizando um merge do branch para o trunk

Depois do trabalho realizado no branch, precisamos reintegrá-lo ao trunk, uma hora ou outra.
Muitas vezes o trabalho em um branch pode ser tão rápido quanto algumas horas, ou longo a ponto de levar vários dias ou meses. O tamanho do trabalho a ser realizado é que irá determinar isso.
Independente de quanto tempo ele leve, o fato de realizar periodicamente o merge do trunk com o branch, como feito anteriormente, deve minimizar os problemas de conflitos quando chegar a hora de trazer o branch para o trunk, uma vez que, idealmente, os conflitos existentes já terão sido resolvidos no momento em que se levou as mudanças do trunk para o branch.
Vamos agora trazer o que foi feito no branch para o trunk. Mude para o workspace work1.
Selecione a classe Calculadora no projeto, e clicando com o botão auxiliar do mouse sobre ela escolha a opção de “Merge…” no meu “Team”
Na tela que aparece em seguida, mantenha selecionada a segunda opção, que nos permitirá trazer as mudanças do branch para o trunk:

Na tela seguinte, na qual informamos a partir de onde será feito o merge, selecione a classe Calculadora do branch, como indicado:
Na próxima tela confirme as opções oferecidas como padrão, e ao finalizar a tela seguinte será apresentada, indicando que uma atualização será realizada:


Confirme clicando no botão “OK”. Ao término da operação as atualizações do branch serão aplicadas ao trunk.

Lidando com conflitos entre o trunk e o branch

Até agora realizamos o merge entre o trunk e o branch sem nenhum problema de conflito, mas isto está longe de ser a realidade do dia-a-dia de trabalho das equipes de desenvolvimento. Na verdade os conflitos são muito comuns. As boas práticas procuram melhorar a produtividade das equipes, manter a estabilidade dos repositórios (principalmente do trunk) e minizar os conflitos, mas eliminar os conflitos, principalmente em um ambiente onde muitos desenvolvedores atualizam os mesmos arquivos, é algo muito difícil. Por esta razão é bom se acostumar com estes conflitos, e se acostumar a resolvê-los também.
Para simular este cenário, vamos modificar o último método adicionado à classe Calculadora. Perceba que ele ainda não foi implementado, e que recebe dois parâmetros. Na verdade precisamos modificar um de seus parâmetros, e também precisamos implementá-lo.
Ainda no workspace work1 modifique o método como abaixo:

1public BigDecimal potencial(BigDecimal param1, int param2) throws Exception{
2return param1.pow(param2);
3}


Realize o commit das modificações, e sim, coloque um comentário! (não é à toa que estou batendo nesta tecla)



Agora mude para o workspace work2 e também faça estas modificações no métod, exatamente como no trunk, realizando o commit ao final.
Depois de realizado o commit, faça um merge, trazendo do trunk as modificações para o branch.
Apesar de termos alterado o mesmo método em ambos os locais, nenhuma atualização é encontrada, uma vez que as modificações foram exatamente as mesmas, ou seja, nenhum conflito é encontrado.
Vamos agora simular um conflito real, quando o mesmo local é modificado, porém com valores diferentes.
Mude para o workspace work1 e altere o método dividir conforme apresentado abaixo, realizando o commit ao final:


1
public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
2return param1.divide(param2, BigDecimal.ROUND_UP);
3}



Agora mude para o workspace work2 e altere o método dividir conforme apresentado abaixo, realizando o commit no final:


1
public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
2return param1.divide(param2, BigDecimal.ROUND_HALF_EVEN);
3}


Agora tente novamente trazer do trunk para o branch as modificações na classe Calculadora e veja o resultado.


Desta vez há um conflito, pois o método foi modificado em mais de um local (repositório), e no mesmo ponto.
As opções apresentadas na tela que é apresentada são:
- Marcar como em conflito. Resolverei mais tarde.
- Resolver o conflito usando a minha versão do arquivo.
- Resolver o conflito usando a versão do arquivo que está chegando.
- Me deixe editar o arquivo com os marcadores de conflito inseridos.
- Abrir um editor gráfico de solução de conflitos.
Particularmente recomendo lidar o quando antes com os conflitos, portanto, escolha a última opção e confirme. O Editor apresenta os conflitos a serem resolvidos:


Suponhamos que nossa versão do branch está correta. Então feche o editor, e uma mensagem será apresentada, perguntando se o conflito foi resolvido:
Marque que o conflito foi resolvido (primeira opção) e confirme:

Na tela que indica que uma atualização será feita faça a confirmação. Depois realize o commit da classe Calculadora no branch.
Desta forma, cada implementação do método, no trunk e no branch, ficou de uma forma. Se quiséssemos deixá-las iguais, bastaria ter aceito a diferença vinda do trunk (caso esta fosse a correta) ou então, a partir do trunk, puxar as alterações do branch e aceitá-las.

Conclusão

Neste tutorial foram apresentados os passos necessários para se configurar um repositório SVN no Eclipse e para se adicionar um projeto ao repositório.
Foram apresentados também os passos necessários para se criar um branch, como realizar o merge entre o branch e o trunk (em ambas as direções) e como resolver conflitos de versionamento.
Com isso concluímos este tutorial!
Espero que tenha sido de bom proveito, e que com o que foi apresentado aqui você possa melhorar sua rotina de trabalho aplicando mais algumas boas práticas no seu dia-a-dia de utilização do SVN.




Fonte: http://luizgustavoss.wordpress.com/2010/11/22/trabalhando-com-o-svn-no-eclipse/

05 dezembro 2012

* »« † Mick D'arc ™† »« *

Verificando PID de programa que está utilizando uma determinada porta

 
Para verificar que PID do programa que está utilizando aquela sua porta 8080 ou qualquer outra porta basta executar o seguinte comando:


netstat -aon
-a : Exibe todas as conexões e portas de escuta.
-0: Exibe a ID do processo proprietário associado a cada conexão.
- n: Exibe endereços e números de porta em formato numérico.

Ele irá listar todas as conexões ativas organizadas por protocolo, como no exemplo abaixo:



TCP    127.0.0.1:8009         0.0.0.0:0              LISTENING       2220
TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING       2220
TCP    127.0.0.1:8083         0.0.0.0:0              LISTENING       2220
TCP    127.0.0.1:25396        0.0.0.0:0              LISTENING       2220
TCP    127.0.0.1:8009         0.0.0.0:0              LISTENING       2220 TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING       2220 TCP    127.0.0.1:8083         0.0.0.0:0              LISTENING       2220 TCP    127.0.0.1:25396        0.0.0.0:0              LISTENING       2220

16 novembro 2012

* »« † Mick D'arc ™† »« *

7 apps para encontrar seu Android roubado

 

7 Apps para segurança em dispositivos android:


http://info.abril.com.br/noticias/blogs/download-da-hora/android/7-apps-para-encontrar-seu-android-roubado/?utm_source=redesabril_info&utm_medium=facebook&utm_campaign=redesabril_info&utm_content=info

11 setembro 2012

* »« † Mick D'arc ™† »« *

Ferramenta – Controle de contraste de cores

 
Uma ferramenta primordial para a definição do controle de contraste de cores, pode ser feito através de uma simples aplicação grátis, o CC Analyser da W3C.


A determinação da visibilidade da cor é baseada no algoritmo apresentado pelo World Wide Consortium (W3C). Sendo que a partir de 2008 passou a ser considerado como uma diretriz pela mesma instituição, determinando o contraste entre cores.

Downloads:

Fonte: http://www.userexpertise.com/
* »« † Mick D'arc ™† »« *

Usabilidade em Menus Verticais

 
Sabe-se através de estudos de eyetracking que os utilizadores tendem para rapidamente movimentar os seus olhos de cima para baixo pela margem esquerda da página.

Diretrizes Principais:

  • Alinhamento à esquerda;
  • Palavras-chave fortes e inequívocas;
  • Evite usar palavras idênticas para os tópicos do menu.
  • Categorias e subcategorias passíveis de utilização com diferenciação.
O alinhamento á esquerda reduz drasticamente o tempo de pesquisa pelo utilizador, devido á sua experiência na leitura e escrita humana. Por outro lado, para linguagem em que se lê da direita para a esquerda as directrizes também são contrárias a estas.

Observando alguns exemplos será mais fácil a percepção desta diretriz, observe a imagem.


É notório que é de difícil pesquisa qualquer um destes menus, apesar que no último exemplo na parte superior está correcto e é bem mais fácil a sua leitura e pesquisa do que a parte final.

Para ser ainda mais preciso, os últimos dois desonram outra diretriz de usabilidade utilizando sempre MAIÚSCULAS, que reduz a legibilidade em cerca de 10%, visto que estamos habituados a ler o misto de maiúsculas e minúsculas, conseguindo alcançar mais rapidamente a informação.

Por último, o exemplo do meio também ainda sofre outro problema de usabilidade, relacionado com o contraste de cores entre o fundo e o texto. Recorrendo ao controlo contraste de cores, observa-se que é de difícil visualização para utilizadores com problemas visuais.

O alinhamento de menus á direita não é uma directriz com grande relevância, contudo é uma simples alteração e que poderá ter um bom retorno no que toca á Usabilidade

Fonte: http://www.userexpertise.com/
* »« † Mick D'arc ™† »« *

Usabilidade em Menus Horizontais

 
Os menus horizontais têm sido cada vez mais utilizados, ganhando novo fulgor com a integração de métodos de Ajax ou Jquery. Com novas ferramentas existe a possibilidade de criar menus mais interativos e de grande acréscimo ao nível da usabilidade.

De fato, estes tipos de menus têm se disseminado nas métricas e padrões de desenvolvimento Web, sendo adoptados por uma grande parte de Web Sites que procuram responder á necessidade do mercado Web 2.0.

O jornaldenegocios.pt é um exemplo claro, visto que passou por um processo de transformação, apresentando novidades relativamente à adoção de um menu horizontal e disposição fluida dos conteúdos. Desta forma é notório a ênfase na usabilidade neste novo template do jornal online. Em breve será realizada uma análise e publicada em detalhada ao Web Site em questão.

Para este tipo de menus pode-se verificar dois estilos de menus horizontais, os mais compactos como no caso do jornaldenegocios.pt, ou os chamados Mega Drop-Downs, mas ambos têm a mesma essência de utilização.

Diretrizes Principais:
  • Categorias e subcategorias mais importantes;
  • Opções de navegação bem estruturadas;
  • Opções com Ilustrações;
  • Visibilidade completa das opções a selecionar;
  • Marcação visual “Eu estou aqui”
Existe sempre algumas implementações desta metodologia, que persistem com problemas de usabilidade. No site www.usa.gov, é possível observar um menu horizontal – Mega Drop-Down mal implementado:
Neste menu só existe 2 ou 3 categorias? Contudo, claramente que verticalmente se subdivide em 3 áreas distintas. Este é um exemplo que o menu não está a ser aproveitado ao máximo, obrigando o utilizador a despender mais tempo (valioso) para encontrar a sua informação que procura. Deveria ter sido concebido um menu muito mais abrangente, que divulga-se mais tópicos de conteúdos organizados por categorias e subcategorias.

Outro erro encontrado está na imagem de “Audiences”, que em relação ao tema de imagens em conteúdo, nada tem a acrescentar ao valor do menu. Colocando uma duplicação entre o titulo e subtítulo “Audiences”. Organização Alfabética de tópicos: Colunas e não Linhas.

Para demonstrar a necessidade de organização de tópicos, observe a imagem do menu horizontal do site Hulu.com, site profissional de produção de vídeo.

Os princípios de organização de conteúdos alfabeticamente, tem que ver como estamos habituados a pesquisar em documentos. A regra da ordem alfabética é claramente enraizada nas nossas vidas e por essa razão um menu bem ordenado ajuda o utilizador a realizar a sua pesquisa mais rapidamente. Os utilizadores não querem perder o seu tempo a estudar o design do Web Site, são devoradores insaciáveis de informação que procuram.

Por outro lado existe sempre casos diferentes com outra aproximação ao seu público, levando a uma regra que não pode ser seguida cegamente. Como por exemplo no caso deste Web Site, os filmes podem ser ordenados de uma forma mais orgânica em consonância com mapas mentais.
Há ainda um outro problema de maior, os utilizadores tendem a fazer a sua pesquisa em menus na vertical, levados por muito tempo de utilização deste tipo de menus. Por essa razão deverá ser levado em consideração a colocação dos tópicos por ordem Alfabética e na orientação vertical.
Então, ao construir uma tabela, iremos avançar horizontalmente na sua construção, porque é a forma como escrevemos e lemos. No entanto em menus não se está a ler, mas sim a pesquisar levando os utilizadores a proceder a sua pesquisa na vertical, colocando o paradigma da utilização do menu Vertical ou o Horizontal.

Fonte: http://www.userexpertise.com/

05 agosto 2012

* »« † Mick D'arc ™† »« *

Desenhando o modelo de negócio da Startup

 

Até encontrar a combinação de Produto/Mercado escalável, as Lean Startups são organizações voltadas para o aprendizado, buscando transformar suas hipóteses sobre o mercado em fatos. Um dos passos iniciais desse processo de aprendizado é externalizar as premissas que os fundadores possuem sobre o seu negócio. Em um post anterior, ilustrei alguns tipos de perguntas que os empreendedores devem responder para auxiliar nessa geração de ideias e discussões sobre diferentes aspectos.
Esse exercício é interessante, mas por vezes pode acabar ganhando uma profundidade desnecessária em alguns pontos não tão relevantes no início. O objetivo principal dessa fase é o empreendedor conseguir articular sobre a pergunta mais importante: Qual é o modelo de negócio da Startup? Não por acaso, essa também é a pergunta número um dos investidores.
Muita gente confunde Modelo de Negócio com fontes de receita. Modelo de negócio é como a empresa gera e captura valor do mercado ($). Estendendo um pouco mais, é a definição de quem é o cliente, qual é o problema dele, como o produto atende esse problema e como se ganha dinheiro com isso.
Há pouco mais de um mês, participando de um workshop de uma Startup que atuo como advisor, tive a oportunidade de conhecer melhor e testar na prática uma metodologia bastante eficiente para desenhar Modelos de Negócio. Coincidentemente, alguns dias depois o Steve Blank escreveu um post mencionando a mesma metodologia, que está condensada neste livro. Vou fazer um resumo neste post para ajudar numa aplicação rápida para quem não quer “emburacar” no estudo.
A metodologia do Business Model Generation baseia-se essencialmente em um Canvas (tela) onde estão dispostos os nove elementos principais de um Modelo de Negócio: Segmentos de Clientes, Proposições de Valor, Canais, Relacionamento com Clientes, Fontes de Receita, Recursos-Chave, Atividades-Chave, Parcerias-Chave e Estrutura de Custos.

A imagem abaixo ilustra como esses elementos (blocos) se relacionam no Canvas.
Business Model Canvas
Definição de cada componente do Canvas:
1) Segmentos de Clientes: Diferentes grupos de pessoas ou organizações que a empresa pretende servir, com necessidades ou comportamentos comuns, claramente definidos. São o “coração” de qualquer modelo de negócio.
Para uma Startup com recursos limitados, quanto maior o recorte do Segmento (nicho), melhores são as chances de se identificar e atender as necessidades reais dos clientes, porém esse nicho deve ser grande o suficiente para formar um negócio potencial atrativo. No entanto, no início das iterações os empreendedores ainda não têm evidências suficientes para tomar uma decisão consciente de quais Segmentos a empresa pretende servir e quais deve deixar de fora. Deve-se começar com uma visão e ir adequando-a na medida que se avança com o aprendizado.
Perguntas importantes:
- Para quem estamos criando valor?
- Quais são as características deste(s) segmento(s)?
- Quem são os nossos potenciais clientes mais importantes?
2) Proposições de Valor: Este bloco representa os pacotes de produtos e serviços que geram valor para os Segmentos de Clientes específicos.
Esses produtos e serviços são a forma como as necessidades e os desejos desses clientes são atendidos, ou seja, os benefícios oferecidos pela empresa. São exemplos de Proposições de Valor: Novidade, Performance, Customização, Funcionalidade, Design, Marca/Status, Preço, Redução de Custos, Redução de Riscos, Acessibilidade, Conveniência/Usabilidade, Geração de Receita, etc.
Percebe-se que algumas proposições de valor são bastante subjetivas, e geralmente essas têm um apelo maior para produtos B2C. Já para produtos B2B, na hora de comprar algo as empresas tendem a pensar muito mais no ROI dos projetos, e portanto é importante pensar no que a sua oferta ajuda a empresa cliente a aumentar receitas, diminuir custos ou melhorar o serviço/produto (em inglês há o acrônimo I.R.A.C.I.S. para facilitar a lembrança).
Perguntas importantes:
- Que valor nós entregamos para o cliente?
- Quais problemas dos clientes nós estamos ajudando a resolver?
- Que necessidades dos cliente nós estamos satisfazendo?
- Que pacotes de produtos/serviços nós estamos oferecendo para cada Segmento de Clientes?
3) Canais: Descreve quais os caminhos pelos quais a empresa comunica e entrega valor para o cliente.
Os canais de comunicação, vendas e distribuição do produto são a interface da empresa com o cliente. Servem para ajudar o cliente a conhecer e avaliar a proposição de valor do produto, efetuar a compra e uso do mesmo e posteriormente receber suporte e assistência. Encontrar a combinação correta de canais – próprios e/ou através de parceiros – é essencial para conseguir entregar Valor para o público-alvo.
A figura abaixo ajuda a ilustrar como o papel de cada Canal pode ser definido para as diferentes fases de contato com o cliente:
Fases dos Canais
Perguntas importantes:
- Por quais Canais nossos Segmentos de Clientes podem/querem ser abordados?
- Como esses Canais estão integrados?
- Qual é o Custo/Benefício da utilização de cada Canal?
4) Relacionamento com Clientes: Esse bloco refere-se aos tipos de relacionamentos que uma empresa estabelece com os seus Segmentos.
Mais do que comunicar com o Segmento específico como um todo, esse bloco refere-se aos tipos de relacionamento individuais que a empresa estabelece com os seus clientes e potenciais clientes. É o programa de Customer Relationship Management (CRM) em seu sentido mais amplo (e não no sentido do software de CRM, como geralmente o termo é empregado).
São exemplo de CRM as atividades de assistência pré e pós-venda com equipe dedicada, serviços automatizados, fóruns e comunidades de suporte, co-criação de conteúdo, etc.
Perguntas importantes:
- Que tipo de relacionamento os clientes de cada segmento podem esperar?
- Qual é o custo de cada um deles?
- Como isso está integrado ao Modelo de Negócio como um todo?
- O que pode se esperar em termos de aquisição, retenção e up-selling (vendas complementares) para esse tipo de relacionamento?
5) Fontes de Receita: Representa as possibilidades de geração de dinheiro que a empresa pode obter com cada Segmento de Clientes. É a medição de quanto e como o Cliente está disposto a pagar pela quantidade de valor gerada.
Há uma série de fontes e modelos de receita que podem ser aplicados pelas empresas. Alguns exemplos são: Venda de Produtos, Preço por uso do produto, Preço por assinatura, Aluguel, Licença, Arbitragem (intermediação, agenciamento), Publicidade, Leilão, etc.
Perguntas importantes:
O que o cliente valoriza e pelo qual está disposto a pagar?
O que eles têm pago ultimamente para resolver o mesmo problema?
De que maneira eles preferem pagar pelo valor gerado?
Qual é a parcela de contribuição de cada fonte de receita para a receita total esperada?
6) Recursos-Chave: São os ativos fundamentais necessários para fazer o Modelo de Negócio funcionar.
Exemplos: Ativos físicos, intelectuais, recursos humanos, recursos financeiros,
Perguntas importantes:
Que Recursos-Chave são importantes para a nossa proposição de valor? E para os Canais? E para os relacionamentos com os Clientes? E para implementar as Fontes de Receita?
7) Atividades-Chave: As coisas mais importantes que a empresa deve fazer de forma constante para que o Modelo de Negócio funcione.
Exemplos: Produção de bens, Resolução de Problemas, Gestão de Plataformas, Vendas Consultivas, etc.
Perguntas Importantes:
Que Atividades-Chave são importantes para a nossa proposição de valor? E para os Canais? E para os relacionamentos com os Clientes? E para implementar as Fontes de Receita?
8 ) Parcerias-Chave: Rede de fornecedores e parceiros essenciais que garantem o funcionamento do Modelo de Negócio.
Exemplos: Alianças estratégicas entre não-concorrentes, redes de cooperação entre concorrentes, joint ventures, parcerias de exclusividade, etc.
Perguntas importantes?
Quais devem ser nossos parceiros-chave? E os fornecedores estratégicos? Quais recursos-chave estamos obtendo deles? E quais atividades-chave eles produzem?
9) Estrutura de Custos: descreve todos os principais custos embutidos na operação do Modelo de Negócio
Exemplos: Custos fixos, custos variáveis, economias de escala, comissões, etc.
Perguntas importantes:
Quais são os custos mais importantes inerentes ao nosso modelo de negócio? Quais recursos-chave são os mais caros? Quais atividades-chave são as mais caras?

Desenhando o modelo de negócio:
A metodologia também sugere um processo para o desenho do modelo de negócio. De forma breve, recomenda-se um processo de brainstorming inicial para geração de ideias e possibilidades, e depois uma fase de discussão e consolidação. O objetivo é preencher o Canvas com as principais definições de cada componente, assim como mostra o exemplo aplicado para a análise do modelo de negócio do iPod representado na figura abaixo.
Canvas do modelo de negócio - iPod
Como é possível perceber, o canvas não se propõe a tratar de cada componente em detalhe. Seu objetivo é descrever o Modelo de Negócio em uma visão mais macro, guiando o empreendendor para identificar quais são as suas hipóteses mais questionáveis, avançar na produção do MVP e na busca de provas para suas suposições.
Ainda, é bastante provável que esse primeiro Modelo de Negócio desenhado não se sustente na prática, levando a Startup à necessidade de uma mudança mais brusca na sua proposta, algo que o Eric Ries chamou de “fazer o pivô“.  Esse é um assunto que tratarei com mais detalhes em um post futuro.
Por fim, é importante atentar que para alguns casos o público “pagante” não é o público “usuário” do produto. Isso é bastante evidente nos modelos com fontes de receita baseada em publicidade, por exemplo. Nesse caso, é importante fazer a análise do Canvas para os dois públicos separadamente.

Fonte: http://www.manualdastartup.com.br/blog/desenhando-o-modelo-de-negocio-da-startup/

22 julho 2012

* »« † Mick D'arc ™† »« *

Como remover manualmente programas da lista Adicionar / Remover Programas

 
Instalei um programa para um dispositivo usb que simplesmente não funcionou e se recusou a ser desinstalado da forma padrão (Adicionar/ Remover Programas). Sabia que existia uma forma de removê-lo através do Registro, então fui à caça no Google e encontrei o tutorial abaixo que me foi muito útil, apesar de que o tal programa que eu queria desinstalar não estava listado com seu nome, mas sim com aqueles códigos indecifráveis do Registro do Windows, portanto tive que checar item por item da extensa lista qual era o meu programa problemático. Foi um pouco trabalhoso, mas o procedimento ocorreu com sucesso. Por isso resolvi colocar o tutorial aqui, fazendo algumas melhorias, nunca se sabe quando se vai precisar novamente. rsrs

Apenas reforçando o aviso do dommarco: Se não se sente confortável em realizar a operação descrita, não o faça.
Agora, vamos ao tutorial...



Como remover manualmente programas da lista Adicionar / Remover Programas


Vamos admitir, temos todos de uma vez ou outra equivocadamente excluído um diretório ou desinstalado um programa incorretamente e agora são deixadas as entradas na lista Adicionar / Remover Programas para os programas que já não existem em nossos discos rígidos. Quando você clica sobre essas entradas para removê-los, o Windows reclama com um erro ou não acontece nada. Temos agora entradas inúteis enchendo nossa lista Adicionar / Remover Programas e não há maneira de removê-los!

Isso não é verdade, no entanto. Há maneiras de remover essas entradas de nosso computador para que a nossa lista Adicionar / Remover Programas fique limpa e impecável. Neste tutorial vamos mostrar um método de remoção de entradas para os programas que não existem mais no seu computador. Este método requer a edição do registro, que se feito inadequadamente, pode causar problemas com o computador. Se isto é algo que você não se sente confortável fazendo, então por favor não continue com as etapas listadas aqui.


Removendo entradas no Adicionar / Remover Programas


Por favor, note que este método deve ser usado apenas se você não pode desinstalar o programa normalmente através da opção Adicionar / Remover Programas do Painel de Controle. Você deve sempre tentar excluir o programa através de um aplicativo de desinstalação fornecido, ou usando o Adicionar / Remover Programas. Se  ainda assim não é possível desinstalar o programa, você pode remover manualmente as entradas da sua lista Adicionar / Remover programas, seguindo estes passos:

1 - Click em Iniciar > Executar (ou digite: Win + R) e digite regedit no campo Abrir. Em seguida, pressione Enter no teclado.

2 - Navegue até a chave do registro: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall. Você pode fazer isso clicando no sinal de mais ao lado de cada chave no caminho para expandir o caminho abaixo dela. Por exemplo, você vai clicar no sinal de mais ao lado de HKEY_LOCAL_MACHINE, Software, Microsoft, Windows, CurrentVersion e finalmente Unistall.

3 - Click com o botão direito na chave Unistall e selecione a opção Exportar. (Se você estiver usando Win98/95/ME, você deve clickar no menu Registro e selecionar Exportar). Isto irá abrir uma caixa de diálogo onde você pode selecionar um diretório e um nome para o arquivo que você irá exportar. Salve no se desktop e no nome do arquivo: digite uninstall_programs.reg e pressione o botão Salvar. Isto irá criar um backup da chave do Registro Uninstall no seu desktop, no caso de um problema.

4 - Agora que temos um backup criado, vamos continuar com a exclusão das entradas dos programas que nós não queremos na lista Adicionar / Remover Programas. Enquanto a chave Uninstall é expandida você vai ver abaixo uma lista de programas. Procure o programa que você não quer que apareça na lista Adicionar / Remover Programas, click com o direito sobre o nome do programa e selecione Excluir. Quando for pedida a confirmação, click em Yes(sim).

5 - Uma vez que a chave foi apagada, saia do editor de registro e volte até o Adicionar / Remover Programas do Painel de Controle e veja se o programa foi removido. Se ele não estiver listado, então você excluiu a entrada do Registro corretamente. Se,  por outro lado, não der certo você pode restaurar o backup criado com um duplo click no arquivo uninstall_programs.reg  que foi salvo no seu desktop. Ao ser perguntado se você gostaria de mesclar o conteúdo, você deve responder sim. Então você deve repetir os passos 1 a 5 para remover o programa desejado.

Obs: nunca é demais alertar que estes procedimentos devem ser precedidos de um ponto de restauração do sistema e do back-up do registro como ensinado no tutoriall no caso de alguma eventualidade.


Fonte: dommarco <http://www.pcforum.com.br/cgi/yabb/YaBB.cgi?num=1276825491>

17 julho 2012

* »« † Mick D'arc ™† »« *

Dicas Atalhos Eclipse

 

 Dicas para a IDE Eclipse que auxiliam os desenvolvedores no dia-a-dia:
  1. Selecione qualquer linha ou conjunto de linhas do código, segure a tecla alt e use os botões direcionais (para cima e para baixo) para deslocar a linha pelo código. Substitui o ctrl + x / ctrl + v;
  2. Mesma dica anterior, mas pressionando alt + shift, pode-se duplicar as linhas selecionadas. Substitui o ctrl + c / ctrl + v;
  3. Para remover imports não usados ou trazer imports que não foram feitos corretamente, pressione ctrl + shift + O;
  4. Use ctrl + shift + F para formatar o código de acordo com as configurações definidas em Window => Preferences => Java => Code Style => Formatter;
  5. Ctrl + O abre o outline para navegar mais rapidamente pelos métodos e atributos de uma classe;
  6. Para buscar recursos ou classes vc pode usar:
    1. Ctrl + shift + R: para buscar por um arquivo qualquer;
    2. Ctrl + shift + T: para buscar por um tipo - que pode ser até mesmo uma inner classe;
  7. Há ainda uma série de atalhos para navegar mais facilmente pelo código:
    1. Selecione um método ou classe, e digite ctrl + T para ver a hierarquia de implementação;
    2. Selecione um método e digite Ctrl + alt + H vai mostrar onde aquele metodo é chamado;
No Eclipse 3.X, acione as teclas Ctrl + Shift + L para abrir a lista de teclas de atalho do Eclipse. Você também pode criar seus próprios atalhos em Window => Preferences => General => Keys => Modify.

13 julho 2012

* »« † Mick D'arc ™† »« *

Erros Clássicos de Usabilidade

 

É muitas vezes sentido, pelos utilizadores erros ou imposições que alguns web sites persistem em cometer, para que numa última fase possam aumentar as vendas.
Abaixo as principais áreas onde esses erros são mais visíveis e problemáticos:

* Links que não alteram a cor após serem utilizados:
     Na web os links são os responsáveis pela interligação das informações, e auxiliam em muito os utilizadores no processo de navegação. Mesmo os menos capacitados, com esta ligeira alteração na concepção os sites ganham em termos de usabilidade.

* A inexistência de possibilidade de retroceder – O botão “voltar”:
     O comando de retroceder, dá aos utilizadores uma possibilidade que na vida real não existe. Este mecanismo permite que os visitantes possam navegar com total comodidade e segurança.

* Abrir novas a janelas de navegação:
     Ao entrar num link ou em um botão de comando, abre-se uma nova janela de navegação. Os utilizadores esperam que o novo conteúdo abra na mesma janela, de outro modo pode resultar em grande confusão e locação de recursos

* Janelas pop-up:
    Janelas que abrem instantaneamente ao abrir um site. Esta forma de publicidade é transmitida negativamente, criando uma repulsa pelo utilizador. Muitas vezes são visualizadas invasões de janelas, sendo estas provavelmente de áreas ligadas aos jogos de azar e pornografia.

* Módulos de design que aparentam ser anúncios:
     Com o constante bombardeamento de informações comerciais, os utilizadores desenvolveram um mecanismo de repulsa e indiferença por objetos comerciais, que não procuram. Logo é de extrema importância que o design nunca seja conotado com essa força de vendas de alguma empresa externa.

* Conteúdo vago:
     As empresas muitas vezes, não gostam de apresentar o que realmente tem a oferecer. Encobrindo com textos vagos, que aumentam a curiosidade e impaciência do utilizador.

* Conteúdo denso:
     Com blocos de texto denso, tem como consequência a confusão e a dificuldade em encontrar a informação necessária. Os Sites governamentais, são os piores nesta matéria. Os seus sites costumam ter textos extensos, densos e com terminologia burocrática complexa, talvez devido aos seus funcionários estarem habituados a lidar com esses textos na sua organização.

* Conteúdo desatualizado:
     O conteúdo na web aumenta na proporção do seu crescimento, contudo a sua informação não é totalmente atualizada. Este problema foca-se essencialmente nos sites que tentam vender a informação como sendo atual, quando não é a verdade. É o caso de sites noticiosos ou os simples sites empresariais que colocam em destaque o seu produto infinitamente, evidenciando desatualização e despreocupação.


Fonte: http://www.userexpertise.com/usabilidade/erros-usabilidade/

23 fevereiro 2012

* »« † Mick D'arc ™† »« *

Fring – Voip para celulares

 
Fring é uma comunidade de internet móvel, ele permite que você se conecte com os principais serviços de redes sociais como Skype, MSN Live Messenger, Google Talk, Yahoo Messenger, Twitter, Facebook e entre outros.
Ele utiliza a rede 3G, GPRS ou Wi-Fi, é possível configurar para utilizar apenas uma das redes.



O Fring está disponível para uma grande variedade de marcas/modelos entre as principais estão: Nokia, Apple, Motorola, LG, Samsung, HTC, Sony Ericsson. Para instalar o Fring basta acessar o site e baixar a versão compatível com o seu celular.

Instale já o Fring no seu celular e aproveite: www.fring.com

Fonte: http://www.carloshjunior.net/