Pesquisar este blog

sexta-feira, 3 de junho de 2011

Virtualbox - Windows 7 64bits travando

Recentemente comecei a desenvolver alguns aplicativos utilizando o Windows 7 64bits no VirtualBox, mas comecei a encontrar alguns problemas de travamento.

Realizando algumas buscas no Google encontrei relatos de outra pessoas com o mesmo problema e resolvi escrever algo também.

Estou usando o Debian Squeeze, AMD 64bits, maquina virtual Windows 7 Ultimate 64bits.

O problema real está nos sistemas Linux com o Kernel compilado com o support timer tickless (CONFIG_NO_HZ) habilitado, o sistema fica ocioso e a CPU do host hospedeiro fica a 100%, ou próximo a ela. A recomendação é desativar o suporte incluindo um parâmetro no Grub.


Edite o arquivo /boot/grub/grub.cfg incluindo o parâmetro abaixo e reinicie o SO.


nohz=off


Se o problema não é corrigido por essa opção, outra coisa é tentar ver se executando o seguinte comando resolve o problema:
vboxdrv force_async_tsc modprobe = 1

Se isso funcionar, você pode colocar isso no script de inicialização para o modprobe vbox. Para isso, edite o /etc/init.d/vboxdrv.

Edite a seguinte linha:
if ! $MODPROBE vboxdrv > /dev/null 2>&1; then

para o seguinte:

if ! $MODPROBE vboxdrv force_async_tsc=1 > /dev/null 2>&1; then



Links:
 


terça-feira, 24 de maio de 2011

Instalando o Firefox 4 no Debian Squeeze

 


No Debian o navegador distribuído é o Iceweasel.
O Iceweasel é um browser para a Internet de código aberto exclusivamente destinado às distribuições Linux baseadas no Debian. É idêntico ao Mozilla Firefox, que não pode ser distribuído juntamente com o Debian por ter a marca e o ícone patenteados pela Fundação Mozilla, uma vez que o conteúdo distribuído com o Debian deve ser totalmente livre. O nome foi proposto por oposição ao significado da palavra Firefox (literalmente, "raposa de fogo", um dos nomes do panda vermelho). "Iceweasel" significa literalmente "doninha de gelo". Wikipédia.
Mas nada nos impede de escolher o firefox como navegador, até mesmo pelo fato de que o Firefox vem ganhando tanto espaço que é até prudente utiliza-lo. Tanto para um desenvolvedor web testar suas páginas quanto para um usuário que procura sempre software atuais e que atendam as suas necessidades.


Bom você pode baixar o firefox no link http://www.mozilla.com/pt-BR/firefox/.
Depois de baixa-lo é necessário remover o IceWeasel utilizando os comandos abaixo:
~# apt-get remove --purge iceweasel

É necessário ter instalado o ia32-libs-gtk
~# apt-get install ia32-libs-gtk
 
Descompactar direto no diretório lib
 
~# tar -xvf firefox-4.x.x.tar.bz2 /usr/lib/.
 
Remover o diretório plugins
 
~# rm -fr /usr/lib/plugins
 
Criar um link para o plugins
 
~# ln-s /usr/lib/mozilla/plugins /usr/lib/firefox/plugins
 
Criar um link no diretório bin
 
~# ln -s /usr/lib/firefox/firefox /usr/bin/
 

Agora é só criar os atalhos para o firefox utilizando o editor de menus

sexta-feira, 13 de maio de 2011

IHM - Usabilidade e Ergonomia

IHM - Interface Homem-Máquina

Por definição IHM é uma subárea da Ciência da Computação preocupada com o projeto, avaliação e implementação de sistemas conputacionais interativos para uso humano, bem como com o estudo dos principais fenômenos que envolvem estas etapas. (ACM-SIGCHI - Association for Computing Machinery - Special Interest Group on Computer Human Interaction).

Tem o objetivo de conceber sistemas que atendam cada vez melhor as necessidades dos usuários em relação não apenas a critérios de funcionalidade, mas também em relação à usabilidade, proporcionando os benefícios:
  • Aumento de produtividade
  • Aumento de número de vendas
  • Diminuição do tempo de treinamento e estrutura de suporte
  • Melhor imagem no mercado
  • ...
Importância da interface

