sábado, 23 de junho de 2007

Notícias do mundo Linux

Esta entrada está a ser escrita no Firefox a correr numa instalação Linux. A instalação do Linux está cada vez mais fácil, mas não foi fácil chegar aqui.

1º dia
Descarreguei uma distribuição Ubuntu Desktop Edition, o pacote mais instalado durante os ultimos dois anos. Uma das vantagens do Ubuntu é o arranque do Linux em modo gráfico através do CD, uma boa alternativa para quem tem horror às linhas de comandos.

2º dia
No meu caso o arranque não funcionou, parava algures a meio com uns bips característicos de problema de equipamento durante o arranque. Depois de verificar a integridade do CD e experimentar noutro computador, com bons resultados, lembrei-me de uma placa gráfica PCI que tinha por lá ficado quando a AGP morreu. As duas placas conviviam bem e permitiam-me trabalhar com dois ecrans, um vício que me ficou dos Mac; a AGP substituta não se deu bem com a PCI e esqueci esta última até que surgiram os problemas, provavelmente morreu no mesmo dia que a irmã. Sem a placa PCI o Ubuntu arrancou a partir do CD sem problemas.

Os problemas recomeçaram com a partição do disco. O espaço já estava reservado mas o instalador não conseguia mostrar o painel de partição, nem a ferramenta QParted em modo gráfico conseguia mostrar os discos. Pus a descarregar o Ubuntu alternativo, que faz a instalação no modo texto, e fui dormir.

3º dia
Quando segui o registo da instalação no modo texto vi que o processo empastelava com mensagens de erro no acesso ao primeiro disco. O que é idiota porque eu queria fazer a instalação no segundo disco. Mas o pior eram os erros de acesso, o primeiro disco tem o Windows 2000 e mais tudo o que utilizo no dia-a-dia, esse ficou a ser o problema urgente. Com o chkdsk verifiquei que realmente 26 sectores estavam danificados. Pus o chkdsk a corrigir os erros e fui dormir.

4º dia
Uns quantos ficheiros perdidos, quase outros tantos danificados, foi o resultado do chkdsk. Felizmente apenas um documento antigo, já com novas versões, foi afectado. Os restantes ficheiros eram do sistema ou de programas e podiam ser repostos, mas é mais fácil dizê-lo que fazê-lo: descobrir a origem, procurar os CD ou os instaladores no disco, extrair os ficheiros... e mais uma ferramenta na lista: extrair conteudo de um ficheiro .msi.

5º dia
Terminei a recuperação e tentei instalar o Ubuntu. Continuava a não mostrar os discos, como eu já esperava: o Ubuntu está-se a marimbar para o modo como o Windows marca os sectores danificados, pelo menos quando está a preparar a partição. Desisti do Ubuntu e pus uma distribuição do PCLinuxOS a descarregar.

6º dia
O PCLinuxOS pretende ser radicalmente simples e consegue-o. O primeiro painel que aparece é para escolha do teclado, uma excelente ideia: evita uma enorme confusão no momento escrever as /barras e os -traços na linha de comandos (que parece inevitável em Linux). Também foi eficiente durante a partição do disco, criou sem problemas um menu de arranque para o segundo disco -- não quero alterar o primeiro. No entanto quando escreveu o ficheiro fstab errou a numeração das partições, se fosse o windows já estava a dizer mal do Bill, com o linux admito que tenho uma configuração pouco vulgar e lá me ponho a lutar com a linha de comandos. Felizmente o fstab é simples e fiquei com um Linux a funcionar.

7º dia
Ao sétimo dia descansei.

Etiquetas:

sexta-feira, 15 de junho de 2007

Quick hands on wxWidgets with MSVC

If you want to do a quick evaluation of the cross-platform GUI library wxWidgets using Microsoft Visual C compilers, you are in the right place. I've been testing wxWidgets with Visual C++ 6.0 and 2005 Express Edition for the last days and this is my log while things are still fresh.

To begin with, check your box. wxWidgets is open-source, you can download it from the project site. Visual C++ is a very reliable tool, and the Express Edition is free. If you need to pull any of these from the web, begin and read some more while in it:

