Talk at FISL

7200+ participants, 500+ speakers, 600+ hours of activities. These are the numbers of the last FISL, the biggest free software related event in Brazil. This year the key speakers were Tobias Andersson (one of the founders of The Pirate Bay), Richard Stallman (founder of the free software movement), Jon “Maddog” Hall (executive director of Linux International) and some others.

In my talk I spoke about physics engines for games (you can watch it here), topic that I have a special interest and is what I’ve been working at in the last months.

For my surprise, this talk was one of the featured lectures of the event, the following image it’s a article written for the event website telling more about the lecture.

fisl-article

I’m very happy with what happened at FISL 14 and I hope that I repeat the good results at FISL 15.

Pinpoint running on Mac! Oh, wait..

Pinpoint is awesome! It’s a very simple presentation tool created for Linux. I have used it in a couple of talks and now is my main presentation tool.

Pinpoint is a simple presentation tool that hopes to avoid audience death by bullet point and instead encourage presentations containing beautiful images and small amounts of concise text in slides. (by pinpoint)

You can see it in action at this video below. This video shows two presentations, the first one I have used to explain a prolog code to some researchers at UFPE (Federal University of Pernambuco), and the second one is the official tutorial.

If you are interested in using it, you can use macports to install it. Open a terminal and digit this command:

sudo port install pinpoint

But wait a moment, this port is completely broken! Yeah, it’s broken! And this is the reason why I am writing this post, I want to port pinpoint to Mac OS. This is not a so difficult task, but I have no experience with clutter, gstreamer, cairo and pango, and these are the dependencies of pinpoint.

I hope to post a definitive solution to install pinpoint on Mac very soon. Until there, if you want to do some hacking you can compile a custom clutter (tag 1.12.2) and use it with pinpoint.

Week #1304

CuBox

This week I found another credit-card size device with an ARM processor, the CuBox, the hardware is better than the raspberry pi but is more expensive. An ecosystem of ARM Linux boxes is been created.

CuBox Developer Platform is a highly energy efficient and miniature open source development platform for different applications, like multimedia, set-top-box, NAS, automation and other applications.

Qt5 beta is out!

The Qt project aims to make developers’ life easier by enabling faster creation of great Qt apps and UIs on one or multiple targets. With Qt 5 we aim to make Qt better for addressing the latest UI paradigm shifts that i.e. touch screens and tablets require.

This major release aims Amazing graphic capabilities and performance, Developer productivity and flexibility, Cross-platform portability, Open development and open governance and Keep as much compatibility with Qt 4 as possible.

Qt5 is an amazing framework to create desktop and embedded applications. You can see the power of this platform by looking this demos: Livecoding video effects with Qt 5Pimp my video: shader effects and multimediaRaspberry Pi, Qt 5, QML, Shaders.

New livestream

I have just watched a recorded live presentation of Jon McLaughlin, a pianist from the United States. I had no idea who was this guy until livestream.com show me, the interesting about this history is that livestream is picking up some local artists to show to the world how to make a professional video production using their services.

The video below is one of the songs played by McLaughlin in the live session, enjoy!

Hello

I would to like to say hello to you and say that for the next months, maybe years, I will use this space to share my thougths about technology.

This blog will be written to developers and geeks, If you know me personaly this is just the obvious. I am a computer scientist and I love to create these little universes also called computer programs.

Some subjects that I expect to write about are Linux, Mac OS, C, free software, C++, logic programming, semantic web and reasoning.

I hope you like the future posts and feedbacks are appreciated!

Fusão de fotos para gerar imagens impressionantes!

Primeiro eu gostaria de compartilhar um estilo de fotografia que estou ficando encantado a cada dia. São fotos com cores vivas e com cenas que ficam ricas detalhes a cada pixel. Seguindo o bom e velho ditado “uma imagem vale mais do que mil palavras”, vamos ver alguns exemplos de fotos com essa técnica:

Ponte em Recife

Ponte em Recife

lago em HDR

lago em HDR

As imagens acima foram uma combinação de várias fotos com tempos de exposição diferentes. A idéia é que muitas vezes o fotógrafo não consegue capturar todos os detalhes por problemas de iluminação. O exemplo abaixo mostra essa dificuldade em imagens:

imagem com tempos de exposição diferentes

Seqüência de imagens com tempos de exposição diferentes.

Essa imagem acima foi retirada de um post no dicas de fotografias e ilustra que quando o tempo de exposição está baixo em cenas contra o sol, consegue-se capturar alguns dos detalhes da cena (o céu) e quando o tempo de exposição vai aumentando outros detalhes podem ser capturados (lagoa, árvores e estrutura de madeira). Exposure Fusion é basicamente unir essas fotos com tempos de exposição diferentes para conseguir colocar na imagem final cada detalhe presente na cena real.

Há um artigo de Mertens, Kautz e Van Reeth que detalha um algoritmo de exposure fusion que não utiliza imagens com 16 bits para cada canal (r,g,b) em suas fases (que caracterizaria a imagem como sendo HDR) e que também gera imagens com esse efeito que estamos buscando.

O algoritmo usa 3 medias: saturação, contraste e exposição. Extrai pesos a partir dessas medidas e depois as usam para unir as melhores características de cada foto.

Nesse momento estou implementando no octave (versão open source do matlab) esse algoritmo descrito no artigo de forma open source. Meu objetivo é fazer o algoritmo e depois criar bindings para alguma linguagem web (provavelmente python) e em seguida disponibilizar aqui neste blog. quem quiser ajudar no desenvolvimento ou usar depois de pronto, segue o endereço:

https://github.com/adrianomelo/octave-exposure-fusion

Comentários e sugestões são bem vindos.

Fazendo uma instalação portable de python para linux!

Que tal ter a sua instalação de python no pendrive para usá-la em qualquer computador com linux?

Esse artigo é uma reação à dificuldade encontrada por alguns alunos do centro de informática em usar softwares que não são instalados por padrão nos computadores do laboratório de graduação do centro e que são necessários para o desenvolvimento de projetos ou para estudo.

Vamos lá! A demostração será como fazer isso com python, que é uma linguagem de programação, mas a ideia é que você possa reproduzir esses passos para outros softwares.

Primeiro vamos criar a pasta onde os arquivos serão baixados e instalados. Uma sugestão é colocar no seu pendrive mesmo. Vou referenciar PEN como sendo o nome do dispositivo montado.

# indo para a pasta raiz do pendrive.
cd /media/PEN/
# criando a pasta onde vão ficar os arquivos-fonte dos programas e os binários pós-instalação
mkdir programas
# movendo para dentro da pasta programas
cd programas

Agora vamos baixar e descompactar o interpretador python diretamente do site oficial, python.org. Note que a operação de descompactar o arquivo pode demorar um pouco, devido à quantidade de arquivos e a velocidade dos pendrives normalmente não ser alta.

# baixando o python
wget http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2
# descompactando os arquivos do interpretador
tar -xf Python-2.6.5.tar.bz2
# entrando na pasta onde os arquivos foram descompactados
cd Python-2.6.5.tar.bz2

Vamos agora compilar o código fonte! note o parâmetro –configure=/media/PEN/programas, está sendo usado para indicar que a instalação do programa deverá ser feita na pasta /media/PEN/programas. Isso é necessário pois a idéia de fazer uma instalação portable é justamente para que você possa fazer isso de qualquer computador e sem precisar privilégios especiais para isso.

# Configuração da instalação...
./configure --prefix=/media/PEN/programas
# Compilando os arquivos...
make
# Instalando os arquivos...
make install

No último passo da instalação o make retorna um erro. Esse erro é mostrado em sistemas de arquivos fat32, fat16 ou ntfs, onde não é possível criar links. Caso o erro não seja o que está sendo mostrado abaixo então você realmente teve um problema no processo de compilação.