A interface é um componente essencial no contexto dos sistemas interativos, sendo fator determinante para o sucesso ou fracasso do projeto de um sistema.
No processo de desenvolvimento, corresponde, em média, a:
  • 48 % do código do sistema;
  • 48 % do tempo total do projeto do sistema;
  • 50 % do tempo de implementação;
  • 37 % do tempo de manutenção;
  • 50 % do custo do projeto.
Razões que Justificam Investimento em Interfaces


  • Satisfação do usuário
    • Lealdade
  • Vantagem competitiva
    • Usabilidade
  • Valor percebido do produto
    • A maior usabilidade obtida no projeto de interfaces mais elaboradas será um fator valorizado pelo usuário no momento de sua escolha;
  • Minimização de custos posteriores
    • Redução dos custos e tempo de treinamento dos usuários e custos de manutenção;

Jakob Nielsen
 
Voltado para sistemas computacionais, os princípios de Nielsen tem o objetivo de aumentar a usabilidade. 
O fundamental é conhecer o usuário. É impossível projetar uma interface ótima simplesmente baseado em nossas melhores idéias, os usuários tem um potencial infinito para mal interpretar elementos de interface e fazer suas tarefas de modo
diferente do que imaginamos.  


Abaixo destaquei 10 princípios de design de Nielsen.

10 princípios
  1. Visibilidade do estado do sistema;
    • Oferecer feedback do estado do sistema, para cada ação fazer uma interação com usuário informando o que irá acontecer se ele realizar aquela interação oferecendo a opção de prosseguir ou cancelar a ação;
  2. Mapeamento entre o sistema e o mundo real;
    • Não utilizar palavras difíceis (títulos claros);
  3. Liberdade de controle ao usuário;
    • O usuário ter o controle total da ação, como dar a possibilidades de prosseguir e cancelar ações;
  4. Consistência e padrões;
    • Padrões de itens em comum, como botões, títulos e aparência, manter padrões de telas;
  5. Prevenção de erros; 
    • Tratar os erros previsíveis sempre;
  6. Reconhecer em vez de relembrar; 
    • Visualizar informações na tela somente o que o usuário irá usar, somente dados relevantes e importantes para cada tela. Só o que o usuário precisa;
  7. Flexibilidade e eficiência de uso;
    • Flexibilidade para usuário iniciante a o usuário avançado, (Exemplo: atalhos);
  8. Design estético e minimalista; 
    • Texto e design não pode atrapalhar a vida do usuário, customização para cada usuário, saber o que é importante para cada usuário;
  9. Suporte para o usuário reconhecer;
    • Diagnosticar e recuperar erros; 
    • Mensagens que não agridam o usuário e que sejam mensagens especificas e que auxiliem a vida do usuário;
  10. Ajuda e documentação; 
    • Para cada tela colocar um icone de ajuda, informado a ajuda daquela tela, esta heurística é necessária, utilizando as heurísticas anteriores para que esta não seja utilizada pelo o usuário, mas caso o usuário necessite ela está lá;

Critérios Ergonômicos

  • Condução 
    • Aprendizado, utilização, aconselhar e orientar o usuário
  • Convite
    • Identificação do estado ou contexto em que o usuário se encontra;
    • Títulos claros, informações sobre preenchimento de formulários e opções de ajuda;
  • Agrupamento e distinção de itens 
    • Visa proporcionar a rápida compreensão de uma tela pelo usuário;
    • Agrupar itens importantes dos itens opcionais;
  • Legibilidade 
    • É uma qualidade a servido de todos, mas particularmente das pessoas idosas e com problemas de visão;
      • Problemas de visão;
        • Contraste negativo;
        • Letras claras sobre um fundo escuro;
        • Tamanho da fonte;
        • Espaçamento entre as palavras;
        • Espaçamento entre as linhas;
        • Espaçamento entre os paragrafos;
      •  Usuários que não tenham problemas de visão;
      • Fundo claro, separar informações para esses usuários;
  • Feedback imediato 
    • Está a servido de todos, porém os usuários mais novatos precisarão mais dessa qualidade;
    • Tais fatores possibilitam ao usuário ter melhor entendimento sobre o funcionamento do sistema;
    • São importante para estabelecer satisfação e confiança;
    • Exemplo: tela de processamento;
    • Tempo de reação sugerido: Para ecoar os caracteres digitados: 150 milésimos de segundo;
    • Movimentação entre campos: 250 milésimos de segundo;
    • Movimentação do cursor na tela: milésimos de segundo;
  • Carga de trabalho 
    • Economizem leitura e memorização desnecessária. Não colocar botões inativos e sim somente o que é importante e deixar visível;
    • Campos curtos, valores default, preenchimento automático, itens relacionados e não forçar o usuário a trazer mentalmente dados de uma tela para outra;
  • Adaptabilidade 
    • Diferentes formas de executar uma tarefa de maneira fácil;
    • Diferentes maneiras de realizar a entrada de dados ( Digitação, seleção ...);
    • Diferentes caminhos para chegar a uma funcionalidade;
  • Gestação de erros 
    • Fornecer interface que protege interação contra erros;
    • Informa o suário sobre o risco de perda;
    • Não oferecer comando destrutivo como opção default; 
    • Detectar os erros no momento da inserção dos dados, em vez de deixar para o final;

