Home

Nov. 16th, 2009

Python MySQL - CGI

Pessoal,

recebi alguns e-mails sobre dúvidas de conexão do Python com bancos relacionais sem utilização de frameworks e, por isso, escrevi algo para compartilhar com a comunidade.

Apesar do advento dos frameworks para as diversas linguagens que geram páginas dinâmicas para a WEB, pequenas aplicações podem ser desenvolvidas utilizando CGI (Common Gateway Interface) que é definida pelo W3C (http://www.w3.org/CGI/) como uma interface comum utilizada pelos servidores WEB para a implementação de scripts que retornam páginas dinâmicas, como consultas a banco de dados por exemplo.

Originalmente, o CGI era associado a linguagem Perl, porém passou a ser utilizado por outras linguagens como Python.

Segue exemplo completo de uma página HTML que passará uma string chamada "descricao" para o script python index.py e conectará com o MySQL via servidor WEB Apache, utilizando a interface CGI. Lembrando que precisamos utilizar um wrapper python para o MySQL, compatível com o Python DB API Interface. Neste exemplo utilizamos o mysql-python, disponível para download no sourceforge.net.

Código index.html
------------------
<html>

<head><title>Pesquisa no banco</title></head>

<body>

<form name=form1 action="index.py" method=post>

<input type=text name=descricao size=30>

<input type=submit name=consultar value=Consultar>

</form>

</body>

</html>

------------------

Código index.py
------------------
#!/python/python
"""
A linha acima, apesar de iniciar com "#" que indica linha de comentário, informa o caminho do interpretador python. No caso de windows, o caminho acima está
apontando para c:\python\python.exe.

Logo abaixo importamos os módulos MySQLdb e cgi, que são responsáveis, respectivamente, pela API do MySQL com Python e a recuperação dos
parâmetros do formulário.
"""

import MySQLdb,cgi


"""
Cria um objeto da classe FormContentDict() que retorna o conteúdo do formulário em um dicionário com uma lista de valores.
"""
form = cgi.FormContentDict()



# Recupera o valor do parâmetro 'descricao' em um dicionário.

descricao = form.dict['descricao']



# Cria uma conexão com o banco retornando um objeto Connection.

bd = MySQLdb.connect(host="localhost",user="root",passwd="",db="database")


"""
Emula um cursor e returna uma tupla a fim de preparar o banco para uma query.
Com o uso da classe DictCursor serão retornadas linhas como dicionários. Sem a classe DictCursor o retorno serão linhas como tuplas.
"""
cursor = bd.cursor(MySQLdb.cursors.DictCursor)


"""
Executa o sql no banco para o cursor criado. O sql utiliza o like para comparar
a string passada no form no campo descricao da tabela.
"""
cursor.execute("select * from tabela where descricao like '%"+descricao[0]+"%'")
produtos = cursor.fetchall()

print "Content-type: text/html"
print
print """<html><body>

<h3 align=center>Consulta Parametrizada</h3>"""

# Testa se a consulta retornou algo e entra no for para printar os resultados.
if cursor.rowcount != 0:

for produto in produtos:
print produto['campo1'],"-",produto['campo2']
else:

print "<p align=center>Consulta sem resultados.</p>"

# Fecha o cursor.
cursor.close()

#Fecha a conexao com o banco.
bd.close()

print "</body></html>"

----------------
Bom pessoal, espero ter ajudado com esse exemplo. Qualquer dúvida enviem e-mails!
Abraços,



"Tomo café e programo ágil em Python!"

Aug. 6th, 2008

Revista de Software Livre

Galera,

gostaria de compartilhar com vocês o lançamento da Revista de Software Livre que sem dúvida é mais um veículo de fomento e interação com a comunidade de software livre no Brasil.

A revista inclui um artigo interessantíssimo sobre o padrão ODF, inclui também um tutorial de Python com MySQL, entrevistas, espaço para assuntos de Inclusão Digital e outros. A revista traz uma matéria sobre o projeto UCA (Um Computador por Aluno), além da entrevista com o diretor da Sucesu Pará, Odlaniger Lourenço.

Peço a todos que possuem interesse em apoiar a revista com artigos e/ou tutoriais em software livre, procurem o editor chefe, Marcelo Andrade, para que seja avaliado a inclusão nas próximas edições.

O link com a edição de lançamento é:
http://revistasoftwarelivre.com.br/home/

abraços,

Jul. 5th, 2008

Software de Inclusão Livre

Pessoal,

temos visto grandes iniciativas mundiais rumo e escalada da abrangência digital em telecentros, escolas públicas, ribeirinhos e comunidades carentes. De fato, aproximar tais segmentos aos grandes portais digitais de informação é garantir acessibilidade e conhecimento gerando novas expectativas na sociedade, tornando-a capaz de decidir e opinar com liberdade e sabedora de que sua contribuição é muito importante para nossa geração.

O Software Livre em sua essência traz liberdade e compartilhamento de idéias,  rompendo o cordão umbilical com um passado pouco democrático, delimitador e responsável pelo engessamento de novas idéias e conhecimento. Sem dúvida, os que divergem desse ideal - o do Softwre Livre -  militam contra a oportunidade do conhecimento e postergam as reflexões sobre o monópolio digital capitalista.

Recentemente ao ler um texto da socióloga, Inês Pereira, chamado "Programadores da Liberdade", observei o quanto o mecanismo propulsor do Software Livre está intrínseco ao colaborativismo mundial, que contribui e compartilha para acrescer à inclusão digital. A percepção dessa ideologia está aumentando com as diversas ações das comunidades, em busca de soluções, reanimando projetos que em outras épocas não passaram de sua etapa de idealização.

Hoje o Software Livre é motivo de interesse governamental, instituições acadêmicas, universidades e a sociedade organizada, que resolveram embarcar nesse fenômeno divisor de águas que prossegue indubitável com seu objetivo.

Bom, para finalizar gostaria de compartilhar na integra o texto de Inês Pereira sobre o Software Livre.

Os programadores da liberdade

Sociedade em rede e sociedade da informação, eis dois epítetos comummente utilizados para caracterizar, por um lado, os processos internacionais de interdependência global – financeira, comercial, etc. – e, por outro, a comercialização e o fechamento do conhecimento e da informação. Paralelamente a este processo central na sociedade contemporânea, encontramos, todavia, um conjunto de movimentos que propõem a criação de alternativas, entre os quais se destaca o do software livre.

O software livre pode ser definido como aquele cujo código-fonte está disponível, sendo possível copiá-lo, modificá-lo e distribuí-lo sem quaisquer autorizações ou pagamentos adicionais. Ou seja, qualquer indivíduo na posse dos conhecimentos necessários pode utilizá-lo e contribuir livremente para o seu desenvolvimento.

O software livre desenvolve-se em rede, numa ampla e complexa rede que engloba colectivos e indivíduos isolados que contribuem, a partir das mais diversas partes do mundo, para a construção colectiva de soluções informáticas. Neste sentido, o desenvolvimento do software livre só é possível porque existe a sociedade em rede, e porque existem infra-estruturas tecnológicas que permitem ligar os diversos pontos do globo entre si, tornando possível o estabelecimento de comunicações sincrónicas entre um e outro ponto do mundo.

Por outro lado, o software livre baseia-se numa alternativa ao fechamento da informação. Resulta de projectos individuais e colectivos, conjugando no seu seio uma multiplicidade de projectos e motivações. O primeiro tipo de projecto associado ao movimento do software livre prende-se com as possibilidades de inovação e criação tecnológica facultadas pelo uso das ferramentas de código-aberto. O software livre, cujos diversos «membros» elaboram mais ou menos autonomamente projectos de desenvolvimento, tradução e adaptação tecnológica, revê-se particularmente na ideia do prazer criativo. Simultaneamente, a inovação tecnológica surge dotada de sentidos e significados, incorporando éticas, ideologias e projectos de mudança. A utilização de software livre reveste-se de um sentido ético e o projecto do software livre é também um movimento social, construído em torno da ideia da liberdade, do acesso e partilha da informação e da independência face a grandes organizações empresariais de tendência monopolista e a estratégias comerciais que controlam arbitrariamente as aplicações informáticas disponíveis no mercado. Finalmente, o software livre está também a tornar-se parte de uma realidade empresarial, podendo ser também visto como um projecto económico.

O software livre surge assim como um movimento que reage a uma nova morfologia social e a novas lógicas de dominação, e que constrói alternativas no seio da sociedade em rede, em torno de uma das suas questões fundamentais: a circulação da informação, demonstrando que esta rede tem um imenso potencial disruptivo, e que outras informáticas são possíveis.

Abraços,


Apr. 16th, 2008

Apache não carrega imagens e estilos CSS

Olá, pessoa bom dia! estou aqui novamente para compartilhar algo bem interessante com relação ao grandioso servidor web Apache.

Estou construindo uma aplicação em Python que roda num servidor Apache e publica dados de uma base MySQL tudo isso no pequeníssimo e robusto Eee PC 701. Depois de tudo configurado e rodando a aplicação, percebi que os estilos CSS e as figuras não carregavam em hipótese alguma. Comecei avaliando a log que fica em /var/log/apache/ na maioria das distribuições baseada em Debian. Não percebi nada relacionado a isso. Depois verifiquei as permissões de arquivos e arquivo de configuração do apache e....sério...nada!

Já um pouco triste fui para o grandioso google e finalmente encontrei a solução para o problema que raríssimas vezes incomodou alguém (tinha que ser comigo, :(  ).

O Apache possui um diretiva chamada "EnableSendFile" que usa o suporte sendfile do Kernell para transmitir arquivos para o cliente (em nosso caso, o navegador). Por padrão, a maioria das distribuições trazem essa opção permitindo que as respostas de requisições não consultem o suporte do sistema operacional para o tipo de arquivo. Mas em algumas poucas distribuições, essa diretiva é desabilitada para evitar problemas de vulnerabilidade.

Para distros como o Xandros que vem no Eee PC, você precisa dentro da diretiva "Directory" de sua aplicação colocar a seguinte linha:

<Directory "/caminho/da/sua/aplicacao">
 EnableSendfile Off
</Directory>

Ufa, pessoal depois disso o 'enigma' foi solucionado e minhas figuras e estilos foram carregados na aplicação (não esqueçam de restartar o apache antes de testar).

abraços,

Evento "Dia do BrOffice" no Cesupa foi um sucesso.

Pessoal,
realmente o evento foi um sucesso com a participação de alunos, professores e curiosos na suíte BrOffice. Fiquei impressionado com o grande interesse dos alunos por essa suíte que atentos as palestras,  compartilharam suas experiências em casa ou na faculdade.


O evento teve abertura do organizador, Raimundo Xavier, que apresentou a proposta do evento e seus objetivos e pediu o apoio de todos nessa caminhada do BrOffice e do SL em Belém.

O evento teve várias palestras interessantes,  entre elas, a brilhante palestra de Francival Silva sobre a Filosofia do SL,  apresentando de forma objetiva todas as variantes de licença e política de usabilidade,  estendendo-se pela história desse paradigma.
Tivemos oportunidade de compartilhar um pouco da poderosa linguagem Python apresentando suas principais características, cases de sucesso no Brasil e no mundo  e todo o trabalho que Guido Van Rossum (Criador) vem desenvolvendo na Google e seu novo projeto Python 3000.
Na oportunidade foram sorteados CD´s com o BrOffice, camisetas, e mais de 15 cd´s  do Ubuntu (Kubuntu, Edubuntu).

Portanto avalio como um sucesso o evento e aguardamos positivamente 'ansiosos' o próximo Fórum Paraense de Software Livre que ocorrerá em maio e que será uma nova oportunidade para apresentação da suíte BrOffice que se encontra disponível para download na sua versão 2.4.


Abraços,
Marcelo

Mar. 1st, 2008

EEE Pc - O super compacto notável!

Ai galera,
Em meados de dezembro de 2007 estava passando por uma rua no centro da cidade e resolvi entrar em uma banca de revistas por causa de uma manchete na PC World, sobre um notebook ultra-compacto que tava revolucionando o mercado, chamado EEE Pc da Asus.
Depois que comecei a ler suas características percebi que era exatamente o que tava buscando: portabilidade, escalabilidade e robustez.
Esse super compacto possui processador Intel Mobile de 900Mhz com tecnologia ULV, disco com tecnologia SSD e memória sodimm pc 5300 que garantem um excelente desempenho em um notebook de 0,92Kg. Ainda possui uma ótima câmera 0,3 mp, conexão wireless (WI-FI 802.11b/g), 3 portas USB 2.0, leitor de cartão SD e conexão SVGA para ser utilizado em outro monitor ou datashow. Suas cores básicas são preto e branco  (para o modelo 701 que é o mais completo) que custa U$399,00 nos EUA. No Brasil seu preço médio é de R$1.300.
O sistema operacional é o Xandros (Versão baseada em Debian) e que possui um excelente conexão com os mais diferenciados tipos de hardware e, por padrão, vem com uma inteface simples chamada "Easy Mode". Para os amantes do GNOME, existem alguns comandos que permitem rodar em "Full Desktop".
Para utilizar chat com webcam instalei o aMSN 0.97 que tem suporte total e que roda sem problemas.
Bom, depois passo pra vocês dicas para configuração de teclado, instalação de pacotes e ajustes.
Abraços,

Marcelo
Tags:

Mar. 12th, 2007

Ubuntu, essa distro é beleza!

Pessoal,

posso garantir que o problema de muitos que irão utilizar o Linux é que distribuição usar. Qual delas se adequa as minhas necessidades? a instalação é fácil? e quanto a performance?  esse é um problema que vai desde o tipo de máquina utilizada até o nível de conhecimento em sistemas operacionais. Tive experiência com Slackware, Debian, Fedora, Suse e no meu caso quem atendeu meus pré-requisitos (quais?) foi o Ubuntu. Por que?, ora, primeiramente pela clareza e objetividade de acesso aos recurso garantido pelo Debian (que é seu core). Imaginem  um Celeron D310 (2.13ghz) com um boot de 8 segundos? isso é fantástico! Outra característica interessante do Ubuntu é seu repositório de arquivos de fácil utilização e com uma infinidade de pacotes e além de ser personalizável (Universo por ex.).

Outro questionamento comum é porque nessas distros não funcionam MP3. Galera isso é simplesmente para a comunidade não se meter em "bronca" com patentes, só isso. Porém é algo muito fácil de se resolver, bastando para isso o seguinte comando:

# apt-get install gstreamer0.10-plugins-ugly  ( :-) aí é so colocar o fone e pronto!)

Algo interessante é a atualização que é feita a cada seis meses de alguns produtos como Kernel, X.org, Gnome, Open Office, Firefox, etc., sendo que por 18 meses está garantida atualização de segurança para esses produtos.

Deixando o confete de lado, em uma conversa com um colega que também usa Ubuntu, ele me disse que passou por um problema com o DNS após colocar IP fixo em sua máquina. Toda vez que a máquina era rebootada..tchau DNS! Fizemos uma pequena investigação no seu SS5200 da Velox, desabilitamos o DHCP, checamos tudo e sabem qual a solução ?,  Vi (o grandioso Vi!) no resolv.conf, não teve jeito. Realmente é um problema que tem acontecido e não sei se a comunidade já está trabalhando nesse sentido.

Bom realmente teria muito que compartilhar com vocês o quanto tenho me divertido com o Ubuntu. Espero que vocês tenham curiosidade em conhecê-lo, vale a pena com certeza. Recomendo que façam pedido de mídias de instalação para teste no sitio https://shipit.ubuntu.com/. Lembrando que a versão para envio grátis é a 6.06 LTS.

Ps. Ah.. lembrando que agora esses CD´s trazem a versão live (sem instalação)  que pode ser utilizada sem problema, muito boa por sinal.

Valeu!




Tags:

Aug. 28th, 2006

Adaptador Mysql (ZMySQLDA) e Plone 2.3.5 - "O drama"

Algumas vezes os procedimentos para instalação de Produtos para o Zope podem ser dramáticos quando feitos para ambiente Windows.

Recentemente,  fui solicitado para construir um pequeno sistema de votação e meu pensamento veio logo em Mysql x Python via CGI. Porém, ao lembrar que precisava ter um bom "design", deixei de lado essa ideia e  resolvi mergulhar  no Plone. Baixei o Plone, instalei  alguns skins, peguei algumas dicas e comecei a desenvolver o sistema. Como era necessário armazernar as informações de endereço IP dos votantes, precisei trabalhar com um banco de dados, e claro, o eleito foi o poderoso  MySQL. Só lembrando que o Plonepopoll foi o sistema de enquete, é lógico!  :)

Com  a escassez de informações sobre essa integração, resolvi encarar o desafio assim mesmo.  Primeiramente busquei o log do Zope ( normalmente localizado em C:\Arquivos de programas\Plone 2\Data\log\event.log) e deparei com a seguinte situação:
2006-08-19T12:50:02 ERROR(200) Zope Could not import Products.ZMySQLDA
(várias linhas)
ImportError: No module named _mysql
Aí foi início do drama: o que significa isso?

Algumas listas diziam apenas para reinstalar o módulo Mysql-Python e pronto tudo estaria resolvido: balela, ainda não era isso. Tudo caminhava para problemas de path com o Python responsável pela geração dos byte-codes do Mysql-Python. Era isso. Em seguida, lembrei que o Mysql-Python buscava no registro o caminho do executável Python para instalação, aí foi quando entendi que precisa informar para o registro o caminho do Python, já que ele poderia estar apontando para o Python errado. Resolvi tirar o Python e o Plone instalados  e reinstalar só o Plone imaginando que o Python built-in do Plone iria ser registrado, porém, outra decepção: não foi registrado. Aí resolvi meter a mão na massa e buscar no registro que chave o Mysql-Python buscava para direcionar o path para Python. Enfim depois de alguns minutos de tentativas (muitos minutos) descobri o caminho abaixo:
[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.3\InstallPath]

Pronto, mudei essa chave apontando para o Python do Plone e o Mysql-Python foi instalado apontando para o Python correto.
Reiniciei o plone e finalmente o tão esperado "Z-MySQL Database Connection" estava na combo da ZMI!

Produtos utilizados:
- Windows 2000 professional;
- Plone 2.3.5;
- ZMySQLDA 2.0.8
- MySQL-python 1.2.0


Grande abraço,

Marcelo



Jul. 13th, 2006

Firefox - Search plugin

Pessoal,

Depois de alguns e-mails trocados na lista de Python e algumas pesquisas na Internet, resolvi dá atenção a um assunto bem interessante para o dia-a-dia de usuários do Firefox, o Search Plugin. Sem dúvida uma sacada bem interessante utilizada para consultas em grandes bases de dados sem a necessidade de parametrização excessiva, bastando simplesmente um texto e um "enter".

Essa característica está localizada no canto superior direito do FireFox onde encontramos várias engines de busca como Google, Amazon.com, Yahoo, etc. Com isso, vamos então criar uma engine?

Primeiro criaremos um arquivo chamado "consulta.src" com o seguinte conteúdo:

#Minha primeira consulta
<search
   name="Minha Consulta"
   description="Minha primeira consulta"
   method="GET"
   action="http://caminho/para/o/script"
   queryEncoding="iso-8859-1"
   queryCharset="iso-8859-1"
>

<input name="strConsulta" user>

</search>

A tag search contém as seguintes propriedades:
 name -  texto que será apresentado com a seleção da engine;
 description - uma breve descrição da engine;
 method - O método que a string digitada será enviado para o script;
 action - o caminho para o script; e
 queryEncoding e queryCharset - codificação necessária para pesquisas com palavras acentuadas (padrão brasileiro).

Na tag input, a propriedade name deve ser o nome do parâmetro que será enviado para o script.
Depois disso é só criar uma figura 16x16 representando sua engine com o mesmo nome do arquivo src (no nosso caso é consulta). O formato da figura que utilizo é o PNG.
Pronto, depois disso basta copiar os arquivos para o diretório searchplugins localizado em /usr/lib/mozilla-firefox/searchplugins e reiniciar o Firefox (no Windows basta localizar a pasta com o mesmo nome).

Para disponibilizar a consulta para outras pessoas e evitar a cópia manual de arquivos, encontrei no mozdev  o seguinte código para ser inserido na sua página html:

 <script type="text/javascript">
<!--
function PesquisaFirefox(nomeDoSite, enderecoDoIcone)
{
   var dir = enderecoDoIcone.split('/'); var imgFile = dir.pop(); var path = dir.join('/') + '/';
   var splitedImgFile = imgFile.split('.'); splitedImgFile.pop(); var srcFile = splitedImgFile.join('.') + '.src';
      try {
             window.sidebar.addSearchEngine(path + srcFile, path + imgFile, nomeDoSite, 'Campo de pesquisa do Firefox');
      }
      catch(ex) {
             window.alert('Esta pesquisa é um recurso para usuários do browser Firefox.\r\nInstale-o gratuitamente em http://br.mozdev.org');
      }
}
-->
</script>

No corpo do html coloque o seguinte código:
<a href="javascript:PesquisaFirefox('Minha Consulta','http://link/para/figura.png')">aqui</a>

Com isso estará disponível em seu site sua engine para que outros instalem em seu navegador Firefox.

That´s all folks!

[]´s,
Marcelo

November 2009

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Advertisement

Syndicate

RSS Atom
Powered by LiveJournal.com