Microsoft Visual C++ 2005 Express Edition is tailored for .NET development and wxWidgets uses Windows APIs. You have to download the 2003 Platform SDK to get things working, add it to the downloads list if you need. My VC Express did not recognize the SDK after I install it under the Program Files folder, but it was welcome as $(VCInstallDir)PlatformSDK (that can be …\MSVS8\VC\PlatformSDK).

Why use wxWidgets? With Linux's increasing popularity among desktop users you may want to create cross-platform programs, and then you have three kinds of approaches: using a scripting language like Python, a virtual machine like Java, or making specific binaries for each operating system; wxWidgets helps you with the last choice.

There are reasons to select the last approach, you can read some at the wxWidgets wiki (opinions may be a little biased). In my opinion the main reasons to make specific binaries are run-time speed and seamless integration. Run-time speed may not be critical, the best way to cut execution time is with better analysis of the problem. Seamless integration is critical for wide audiences, most end-users dont feel comfortable without the usual interface.

Still downloading? Play a flash game from lazylaces.
Done? Start install, play another!

wxWidgets is a framework that has to be compiled, and there are huge libraries to build: the core library depends on more than 200 objects. Case you want to play other flash game, build all libraries using the …\wxWidgets\build\msw\wx.dsw workspace, after selecting a configuration like Unicode Debug. Otherwise use a build-as-need approach, following the title of this post (at least with the compiler previously installed).


Quick path

Open the …\wxWidgets\samples\minimal\minimal.dsw workspace, select a minimal configuration and start build. You can finish the current flash game, the build will take some time to create base and core libraries. At the end you can get a fatal error: cannot open input file 'wxtiff.lib'. There are some libraries to be linked that are not used at all: go to Project Settings / Properties and remove wxtiff.lib thru wxexpat.lib from link. This does not happen if you build all the libraries in advance.

Other errors may arise, see my short list at the end of this post.

When you have the minimal project built, remove or unload the base and core projects. If you open other samples, immediately remove or unload all wxWidgets projects that you have already built. That will save a lot of time when you reopen the projects with VC6, and prevents starting of base / core builds if you dont set the proper configuration.

Errors found [6] is VC6, [8] is VCExpress

Cannot open include file: 'windows.h' [8]
Install 2003 Platform SDK at …\MSVS8\VC\PlatformSDK

unresolved external symbol __imp__WindowsAPI@N [8]
This is a tricky one. By default VCExpress only inherits kernel32.lib; edit …\MSVS8\VC\VCProjectDefaults\corewin_express.vsprops (it is xml) and add other libraries (copy from CoreWin.vsprops).

Cannot open input file 'wxtiff.lib' [6][8]
Remove wxtiff.lib thru wxexpat.lib from Project Settings / Properties : Link

Slow workspace open, hangups [6]
Remove or unload all wxWidgets projects that you have already built.

Duplicate resource. Type:MANIFEST, name:1 [8]
This happens if you have been playing with VC6 and convert a project to VCExpress. The last embeds a manifest inside the executable; with VC6, the manifest is embeded by wxWidgets framework; and you end with a duplicated resource. Just remove all rcdefs.h from …\wxWidgets\lib\vc_lib sub-folders, they will be recreated.

Etiquetas:

sábado, 9 de junho de 2007

Os computadores também enferrujam

O meu primeiro computador "a sério" foi um Mac LC, no princípio dos anos 90; antes tive um ZX Spectrum, uma caixa maravilha que não posso classificar como computador. Apesar de ser um Macintosh de gama baixa tinha algumas características interessantes, que o punham "a milhas" dos PCs com Windows: tinha um sistema operativo decente (em Português impecável) e trabalhava com milhares de cores. A arquitectura era equivalente à dos PCs desse tempo (386) com um processador de 16MHz, 32 bits a trabalhar num bus de 16 bits; mas a memória com 4MB era largamente superior. E, sim, era um Macintosh.

A maior decepção era o pequeno ecran, apenas 560x384 pixels. Pelo lado positivo tinha entrada de som integrada, uma novidade na altura mesmo para um Mac. No meu trabalho havia uma equipa criativa que trabalhava com Macs e eu tinha acesso a muitas aplicações que apenas existiam para aquela plataforma, como o XPress e o Photoshop. Depois comprei um modem e inscrevi-me num bulletin board system (a internet só chegou a meio da década) que tinha muitos ficheiros para Mac.