(cd /media/PEN/programas//bin; ln python2.6 python)
ln: criando ligação absoluta "python" => "python2.6": Operação não permitida
make: ** [bininstall] Erro 1

Pronto! com esses passos bem sucedidos você já tem a sua instalação portable de python. Basta agora dizer ao terminal que você usará os binários gerados por essa compilação. Uma das formas de fazer isso é incluindo na variável de ambiente a pasta com os arquivos binários.

# setando a variável de ambiente
export PATH=/media/PEN/programas/bin:$PATH

Para verificar se tudo deu certo, digite o comando “which python2.6″, a saída deverá ser parecida com a abaixo:

[adriano@adrianomelo bin]$ which python2.6
/media/ASTM/programas/bin/python2.6
[adriano@adrianomelo bin]$

O bom de ter uma instalação portable é que você só precisa configurar a sua instalação uma vez. Para quem usa alguma biblioteca que não vem na instalação padrão de python, é uma mão na roda! Eu vou instalar o pacote numpy como demonstração.

# Mudando de diretório para a pasta /media/PEN/programas
cd /media/PEN/programas
# baixando numpy
wget http://downloads.sourceforge.net/project/numpy/NumPy/1.4.1/numpy-1.4.1.tar.gz?use_mirror=ufpr
# descompactando os arquivos
tar -xf numpy-1.4.1.tar.gz
# entrando na pasta que acabou de ser descompactada
cd numpy-1.4.1
# compilando a biblioteca
python2.6 setup.py build
# instalando a biblioteca
python2.6 setup.py install

Quero ter minha própria sintaxe!

Um problema difícil de ser solucionado e que é recorrente para alguns desenvolvedores é de ter um arquivo que atenda a uma sintaxe bem específica em seus projetos de software.

O HTML, por exemplo, possui uma sintaxe bem característica que é de ter uma árvore de conceitos encadeados e encapsulados por “tags”.

Como fazer um programa ou aplicação que tenha arquivos com uma sintaxe singular e que possa ser complexo em relação às regras, e ainda assim legíveis e organizados?

A resposta, que é o motivo desse post, empresta alguns conceitos de compiladores. As duas primeiras etapas de um projeto de compilador são as análises léxica e sintática. A análise léxica identifica palavras-chave nos dados de entrada, e a análise sintática explora as regras definidas para a sua linguagem utilizando as palavras-chave encontradas na fase anterior.

Se o seu projeto é em C, existem duas ferramentas que são as mais difundidas e utilizadas: o lex para análise léxica e o yacc para análise sintática. Essas duas são as ferramentas mais tradicionais, elas foram reescritas e há versões mais recentes com mais suporte da comunidade e documentação atualizada. São os projetos flex e bison, o primeiro substitui o lex, e o segundo o yacc.

Para a linguagem python existem os projetos plex, antlr, ragel e outros.

Em java você pode usar o antlr, jflex, jlex, BYACC/J.

Uma lista mais completa de desses tipos de ferramentas pode ser encontrada através do link: http://en.wikipedia.org/wiki/List_of_parser_generators

Vídeo aulas sobre o Zend Framework

Eu sempre tive vontade de aprender um framework para PHP mas nunca soube como começar.
Trabalhando na Wenetus percebi que precisava aumentar a minha produtividade e organização em projetos mais complexos.

A estrutura que eu costumo usar é muito flexível para projetos pequenos, como plugins do wordpress ou integração de uma lógica com um template, que é basicamente usar um “Front Controller” e separar o código de dados, do html e da lógica da aplicação, que é o padrão arquitetural MVC.

Atualmente estou implementando, como freelancer, um sistema de controle de produção de camisetas online. Um sistema desse porte precisa ser muito bem estruturado e objetivo, daí a importância de usar um framework. Eu escolhi o Zend Framework pois é maduro para se usar em empresas e possui vasta documentação.

Eu já aprendi todos os conceito básicos do framework por vídeo aulas, a partir do site http://www.zendcasts.com. Mas a dica vai só para quem tem o domínio da língua inglesa, todos os vídeos são em inglês e não possuem legenda ou tradução.

Gostei tanto dos “web casts” (vídeos) que já baixei todos os disponíveis e assisti quase todos, são mais de 3 GB para baixar!

Pasta com os vídeos do zendcast

Se você sabe inglês e deseja aprender um framework para PHP, a dica está dada!

1 2 3 4  Scroll to top