terça-feira, 10 de maio de 2011

Instalando Eclipse Helios 3.6.2 no Ubuntu 11.04

Baixando e Instalando

Baixar o Eclipse através do link http://www.eclipse.org/downloads/

Para entender um pouco sobre a estrutura de diretório no linux clique aqui.

Após baixar o arquivo .tar vamos ao que interessa.
Primeiro precisamos mover do diretório Download para o diretório /opt onde vamos instalar o Eclipse.

# cd Download
# sudo mv eclipse-SDK-3.6.2-linux-gtk.tar.gz /opt/.

Descompactar os arquivos no diretório /opt
# sudo tar -xvf eclipse-SDK-3.6.2-linux-gtk.tar.gz


Pronto, agora vamos criar um atalho para o menu

Criar atalho

Entre no Menu Sistema / Preferências / Menu Principal

Clique no menu Desenvolvimento e no botão Novo Item

Na propriedades do lançador preencha as informações:
Tipo: Aplicativo
Nome: Eclipse Helios 3.6.2
Comando: /opt/eclipse/eclipse

Icone: /opt/eclipse/icon.xpm



Pronto, agora é só executar o eclipse através do menu Desenvolvimento.


Estrutura de diretórios no linux

Diretório Descrição
/binArquivos binários de comandos essenciais do sistema.
/bootArquivos de boot (inicialização; boot-loader; Grub); kernel do Linux.
/devDispositivos (devices) de entrada/saída: floppy, hardisk, cdrom, modem .
/etcArquivos de configuração (scripts) e inicialização.
/homeDiretório local (home) de usuários.
/libBibliotecas e módulos(drives): compartilhadas com freqüência.
/mntDiretório de montagem de dispositivos, sistemas de arquivos e partição.
/optPara instalação de programas não oficiais da distribuição.
/procDiretório virtual (RAM) onde rodam os processos ativos.
/rootDiretório local do superusuário (root).
/sbinArquivos de sistema essenciais (binários do superusuário).
/tmpArquivos temporários gerados por alguns utilitários.
/usrArquivos de usuários nativos da distribuição.
/usr/localPara instalação de programas não oficiais da distribuição.
/usr/srcArquivos fontes do sistema necessários para compilar o kernel.
/varArquivos de log e outros arquivos variáveis.

quinta-feira, 5 de maio de 2011

Celulares e Smartphones

