Vícios de usabilidade no Software Livre

Quem me conhece sabe que sou um defensor do software livre, mas não deixo meu Mac OSX de lado. Como assim Bial ? Eu gosto do Gnome , KDE mas eles tem sérios problemas de usabilidade que me irritam profundamente, principalmente o GNOME. Mas como disse o problema é das aplicações livres em geral e não apenas do GNOME ou outro software específico.3880505875_c06f99cec5

Um exemplo, no OSX TODAS as aplicações tem os mesmos atalhos de teclado para operações com a janela, gerenciamento de arquivos, preferências etc… Esses atalhos são definidos pelas bibliotecas COCOA, e centraliazados  e configuraveis globalmente. No caso do GNOME que é um desktop focado em usabilidade, e que opta abertamente em sacrificar funcionalidades para ser simples e funcional, os atalhos são confusos e não intuitivos.

Para fechar janelas, basta um intuitivo Alt + F4  , para obter ajuda F1 ! Você sabe o que o F5 faz ? Como não ? É intuitivo, faz refresh ! Manja o F10 ? Não ? Ele coloca o foco no menu ! Mas não funciona para todas aplicações do GNOME, e não da pra saber em quais funcionam de cara, só testando pra ver. Não sei no seu teclado , mas no meu as teclas F não tem nenhuma descrição, são ergnômicamente ruins de alcançar principalmente quando acionadas junto com control ou alt.

Não seria mais inteligente adotar de vez o uso da tecla Windows, presente em 100% dos teclados atuais, e  simplificar os atalhos ? Tipo Win+C pra fechar janelas, Win+S para preferências , Win + R para dar refresh em browsers ? Eu sei que isso é meio MAC demais , mas é ruim ? Atalhos que podem ser acionados com apenas uma mão e ainda por cima minemônicos não seriam um avanço em usabilidade ?

No gnome praticamente todas as aplicações tem paineis de preferência, sabe o atalho ? Na maioria dos casos é o banal Shift + Ctrl + S , mas em alguns apps isso não funciona , então o jeito é apelar para Alt+E seguido de  N , super minemônico e fácil de lembrar. Só que no terminal não rola … Tem que usar o mouse mesmo, alias praticamente nenhum atalho de teclado funciona no gnome terminal, irônico ?

Mas o pior mesmo é o artigo que motivou esse post, onde o autor aponta um vício pior, herdado do windows 95, vício do menu “Arquivo”, ou file , nele o autor faz um passeio pelos aplicativos gnome e mostra os abusos em cima do menu “file”. No gnome terminal, aplicação sem nenhuma operação de leitura e gravação de arquivos ele está lá , presente apenas para fechar o terminal, criar abas e janelas, intuitivo né ?

Nesse ponto aplicativos KDE são um pouco melhores, mas escorregam bastantes nos vícios de usabilidade do windows, mas é assunto pra outro post.

Mac VS PC

Quem é mais rápido ? Um mac da década de 80 ou um Dual Core Parrudo com VISTA ? Bem, veja você mesmo ! Aumente o volume , a narração é hilária :



Eu já sabia, já fiz testes parecidos entre macs com 10 anos de diferença, micros antigos com sistemas antigos se saem melhor em quase todas as tarefas , guardadas as devidas proporções 🙂

Arkanoid de pobre em Flash pt1

Defensores radicais do software livre, pulem o post pois esse blog está mergulhando no mundo imundo do software proprietário fechado barbudo e mal.

Disse em algum post atrás que estava me interessando cada vez mais pela produção de jogos, bobos e simples, e de preferência portateis… Já fiz um game ou outro, a maioria em BASIC pro antigo MSX 2.0 e um outro em C/SDL pro linux, mas game casual que é game casual tem que rodar em qualquer micro, em qualquer sistema, e nada melhor que Flash para isso.

A proposta é criar um clone do Arkanoid, sem todo seu glamour, coisa simples sem muita firula, nem mesmo som 😛

Eu sei que é possível desenvolver maravilhas com puro ActionScript+Javascript mas eu não tenho a manha, então vou de Flash CS3 mesmo. Alias, vou usar o Flash CS3 no OSX Leopard, se você usa windows os screenshots vão ser diferentes mais ainda assim parecidos.

Primeiro passo, abra um novo “Flash File (ActionScript 2.0)”, se quiser mude as propriedades do fundo da tela e seu tamanho em “Modify > Document…”.

Agora vamos desenhar a bola, use a ferramenta para criar circunferências e crie uma bola em algum canto da tela. Selecione a bola e converta para Símbolo em “Modify > Convert to Symbol” , marque a caixa “Type” como “Movie Clip”. Marque a caixa “Linkage to ActionScript” também:


tutorial flash

Agora clique com o botão direito em cima da bola e vá em “Actions”, e cole o seguinte código :


