Durante o curso de computação na Unicamp, e acredito que seja assim em qualquer outro curso semelhante de outras instituições, me acostumei a enxergar o software que estava desenvolvendo a partir de um único ponto de vista: do desenvolvedor. Após cursar inúmeras disciplinas MCxxx, minha única preocupação era que o software proporcionasse total integridade e eficiência máxima. O usuário final nem era levado em consideração até por que esse usuário se resumia geralmente a mim e ao professor da disciplina. Enfim, nós somos introduzidos à disciplina MC750.
Inicialmente, são apresentados diversos problemas de interfaces de situações do cotidiano como o formato equivocado de uma torneira de banheiro público e disposição confusa de botões num controle remoto. Percebi que o design não é só uma questão de estética visual, mas também é muito importante para que permita um uso intuitivo. Também foi reforçada a noção de que a grande maioria das pessoas não são usuários avançadas de computador como nós e que os usuários dos softwares que nós desenvolvemos não têm a obrigação de conhecer todas as suas funcionalidades. Eu mesmo já sofri com softwares que fui obrigado a usar durante a graduação, como Max Plus II e Spice, dois nomes que trarão lembranças nada agradáveis a qualquer aluno da turma devido às suas interfaces extremamente irritantes.
Passando para problemas de interfaces específicos de informática, conheci as heurísticas de Nielsen. Sabendo avaliar uma interface heuristicamente, vi que para mim era tão intuitivo procurar a opção de salvar um documento no canto superior esquerdo do programa como empurrar uma porta cuja maçaneta tem forma plana. As heurísticas me deram uma idéia concreta de como deve ser aparentar um programa, e, principalmente, os problemas básicos que não devo cometer ao desenvolver a interface de um software, seja qual for a utilidade dele.
Luis Fernando Lopes Iwasaki
Em quase três anos de Egenharia de Computação, minha visão sobre a área saiu da de usuário final para a de programador. O problema desse processo é que o foco passa a ser na funcionalidade: um programa recebe uma tarefa e deve completá-la. Durante esse tempo, a noção de interface se resumia à linha de comando.
Porém, neste semestre, com a disciplina MC750, tive contato com o aspecto da interface entre usuário e programa. Isso retoma a visão de usuário final que possuía, mas de maneira muito mais crítica, já que falhas de interface são definidas com heurísticas, e não apenas com a sensação de que “algo está errado”. Embora muitas das heurísticas não apresentem fronteiras bem definidas, elas permitem delinear o que pode ser melhorado num projeto.
O problema do programador é também subestimar os problemas de interface que ele encontra, de forma a sempre se acostumar a ter um “atalho” para resolver o problema, o que não pode ser considerado para o usuário final. Estes, querem clareza, fácil uso mas ao mesmo tempo acessar tudo o que puderem. E cabe ao programador manter essa visão enquanto aprimora seu projeto, visão esta desenvolvida com a disciplina.
Outro aspecto novo para mim foi o de acessibilidade. A tendência é que se você não tem o problema, você não pensa em como seria se o tivesse. Como programador, é minha responsabilidade idendificar no projeto o que pode ser facilitado e simplificado, além do que eu considero já suficiente. Isso permite que o seu projeto possa ser alcançável para todos.
Saindo para o mercado, espero utilizar esses conceitos aprendidos para que o que eu desenvolva, seja claro não só para usuários avançados, mas para todos os que se interessem pelo que foi desenvolvido. A funcionalidade também é importante, mas ela não é nada sem a facilidade de uso.
Josué Andrade
Tags: interfaces, unicamp
Este semestre estou cursando na Unicamp a matéria de Construção de Interfaces Homem-Computador vulga MC750 com a professora Heloisa Vieira da Rocha e uma das tarefas é relacionar o mundo real com o aprendido em sala de aula, entre os diversos assuntos que tivemos contato, um deles foram as 10 heurísticas de Nielsen. A fim de relacionar as heurísticas de Nielsen com o mundo real, analisarei o site da companhia aérea da Azul.
Com planos de ir ao FISL, comecei minha empreitada acessando os sites das mais diversas companhias aéreas para fazer as cotações de preço e horário, encontrei alguns problemas de interface em todos os sites que visitei, mas o problema da Azul foi o que mais me incomodou, a partir do segundo site reparei que para fazer uma busca/cotação por voos eu tinha que preencher os seguintes campos:
Os campos necessários para a cotação são mais do que lógicos, não tem como o site adivinhar de onde você deseja partir e para onde ir, nem como a data que você planeja ir e voltar, alguns sites já preenchem a data com algum valor válido, mas esse tipo de preenchimento só serve para verificar os preços e não os horários, ainda temos o agravante que o preço é diferente de uma data para a outra.
Somente ao acessar o site da Azul eu reparei que tinha que escolher a quantidade de adultos e crianças que eu estava cotando, por que?
Isso mesmo, eu preenchi todos os campos que eu já estava preenchendo nos outros sites das companhias concorrentes, mas quando cliquei para pesquisar recebi uma mensagem informando que eu tinha que escolher pelo menos um tipo válido de passageiro, daí então notei que havia um campo preenchido com zero adultos.
Escolhi a opção correta, no meu caso um adulto, e fiz a cotação, surpreendentemente quando alterei a data para ver outros horários levei outro aviso idêntico na cara, o que eu tinha feito de errado? Nada! Aconteceu que todos os campos do formulário vieram preenchidos corretamente, exceto o campo do número de adultos e crianças que estavam zerados como exibido abaixo.
Como o site não seguia o padrão das concorrentes eu recebi esse aviso pelo menos umas cinco vezes até aprender, por repetição, como utilizar o site da Azul.
Fiquei questionando a lógica da escolha por zero adultos e zero crianças, tentei dar algum sentido dentro da minha cabeça, mas não tinha desculpa. Acredito que se fizermos uma análise de quantas pessoas compram/cotam com todas as combinações possíveis das quantidades de adultos e crianças a mais utilizada será a de um adulto e zero crianças.
Depois de muito me questionar, cheguei a conclusão de que a desculpa menos esfarrapada para ter este tipo de opção no site era a possibilidade de se comprar uma passagem para uma criança e nenhum adulto, qual não foi a minha surpresa ao tentar cotar essa possibilidade e me deparar com o erro abaixo.
O que tudo isto tem a ver com as 10 heurísticas de Nielsen, basta visitarmos o site que cita as heurísticas para sabermos que pelo menos uma heurística foi violada:
5) prevenir erros
- Evitar situações de erro.
- Conhecer as situações que mais provocam erros e modificar a interface para que estes erros não ocorram.
Quais modificações na interface deveriam ser feitas para que estes erros não ocorram mais?
A solução é simples:
Não perca os próximos posts que também falarão sobre interfaces.
Tags: interfaces, unicamp
Parecia uma tarefa chata, mas no final foi interessante e tranquila, no trabalho eram para ser levantados alguns problemas de interface semelhantes aos vistos em sala de aula e que ocorrem no nosso dia-a-dia, não só no uso do computador.
Apesar de eu não ter conseguido participar das gravações por falta de comunicação do grupo, o material gravado ficou excelente para o nível pretendido que era o amador, editei e mandei ao grupo, houve outras edições mas no final, na correria para entregar no prazo, entregamos a minha versão.
Pegue uma pipoca, um guaraná e curta o curta abaixo.
Tags: unicamp
Com o intuito de compartilhar bons materiais que eu leio diariamente em meu leitor de feeds, segue um link muito interessante para quem trabalha com desenvolvimento de software.
http://www.akitaonrails.com/2009/03/30/off-topic-net-negative-producing-programmer
É um texto que fala sobre os programadores ruins, os desenvolvedores de gambiarras, e como estes influenciam negativamente na equipe e no desenvolvimento de um software entre outras coisas, é um texto longo mas vale a leitura.
Tags: vale a leitura
Procurando na internet por algumas cheat sheets (aqueles arquivos/figuras com um resumão dos comandos essenciais de algum programa/linguagem) achei uma de Mercurial muito boa, segue o link:
http://blog.edong.net/2009/03/mercurial-cheat-sheet.html
Achei simples e despoluída, procurando por uma de git, vi que até as coisas mais simples podem ser complicadas com uma cheat sheet. =P
Tags: mercurial
Resolvi comprar o livro após ver o trailler no cinema. Sempre que um livro vira filme os “chatos de galocha” resmugam: “o livro é bem melhor” e como após ver o filme você fica totalmente travado nas aparências e detalhes do que assitiu, nada melhor do que ler o livro antes de ir ao cinema.
Li e gostei, a história é bem construída e o final é cheio de reviravoltas, não fossem a quantidade de detalhes da construção da história as reviravoltas seriam totalmente furadas, são mais de cem capítulos o que facilita aos leitores que gostam de parar assim que acabam um capítulo inteiro, como eu.
Eu assisti o Código da Vinci e ao ler o livro não consegui imaginar um personagem diferente do Tom Hanks mas isso não me atrapalhou em nada, pois a atuação dele foi excepcional no Código da Vinci, o que me fez imaginar suas caras e bocas ao ler o livro.
O livro termina como anuncia o óbvio e assim que sair nos cinemas eu vou assistir pra ver se sou ou não um “chato de galocha”.
No post anterior eu reclamei sobre a janela de convites do Gmail que não tinha opção de ficar oculta.
Bom não é que em uma das minhas pesquisas descobri como desaparecer com ela?
Basicamente o que você precisa fazer é acabar com seus convites e não precisam ser e-mails existentes, caso o e-mail não exista a única coisa que irá acontecer é que sua caixa de entrada vai lotar com e-mails devolvidos, daí é só apagar as mensagens e pronto, janelinha de convites nunca mais.
Como tinha 96 convites e achei que o Gmail verificaria se eu já tinha convidado os e-mails falsos que estava criando tudo que fiz foi um script em Python bem simples pra gerar e-mails diferentes:
fd = open("emails.txt", "w") n_convite = 96 for i in xrange(n_convite): fd.write("www%s@www.www,\n" % i) fd.close()
O arquivo de saída emails.txt terá algo do tipo:
www0@www.www, www1@www.www, www2@www.www, ...
Daí foi simples copiei os e-mails para a janela de convites e enviei todos, quando fiquei com zero convites a janela sumiu para sempre. O Gmail adicionou todos esse e-mails gerados como meus contatos e eu obviamente fui lá e apaguei todos. =D
Atualização: Não funciona! =/ Dois dias depois o Gmail “gentilmente” me cedeu 50 novos convites e como eu não pretendo repetir esse processo dia após dia, deixei a infeliz janelinha lá, quando for permitido ocultá-la eu atualizo esse post explicando como fazer.
Hoje, após alguns anos do lançamento do Gmail, que inicialmente era fechado e acessível apenas por amigos “VIPs” que tinham conseguido um convite, a janela de convites ainda persiste no aplicativo, não temos a opção de fechá-la e nem de removê-la via Labs.
Será que a Google mantém estatísticas de quantas pessoas ainda utilizam essa ferramenta para convidar amigos para conhecer o Gmail? Será que isso faz com que eles mantenham essa janelinha enfadonha? Será que há alguém que usa a internet por mais de uma semana e não sabe que existe o Gmail?
Há algum tempo o Gmail é aberto para qualquer um que acessa o site e opte por se cadastrar, portanto acredito que esses convites não sejam mais necessários. Que tal iniciarmos uma “campanha” (não precisa de muito) para remoção dessa janela?
Vou te contar, um belo dia eu decido tentar pela décima quinta vez instalar um Linux em meu computador, digo isso pois quando tinha 14 anos, na época do Windows 98, eu já tentava experimentar esse “tal” de software livre.
Com o novo recurso que o Ubuntu oferece de instalar o sistema pelo Windows, experimentei sem alterar minhas partições para não perder o que tinha no computador ou instalar aqueles programas que redimensionam o disco rígido, mas pedem para que você faça um backup antes.
Dito e feito nem precisei “queimar” um CD, emulei pelo Daemon e sai instalando, a instalação correu bem e após uns 25 minutos o sistema estava pronto pra usar. Reconheceu tudo, placa de vídeo, placa de rede, placa de rede sem fio e etc, você sabe como funciona instalar sistema operacional novo, não importa se é Windows ou Linux, conectando-se na internet pela primeira vez, você já tem aquele presentão de service pack ou pacotes desatualizados, baixei tudo, configurei tudo, baixei os arquivos que estavam faltando para rodar MP3, AVI, editores de texto e etc.
Fiquei horas me divertindo com o Compiz, efeitinhos de janela, sistema super rápido (mesmo rodando sobre uma partição “imprópria”). Bom, a euforia passou, voltei pro Windows e acabei até esquecendo do Linux, até porque meu objetivo ao instalar o Ubuntu era de usar nos trabalhos da faculdade e eu estava de férias.
Antes de começar o pesadelo, vale notar que meu computador dorme e hiberna perfeitamente no Windows, acorda e “deshiberna” sem problemas, sem telas azuis ou coisas do gênero.
Um belo dia, o bobo (nesse caso eu) decide ver como é que estava o Ubuntu se ele precisava de uma atualizadinha ou algo do tipo. Aí num momento de insanidade decido verificar se ele consegue hibernar, recurso este que é ótimo você deixa tudo aberto, desliga o computador, fica longe horas, volta e liga e TCHARAM está tudo lá.
Tentei hibernar, houve até uma tentativa, uma barrinha de progresso jogando todo conteúdo da memória para o HD, apagou a tela e PUFF, nada aconteceu surgiu ligado como se não tivesse apertado o botão. Até aí tudo bem, não quebrou nada, eis que penso, vou testar a função de dormir, cliquei no botão de dormir e o pesadelo se iniciou, simplesmente desligou como se tivesse dado certo, mandei ligar e nada, absolutamente nada, esperei até 5 minutos, parecia que estava ligado sabe? Desliguei ele e pensei BAH, não funcionou o sleep também, tudo bem, não uso nenhum dos dois.
Ao religar o computador e escolher para iniciar o Ubuntu, 1, 2, 3 segundos depois, eis que surge um Kernel Panic!!! Algo do tipo: “Não consigo montar o sistema de arquivos do root.” Eu questionei com o computador: Como assim? Eu botei você pra dormir, você não dormiu tudo bem, mas Kernel Panic agora!?
Tentei ligar no modo de recuperação, tentei iniciar só um terminal de texto e não consegui, bufei de raiva e falei pra mim mesmo, tudo bem vou voltar para o meu Windows. Ledo engano, o Windows antes de se iniciar achou algo de estranho no disco rígido, deixei ele rodar a recuperação e ele ficou lá, cinquenta, eu disse cinquenta minutos recuperando o HD, quando ele reiniciou, pensei que estava tudo certo que ele tinha jogado o Ubuntu fora, mas não, o Windows não ligava, quer dizer se você chama de ligado ficar com o mouse habilitado e uma tela preta de fundo, então ligou. Eu não conseguia fazer nada, nada abria, o clique do mouse não fazia nada, o sistema operacional tinha ido para o saco.
Não sabia o que fazer, como pode um simples botão que manda o computador dormir fazer um estrago deste tamanho, desde que eu era criança eu sabia que eu podia fazer qualquer besteira no computador que raramente eu iria causar um holocausto, do tipo “vai ter que formatar, não dá nem pra acessar o disco rígido via DOS”. Mas desta vez foi, não teve jeito, tive que formatar e por sorte, eu repito por sorte, as outras partições que não eram a do Windows/Linux estavam intactas.
Esse tipo de experiência me fez refletir, será que o Ubuntu não tinha como saber que não ia funcionar hibernar e dormir no meu computador? Em quais computadores esse recurso funciona? Esses recursos foram feitos apenas para dizer, nós do Linux também fazemos isso aí que o Windows faz! (Obs: Mas apenas em tais marcas/configurações…)
Por essas e outras que eu ainda acho que o “ano do Linux” ainda está muito longe de acontecer.