No ano seguinte comprei uma impressora StyleWriter, que utilizava a recente tecnologia de impressão por jacto de tinta. Era lenta e a preto e branco mas com as fontes proporcionais do Mac e a possibilidade de imprimir linhas ou imagens produzia documentos impossíveis de obter no PC.

Mais um ano, uma nova adição com tecnologia recente: um Apple CD-ROM 300. No terceiro ano, actualizei o computador para um Mac LC III colocando o equipamento a par dos PCs da altura (486), com 25MHz a trabalhar num bus de 32 bits; aos 4MB de memória originais juntei outros 4, ficando com a "loucura" de 8MB que permitiam executar qualquer programa, alguns lentamente. Não me lembro quando substituí o disco original de 40MB por outro com 234MB.


A última quinta-feira foi feriado e encontrei-me sem nada interessante para fazer nem vontade para blogar; olhei para o lado, vi o velho Mac coberto de pó e decidi ressuscitá-lo. No princípio quase nada funcionava, às vezes nem arrancava (got the sad mac face, if you know what I mean). Depois percebi que o teclado precisava apenas de uso: carregando frenéticamente em cada tecla, ela começava a responder; pelo meio descolei a tecla 9, que uma vez tinha partido, já não me recordava qual era.

O leitor de CDs foi mais difícil. Depois de verificar as ligações e extensões de sistema várias vezes, encorajado pelo resultado no teclado, decidi dar-lhe uns fortes abanões e começou a funcionar. Afinal os computadores também enferrujam.

Os computadores evoluiram pouco nos últimos 15 anos. A utilização da internet generalizou-se, as velocidades e capacidades aumentaram como previsto, existem muito mais ferramentas mas a máquina e a forma como é utilizada são quase as mesmas. Até agora só notei uma falta no velho Mac: os menus de contexto que saltam com o botão direito do rato.

Hoje todos os computadores pessoais são como o Mac, desde o Windows até ao Linux com KDE ou Gnome. Até os programas são os mesmos: XPress, Photoshop e Illustrator continuam a dar cartas, o Acrobat é um standard na prática; o Word e o Excel como os conhecemos hoje nasceram no Mac. Não existiam editores de web, mas já existia o Director que teve como descendente o Flash, king of the impossible, savior of the universe.

Etiquetas: ,

terça-feira, 5 de junho de 2007

Uma obra de arte colectiva

Ver antes:

Georges Seurat, La Seine à la Grande-Jatte, 1888

Um rio, um barco, uma árvore... ou muitos, muitos pontos? Os pormenores não são importantes para interpretar o significado de uma imagem. Podemos diminuir a informação dos detalhes em qualquer fotografia e ninguém sentirá a sua falta, mesmo tendo o original ao lado.

Se eu quizesse diminuir os pormenores de uma fotografia provavelmente ia começar por comparar cada ponto com os vizinhos, codificando a diferença em vez do valor absoluto, esbatendo as grandes amplitudes com uma divisão não linear. A ideia não é disparatada, tirando o esbatimento este é um método utilizado nas imagens PNG e JPEG sem perda. Mas o método JPEG com perda foi estudado durante anos e certamente dá melhores resultados.

O método começa por "separar" os detalhes das manchas através da aplicação de uma transformada discreta de cosseno (DCT em inglês) a grupos de pontos. Como resultado, para cada grupo obtemos uma quantidade igual de valores onde o primeiro é proporcional à soma dos originais e os outros dependem da variação existente. Se os valores originais são todos iguais o resultado fica reduzida ao primeiro valor, os restantes são zero.



Em fotografias a variação entre pontos adjacentes é geralmente pequena. Quando aplicamos a DCT a um grupo de pontos o resultado é uma sequência com valores absolutos tendencial­mente decrescentes. Se anularmos os últimos valores da transformada a média dos valores originais não é alterada (manutenção da mancha) e as diferenças são esbatidas (diminuição do detalhe).

A transformada discreta de cosseno foi definida num estudo de N.Ahmed, T.Natarajan e K.R.Rao publicado em 1974. Desde então, e principalmente depois da publicação da especificação JPEG, muitas implementações foram publicadas em revistas, livros, patentes e hardware. Como referência a fórmula que segue funciona nos dois sentidos, isto é, pode ser utilizada para calcular a transformada e recuperar os valores originais:



Nas imagens JPEG a transformada é aplicada a quadrados com 8x8 pontos. Aplicada directa­mente o cálculo seria muito "pesado" e várias simplifi­cações são utilizadas: o processamento é feito primeiro sobre as linhas e depois sobre as colunas, os cossenos são pré-calculados e combinados com a raiz quadrada, as operações são agrupadas para aproveitar cálculos comuns… a biblioteca do Grupo Independente JPEG utiliza um algoritmo de C.Loeffler, A.Ligtenberg e G.S.Moschytz que reduz o cálculo de cada linha / coluna a 11 multiplicações e 29 adições.

A transformada não reduz a quantidade de informação: a quantidade de valores resultado é igual à original. A redução é implementada através da divisão de cada valor numa escala não linear — por exemplo, enquanto os primeiros valores são divididos por 6 os últimos são divididos por 40. Como os últimos valores são geralmente pequenos o resultado típico é meia dúzia de valores significativos, uma dúzia de 1's e uma catrefada de 0's, sequência óptima para o passo seguinte.

Não existe uma redução ideal. Quase todos os programas permitem ajustar a redução, é a chamada "qualidade JPEG". Normalmente a melhor redução está entre 80 e 70, qualidades menores que 60 estragam a fotografia sem ganhos na compressão, já pouco se pode reduzir:
windows bitmap  100%
quality 100 31%
quality 90 12%
quality 80 8%
quality 70 6%
quality 60 5%


qualidade 100, 55K bytes


qualidade 80, 15K bytes


qualidade 40, 7K bytes

A definição e as implementações da transformada directa de cosseno são resultado do contributo de muitos técnicos, com destaque para as publicações do Institute of Electrical and Electronics Engineers (IEEE). É uma obra de arte colectiva.

A diminuição de detalhes não reduz a imagem mas coloca a informação num sequência óptima para o passo seguinte.

A seguir: apertar os bits

Etiquetas:

sábado, 2 de junho de 2007

Mapas evoluem para três dimensões

Nos últimos dias surgiram duas iniciativas que permitem fazer passeios virtuais em 3 dimensões: a Microsoft anunciou que os Live Search Maps passavam a disponibilizar imagens 3D de Nova Iorque e outras cidades, e a Google lançou o Google Maps Street View permitindo visitar actualmente 5 cidades dos Estados Unidos. Os dois projectos têm algumas diferenças.

Por um lado os mapas do Google oferecem vistas ao nível da rua enquanto os mapas da Microsoft permitem vistas aéreas; aqui a Microsoft fica talvez a ganhar, digo "talvez" porque ainda não consegui testar os mapas Microsoft.

Por outro lado a tecnologia é diferente: enquanto a Google utiliza a última versão do Flash, numa abordagem que considero aberta, a Microsoft necessita um acrescento proprietário que só pode ser instalado no Windows XP ou mais recente — o Windows 2000 não é admitido, por isso não consigo testar os mapas neste momento.

Finalmente o projecto Google está completamente disponível e o da Microsoft ainda está na fase de produção, classificado como "beta".

A Microsoft disponibiliza um video com uma previsão dos Live Search Maps; com o meu equipamento será com certeza muuuito mais lento. Quanto à Street View da Google, aqui estou eu no cruzamento da 7th Avenue com a 15th Street:



As setas no canto superior esquerdo permitem rodar 360° e a roda do rato permite três passos de ampliação; a rotação não é perfeita, é feita em 8, 16 ou 32 passos conforme a ampliação. As setas no chão permitem circular nas ruas quando não existe ampliação, e também aqui se notam os soluços. Além disso a transição é lenta, pelo menos em equipamentos e ligações à rede como o meu.

Entretanto já surgiram observações acerca da privacidade das pessoas e locais que foram fotografados pelos carros de recolha, que a empresa já está a resolver (mais aqui). Um novo passatempo dos habitantes das cidades fotografadas é a verificação das ruas que costumam frequentar; como as fotografias começaram a ser tiradas alguns meses atrás já foi descoberto um sem-abrigo que entretanto foi assassinado quando defendia o seu cão.

Ainda a propósito das inovações da Google: podes fazer uma visita ao laboratório para conhecer as últimas adições ou o que está para vir; alguns items só estão disponíveis para utilizadores registados. As tendências são interessantes, parece que os turcos são loucos por música e sexo; e até parece existir alguma correlação!

Etiquetas: ,