quarta-feira, 17 de agosto de 2011

Unable to open database file no SQLite3 + Django

Esse erro é muito comum no inicio dos estudos sobre Django, principalmente pelo uso do maior amigo do aprendiz, o SQLite3.
Esse banco fica armazenado em um arquivo, especificado no arquivo settings.py, variável DATABASE_NAME. Algumas vezes não é possível abrir o arquivo especificado e você vê uma tripa tipo essa:

Traceback (most recent call last):
  File "manage.py", line 12, in <module>
    execute_manager(settings)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 438, in execute_manager

.........
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 207, in _cursor
    self.connection = Database.connect(**kwargs)
sqlite3.OperationalError: unable to open database file



Esse erro pode acontecer por vários motivos, como o uso de caracteres estranhos ou acentos no caminho para o arquivo do database.

DATABASE_NAME = '~/dev/mysites/myapp/mydb'

O uso do ~ nesse caso faz diferença, pois o Django (acho que o Python na verdade) não herda essas abreviações e variáveis ($PATH) do Shell.

Um erro também comum, mais por minha parte, é o uso do nome do database igual ao nome de uma app. Por exemplo DATABASE_NAME = 'envioemail' e um diretório dentro do projeto chamado 'envioemail'. Não verifiquei essa ocorrência no Windows, mas no Linux, onde cada diretório é um arquivo, o leitor de arquivos do Python se perde e tenta ler o diretório como arquivo.
Para evitar esse erro bobo, é interessante seguir um padrãozinho onde se coloca o sufixo .db no final do nome do arquivo do database.

DATABASE_NAME = '/dev/mysites/myapp/envioemail.db'

quarta-feira, 10 de agosto de 2011

Gstreamer + Compiz no Ubuntu 11.04: videos sobre o Nautilus

Mais um dos vários problemas que tive ao atualizar meu SO para Ubuntu 11.04 através do update.

O problema

Ao abrir um vídeo, mesmo depois de minimiza-lo, ele continua sobre as janelas do Nautilus (o "explorer" usado no ambiente Gnome).
Como costumo usar muito meu notebook com Ubuntu, não só para trabalhar mas como central de mídia, senti um incomodo enorme com a situação.
Além disso, o video não ficava totalmente sincronizado, resultado de inumeros glitchs (piscaceira) durante a execução do arquivo de mídia.

A solução

Depois de procurar MUITO, a solução veio.


Basta executar no terminal gstreamer-properties e alterar a opção Plug-in para X Window System - Without XV.


A dica veio daqui.

PS: Testei isso no Linux Mint 11 e não tive nenhum problema parecido com esse.

quarta-feira, 3 de agosto de 2011

Django output validator: app para viciados em padronização

Django output validator é um app para Django criada e mantida por Luke Plant. Seu objetivo principal é que validar o HTML (e alguns outros dados) gerados pela sua aplicação escrita com o framework.

Além de validar o output do sistema, ele também registra os erros encontrados e permite visualiza-los em uma tela a parte (por padrão na url /validator/). Os erros ficam organizados por página, o que se torna útil na hora de resolver o código inválido.

Instalação
O pacote pode ser instalado via sudo pip install django-output-validator.

Para instalação manual e configuração da app dentro do projeto, leia aqui (é bastante coisa).

É uma app recomendada para maniacos por conformidade com W3C. Não indicado para quem pretende manter compatibilidade com browser do tempo das cavernas (IE6 por exemplo) porque os css hacks e outras gambiarras para manter compatibilidade podem não passar na validação W3C.
Recomendo habilitar essa app apenas em ambiente de desenvolvimento já que ele usa um Middleware e pode gerar algum overhead.


Listagem de problemas encontrados
Detalhamento do problema
As imagens mostram como funciona a app. A página que lista todos os problemas e dispõe alguns dados como Quando e Onde foram detectados, e a página de detalhes.

Dificuldades no Ubuntu
O validador é dependente da biblioteca wdg-html-validator. Fiz o teste da app no Ubuntu 10.11 e tive um problema com esse validador.

No terminal são mostradas mensagens desse tipo para cada tag:

Error at line 1, character 109: error connecting to "www.w3.org" (Tempo esgotado para conexo)
Error at line 1, character 109: DTD did not contain element declaration for document type name
Error at line 2, character 13: there is no attribute "xmlns"
Error at line 2, character 49: there is no attribute "lang"


E assim por diante, por cada tag HTML que o validador encontrar. Segundo consta no launchpad do Ubuntu, é um bug.

Entrei em contato com o Luke via e-mail e ele indicou um post no próprio site que explica um workaround. Basicamente seria instalar a versão mais atual do repositório do Debian.