Achei interessante a matéria e estou compartilhando como parte de um estudo que estou fazendo sobre celulares e smartphones.
Eu tenho esse modelo de smartphone e atualizei para o android 2.2 Froyo utilizando a dica deste link (http://www.mestreandroid.com.br/atualizar-samsung-galaxy-5-android-2-2-froyo/).

segunda-feira, 11 de abril de 2011

Localizar nó em um TreeView através de um texto

Vou descrever de forma bem simples como encontrar um nó em um TreeView através de uma String.


const
   Max = 30;

{* @brief GetItemByName
  * Localiza texto no treeview
  *}
function GetItemByName(Wnd : hWnd; hItem : HTREEITEM; szItemName : LPCTSTR) : HTREEITEM ;
var
   szBuffer: array [0..Max+1] of char;
   item : TTVItem;
   hItemFound, hItemChild : HTREEITEM;
begin
   // Se hItem for nil, inicia a busca a partir do primeiro item
   if (hItem = nil ) then
     hItem := HTREEITEM(SendMessage(Wnd, TVM_GETNEXTITEM, TVGN_ROOT, 0));
   while (hItem <> nil ) do
   begin
     item.hItem := hItem;
     item.mask := TVIF_TEXT OR TVIF_CHILDREN;
     item.pszText := szBuffer;
     item.cchTextMax := MAXTEXTLEN;
     SendMessage(Wnd, TVM_GETITEM, 0, longint(@item));
     if (lstrcmp(szBuffer, szItemName) = 0) then
     begin
       Result := hItem;
       Exit;
     end ;
     // Verifica os nós filhos
     if (item.cChildren > 0) then
     begin
       // Recursivo
       hItemChild := HTREEITEM(SendMessage(Wnd, TVM_GETNEXTITEM, TVGN_CHILD, longint(hItem)));
       hItemFound := GetItemByName(Wnd, hItemChild, szItemName);
       if (hItemFound <> nil ) then
       begin
         Result := hItemFound;
         Exit;
       end ;
     end ;
     hItem := HTREEITEM(SendMessage(Wnd, TVM_GETNEXTITEM, TVGN_NEXT, LPARAM(hItem)));
   end ;
   // Não encontrado
   Result := nil ;
end ;

segunda-feira, 10 de janeiro de 2011

H2 Database

Vou demonstrar abaixo como utilizar o H2 Database no Ubuntu 10.10.

Primeiro baixe o H2 Databese através do endereço http://www.h2database.com e salve em algum lugar do computador, seu sou salvar no meu home.


Após baixar o arquivo (zip), abra um terminal e execute os comandos abaixo.



$ unzip h2-2011-01-07.zip

$ cd h2
$ ls h2


Antes de continuar é necessário configurar o JAVA_HOME

$  JAVA_HOME="/usr/lib/jvm/<versao>"
Exemplo:
   JAVA_HOME="/usr/lib/jvm/java-1.6.0-openjdk"

$ export JAVA_HOME

Executar o build
$ sh build.sh

Executando o H2

Acesse o diretório bin
$ cd bin/
$ sh h2.sh

domingo, 2 de janeiro de 2011

Instalação do Eclipse e o SDK do Android


Como base no estudo sobre o google Android é necessário a instalação da IDE 
Eclipse como ambiente de desenvolvimento apartir da versão 3.4 e o Android Development Tools (ADT).

Para baixar o Eclipse é só entrar no site (http://www.eclipse.org/), estou utilizando o sistema operacional linux Ubuntu 10.10 - Maverick Meerkat, no Ubuntu é possível instalar o eclipse através da “Central de Programas do Ubuntu”. Vou utilizar o Eclipse Galileo 3.5.2 que pode ser instalado direto do Ubuntu, não vou chegar a descrever como instalar o Eclipse porque existem vários posts na Internet que demonstram como fazer isso.

Em primeiro momento deve-se verificar se o computar preenche os requisitos do sistema.

O ADT está disponível através do site (http://developer.android.com/sdk/index.html), neste site existem todas as informações de como instalar o ADT no Eclipse. A instalação do ADT também pode ser feita através do link “https://dl-ssl.google.com/android/eclipse/”, adicionando este link como um site de plugin do Eclipse.

Vou demonstrar agora como instalar o SDK Android no Eclipse através do link descrito acima.

Entre no site Developer Android e baixe o SDK inicial, que inclui apenas o SDK Tools, após baixar o arquivo descompacte em algum lugar de fácil acesso em seu computador e marque o local onde descompactou, pois vamos precisar informar no equipse a sua localização.

Abrir o Eclipse:
Clique no menu Help / Install New Software...


Incluir o site que contém os pacotes de instalação





Após a instalação do ADT do Android é necessário configura-lo. No menu do Eclipse Windows/Preferences, clique no item Android e coloque a localização dos arquivos do Android baixados no site.




Depois de incluir o Path dos arquivos do Android você pode instalar os pacotes adicionais disponíveis direto do repositório do Android. Podemos instalar desde a versão 1.5 à versão 2.3 (atual), pacotes de documentação, exemplos, ferramentas, API's do Google e da Samsung.




Podemos também instalar outros pacotes através de uma URL, clicando no botão Add Add-onSite. Lembre-se você deve baixar pelo menos uma plataforma e o SDK Tools.

Google Android

Este post tem a finalidade de estudar sobre este sistema Android que vem crescendo gradativamente com o passar do tempo.
O Android é a plataforma open source criada pelo Google e pelo grupo Open Handset (OHA) para o desenvolvimento de aplicações para dispositivos móveis.
O sistema operacional do Android foi baseado no kernel 2.6 do Linux, e é responsável por gerencia a memória , os processo, threads e a segurança dos arquivos e pastas, além de redes e drives. Para construir suas aplicações é utilizada a linguagem Java, o fato é que em seu sistema operacional não existe uma máquina virtual Java (JVM), na verdade, o que temos é uma máquina virtual chamada (Dalvik virtual machine) que é otimizada para execução em dispositivos móveis. Normalmente quando desenvolvemos aplicações em Java a compilação é representada pelo arquivo .class é convertida para a extensão .dex (Dalvik Executable), os arquivos .dex e outros recursos como imagens são compactados em um arquivo com a extensão .apk (Android Package File), que representa a aplicação final, pronta para ser distribuída e instalada.

Arquitetura

As principais classes e conceitos da plataforma são:
  • Activity: classe que representa uma tela da aplicação, para cada tela é criado uma activity.
  • Context: classe pai de Activity utilizada como parâmetro em vários métodos para referenciar o "contexto" atual da execução.
  • View: classe que representa um componente gráfico. 
  • Intent: classe que representa um evento gerado pelo sistema, e prática é uma mensagem enviada ao sistema operacional. A Intent possui um "ação" e "categoria" que definem o seu conteúdo. Baseado no conteúdo o sistema operacional decide o que e qual classe deve ser executada. O mapeamento para decidir qual classe pode executar para determinada Intent é feito utilizando a classe IntentFilter. A classe Intente é utilizada para tudo, desde abrir uma nova tela, abrir o browser, efetuar uma chamada telefônica, disparar um serviço em background, etc. O sistema operacional também envia Intents para as aplicações, por exemplo, para notificar as aplicações instaladas de que uma mensagem SMS ou ligação foi recebida, que uma conexão coma internet está disponível, ou que o sistema operacional acabou de fazer o boot. 
  • IntentFilter: classe utilizada para mapear a ação de uma Intent para executar uma das classes do Android, como Activity, BroadcastReceiver ou Service. Por exemplo, quando uma Intent de ação "executar_algo" for disparada é possível mapear esta ação para executar qualquer tipo de classe. 
  • BroadcastReceiver: classe que pode reagir a eventos (Intent) e executar automaticamente em background. Deve executar rapidamente, no máximo 10 segundos caso contrário o processo será encerrado. Se necessário pode iniciar um serviço com a classe Service. Geralmente para intercepetar os eventos identificados por uma Intent. Seja os eventos gerados pela sua aplicação, como os eventos gerados pelo próprio sistema operacional.  
  • Service: classe utilizada para executar um processamento pesado ou demorado em background, sem interferir na atividade do usuário. 
  • Notification: classe utilizada para exibir uma notificação na barra de status do celular, para avisar o usuário sobre algo. Utilizado para que serviços em background se comuniquem como usuário de forma amigável. 
  • Content Provider: classe e conceito utilizado pelo Android para tornar informações de determinada aplicação públicas para qualquer outra que tenha acesso. Por exemplo, de forma nativa o Android permite que os contatos da agenda sejam consultados utilizando a API do Content Provider. Podem ser criados provedores de conteúdo para qualquer coisa e expor informações para outras aplicações. 
  • Handler: Classe utilizada para auxiliar na programação de multi-threading se for necessário atualizar a View de uma thread diferente da principal que controla a tela. Com um handler é atualizar a View de uma thread diferente da principal que controla a tela. Com um handler é possível inserir uma mensagem ou Runnable para ser processada por uma fila de mensagens. Resumindo: Quando abrirmos uma nova thread, não é possível atualizar a View. Uma das formas de solucionar este problema é utilizando a classe Handler.