// Função carregada no início do jogo
onClipEvent(load) {

	// A cada loop incrementa em 10 a posição da bola 
	// na direção horizontal
	xspeed =10;
	// A cada loop incrementa em 10 a posição da bola 
	// na direção vertical
	yspeed =10;
	// Tamanho da tela horizontal (width) e vertical (height)
	stageWidth=400;
	stageHeight=300;
	
}
// Carregado quando o jogo entra nesse frame
onClipEvent(enterFrame) {
	//Incrementa as velocidades em x e em y a cada loop
	this._x += xspeed;
	this._y += yspeed;
	
	// Detecta se a bola atingiu a parede o teto e inverte sua velocidade
	if ((this._x <= 0) || (this._x >= stageWidth)) {
		xspeed = -xspeed;
	}
	if (this._y <= 0 || (_root.barra.hitTest(this))) {
		yspeed = -yspeed;
	}
	
	// Caso a bola caia no chão ela será restaurada no meio da tela
	if (this._y > stageHeight) {
		_x = stageWidth/2 ;
		_y = stageHeight/2;
		xspeed=10;
		yspeed=10;
	}
	
}

Agora vamos adicionar a “barra”, da mesma forma que adicionamos a bola, posicionando na tela convertendo para símbolo e identificando como “barra”. Clique em cima da barra, e vá em “Actions”, em seguida entre com o código :


onClipEvent(enterFrame) {

	// Tamanho da tela, usado para calcular os limites de movimento da barra	
	stageWidth=400;
	stageHeight=300;
	
	// Se pressionado o botão direito soma 10 na posição da barra
	if(Key.isDown(Key.RIGHT)) {
		// Verifica se  a barra já chegou a extremidade
		if(this._x <= stageWidth - this._width) {
			this._x += 10
		}
	}
	// Se pressionado o botão direito subtrai 10 na posição da barra

	if(Key.isDown(Key.LEFT)) {
	// Verifica se  a barra já chegou a extremidade

		if(this._x >= 0) {
			this._x -= 10;
		}
	}
}

Uma dica muito, mas muito importante é instancear os objetos que usamos, para isso selecione um dos objetos e na janela de propriedades dê o nome da instância do objeto, “bola” no caso da bola e “barra” no caso da barra. Sem isso a bola vai passar direto quando atingir a barra. Veja figura abaixo :


instancia no flash

Se você chegou até o fim do tutorial seu game deve ser parecido com o abaixo :




Levando o macbook pro aos limites !

Um belo dia encontrei no google uma referência ao meu artigo sobre o Xslimmer /Ditto no blog macmagazine desde então passei a participar do fórum e do blog. Então encontrei esse post que mostra um vídeo de um macmini rodando 50 aplicativos ao mesmo tempo… Não me contive e em uma chuvosa manhã de sábado fiz o mesmo, mas com mais de 100 aplicativos, seguem os screenshots :




Ok, a máquina ficou por volta de 30 minutos sem responder, o HD do macbook pro é muuuuito lerdo PQP ! Mas não travou 🙂 E ainda consegui trabalhar nela por algumas horas… depois de fechar todos os apps, a memória voltou ao normal, sem memory leaks, um feito !

Alternativa ao xslimmer

Quem conheceu o OSX na era Intel não deve perceber, mas quem veio do mundo PPC notou que os binários universais são monstruosamente grandes com o dobro ou até mesmo o triplo de um binário dedicado.
Com a morte do meu powerbook peguei um mac intel portatil, com hd de 100 Gb que não da pra nada, e agora sofro com problemas de espaço em disco… Então encontrei um software chamado xslimmer que faz uma lipo nos binários gordos retirando o código PPC deixando apenas código intel 🙂 Uma maravilha se o excelente programa não fosse um shareware 🙁

Mac como um bom macmaniaco com conhecimentos Unix, não me conformei e fui buscar uma solução caseira, e encontrei o ditto, uma ferramenta para gerenciar os aplicativos do OSX, com ele é possível customizar, configurações, línguas, ícones e também a arquitetura dos binários , saca só o comando :


ditto --rsrc --arch i386 /Applications/RealPlayer.app /Applications/RealPlayer-intel.app

Então após se certificar que o novo app está funcionando basta apagar o antigo. Só pra se ter uma idéia da economia, eu usei o ditto no Pages e o binário de 700 mb caiu pra 200 mb… Em outros casos a economia foi ainda maior chegando a 4 vezes, não me pergunte porque.

Pra mim é assustador como o mercado de pequenos aplicativos para o OSX se sustenta em cima de frontends para softwares de linha de comando, são vários exemplos, tem desde rsyncs e wgets até tweaks em configurações de arquivos xml, é impressionante a quantidade de grana que você pode economizar por dominar meia dúzia de comandinhos do terminal.

Macports Mini-Howto

MacOs X não é livre , mas sua base é, incluindo os compiladores e ferramentas de sistema em geral, a própria libc do sistema é aberta, assim como o kernel. Isso faz dele um sistema meio-livre e compativel com a maioria dos programas livres  que existem na sua distribuição linux favorita, dentre eles o KDE e suas ferramentas o  <a href="http://developer.apple.com/opensource/tools/X11.html">XFree86/Xorg</a> e até  mesmo o <href="http://mplayerosx.sourceforge.net/">mplayer</a>... Na verdade essa lista não termina, sério, tudo que é compativel com o linux roda em mac, até mesmo os drivers de hardware são compartilhados entre os sistemas.

Uma lista bem completa, e indispensável, de softwares de código aberto para o Mac pode ser vista em : http://www.opensourcemac.org/

Como eu falei, programas unix em geral são compatíveis com o Mac, na real o sistema Leopard recebeu uma certificação Unix legítima…. O linux não tem um certificado desses, além de : Unix -> Caldera -> SCO 🙂 Em todo caso, o MacOs X segue os padrões Unix a risca, e isso garante que você vai rodar um apache, mysql, vim entre outros softwares projetados para sistemas Unix.

Em um mac você pode sem problema algum usar a trinca ./configure, make, make install para instalar seus programas favoritos…. Mas isso é chato e nada prático, os linux tem os pacotes RPM, DEB e TGZ, no mac tem os DEB mas o foco desse post é o Macports, antes conhecido como Darwinports.

O macports é derivado do sistema ports do freebsd, e funciona de forma parecida, ele puxa os fontes , aplica os patchs compila e instala tudo pra você.

Instalar é boiada, primeiro vc tem que pegar a versão mais recente do Xcode, ele

está no CD de instalação do MacOsX ou no site da apple.

Como o meu sistema é o Leopard, estou usando o XCode 3.0, e meu macports é versão 1.5.0.

http://svn.macosforge.org/repository/macports/downloads/MacPorts-1.5.0/MacPorts-1.5.0-10.5.dmg

No Então é só clicar duas vezes e seguir o wizard (next > next > finish)

É recomendavel instalar o X11 também, procure por ele no cd de instalação do mac.

Após instalar o macports, abra um terminal e crie o arquivo ~/.profile com o comando :



sudo nano ~/.profile

Com o conteúdo :

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

export DISPLAY=:0.0

Feito isso feche o terminal (Command + Q) e abra de novo.

O primeiro comando que você vai usar sempre que for instalar algo novo será :


sudo port -v selfupdate

O argumento “-v” liga o modo verbose do comando, e o selfupdate busca no site oficial por atualização dos pacotes, uma espécia de yum updade uo apt-get update.

Você pode buscar por um pacote no banco de dados de duas formas, manualmente , no diretório :

/opt/local/var/macports/sources/rsync.macports.org/release/ports/audio/

Ou usando o comando ports :



greyfoxII:~ root# port search gimp

gimp-app aqua/gimp-app 2.4.0 Gimp.app application bundle

macclipboard-gimp aqua/macclipboard-gimp 0.7 Gimp <-> Mac clipboard

macfile-gimp aqua/macfile-gimp 0.1 "Show in Finder" Gimp plugin

gimp graphics/gimp 2.4 The Gimp - Batteries Included

gimp-gap graphics/gimp-gap 2.2.2 The Gimp Animation Package.

gimp-jp2 graphics/gimp-jp2 0.1 Gimp JPEG 2000 plug-in.

gimp-lqr-plugin graphics/gimp-lqr-plugin 0.3.0-6 Liquid Rescale Gimp plug-in.

gimp-user-manual graphics/gimp-user-manual 0.13 A multilingual user manual for the Gimp (broken).

gimp2 graphics/gimp2 2.4.2 The GNU Image Manipulation Program

icns-gimp graphics/icns-gimp 0.1 Gimp file format plug-in for Macintosh icon files (.icns)

p5-gimp perl/p5-gimp 2.0 Gimp Extensions/Plug-ins/Load and Save-Handlers in perl

gimp-print print/gimp-print 4.2.7 Print Plugin & Ghostscript (and CUPS) Driver

Agora vamos instalar um pacote. Assim como o ports original e o emerge do gentoo, você pode customizar o processo de compilação incluindo ou desativando recursos, para verificar os recursos extras disponíveis para o pacote

Por exemplo para o PHP5 o comando seria :



greyfoxII:~ root# port -v variants php5

php5 has the variants:

universal

darwin_6

darwin_7

darwin_8

macosx

apache

apache2

fastcgi

imap

tidy

mssql

snmp

macports_snmp

mysql3

mysql4

mysql5

postgresql

sqlite

ipc

pcntl

pear

sockets: Add socket communication functions

Para instalar o nosso pacote com os recursos que queremos mostrando na tela os progressos durante a contrução dos binários , use o comando :



sudo port -v install php5 +apache2 +postgresql +sqlite

Para listar os programas instalos pelo ports :



port installed

Para atualizar basta usar os comandos :



port selfupdate

Veja os pacotes obsoletos com :

port outdated

Para atualizar um pacote :



port upgrade pacote

Para atualizar tudo :



port upgrade outdated

É isso, simples, estável e funciona, viva o macports.

PS: MACOSX é um sistema operacional fechado, que atenta a sua privacidade e sua liberdade. Use linux e seja livre 😉