Planeta PythonBrasil

PythonBrasil[9]

July 21, 2014

Magnun Leno

Aberto a contribuições

Desde que me envolvi com o Software Livre e o mundo Open Source, acabei adotando essa filosofia e aplicando seus princípios em muitos aspectos da minha vida, e este site é só uma dessas consequências.

Software Livre - Cloud

Apesar deste site servir para manter o conhecimento que adquiro aberto e acessível para a comunidade, eu nunca tinha bolado uma boa forma de tornar o site 100% livre, isto é, aberto para outras pessoas e disponibilizado seu conteúdo sem restrições. Se você não tiver paciência para ler e quiser logo saber como contribuir, clique aqui.

Aberto a contribuições é um artigo original de Mind Bending

por Magnun em 21 de July de 2014 às 16:40

July 11, 2014

Magnun Leno

Argumentos e Parâmetros em C

Os parâmetros e argumentos são aquelas opções que usamos quando executamos um programa na linha de comando, como df -h ou ls -la --color. Tratar esses parâmetros e argumentos faz com que nossos programas estejam em compliance com o sistema operacional.

C Language

A implementação dos parâmetros e argumentos da linha de comando é um assunto complexo e requer dedicação. Abaixo explico de maneira prática como implementá-los através de funções GNU. No entanto, vou explicar também um pouco desse padrão da linha de comando, dos parâmetros e dos argumentos, pois é imprescindível saber como eles funcionam para uma correta implementação.

Argumentos e Parâmetros em C é um artigo original de Mind Bending

por Fernando Almeida em 11 de July de 2014 às 15:22

July 07, 2014

Magnun Leno

Hack ‘n’ Cast - v0.3 Introdução ao GNU/Linux

O GNU/Linux foi a mola propulsora da Internet como a conhecemos hoje e, por isso, é uma peça de tecnologia fundamental pra qualquer profissional. Hoje vamos saber um pouco de sua história, entender porquê escrevemos GNU antes de Linux e discutir um pouco sobre a disputa épica entre Linus e Tanenbaum.

Baixe o episódio e leia o shownotes

por Magnun em 07 de July de 2014 às 04:38

June 30, 2014

Magnun Leno

UNIX System Signals em Python

Após publicar o texto sobre UNIX System Signals em C, percebi que pode ter dado a impressão que apenas a linguagem C possui essa integração. Com isso, escrevi este artigo para demonstrar o mesmo mecanismo demonstrado pelo Fernando Almeida.

Zen of Python

Todo o conceito de sinais, sua dinâmica de envio e uma tabela listando todos os sinais existentes está disponível aqui. Então vamos direto para o código!

UNIX System Signals em Python é um artigo original de Mind Bending

por Magnun em 30 de June de 2014 às 21:00

June 27, 2014

Osvaldo Santana Neto

Negócios na “internet fechada”

Já faz algum tempo que acompanho o desenvolvimento de novos negócios de tecnologia ao redor no mundo. Por conta disso participei e participo de vários eventos dessa área no Brasil. Eventos onde empreendedores apresentam suas idéias, fazem seus pitches, demonstram seus produtos e buscam melhorar o seu relacionamento com outros empresários, investidores e até mesmo com seus clientes.

Nessas apresentações eu já vi todo tipo de negócio na área de tecnologia. Negócios que funcionam nos mais diversos tipos de plataformas. As plataformas mais comuns são a Web e a Mobile.

Quando um empreendedor começa a desenhar o seu modelo de negócio ele precisa pensar em diversas coisas e nesse processo ele eventualmente se coloca em uma armadilha que dei o nome de “internet fechada”. Já explico o que isso significa.

Todo mundo sabe que a internet é uma rede aberta, com padrões e protocolos abertos. Essa abertura da internet permite que você faça o que bem entender com ela (desde que não seja ilegal) sem se preocupar com nada. Na internet aberta ninguém tem poder de te censurar sem motivo razoável.

Mas existem plataformas dentro da própria Web onde existem regras mais rígidas que mudam frequentemente.

Se o empreendedor baseia toda a sua estratégia de negócio e desenvolve uma aplicação Web para o Facebook, por exemplo, ele fica sujeito às regras do Facebook. E no Facebook eles mudam essas regras o tempo todo.

O risco do Facebook inviabilizar o negócio desse empreendedor é muito alto. O empresário está lá trabalhando para aumentar a sua empresa e num dia de manhã, quando abre a sua Inbox, dá de cara com uma “Alteração nos Termos de Serviço”. Nessa alteração o Facebook proíbe ele de fazer algo essencial para atender os seus clientes.

O impacto dessa mudança nos Termos de Serviço pode até não ser fatal mas certamente vai dificultar muito as coisas para esse empresário.

Outra característica das plataformas fechadas é a de que os clientes nunca serão 100% do empresário em questão. Os clientes são da tal plataforma. Ou você acha que o Facebook vai te entregar os usuários deles?

Quando eu conversava sobre esse assunto com um amigo que desenvolve Apps para celular ele me perguntou se o mesmo não acontece nas lojas de aplicativos? Ele citou dois problemas principais: as regras mudarem de forma a impedir que sua App seja vendida na loja e o caso onde a fabricante da plataforma (ex. Android ou iOS) fornece uma App parecida com a sua integrada no aparelho.

No primeiro caso o problema é bem parecido com o da internet fechada. O segundo não.

A Apple é bem conhecida por suas mudanças de regras que levam empresas inteiras a passarem por dificuldades. Apps que promoviam outras Apps sofreram muitas restrições de funcionamento. Outras que vendiam livros, música, filmes, etc… sofreram barbaridade com a proibição de vendas a partir da App.

Pense nos empresários que investiram alto para criar esses produtos e acordaram um dia sem nada. Se a App estiver disponível para Android a coisa fica menos pior mas o impacto vai ser grande mesmo assim. No mundo do Google/Android a coisa é um pouco mais tranquila mas o risco está lá.

O segundo caso, quando uma a fabricante lança uma App similar já integrada com o SO, é diferente porque ela não proíbe você de negociar sua App.

Para resolver esse problema é só o empresário fazer a App dele ser preferida pelos seus clientes. A Apple tem o iMessage nem por isso o WhatsApp sofreu. As coisas ficam mais difíceis mas não impossíveis.

Portanto, a dica que fica para os futuros empreendedores é: não amarre o seu “core business” à internet fechada.

Integre sua aplicação com o Facebook, Twitter, etc. sem problemas. Mas faça isso de um modo onde seja possível trabalhar também de forma desacoplada: na internet aberta.

The post Negócios na “internet fechada” appeared first on osantana.

por Osvaldo Santana em 27 de June de 2014 às 02:01

June 26, 2014

Filipe Saraiva

Seminário na UNICAMP: “Tecnologias livres para o futuro”

Amanhã teremos um seminário legal reunindo uma galera legal discutindo um tema legal e espinhoso.

Quem não puder ir na Unicamp, vai ter transmissão via stream.

Esperamos vocês heim!

Tecnologias livres para o futuro

Depois de anos de lutas e sucessos, as tecnologias livres, especialmente o movimento software livre, vivem um momento singular. Em paralelo à crescente adoção por pessoas, governos, empresas e coletivos, surge um sentimento de que o próprio movimento está morrendo, diluído em estratégias corporativas, utopias sobre a comunicação em rede, dispositivos móveis e novas travas tecnológicas. A proposta desse debate é reunir pesquisadores interessados em aspectos técnicos, sociais, políticos, comportamentais e produtivos das tecnologias livres e, a partir de investigações sobre a história, as ideias e prática dessas tecnologias, buscar traçar questões e princípios que orientem reflexões sobre cenários futuros. Por que caminhos os movimentos em torno de tecnologias livres devem orientar suas lutas cotidianas de modo a fortalecer a igualdade de oportunidades, a colaboração e a justiça que fundamentam esses movimentos? A estrutura do evento privilegiará a conversa e a livre troca de ideias, com falas curtas de alguns participantes seguidas de um debate aberto.

Local: Labjor – Unicamp

Horário: das 10h às 13h e das 14h às 17h

Manhã

Rafael Evangelista: As ideologias free e open: a questão da igualdade

Miguel Said Vieira: Governança, estratégias e conflitos de interesse

A apresentação tratará de questões ligadas a governança e conflitos de interesse (entre empresas e usuários caseiros) em dois casos de software livre: o Android (e sua relação com as estratégias comerciais da Google); e os patches “ck” do kernel.

Filipe Saraiva: Software Livre – Tensões entre Movimento e Mercado

Discussão sobre as contradições de um movimento apropriado tanto por coletivos de ativistas sociais quanto por grandes empresas. A exposição se baseará principalmente na ideia da diluição de alguns aspectos ideológicos do movimento com o crescente número de usuários de software livre, e a relação entre empresas e software livre. Em seguida serão comentados alguns desafios do movimento, com foco principal na computação ubíqua.

Bruno Buys: O Movimento Software Livre no Brasil morreu? Que desafios se colocam no presente e o que podemos inferir para o futuro?

Tarde

Aracele Torres: Como a indústria do software adotou o padrão de código fechado

Uma breve história da indústria do software e como foi seu processo de inclusão no circuito de propriedade intelectual e o papel do Projeto GNU em se contrapor a isso. A ideia aqui seria discutir um pouco dessas tensões entre as demandas do mercado e as demandas sociais por acesso ao conhecimento.

Tiago Chagas Soares: Política e comunidade na emergência da Cibercultura

Um breve ensaio sobre algumas das proposições políticas e comunitárias presentes na emergência da Cibercultura. Como as noções de comunidade e autonomia individual na Cibercultura  entrelaçariam distintos vetores do pensamento político e cultural? – e como isso se manifestaria em conflitos intra e entre correntes ciberculturais? Neste debate, traremos à discussão o Forum Internacional de Software Livre (Fisl) como espaço a ilustrar esse panorama de pensamentos diversos, bem como seus componentes.

Fabrício Solagna: (vídeo) Movimento software livre, Propriedade Intelectual e direitos de internet

A exposição pretende trazer os conceitos de Kelty e Coleman sobre o movimento software livre global. Para analisar o caso brasileiro é usado Shaw e seu conceito de insurgent expertise relacionando a sua interface com a mobilização em torno do Marco Civil da Internet. O objetivo é discutir questões peculiares do Brasil onde a ascensão de quadros envolvidos com o movimento software livre dentro do Estado trazem uma nova agenda do software livre.

Vídeo

Essa atividade foi filmada e disponibilizada no Youtube. Houveram alguns problemas com a preparação da gravação e tal, mas dá pra acompanhar tranquilo e ficar por dentro do que rolou.

por Filipe Saraiva em 26 de June de 2014 às 19:37

June 25, 2014

Magnun Leno

UNIX System Signals em C

Sempre que desenvolvo programas, tento saber as regras básicas de cada sistema operacional. Os motivos? Bem, por dois simples motivos: Compatibilidade e Praticidade

C - The Programming Languagen

Compatibilidade porque esses programas, para serem considerados compatíveis, devem obedecer as regras e práticas do sistema operacional alvo. Essa compatibilidade também pode ser chamada de compliance. Praticidade porque muito do que o programador precisa já existe no sistema operacional. Nada de reinventar a roda!

UNIX System Signals em C é um artigo original de Mind Bending

por Fernando Almeida em 25 de June de 2014 às 18:51

June 24, 2014

Eric Hideki

flask

armin_ronacher_pythonistas_que_voce_devia_conhecer

Armin Ronacher é o responsável por criar o Flask, microframework web Python mais famoso, tendo features interessantes como integração para testes únicos, usa Jinja2 templates, base unicode, extensa documentação e ótima comunidade em volta. Nomeado membro da PSF em 2012 como forma de reconhecimento pelas suas colaborações na comunidade Python.

E hoje iremos falar um pouco sobre esse framework e a história e projetos do criador.

Armin é um dos fundadores do team Pocoo, um grupo de pessoas da comunidade Python que trabalham em diversos aplicações e bibliotecas Python, tais como: Flask, Jinja 2, Pygments, Sphinx, Werkzeug e outros.

Morando na Austria, trabalhando atualmente na Fireteam, empresa que trabalha em diversos campos na plataforma de jogos.

Uma das coisas que mais perguntam seria qual a diferença entre o Flask e o Bottle, ambos microframeworks web Python, e uma das melhores respostas foi a que ele disse no Stackoverflow:

A grande diferença é que Flask é baseado em outras tecnologias como Werkzeug e Jinja2 que existem há um bom tempo e tentam não reinventar as coisas. Bottle está em outra vertente tentando manter a ideia de manter apenas um arquivo padrão. Eu quero me juntar a eles mas desenvolvedores Bottle não estão muito felizes com a ideia de abandonar a ideologia de um arquivo apenas.

Em relação a flexibilidade: Não há razões para que não seja permitido usar Flask com outras engines de template se isso que precisa. Na verdade, coisas como Flask-Genshi existem: Flask-Genshi e é incrivelmente fácil usar mako com isso, ainda que seja sem a extensão que você quer.

Aviso: Sou o desenvolvedor do Flask, Werkzeug e Jinja2

Tradução livre minha.

 


jinja2

Jinja2 é uma engine de template baseada nos princípios do Django template, porém com mais funcionalidades e mais flexíveis implementações. O Jinja2 é um dos motivos de muitas pessoas gostarem do Flask, permitindo misturar código junto com HTML, tornando as coisas mais simples. Sendo usado em projetos como o Mozilla, Sourceforge, Instagram e outros.

Veja sua simplicidade:

{% extends “layout.html” %}
{% block body %}
<ul>
<ul>{% for user in users %}
<li><a href=”{{ user.url }}”>{{ user.username }}</a></li>
</ul>
</ul>
{% endfor %}

{% endblock %}

{% block title %}{% endblock %}
<ul>
<ul>{% for user in users %}
<li><a href=”{{ user.url }}”>{{ user.username }}</a></li>
</ul>
</ul>
{% endfor %}


werkzeug

Werkzeug é um conjunto de ferramentas para aplicações WSGI. Ele permite as interações entre requisito e resposta de objetos, utilidade de funções e permite criar uma customização de um framework por cima. Trabalhar com ele também é super simples:

from werkzeug.wrappers import Request, Response

@Request.application
def application(request):
return Response('Hello World!')

if __name__ == ‘__main__’:
from werkzeug.serving import run_simple
run_simple(‘localhost’, 4000, application)

Exemplo tirado da documentação do Werkzeug


flask

E temos também o Flask, que é baseado no Werkzeug, Jinja2 e boas intenções. Muitas das pessoas que converso que gostam de Python pra desenvolvimento web, dizem que sentem um enorme prazer em desenvolver com Flask, sua flexibilidade e ferramentas poderosas o tornam bem interessante, não é a toa que tenho 2 artigos elogiando o mesmo, um com o Bruno Rocha falando sobre suas aplicações e outro com links de fontes de estudo.

Eu que sou uma pessoa azarada que nunca funciona meus experimentos de primeira, consegui sem pestanejar logo na primeira testar o Flask, seu código é facílimo de aplicar:

from flask import Flask
app = Flask(__name__)

@app.route(“/”)
def hello():
return “Hello World!”

if __name__ == “__main__”:
app.run()

Exemplo tirado da documentação do Flask

Com apenas um arquivo é possível criar um “Hello World”, e podemos subir essa aplicação sem problemas no servidor. E olha que mais bacana ainda, com apenas dois comandos já conseguimos fazer o download e rodar. Claro que antes é necessário que tenha instalado o pip, gerenciador de pacotes do Python.

pip install Flask
python hello.py
* Running on http://localhost:5000/

Exemplo tirado da documentação do Flask

Muito mais do que falar da pessoa, falar do seus projetos nesse ponto acredito ser o mais importante, muito desses projetos dizem muito sobre o Armin, coisas simples, funcionais, extensíveis, coisas que vem do zen do Python, do Tim Peters.

Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Linear é melhor do que aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o bastante para quebrar as regras.
Ainda que praticidade vença a pureza.
Erros nunca devem passar silenciosamente.
A menos que sejam explicitamente silenciados.
Diante da ambigüidade, recuse a tentação de adivinhar.
Deveria haver um — e preferencialmente só um — modo óbvio para fazer algo.
Embora esse modo possa não ser óbvio a princípio a menos que você seja holandês.
Agora é melhor que nunca.
Embora nunca freqüentemente seja melhor que *já*.
Se a implementação é difícil de explicar, é uma má idéia.
Se a implementação é fácil de explicar, pode ser uma boa idéia.
Namespaces são uma grande idéia — vamos ter mais dessas!


 

Deixo também outras fontes de estudos que encontrei esses dias, além dos vídeos e fontes do Armin.


 

http://pythonclub.com.br/what-the-flask-pt-2-flask-patterns-boas-praticas-na-estrutura-de-aplicacoes-flask.html

http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world


por Eric Hideki em 24 de June de 2014 às 16:19

June 23, 2014

Eric Hideki

blogs_que_me_inspuram_dev_kico

Um mundo a parte de Python, temos o Java, e uma de suas variações que é o Grails, um framework para criação de aplicações web. Acontece que muita gente não conhece e não sabe direito sobre ele, por isso convido o Kico para falar um pouco a respeito e principalmente sobre seus artigos sobre o mercado de desenvolvimento.

Kico, nos fale um pouco sobre você

Minha vida é desenvolvimento de sistemas: minha primeira experiência foi quando tinha uns 6 anos de idade e topei com o BASIC num computador chamado TK-85. Eu digitava os jogos cujo código fonte vinha impresso em livros e revistas, os modificava e me divertia horrores com isto. Passado algum tempo veio o MSX, que também tinha um interpretador BASIC, e de novo a mesma coisa. Não seria exagero dizer que esta experiência foi a origem da minha maior paixão na vida que é a programação/arquitetura/desenvolvimento/o nome que vocês quiserem que envolva criar sistemas. :)

Minha formação acadêmica já é fora dos moldes tradicionais para quem trabalha com desenvolvimento: meu primeiro curso (que quase terminei) foi Filosofia na UFMG. Foi a experiência mais enriquecedora da minha vida, pois foi quando *realmente* aprendi a ler, questionar, entrei em contato com os autores que moldaram minha vida de lá pra cá. O problema é que a paixão sempre foi desenvolvimento e, como todos da minha família trabalham com artes plásticas, me sentia extremamente desconfortável comigo mesmo. Não dava pra fugir: então eu fundei a itexto, que começou como um site de mesmo nome aonde as pessoas postavam seus textos em 1999 e depois passou a lidar apenas com desenvolvimento de sistemas (inicialmente focando no mercado livreiro).

Saindo da Filosofia fui para a Matemática Computacional na mesma universidade, mas acabei terminando o curso como Ciência da Computação aqui na FUMEC. No meio deste caminho acadêmico um monte de coisas ocorreram: tive a oportunidade de trabalhar nas empresas que quis, paralelamente desenvolvi diversos projetos pessoais, comecei a escrever artigos para revistas, publiquei um livro sobre Spring (agora estou terminando um sobre Groovy e Grails), criei e ajudei comunidades de desenvolvimento, dentre as quais a mais ligada ao meu nome é o Grails Brasil, houve também o meu blog, /dev/Kico, que começou como algo simples mas com o passar do tempo veio a crescer ordens de magnitude mais do que eu esperava.

E hoje atuo como consultor, escrevendo mais do que posso, entrando em algumas aventuras e me divertindo muito com tudo isto. :)

blogs_que_me_inspuram_dev_kico

O que é Grails? Quais são suas aplicações? E sua comunidade aqui no Brasil?

Grails é um framework para desenvolvimento web voltado para a plataforma Java EE. É baseado na linguagem Groovy. Já o vi sendo aplicado nas consultorias que dou nas mais variadas situações: desde sistemas para controle de documentos, mineração, telecomunicações, comércio eletrônico, automação, gestão de conteúdo, etc.

Sua comunidade no Brasil é bastante forte: fundei o Grails Brasil em 2008 pois não havia com quem conversar a respeito sobre o assunto. Na primeira semana havia 50 membros cadastrados, a maior parte aqui de Belo Horizonte. De lá pra cá a comunidade não parou de crescer: hoje contamos com quase 2000 membros e possivelmente é o maior grupo de usuários do mundo dedicado ao uso desta tecnologia.

Quais são as principais vantagens que o Java/Grails tem em relação as outras tecnologias?

A principal vantagem do Grails é o fato de ser baseado em Groovy, que é uma linguagem de programação bastante interessante voltada para a JVM. Basicamente tudo o que não gostamos em Java, Groovy resolve para nós. Isto com a vantagem de possuir uma sintaxe próxima da do Java, o que facilita bastante a sua adoção por empresas. Um grande problema que Groovy tinha era a performance, mas com o passar do tempo este problema está sendo superado a cada novo release da linguagem.

Apesar de ser parecida com Java, as diferenças do Groovy em relação ao Java são um excelente atrativo para programadores vindos de outras plataformas. O que ocorre: a plataforma Java EE é excelente, é indiscutível que se trata de uma das melhores plataformas já criadas para o desenvolvimento de aplicações corporativas. O problema é que nem sempre esta é amigável para quem está começando: dado que Groovy é dinâmico e possuí uma sintaxe mais interessante que a do Java em diversos aspectos, os desenvolvedores do Grails tiraram proveito destas características e, com isto, deram uma “cara Groovy” ao Java EE, tornando-o muito mais acessível e produtivo. Na minha opinião Grails acabou com o tédio que era programar na plataforma Java EE (http://www.itexto.net/devkico/?p=224).

Outra vantagem do Grails é que ele não reinventa a roda: é baseado em uma série de tecnologias que sabemos que funcionam bem como, por exemplo, Spring, Hibernate, Sitemesh, toda a API Java EE e muitas outras. Com isto temos uma plataforma de desenvolvimento que, apesar de mostrar uma maneira nova de usar estas APIs, mantém uma base sólida, nos permitindo criar com menos esforço sistemas extremamente escaláveis, estáveis e fáceis de manter.

O que Grails trouxe para o Java EE foi aquilo que víamos no Ruby on Rails: um ambiente de desenvolvimento extremamente produtivo, sem firulas, direto ao ponto e que nos permitia entregar com maior facilidade. Junte tudo isto aos pontos fortes do Java EE (estabilidade, escalabilidade, confiança, riqueza de recursos) e você tem uma ultra plataforma para criação de sistemas web/corporativos/integrações/etc. Aliás, escrevi sobre os ganhos sociais que Groovy e Grails nos trouxeram neste post: http://www.itexto.net/devkico/?p=1632

E o blog Itexto? De onde surgiu a inspiração e a necessidade de compartilhar seus conhecimentos?

Na realidade itexto é o nome da minha empresa: o nome do blog é /dev/Kico. As pessoas costumam confundir o nome por causa do endereço (http://devkico.itexto.com.br ou http://www.itexto.net/devkico). Ele surgiu inicialmente como um bloco de notas no qual escrevia aquelas perguntas que precisava responder com frequencia aos meus colegas de trabalho e clientes, além de também conter algumas das soluções que eu aplicava em mais de um projeto.

Com o passar do tempo acabei escrevendo menos sobre programação e mais sobre coisas que observo no mercado de trabalho (mas já aviso que vêm aí uma longa série de posts técnicos em breve!). Sinceramente não sei o que me leva a escrever: há estes momentos em que sento em frente ao computador e do nada saí um texto baseado em alguma questão que me atormenta naquele momento. Muitas vezes eu sei que estou errado naquilo que estou escrevendo, mas como sei que alguém irá comentar e discordar de mim (prefiro quando discordam), acaba sendo uma oportunidade que aproveito para entender melhor os assuntos sobre os quais trato.

É engraçado que o número de acessos ao blog tem crescido bastante, há inclusive uma versão em inglês dele (http://devkico.itexto.com.br/en) cujos posts tem sido bastante citados em sites como HackerNews, The Server Side, DZone e muitos outros. No entanto meu foco é Brasil: quando escrevo algo na versão em inglês é mais para obter um feedback de pessoas que moram fora do país.

Uma grande motivação para escrever é a percepção que tenho de que a maior parte dos desenvolvedores se foca tanto no técnico e dão tanta atenção ao imediato, ao hype (http://www.itexto.net/devkico/?p=1148) que se esquecem de fazer as perguntas fundamentais: por que isto é interessante? O que é isto? Qual o valor deste negócio? Gosto de cutucar estes pontos, e se puder no processo desmascarar visões que naquele momento (posso estar errado) se mostram completamente equivocadas (ou mesmo mal intencionadas), ponto pra mim.

Outro dia vi um tweet do Tiago Peczenyj sobre mim que confesso me deixou extremamente feliz: “eu sempre imagino o @loboweissmann com as mãos doendo, sangrando de tanto dar porrada nas nossas falsas ideias”.

Esta e a maior motivação. :)

Um dos artigos que gostei muito foi sobre o programador invisível, no qual você comenta sobre as tecnologias que são subjugadas pela grande maioria, tais como Cobol por exemplo?

A questão é: qual maioria? Se uso a palavra maioria, o faço dentro de um contexto. Se o contexto for as pessoas que vemos nas redes sociais falando sobre desenvolvimento e eventos relacionados, é uma coisa: outra totalmente diferente é o contexto no qual pego TODOS os desenvolvedores.

Dentro deste contexto, que é o que falo no post, esta “maioria” se mostra minoria. Este é o grande ponto na minha opinião: e o grande problema que vejo é o fato de que, ao nos focarmos no que esta real minoria fala, acabamos por reinventar a roda repetidas vezes, ignoramos um conhecimento enorme que o pessoal adquiriu no decorrer do tempo, e terminamos chamando de novidade o que pra maioria é cotídiano por décadas.

Este foi um post pra acordar o pessoal: muitas vezes nós acreditamos que o sujeito que tá nos mostrando a novidade da vez sabe de tudo e está nos vendendo algo realmente novo quando, na realidade estamos nos deparando com a mesma coisa de novo. A intenção deste post era mostrar o óbvio: o rei estava nu.

Na sua visão, como está o mercado de desenvolvimento web hoje? Isso em relação a qualidade das aplicações que estão sendo feitas e os salários dos desenvolvedores.

Um grande problema na minha opinião é o hype envolvendo novas tecnologias que, muitas vezes, nos faz esquecer de fazer questionamentos básicos. Vou dar um exemplo recente: Node.js. Inicialmente a idéia é bacana: Javascript do lado servidor. Legal: vou usar a mesma linguagem tanto no front quanto no backend. Mas não vejo muitos fazerem as perguntas importantes: será que meu desenvolvedor de frontend está capacitado para lidar com o backend? Será que ver meu mundo como um prego e minha única ferramenta o martelo uma boa opção? Será que aquilo que já sabemos há tempos, de que devemos usar a ferramenta certa pra situação certa caiu em desuso?

(não estou dizendo que Node.js seja ruim: apenas me preocupo com a ausência destes questionamentos)

As pessoas não se questionam: elas usam e pronto. Vou dar outro exemplo: em uma palestra que fui sobre Scala fiz o seguinte questionamento ao palestrante: “por que minha equipe que já está acostumada com Java deve adotar esta linguagem?”. Resposta que obtive: 30 segundos de constrangedor silêncio.

As perguntas fundamentais não são feitas. Este é o maior problema que vejo. Se você não as faz, surgem idéias como a de que você deve pagar o menor salário possível pois todo programador é igual, que você sempre deve pegar a tecnologia que acabou de sair por que é a melhor, este tipo de coisa.

Com relação aos salários: óbviamente a idéia por trás da empresa é maximizar seus lucros, sendo assim é natural que haja a tentativa de se minimizar os custos. Uma das formas é reduzindo o salário do desenvolvedor. Isto é uma boa? Não estaríamos desmotivando boas cabeças a entrarem na área? É muito raro eu presenciar por parte dos empresários um questionamento mais profundo a respeito destas questões. Normlamente o foco é baixar o salário pra maximizar o lucro. E depois não entendem por que o projeto atrasa, por que há tantos bugs, etc.

E há outro problema que ainda é tabu no Brasil e que me assusta bastante: as más condições de trabalho e a ocorrência frequente do fenômeno do assédio moral. No Brasil sou uma das únicas pessoas que escreveu publicamente sobre isto (http://www.itexto.net/devkico/?cat=63). O assunto ainda é um tabu. Quando tornei público meu TCC sobre o assunto (http://www.itexto.net/devkico/?p=1385) me foi dito que eu jamais conseguiria outro emprego. Acredito que isto ilustre bem a situação.

Agora, sinceramente? Acredito que o salário quem faz não é o mercado, mas o indivíduo. Se você se esforça, corre atrás de verdade, é honesto e sabe o que está fazendo uma hora ou outra dá certo.

E o que você acha sobre Python?

Meu conhecimento de Python é bastante limitado. Eu a uso no trabalho atual para escrever simuladores de alguns equipamentos com os quais preciso interagir e no passado usei o Jython no WebLogic. Tirando isto, brinquei um pouco com um framework chamado Flask, que achei MUITO interessante, mas apenas isto.

Me pareceu um ambiente de desenvolvimento bem interessante, mas nunca usei com grande intensidade pra poder falar com segurança.

Para finalizar gostaria que você comentasse de um post seu falando sobre piratear livros e materiais de desenvolvimento. Por que há ainda essa prática que é tão prejudicial para o crescimento de materiais de qualidade no mercado?

Por que é fácil e o pirata não tem consciência do trabalho que dá gerar este material.
Por que não há respeito algum pelo autor.
Por que não há visão de médio e longo prazo: pagar pelo material é investir. Você está fornecendo ao autor meios para que melhore aquele trabalho.

Aliás, é engraçado: as pessoas dizem com facilidade que algo é caro, mas com dificuldade extrema justificam esta afirmação, já reparou isto? Já tive um diálogo assim uma vez:
Seu livro de Spring que custa R$ 29,90 é caro.
Mesmo, por que?
Por que sim.

Quem pirateia simplesmente não sabe o que significa a palavra valor. Esta é a verdade.


por Eric Hideki em 23 de June de 2014 às 12:12

June 19, 2014

Filipe Saraiva

KDE passando o chapéu para realização do Randa Meeting 2014

Desde 2009 o KDE reúne durante alguns dias diversos desenvolvedores na cidade suíça de Randa para trabalharem em projetos chave da comunidade. Esses sprints já resultaram em importantes avanços para os usuários das tecnologias desenvolvidas pelo KDE, como o KDE Frameworks 5, o Plasma Next, melhorias no Qt, diversos softwares do KDE Edu, e mais.

Em 2014 haverá uma nova edição desse encontro, o Randa Meeting 2014, e a comunidade iniciou uma campanha de arrecadação para custear essa atividade.

Visite a página da campanha ou a versão que o KDE Brasil traduziu e saiba mais sobre os projetos desenvolvidos nas edições anteriores, quais os planos para a edição de 2014, quem deverá participar, quais os tipos de despesas, e mais.

Eu já fiz minha contribuição, agora é com você – seja usuário, desenvolvedor, ou simpatizante do KDE ou das comunidades e ideias do software livre em geral, contribua! Toda ajuda é bem-vinda.

por Filipe Saraiva em 19 de June de 2014 às 15:26

Bruno Cezar Rocha

Watching a directory for file changes with Python

requirement

Watch changes in a ftp folder, whenever a new xml file is created, or when an existing file is modified this needs to be parsed and its contents inserted in the database.

tools

  • Python 2..7
  • watchdog

Install from pip

pip install watchdog

Watchdog is a Python API library and shell utilities to monitor file system events.

How to

First create the monitoring script, it will run daemonized and will observe any changes to the given directory. In that script 3 modules/classes will be used

  • time from Python will be used to sleep the main loop
  • watchdog.observers.Observer is the class that will watch for any change, and then dispatch the event to specified the handler.
  • watchdog.events.PatterMatchingHandler is the class that will take the event dispatched by the observer and perform some action

watchforchanges.py

import time  
from watchdog.observers import Observer  
from watchdog.events import PatternMatchingEventHandler  

PatternMatchingEventHandler inherits from FileSystemEventHandler and exposes some usefull methods:

Events are: modified, created, deleted, moved

  • onanyevent: if defined, will be executed for any event
  • on_created: Executed when a file or a directory is created
  • on_modified: Executed when a file is modified or a directory renamed
  • on_moved: Executed when a file or directory is moved
  • on_deleted: Executed when a file or directory is deleted.

Each one of those methods receives the event object as first parameter, and the event object has 3 attributes.

  • event_type
    'modified' | 'created' | 'moved' | 'deleted'
  • is_directory
    True | False
  • src_path
    path/to/observed/file

So to create a handler just inherit from one of the existing handlers, for this example PatternMatchingEventHandler will be used to match only xml files.

To simplify I will enclose the file processor in just one method, and I will implement method only for onmodified and oncreated, which means that my handler will ignore any other events.

Also defining the patterns attribute to watch only for files with xml or lxml extensions.

 class MyHandler(PatternMatchingEventHandler):
    patterns = ["*.xml", "*.lxml"]

    def process(self, event):
        """
        event.event_type 
            'modified' | 'created' | 'moved' | 'deleted'
        event.is_directory
            True | False
        event.src_path
            path/to/observed/file
        """
        # the file will be processed there
        print event.src_path, event.event_type  # print now only for degug

    def on_modified(self, event):
        self.process(event)

    def on_created(self, event):
        self.process(event)

With the above handler only creation and modification will be watched now the Obserser needs to be scheduled.

if __name__ == '__main__':
    args = sys.argv[1:]
    observer = Observer()
    observer.schedule(MyHandler(), path=args[0] if args else '.')
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()

You can set the named-argument "recursive" to True for observer.schedule. if you want to watch for files in subfolders.

That's all needed to watch for modifications on the given directory, it will take the current directory as default or the path given as first parameter.

python watch_for_changes.py /path/to/directory

let it run in a shell and open another one or the file browser to change or create new .xml files in the /path/to/directory.

echo "testing" > /tmp/test.xml 

Since the handler is printing the results, the outrput should be:

rochacbruno@~/$ python watch_for_changes.py /tmp
/tmp/test.xml created
/tmp/test.xml modified

Now to complete the script only need to implement in the process method, the necessary logic to parse and insert to database.

For example, if the xml file contains some data about current track on a web radio:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> 
 <Pulsar>
  <OnAir>
     <media_type>default</media_type> 
     <media>
        <title1>JOVEM PAN FM</title1> 
        <title2>100,9MHz</title2> 
        <title3>A maior rede de radio do Brasil</title3> 
        <title4>00:00:00</title4> 
        <media_id1>#ID_Title#</media_id1> 
        <media_id2>#ID_SubTitle#</media_id2> 
        <media_id3>#ID_Album#</media_id3> 
        <hour>2013-12-07 11:44:32</hour> 
        <length>#Duration#</length> 
        <ISRC>#Code#</ISRC> 
    <id_singer>#ID_Singer#</id_singer>
    <id_song>#ID_Song#</id_song>
    <id_album>#ID_Album#</id_album>
    <id_jpg>#Jpg#</id_jpg>
     </media>
  </OnAir>
</Pulsar>

The easiest way to parse this small xml is using xmltodict library.

pip install xmltodict

With xmltodict.parse function the above xml will be outputed as an OrderedDict

OrderedDict([(u'Pulsar',
    OrderedDict([(u'OnAir',
        OrderedDict([(u'media_type', u'default'),
        (u'media', 
            OrderedDict([(u'title1', u'JOVEM PAN FM'),
                         (u'title2', u'100,9MHz'),
                         (u'title3', u'A maior rede de radio do Brasil'),
                         (u'title4', u'00:00:00'),
                         (u'media_id1', u'#ID_Title#'),
                         (u'media_id2', u'#ID_SubTitle#'),
                         (u'media_id3', u'#ID_Album#'),
                         (u'hour', u'2013-12-07 11:44:32'),
                         (u'length', u'#Duration#'),
                         (u'ISRC', u'#Code#'),
                         (u'id_singer', u'#ID_Singer#'),
                         (u'id_song', u'#ID_Song#'),
                         (u'id_album', u'#ID_Album#'),
                         (u'id_jpg', u'#Jpg#')]))]))]))])

Now we can just access that dict to create the registry on filesystem or something else. Notice that I will use a lot of get method of dict type to avoid KeyErrors.

with open(event.src_path, 'r') as xml_source:
    xml_string = xml_source.read()
    parsed = xmltodict.parse(xml_string)
    element = parsed.get('Pulsar', {}).get('OnAir', {}).get('media')
    if not element:
        return
    print dict(element)

ant the output will be:

{u'hour': u'2013-12-07 11:44:32',
 u'title2': u'100,9MHz',
 u'id_album': u'#ID_Album#',
 u'title1': u'JOVEM PAN FM',
 u'length': u'#Duration#',
 u'title3': u'A maior rede de radio do Brasil',
 u'title4': u'00:00:00',
 u'ISRC': u'#Code#',
 u'id_song': u'#ID_Song#',
 u'media_id2': u'#ID_SubTitle#',
 u'media_id1': u'#ID_Title#',
 u'id_jpg': u'#Jpg#',
 u'media_id3': u'#ID_Album#',
 u'id_singer': u'#ID_Singer#'}

Much better than XPATH, and for this particular case when the xml_source is small there will no relevant performace issue.

Now only need to get the values and populate the database, in my case I will use Redis DataModel as storage.

also I will use magicdate module to automagically convert the date format to datetime object.

import sys
import time
import xmltodict
import magicdate
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler

from .models import Media


class MyHandler(PatternMatchingEventHandler):
    patterns=["*.xml"]

    def process(self, event):
        """
        event.event_type
            'modified' | 'created' | 'moved' | 'deleted'
        event.is_directory
            True | False
        event.src_path
            path/to/observed/file
        """

        with open(event.src_path, 'r') as xml_source:
            xml_string = xml_source.read()
            parsed = xmltodict.parse(xml_string)
            element = parsed.get('Pulsar', {}).get('OnAir', {}).get('media')
            if not element:
                return

            media = Media(
                title=element.get('title1'),
                description=element.get('title3'),
                media_id=element.get('media_id1'),
                hour=magicdate(element.get('hour')),
                length=element.get('title4')
            )
            media.save()

    def on_modified(self, event):
        self.process(event)

    def on_created(self, event):
        self.process(event)


if __name__ == '__main__':
    args = sys.argv[1:]
    observer = Observer()
    observer.schedule(MyHandler(), path=args[0] if args else '.')
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()

That is my usecase, but the example can be used for any kind of requirement.

Another useful module is Workflow by Massimo Di Pierro that creates workflows based on rules defined in a config file.

por Bruno Rocha em 19 de June de 2014 às 03:13

June 18, 2014

Henrique Bastos

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

por henrique em 18 de June de 2014 às 01:56

June 17, 2014

Eric Hideki

Google_app_engine

Hoje converso com o Valdir Stumm Júnior, responsável pelo blog Python Help, blog repleto de tutoriais de alta qualidade sobre Python, abordando assuntos como as características e mágicas da linguagem, além de como trabalhar com web com o Google App Engine.

Valdir, fale um pouco de ti.

Sou professor da área de programação no Instituto Federal Catarinense, em Blumenau. Conheci Python em 2005 em um projeto de uma disciplina na graduação, mas comecei a utilizar de forma mais intensiva em 2007, quando fui desenvolver o meu trabalho de graduação, que se tratava de uma extensão para o Plone. Depois disso, também utilizei Python no mestrado. Daí para diante, passei a usar Python em sala de aula e no desenvolvimento de projetos.

Qual foi a inspiração para criar o blog?

Criei o blog porque eu percebi que era preciso criar um mecanismo para que os meus alunos pudessem aprender conceitos além daqueles vistos em sala de aula, cujo tempo era restrito. Além de poder publicar artigos relacionados às dúvidas que surgiam em sala e fora dela, o blog também tornou possível a publicação de materiais envolvendo novos conceitos e tecnologias, para que os alunos pudessem avançar além daquilo que foi visto na disciplina.

De onde são feitos os estudos para criar seus artigos?

Em geral, os textos surgem de dúvidas ou coisas interessantes que encontro quando estou escrevendo código Python. As fontes de consulta que mais uso para resolver minhas dúvidas são: a documentação oficial, respostas do StackOverflow.com, e os livros Learning Python e Python in a Nutshell.

E quais são suas inspirações para poder compartilhar seus conhecimentos sobre Python?

Uma das coisas que mais gosto de fazer é escrever. No meu dia a dia, fico sempre em alerta sobre algo que poderia render um post no blog. Às vezes, a ideia vem de um módulo que acabei de aprender a utilizar. Nesse caso, escrever um texto me ajuda a firmar o que aprendi, e também a estudar o assunto com mais atenção. Em outros casos, a ideia surge ao revisitar determinado problema. Tendo aprendido outras linguagens antes, dá para perceber que o modo de pensar muda depois de começar a programar em Python. Assim, percebo que algumas coisas simples em Python podem não ser tão triviais para quem está começando com a linguagem, mesmo que já tenha experiência com programação em outras linguagens. E é sobre esse tipo de coisa que gosto de escrever.

Por que Python?

Porque é simples o suficiente para que o iniciante não se confunda e para que o experiente não se entedie. Porque é consistente, característica que é primordial para que o iniciante consiga absorver bem os conceitos. Porque tem uma stdlib gigantesca, que é complementada pela enorme quantidade de bibliotecas e frameworks que a comunidade fornece. Porque tem um REPL, que permite ao iniciante experimentar a linguagem e aprender de forma interativa. Porque tem uma comunidade engajada, com material novo surgindo a cada dia, com diversas fontes para busca de ajuda. E também porque tem o IPython, o IPython Notebook e o Dreampie que quebram um galhão no dia a dia de quem está desenvolvendo.

O que acha de programar com o Google App Engine?

Eu acho muito legal esse negócio de programar para a web sem se preocupar muito com a infraestrutura que vai dar suporte. O App Engine é perfeito para quem está começando, pois permite desenvolver e já publicar o app de uma forma muito simples, bastando ter uma conta Google. Com ele, podemos deixar para lá aquela chatice de instalar e configurar um servidor especialmente para publicar um aplicativo.

Uma das coisas que sempre quis fazer e você já tem feito é abordar diversas features da linguagem, seja as bibliotecas embutidas como datetime, e além de outros externos, criando tutoriais e dicas a respeito. Quais são as principais vantagens para quem não conhece?

A biblioteca padrão do Python é repleta de ferramentas úteis. O pessoal costuma dizer que Python “vem com as pilhas inclusas”, isto é, tudo o que você precisar para resolver o seu problema já está incluso quando você instala o interpretador. Então, conhecer bem a biblioteca padrão significa ter um caixa de ferramentas muito maior na hora de resolver um problema. Porém, não é só na stdlib que tem ferramentas boas. Pelo contrário, existe uma enorme quantidade de bibliotecas de terceiros que são, às vezes, até melhores que as disponíveis na biblioteca padrão. Acho que o melhor exemplo disso é a requests (http://docs.python-requests.org/en/latest/), que é uma lib para trabalhar com HTTP que é, na minha opinião, muito melhor do que a correspondente na stdlib, a urllib2.

O que o blog te trouxe de interessante?

O blog me estimulou a estudar mais a fundo vários assuntos. Afinal, antes de escrever um artigo sobre um tema qualquer, é imprescindível dar uma boa estudada nele, para não cometer gafes. Além da parte técnica, acho que treinar a escrita e a comunicação com outras pessoas é muito importante. Como professor, é essencial que eu consiga me expressar da forma mais clara possível, e acho que escrever me ajuda a melhorar não somente a escrita, mas também o discurso.

Deixe suas considerações sobre dicas para quem deseja aprender Python?

Acho que a principal dica é: organize seus estudos. Existem muitos materiais de excelente qualidade na web, mas é fácil se perder nessa imensidão de conteúdo. Para quem está começando a programar, sugiro que estude através de cursos online, como por exemplo o Python para Zumbis, pois eles já são cuidadosamente planejados para que o iniciante veja os assuntos de forma gradual, fazendo atividades práticas com feedback imediato, firmando o conteúdo que foi recém visto. Entretanto, a melhor forma de aprender Python é programando muito. Pratique; fazendo projetinhos para resolver problemas do seu dia a dia (mesmo que já existam programas com a mesma finalidade) e resolvendo problemas que exercitem a sua lógica de programação. Existem vários recursos que podem servir como guias nesse processo, como os sites codingbat.com e projecteuler.net. Outro recurso bem interessante, que conheci há pouco, é o projeto Python Koans (github.com/gregmalcolm/python_koans) que é um tutorial interativo em que o sujeito aprende com uma abordagem incremental baseada em testes. Enfim, recursos existem aos montes, basta escolher algum e praticar muito.


por Eric Hideki em 17 de June de 2014 às 15:32

June 16, 2014

Magnun Leno

Registradores no VIM

Esses dias surgiu uma pergunta do Arthur na lista de discussão de usuários de VIM do Brasil sobre "realizar deleções sem sobrescrever o texto já copiado". Parece uma coisa boba para quem vem de outros editores, mas tudo no VIM é extremamente profundo, se você se dedicar a explorar uma pequena funcionalidade você pode perder o dia todo e não ter lido/entendido tudo sobre o assunto.

VIM Rocks

"E por quê perder tanto tempo entendendo uma funcionalidade do VIM pode ser útil? Não basta apenas saber o básico e seguir adiante?" Não, não basta. Simplesmente porque o VIM é como um monstro de LEGO e se você entender melhor uma pequena peça, você vai ver que pode usar essa peça combinada com centenas de outras, e assim ter um fluxo de trabalho extremamente otimizado.

Registradores no VIM é um artigo original de Mind Bending

por Magnun em 16 de June de 2014 às 19:30

Eric Hideki

Python_Cookbook_resenha

Uma das maiores vantagens da linguagem são as suas bibliotecas embutidas, as famosas ‘baterias inclusas’, no qual oferecem diversas facilidades ao resolver problemas diários enquanto desenvolvemos uma aplicação. E o Python Cookbook veio com uma injeção enorme de diversas bibliotecas que a grande maioria não conhece. Desde o iniciante que está programando a pouco tempo com Python, ou veio de outra linguagem, até o mais experiente programador o livro é indicado.

Python_Cookbook_resenha

Python Cookbook veio com diversos intuitos na verdade, seja para apresentar as novidades que a versão 3 do Python vem agregar, demonstrar como desenvolver soluções pythonicas e elegantes, prover discussões sobre os motivos de escolher essa ou aquela forma de desenvolvimento, levar em consideração o desempenho e processamento que seu código pode ter se escolher a forma errada, e principalmente lhe poupar diversas dores de cabeça.

A comunidade Python esses dias andaram em diversas discussões sobre o futuro da linguagem. Atualmente temos 2 versões disponíveis: 2.x e 3.x. A grande maioria dos projetos atuais se encontram na versão 2.x, sendo a versão preferencial para criação de projetos em produção. Mas por que isso? Por que ainda permanecemos na versão 2.x se já existe uma versão nova e melhorada?

O grande problema que as pessoas enfrentam é no quesito das bibliotecas externas. Até algum tempo atrás grande parte delas não havia sido portada para a nova versão, e sinceramente ainda uma boa parte não foram portadas. E esse processo leva-se um tempo para arrumar, até porque muitas delas são bastante complexas.

E para que não tenha esses tipos de dores de cabeça, muitos dos programadores ainda não migraram para a 3.x. O framework Django tem suporte a versão 3.x, um dos frameworks senão o framework mais utilizado para criação de projetos web, porém ainda encontra algumas incompatibilidades. Mas a cada dia esse cenário está mudando.

Python 3.x vem com diversas melhorias em relação a performance, tratamento de unicodes, sintaxe mais simplificada e diversas outras. Sinceramente em apenas 2 horas de estudos é possível já criar projetos de pequeno/médio porte sem problemas, e IMO, SIM, todos devemos o mais breve possível nos atualizarmos e migrarmos a nova versão.

E com tudo isso dito, o que tem a ver com o livro? Python Cookbook é a porta de entrada para o ingresso nessas novas funcionalidades que a versão traz. Tratando de temas cotidianos como tratamento de strings e integers, arquivos, metaprogramaçao, concorrência, classes e objetos, processamento de dados e outros, e mostrar que é possível utilizar a nova versão sem grandes problemas.

Quem nunca se deparou com alguns desses problemas e levou certo tempo para descobrir como solucionar?

- Manter dicionários em ordem;
- Agrupar registros de acordo com um campo;
- Pesquisar e substituir textos;
- Remover caracteres indesejados de strings;
- Iterar ao contrário;
- Ler e escrever dados CSV;
- Ler e escrever dados JSON;
- Diversos outros.

Mas a questão não é apenas mostrar como resolver isto, é fazer de forma simples, concisa, performática e pythonica.

Este não é um livro para se ler do começo ao fim, é um livro de receitas, que a cada problema que surgir ir fazer uma consulta. Só não digo que é aquele tipo de livro de carregar no bolso porque ele é grande. Mas isso não é algo ruim, muito pelo contrário, a quantidade de informações são indispensáveis.

Uma das coisas mais bacanas é que cada tópico é recheado de exemplos práticos, aqueles que podemos utilizar sem problemas, é tudo sem enrolação. E melhor ainda, em cada um é explicado detalhadamente o porquê de tal escolha ser a mais indicada. Não é algo que a pessoa diz que é o certo e pronto, há em cada um uma seção de discussão. Isso é realmente importante e enriquece muito o conteúdo.

A tradução ficou ótima, respeitando os termos da linguagem, não inventando ou com rodeios. Infelizmente vemos muitos problemas nesse quesito principalmente com livros de tecnologia.

O bacana de tudo é que por tratar de diversos tópicos desde os básicos aos mais avançados, o público alvo do livro atinge praticamente qualquer pessoa que deseja se aprofundar mais sobre o que a linguagem tem a oferecer. Claro que se a pessoa não tem qualquer tipo de conhecimento de programação não irá usufruir, mas tendo o mínimo de conhecimento e já esteja trabalhando em algum projeto, com certeza o livro é um MUST HAVE.

Python se destaca principalmente em sua atuação na web, seja em empresas grandes como Google, Youtube, Disqus, Instagram e outros, mas o que enriquece ainda mais a tecnologia é a sua diversidade. Utilizamos bastante Python para processamento de dados, tratamento de imagens, aplicações desktop, criação de jogos, aplicações mobile, e muito forte em computação científica. Isso é fantástico pois sabendo o mínimo da linguagem você pode ter diversos campos de atuação, você não fica preso a um determinado campo. E principalmente, sabendo apenas Python você consegue abranger a todos, não é necessário um treinamento intensivo para criar e desenvolver.

E isso é uma das maravilhas da linguagem, além do suporte da comunidade e diversos cursos, livros e tutoriais disponíveis tanto em livros como na internet. Livros como o Python Cookbook vem para enriquecer ainda mais seus conhecimentos, sendo muito importante para aprender a desenvolver de forma certa e principalmente para que não haja problemas de performance. Com a velocidade e o crescimento das aplicações, uma hora ou outra nos deparamos com esses problemas, poupando o trabalho de refatoração de código já fazendo a coisa certa desde o começo.

Nos primeiros capítulos começamos com coisas básicas como estruturas de dados e algoritmos, strings e textos, e tratamento de números datas e horas. Apenas nesses 3 tópicos já são mostrados como importar bibliotecas certas para cada tipo de necessidade. Muitos programadores tem a ideia de que uma biblioteca tem diversas funções, isso é verdade em certo ponto, mas o que não sabem é que existem diversas variações, aplicações e resultados que cada uma apresenta.

Depois nos aprofundamos um pouco mais na questão de iteradores e geradores, arquivos e I/O, nesses capítulos são interessantes os detalhes dados no tratamento de unicodes por exemplo, como trabalhar facilmente com a manipulação de iteradores, seja na verificação de aquivos, lista de diretórios, criar arquivos e diretórios temporários e outros.

Temos também Codificação e processamento de dados, fundamentais quando trabalhamos com bancos de dados grandes. Funções, Classes e objetos, como definir funções com argumentos default ou senão funções de callback inline.

Ainda existem diversos outros tópicos importantes que contém o livro que vale a pena dar uma olhada. Fica a dica então de darem uma olhada e ver realmente quão poderosa a linguagem é e as facilidades que ela oferece.

Para mais informações, acesse - http://www.novateceditora.com.br/livros/python-cookbook/

Se deseja ver os capítulos que o livro aborda, acesse o sumário - http://www.novateceditora.com.br/livros/python-cookbook/sumario9788575223321.pdf

E também alguns dos exemplos que falei, a Novatec disponibiliza o primeiro capítulo gratuitamente para analisar a qualidade do material - http://www.novateceditora.com.br/livros/python-cookbook/capitulo9788575223321.pdf


por Eric Hideki em 16 de June de 2014 às 12:20

June 13, 2014

Magnun Leno

Hack ‘n’ Cast v0.2 - HTML & CSS

O HTML é co-responsável pela grande revolução que foi a internet. Junte-se a trupe do Hack 'n' Cast e descubra se isso é uma tecnologia, doença ou solução. E saiba porquê você deve usar um guarda-chuva ao escrever CSS.

Baixe o episódio e leia o shownotes

por Magnun em 13 de June de 2014 às 07:59

June 11, 2014

Eric Hideki

flask

flask

Um dos frameworks que anda surpreendendo as pessoas é o Flask, um micro-framework Python que é muito fácil de se aprender, extensões que resolvem a grande maioria das necessidades ao criar suas aplicações, excelente sua documentação e comunidade.

Juntando o útil ao agradável, deixo alguns links caso haja interesse e outros links para quando se cansar de ler sobre Flask.

Como começar a aprender a programar com Flask

O Bruno Rocha fez um artigo fantástico para o Pythonclub falando sobre como começar um projeto Flask de forma certa, com excelentes dicas e ótima didática. IMPERDÍVEL!

 Preparando o ambiente de desenvolvimento com Flask

RealPython é um excelente blog que explica passo – a – passo como começar a preparar seu ambiente de desenvolvimento, a forma de organizar os arquivos e fazer deploy.

Bônus: No blog já tem a segunda parte do tutorial ensinando a criar uma página de login, não perca.

Criando um tomador de notas em Flask

Já pensou que poderíamos criar uma aplicação personalizada para anotarmos as coisas importantes do dia a dia? Veja então como criar dinamicamente um tomador de notas.

Create a dynamic webpage with Twitter and Flask’s rendering engine, Jinja2

Aprendendo e Ensinando Python

Como colaborar na tradução do Djangobook sem conhecer programação

Diferenças entre Flask e Pyramid

Criando desenhos com Python

Por que usar Python para ensino de programação?

Bônus do bônus:  Livro gratuito de boas práticas e patterns para projetos Flask.

 


por Eric Hideki em 11 de June de 2014 às 00:03

June 07, 2014

Allison Azevedo

Allisson

Acabei de postar a versão 1.0.0 da biblioteca django-pagseguro2, que tem como meta promover o uso da API PagSeguro V2 com o Django.

Links:


por Allisson Azevedo em 07 de June de 2014 às 19:29

June 05, 2014

Magnun Leno

Programando Java sem IDE

Há algum tempo eu concluí minha Pós-Graduação (ainda estou devendo um texto sobre isso aqui) e, devido a "regras institucionais", fui "instigado" (*cof*obrigado*cof*) a usar Java. Sendo eu um usuário de VIM, uma das coisas que mais me irrita ao programar em Java é essa amarração de IDE. Então resolvi fazer algo que poucos programadores Java sabem, programar sem IDE.

Java na mão!

Escrevendo Java na mão!!

Sim, eu sou cabeça dura a esse ponto. Meu fluxo de trabalho no VIM já é muito bem estabelecido, e me adaptar a uma nova ferramenta com inúmeras limitações (quando comparado à edição no VIM) não é nada agradável.

Programando Java sem IDE é um artigo original de Mind Bending

por Magnun em 05 de June de 2014 às 17:23

June 04, 2014

Thiago Avelino

Swift Language (Apple) first steps

Apple launched the Swift language (Looking for the Swift parallel scripting language? Please visit swift-lang.org) at WWDC 2014. A modern language to program for Mac and iOS!

Strongly typed language, where you explicitly what type (variable, arguments, and function returns), syntax reminds dynamic languages with Python, Go, Ruby and JavaScript.

Apple offers a free comprehensive guide on language in HTML and iBook formats.

  • We can put zero left freely to improve readability, insert _ to separate groups of numbers and add the + in front. That server to improve readability of the program (does not alter the value of the number):
let a = 1000000
let b = 0.0000001

// readable
let a = 1_000_000
let b = 0.000_000_1
  • Practical numerical ranges: 0..5 and 0...5 (Ruby)

  • Unicode variables:

let π = 3.1415926
  • Tween strings (expand variables and expressions inside strings):
var name = "Thiago Avelino"
var yaer = 25
println "Hi, my name \(name), 'm \(year) years."
  • Few functions/methods native to strings works:

    • hasPrefix
    • hasSuffix
    • uppercaseString
    • lowercaseString
    • countElements
    • isEmpty
  • Not have regular expressions

  • Ternary operators: (condition ? yes : no)

I liked the language, as 'm used to not bother me Go explicit types, lack of regular expression can be a problem seems, but it is a pleasant language to learn!

por avelino em 04 de June de 2014 às 04:20

June 02, 2014

Bruno Cezar Rocha

What The Flask - Série de 6 artigos + tutorial para aprender desenvolvimento web com Python e Flask

What The Flask

6 passos para ser um Flask ninja!

Olá, nesta semana comecei a publicar a série What The Flask lá no PythonClub.

http://res.cloudinary.com/diu8g9l0s/image/upload/v1400201393/pythonclub/logo_275x130.png

para quem ainda não conhece, o PythonClub é um blog colaborativo feito pela comunidade e hospedado no github. Colabore você também!

Nesta série de 6 artigos/tutoriais pretendo abordar de maneira bem detalhada o desenvolvimento web com o framework Flask.

Depois de mais de um ano desenvolvendo projetos profissionais com o Flask e adquirindo experiência também no desenvolvimento do projeto open source Quokka CMS resolvi compartilhar algumas dicas para facilitar a vida de quem pretende começar a desenvolver para web com Python.

A série What The Flask será dividida nos seguintes capítulos.

  1. Hello Flask: Introdução ao desenvolvimento web com Flask
  2. Flask patterns: boas práticas na estrutura de aplicações Flask
  3. Plug & Use: extensões essenciais para iniciar seu projeto
  4. DRY: Criando aplicativos reusáveis com Blueprints
  5. from flask.ext import magic: Criando extensões para o Flask e para o Jinja2
  6. Run Flask Run: "deploiando" seu app nos principais web servers e na nuvem.

Hello Flask

Parte 1 - Introdução ao desenvolvimento web com Flask

Conhecendo o Flask

Quick and Dirty Tutorial: Desenvolvendo um aplicativo de notícias

Para acompanhar a série completa acesse o PythonClub

Comentários, dúvidas, sugestões e formulário a respeito do curso online e do livro de Flask também estão no lá no final do artigo no PythonClub. :)

por Bruno Rocha em 02 de June de 2014 às 14:30

June 01, 2014

Filipe Saraiva

Complementação de código no editor de scripts do Cantor

Alguns meses atrás escrevi sobre as novas funcionalidades disponíveis no Cantor a partir do lançamento do KDE 4.13. Entretanto, eu acabei não escrevendo sobre uma nova e bastante útil funcionalidade também disponível naquele lançamento – a nova complementação de código disponível no editor de scripts do Cantor.

Eu havia desenvolvido o destaque de sintaxe padrão para cada backend que suporta o editor de scripts. Esse editor é baseado em KatePart/KTextEditor, uma impressionante biblioteca da KDE libs utilizada em vários softwares do KDE, como o KWrite, Kate, Kile, KDevelop, e mais.

Os desenvolvedores do Kate lançaram uma nova funcionalidade no KDE 4.13, uma versão melhorada da complementação de código para todas as linguagens suportadas pelo KTextEditor. Essa funcionalidade utiliza os mesmos arquivos XML usados no destaque de sintaxe de cada linguagem para disponibilizar a nova complementação de código.

Como eu desenvolvi o destaque de sintaxe padrão para o editor de scripts, essa nova complementação de código foi habilitada por padrão também. Fantástico!

Então, vamos ver algumas imagens dessa nova funcionalidade em ação:

code-completion-scilab-cantor

Complementação de código para Scilab

Na figura acima a complementação de código foi utilizada para escrever um comando plot no editor de scripts para a interface com o Scilab.

code-completion-maxima-cantor

Complementação de código para Maxima

No backend do Maxima backend podemos ver a complementação de código funcionando não apenas com os comandos que iniciam com o fragmento de texto digitado: por exemplo, contour_plot apareceu na lista de sugestões.

Esta nova complementação de código está disponível para todos os backends que implementam o suporte ao editor de scripts. Para utilizá-la basta digitar Ctrl+Espaço no editor.

Existem algumas melhorias para esta funcionalidade a serem implementadas no futuro. Por exemplo, seria interessante carregar funções dos módulos/pacotes importados no editor – em Python, eu poderia executar um import numpy e as funções do numpy poderiam estar disponíveis na complementação de código também. E seria bom se as variáveis na área de trabalho do Cantor estivessem disponíveis no editor de scripts.

Mas isto é um trabalho para o futuro. Por agora, você pode se divertir com essa nova complementação de código. E obrigado a todos os  desenvolvedores do Kate por esta funcionalidade!

por Filipe Saraiva em 01 de June de 2014 às 20:33

May 29, 2014

Elcio Luiz Ferreira

VISIE: 05.04 Precificação em projetos web

Como fazer precificação em projetos de software? Eu não tenho a resposta certa, mas sei umas coisas que podem ajudar.
Views:
0
0
ratings
Time:
05:23
More in
Science & Technology

O post VISIE: 05.04 Precificação em projetos web apareceu primeiro em fechaTag.

por elcio em 29 de May de 2014 às 14:16

May 27, 2014

Elcio Luiz Ferreira

May 26, 2014

Elcio Luiz Ferreira

VISIE: 05.02 Empreendedorismo no Brasil

Por que o governo brasileiro complica tanto a vida do empreendedor?
Views:
0
0
ratings
Time:
05:55
More in
Science & Technology

O post VISIE: 05.02 Empreendedorismo no Brasil apareceu primeiro em fechaTag.

por elcio em 26 de May de 2014 às 16:47

VISIE: 05.01 Educação para o empreendedorismo

Três coisas que você não aprendeu na escola: Finanças, Criatividade e Liderança.
Views:
0
0
ratings
Time:
06:10
More in
Science & Technology

O post VISIE: 05.01 Educação para o empreendedorismo apareceu primeiro em fechaTag.

por elcio em 26 de May de 2014 às 03:02

May 24, 2014

Kodumaro

Erlang vs Prolog

Poliedro

Simon Thompson Joe Armstrong criou Erlang a partir de Prolog – aliás, o primeiro compilador era escrito em Prolog.

[update 2014-05-25]
Faglia nostra: o programador Prolog e criador da linguagem Erlang é Joe Armstrong. Simon Thompson é o mantenedor e um dos resposáveis pela reescrita em C.
[/update]
Apesar de ser uma linguagem funcional, Erlang traz muita herança de Prolog e suporta o paradigma declarativo. Para demonstrar essa similaridade, vou colocar o código de fatorial: em Erlang e em Prolog, implementação simples (e ruim) e usando tail-call optimization.

Código Q&D

Vamos ao rápido e sujo, primeiro em Prolog:

fact(0, 1) :- !.
fact(N, F) :- N > 0,
N1 is N - 1,
fact(N1, F1),
F is N * F1.

Agora em Erlang:

fact(0) -> 1;
fact(N) when N > 1 -> N * fact(N - 1).

A intenção é mostrar como os códigos são parecidos.

Tail call optimization

Tanto Prolog quanto Erlang têm sistemas inteligentes de esvaziamento de pilha e usar um acumulador ajuda a tornar o programa mais eficiente.

O fatorial em Prolog fica assim:

fact(N, F) :- N >= 0,
fact(N, 1, F).

fact(0, F, F) :- !.
fact(N, A, F) :- N1 is N - 1,
A1 is N * A,
fact(N1, A1, F).

Agora em Erlang:

fact(N) when N >= 0 -> fact(N, 1).

fact(0, A) -> A;
fact(N, A) -> fact(N-1, A*N).

Bônus

Tente adivinhar em qual linguagem é este código:

fact(N, F) :- N >= 0, fact(N, 1, F).
fact(0) --> { ! }, '='.
fact(N) --> { N1 is N - 1 }, mul(N), fact(N1).
mul(N, A, R) :- R is N * A.


[]’s
ℭacilhας, ℒa ℬatalema

por noreply@blogger.com (ℭacilhας, ℒa ℬatalema) em 24 de May de 2014 às 22:58

Elcio Luiz Ferreira

VISIE: 04.07 Semeie sempre

“Pela manhã semeia a tua semente, e à tarde não retires a tua mão, porque tu não sabes qual prosperará, se esta, se aquela, ou se ambas serão igualmente boas.” Eclesiastes 11:6

Não seja ingênuo, mas

Views:
0
0
ratings
Time:
05:32 More in
Science & Technology

O post VISIE: 04.07 Semeie sempre apareceu primeiro em fechaTag.

por elcio em 24 de May de 2014 às 20:55

May 23, 2014

Elcio Luiz Ferreira

VISIE: 04.06 Compartilhe

Você não sabe o que vai ser útil para alguém. Há sempre alguém mais iniciante que você. Compartilhe.

Assine nossa lista: https://visiepw.leadpages.net/convite/

Views:
4
0
ratings
Time:
03:25 More in
Science & Technology

O post VISIE: 04.06 Compartilhe apareceu primeiro em fechaTag.

por elcio em 23 de May de 2014 às 13:50

May 22, 2014

Elcio Luiz Ferreira

VISIE: 04.05 Swipe it

Ofereça a melhor experiência mobile para seus usuários com touch events.

Assine nossa lista: https://visiepw.leadpages.net/convite/

Views:
2
0
ratings
Time:
03:27 More in
Science & Technology

O post VISIE: 04.05 Swipe it apareceu primeiro em fechaTag.

por elcio em 22 de May de 2014 às 15:44

May 21, 2014

Elcio Luiz Ferreira

VISIE: 04.04 Imagens para telas retina

Telas Retina, múltiplas resoluções, há uma solução simples de implementar.

Assine nossa lista: https://visiepw.leadpages.net/convite/

Views:
3
0
ratings
Time:
04:23 More in
Science & Technology

O post VISIE: 04.04 Imagens para telas retina apareceu primeiro em fechaTag.

por elcio em 21 de May de 2014 às 15:43

May 20, 2014

Magnun Leno

Palestra de Introdução ao Git

Há muito tempo atrás, eu e um grupo de pessoas participamos de um projeto chamado Criandeiros. Esse projeto gerou algumas palestras bem interessantes que já foram citadas aqui. Entretanto, devido a diversos fatores, esse grupo se desfez e eu postei por aqui apenas as palestras de Particularidades do Python e Modelo MVC.

git

Curiosamente, depois de gravar um episódio como convidado do SciCast, acabei me lembrando de uma palestra muito legal que eu preparei para o Criandeiros, o tópico era o versionador Git…

Palestra de Introdução ao Git é um artigo original de Mind Bending

por Magnun em 20 de May de 2014 às 16:00

Elcio Luiz Ferreira

VISIE: 04.03 localStorage e uso offline

Caiu a conexão, e agora? Dados locais, salvos com facilidade. Muito simples de implementar. Faça hoje mesmo.

Assine nossa lista: https://visiepw.leadpages.net/convite/

Views:
12
3
ratings
Time:
04:17 More in
Science & Technology

O post VISIE: 04.03 localStorage e uso offline apareceu primeiro em fechaTag.

por elcio em 20 de May de 2014 às 14:53

May 19, 2014

Allison Azevedo

Allisson

Depois de fazer um belo upgrade de memória (4gb -> 16gb) eu resolvi usar o Vagrant como plataforma de desenvolvimento, fiz uma nova instalação do Osx Mavericks e deixei o meu sistema o mais limpo possível, deixando tudo que é necessário para desenvolvimento na máquina virtual do vagrant.

Agora eu estou usando o Ubuntu Precise64 e tenho praticamente a mesma infra que uso nos servidores de produção, para provisionar essa máquina eu usei o Ansible e os arquivos de configuração eu deixei a disposição no meu Github.

Agora eu tenho tudo o que preciso para desenvolver ao alcance, basta usar o vagrant up e esperar a configuração do sistema.

O que vem incluso:

  • Mapeamento das portas dos servidores
  • Mysql 5.5, usuário e senha ‘allisson’
  • Postgresql 9.3 + Postgis, usuário e senha ‘allisson’
  • Nodejs via ppa
  • Mongodb via ppa
  • Redis e Memcached

Links:


por Allisson Azevedo em 19 de May de 2014 às 15:50

Elcio Luiz Ferreira

VISIE: 04.02 SVG

Conheça a tecnologia de gráficos vetoriais que pode tornar seu site muito mais leve e bonito.

Assine nossa lista: https://visiepw.leadpages.net/convite/

Views:
45
10
ratings
Time:
03:19 More in
Science & Technology

O post VISIE: 04.02 SVG apareceu primeiro em fechaTag.

por elcio em 19 de May de 2014 às 13:40

Kodumaro

PL Framework

Glider
Falei sobre como gerenciar dados mutáveis em Prolog. O código final ficou assim:


-*- Prolog -*-
:- module(profile, [profile/2]).
:- dynamic profile/2.

set(ID, X) :- profile(ID, X), !.
set(ID, X) :- X =.. [Attr, _],
E =.. [Attr, _],
retractall(profile(ID, E)),
assertz(profile(ID, X)), !.

set(_, []) :- !.
set(ID, [X|Rest]) :- set(ID, X), set(ID, Rest).

get(ID, R) :- findall(X, profile(ID, X), R).

drop(ID) :- retractall(profile(ID, _)).

Mas e se quisermos que os dados sejam persistentes, ou seja, sobrevivam entre execuções, como um banco de dados?

O dialeto SWI Prolog oferece um arcabouço com inúmeros recursos chamado PL Framework.

Para persistência, há a biblioteca persistency.pl.

O que temos de fazer é substituir algumas partes de nosso código pelos predicados da biblioteca. Começaremos importando o módulo: logo após a declaração do nosso módulo, na linha abaixo, acrescente a importação:
:- use_module(library(persistency)).

Em seguida, não precisamos mais declarar o predicado profile/2 como dinâmico, em vez disso vamos declarar uma persistência. Substituia a linha com dynamic por:
:- persistent profile(id:atom, attr:compound).

Agora precisamos subtituir as chamadas de retractall/1 por retractall_profile/2, protegidas por with_mutex/2.

Onde está:
              retractall(profile(ID, E)),

Substitua por:
              with_mutex(profile,
retractall_profile(ID, E)),

E substitua:
drop(ID) :- retractall(profile(ID, _)).

Por:
drop(ID) :- with_mutex(profile,
retractall_profile(ID, _)).

Agora precisamos substituir assertz/1 por assert_profile/2. Onde está:
              assertz(profile(ID, X)), !.

Substitua por:
              with_mutex(profile, 
assert_profile(ID, X)), !.

Você pode juntar os predicados dentro de with_mutex/2.

Precisamos agora de uma regra para conectar a uma base de dados em disco, por exemplo:
connect(File) :- db_attach(File, [gc]).

Se quiser um arquivo padrão:
connect :- connect('profile.db').

Código final com persistência

-*- Prolog -*-
:- module(profile, [profile/2]).
:- persistent profile(id:atom, attr:compound).

set(ID, X) :- profile(ID, X), !.
set(ID, X) :- X =.. [Attr, _],
E =.. [Attr, _],
with_mutex(profile,
(retractall_profile(ID, E),
assert_profile(ID, X))), !.

set(_, []) :- !.
set(ID, [X|Rest]) :- set(ID, X), set(ID, Rest).

get(ID, R) :- findall(X, profile(ID, X), R).

drop(ID) :- with_mutex(profile,
retractall_profile(ID, _)).

connect :- connect('profile.db').

connect(File) :- db_attach(File, [gc]).

Este artigo foi apenas um exemplo prático de Prolog.

[]’s
ℭacilhας, ℒa ℬatalema

por noreply@blogger.com (ℭacilhας, ℒa ℬatalema) em 19 de May de 2014 às 12:46

Elcio Luiz Ferreira

VISIE: 04.01 Formulários do HTML5

Campo e-mail como e-mail, número como número, data como data. Veja como HTML5 pode melhorar a experiência dos usuários ao preencher formulários, com técnicas simples que você pode colocar em prática hoje mesmo.

Assine nossa lista: https://visiepw.leadpages.net/convite/

Views:
53
4
ratings
Time:
04:19 More in
Science & Technology

O post VISIE: 04.01 Formulários do HTML5 apareceu primeiro em fechaTag.

por elcio em 19 de May de 2014 às 04:30

May 18, 2014

Elcio Luiz Ferreira

VISIE: 03.07 Correr atrás do vento

Pare de correr sem pensar e tome tempo para refletir.
Views:
32
5
ratings
Time:
04:47
More in
Science & Technology

O post VISIE: 03.07 Correr atrás do vento apareceu primeiro em fechaTag.

por elcio em 18 de May de 2014 às 05:30

May 17, 2014

Kodumaro

Pequeno glossário de Prolog

Glider Ontem eu escrevi um artigo simples sobre Prolog.

O artigo na Wikipédia em português me pareceu pouco completo e bastante confuso. Tem informações legais lá, mas em comparação com a versão em inglês deixa a desejar.

Não pretendo completar o que está escrito na Wikipédia (senão deveria completar lá), apenas descomplicar um pouco.

Pra começar, é preciso entender a estrutura de um programa em Prolog: consiste em um domínio de verdades, parecido com uma base de dados, e o ponto de entrada é uma pergunta (query). Dito isso, vamos definir os conceitos dentro do código:
  • Termo: qualquer dado em Prolog é chamado termo.
  • Átomo: é um nome de propósito geral sem significado inerente. É representado por uma sequência de letras e alguns caracteres, começando por uma letra minúscula, ou qualquer sequência entre piclas ('…'). Por exemplo: hanoi
  • Número: pode ser inteiro ou de ponto flutuante, não diferente de outras linguagens.
  • Termo composto: consiste em um átomo, chamado functor (que é uma cabeça ou cabeçalho) seguido de uma sequência de termos e/ou incógnitas separados por vírgulas e entre parêntesis, chamada argumentos. Por exemplo: hanoi(5, R)
  • Predicado: é uma função booleana, ou seja, que retorna verdadeiro ou falso. Um predicado pode ser um átomo ou um termo composto e deve ser definido por um fato ou por uma regra.
  • Operador: é um predicado normal de aridade 2, mas que pode ser representado de forma diferente. Por exemplo, o sinal de igual:
X = 2

É o mesmo que:
'='(X, 2)

  • Variável: prefiro evitar a expressão “variável”, pois ela é falsa, apesar de ser o nome oficial. Prefiro “incógnita”: a incógnita pode estar ligada (bound) ou não (unbound) a um termo e tem comportamento diferente de acordo com estar ou não ligada. É representada por uma sequência de letras iniciando por uma letra maiúscula ou um underscore (_). Por exemplo: X
  • Fato: indica que determinado predicado retorna verdadeiro. É um átomo ou termo composto seguido de um ponto. Por exemplo:
default(5).

  • Regra: condiciona o resultado de um predicado ao resultado de outro. É um átomo ou termo seguido de :- e então o predicado ao qual ele está condicionado. Por exemplo:.
move(_, X, Y, _, R) :- move(1, X, Y, _, R).

  • Pergunta (query): É a chamada de um predicado. Pode retornar verdadeiro, falso ou gerar uma exceção. No código, é uma linha iniciada por :- e terminada por ponto. No prompt ?- basta digitar o predicado seguido de um ponto e pressionar a tecla Enter.

Um detalhe importante é que coisas que não parecem predicados, também são! Por exemplo:
  • Vírgula: é operador (','/2) que avalia o primeiro um predicado (argumento) e só avalia o segundo se o primeiro for verdadeiro, ou seja, E lógico.
N1 is N - 1, fact(N1, F1)

  • Ponto e vírgula: operador (';'/2) que avalia o primeiro predicado e só avalia o segundo se o primeiro for falso, ou seja, OU lógico.
  • Exclamação: é um predicado de aridade 0 ('!'/0) que indica que, se a regra atual “casar” (match) com a pergunta, os próximos fatos ou regras não serão avaliados.
  • Qualquer operação matemática.

Como exemplo, segue uma implementação da resolução da torre de Hanói:
% -*- Prolog -*-
:- module(hanoi, [hanoi/0, hanoi/1, hanoi/2]).

hanoi :- hanoi(R), findall(_, show(R), _).
hanoi(R) :- default(N), hanoi(N, R).
hanoi(N, R) :- N > 0,
findall(X,
move(N,
'a esquerda',
'a direita',
'o centro', X),
R).

default(5).

move(1, X, Y, _, move(X, Y)) :- !.
move(N, X, Y, Z, R) :- N1 is N - 1, move(N1, X, Z, Y, R).
move(_, X, Y, _, R) :- move(1, X, Y, _, R).
move(N, X, Y, Z, R) :- N1 is N - 1, move(N1, Z, Y, X, R).

show(move(X, Y)) :- format('mova o disco d~w para ~w~n', [X, Y]).
show([X|_]) :- show(X).
show([_|Rest]) :- show(Rest).

Consegue entender como funciona?

Para gerar um executável com SWI Prolog:
bash$ prolog -f hanoi.pl \
-g 'use_module(library(save)), qsave_program(hanoi, [goal(hanoi)])' \
-t halt

Bônus

Há um açúcar sintático em prolog, que é -->:
a --> b, c(x), d.

Significa o mesmo que:
a(Start, End) :- b(Start, V1), c(x, V1, V2), d(V2, End).

[]’s
ℭacilhας, ℒa ℬatalema

por noreply@blogger.com (ℭacilhας, ℒa ℬatalema) em 17 de May de 2014 às 13:13

Dados em Prolog

Glider Há uns anos falei um pouquinho sobre Prolog: sobre predicados, átomos, termos compostos, fatos, regras, incógnitas, etc.

Só pra relembrar: um programa em Prolog é um conjunto de predicados – fatos e regras – e sua execução consistem em perguntas (queries) feitas a esse domínio de verdades. Na programação declarativa, a ideia não é dizer como o computador deve resolver o problema, mas sim descrever o problema.

O entendimento de Prolog é essencial ao entendimento da programação declarativa e, assim, para poder extrair o máximo do poder de linguagens mais modernas, como Erlang.

É uma história bonita, mas um exemplo um pouco mais prático iria bem, não?

Então imaginei um exemplo: um módulo que representa perfis de dados – por exemplo, dados de perfil de usuário.

Podemos começar o código dizendo para o sistema nosso módulo:
% -*- Prolog -*-
:- module(profile, [profile/2]).

A primeira linha é um comentário que avisa a alguns editores que o arquivo se trata de um código Prolog, a segunda declara o módulo profile, que exporta o predicado profile/2 (com aridade 2).

A seguir, podemos declarar nosso predicado profile/2:
:- dynamic profile/2.

Essa declaração diz que o predicado profile/2 é dinâmico, ou seja, muda ao longo da execução do programa.

Agora precisamos de um predicado para gravar novos dados de perfil. Façamos isso com uma regra:
set(ID, X) :- profile(ID, X), !.

Essa regra diz ao sistema que, se alguém questionar set(ID, X) – onde ID é o identificador do perfil e X é um atributo do perfil – e essa combinação for verdadeira, ele não deve assumir isso como ver dade e não avaliar demais regras ou fato (!).

A próxima regra é um pouco longa, então vou falar dela linha a linha:
set(ID, X) :- X =.. [Attr, _],

Aqui diz que o predicado é set(ID, X) (exatamente igual ao anterior), e X é um termo composto de aridade 1, cujo cabeçalho será atrelado à incógnita Attr.

Caso verdade, continua a próxima linha da regra:
              E =.. [Attr, _],

Então E é termo composto com mesmo cabeçalho e aridade de X, porém com parâmetro _, que significa qualquer coisa.

Então, se X for name(john), E será name(_).
              retractall(profile(ID, E)),

Remove o predicado com o dado de perfil com o mesmo identificador e o mesmo cabeçalho informados.
              assertz(profile(ID, X)).

Cria o predicado armazenando o atributo de perfil informada – e assim termina nossa regra.

E se quisermos criar uma lista de atributos para o mesmo identificador de perfil?

Podemos criar um predicado para isso. Comecemos pelo ponto de parar, que é quando nossa lista de atributos já foi esgotada:
set(_, []) :- !.

Essa regra diz que, se a lista de atributos está vazia, não precisa fazer mais nada. Mas e se contiver algum elemento? Precisaremos questionar o set/2 para aquele atributo e continuar chamando para o resto da lista:
set(ID, [X|Rest]) :- set(ID, X), set(ID, Rest).

Resolvido.

Podemos criar um predicado para retornar todos os atributos de uma identidade:
get(ID, R) :- findall(X, profile(ID, X), R).

Precisamos agora de um predicado de limpeza, um para remover todos os atributos de um identificador (o que significa apagar o identificador):
drop(ID) :- retractall(profile(ID, _)).

Vamos testar agora nosso módulo:
?- [profile].
true.

?- profile:set(1, [name(john), age(20), city(rio)]).
true.

?- profile:set(2, [name(jack), age(21), city(sao_paulo)]).
true.

?- profile(ID, city(City)).
ID = 1
City = rio ;
ID = 2
City = sao_paulo.

?- profile:get(1, R).
R = [name(john), age(20), city(rio)].

?- profile:drop(1).
true.

?- profile(ID, _).
2 ;
2 ;
2.

?- drop(_).
true

?- profile(ID, _)
false.

?-

Espero que o exemplo tenha sido esclarecedor. Para fazer um tracing, você pode fazer a pergunta gtrace.

Observação: para a execução, foi usando SWI Prolog, uma das mais confiáveis e robustas implementações de Prolog da atualidade.

Complemento a este artigo: Pequeno glossário de Prolog.

[]’s
ℭacilhας, ℒa ℬatalema

por noreply@blogger.com (ℭacilhας, ℒa ℬatalema) em 17 de May de 2014 às 03:20

May 16, 2014

Magnun Leno

Corrigindo Arquivos CSV com Python

Ontem eu estava conversando com alguns colegas e um deles acabou soltando que estava tendo que fazer um trabalho braçal: Corrigir um arquivo CSV manualmente, pois a rotina que processava sua entrada só compreendia campos do CSV se eles estivessem envolvidos entre aspas duplas.

CSV

Na hora eu falei pra ele, "Use Python!", e em seguida todos me disseram que era trabalho de mais escrever um programa só pra isso. Será mesmo?

Corrigindo Arquivos CSV com Python é um artigo original de Mind Bending

por Magnun em 16 de May de 2014 às 17:32

Elcio Luiz Ferreira

VISIE: 03.06 Teste os concorrentes

Veja o que já existe por aí antes de construir seu produto.
Views:
34
6
ratings
Time:
03:30
More in
Science & Technology

O post VISIE: 03.06 Teste os concorrentes apareceu primeiro em fechaTag.

por elcio em 16 de May de 2014 às 16:18

May 13, 2014

Magnun Leno

Hack ‘n’ Cast v0.1 - Cultura Hacker

Hackers não são criminosos cibernéticos que invadem seu computador ou roubam seus e-mails, o nome disso é cracker. Sabia que os hackers na verdade são praticamente os responsáveis pela internet, pelo sistema operacional Unix, OS X, Gnu/Linux e etc? Sabia que os hackers não se limitam apenas ao mundo da tecnologia?

Baixe o episódio e leia o shownotes

por Magnun em 13 de May de 2014 às 14:22

May 08, 2014

Elcio Luiz Ferreira

VISIE: 02.05 Sobre Documentação

Documentação de software é uma arte difícil. Pouca documentação é ruim. Documentação demais é ainda pior.
Views:
4
0
ratings
Time:
08:18
More in
Science & Technology

O post VISIE: 02.05 Sobre Documentação apareceu primeiro em fechaTag.

por elcio em 08 de May de 2014 às 20:14

May 07, 2014

Magnun Leno

Documentário Revolution OS

Talvez tenha sido resultado da revisão que realizei no conteúdo do Curso de Filosofia GNU ou de outras pesquisas que tenho feito, mas neste fim de semana me reencontrei com o excelente documentário Revolution OS e acabei re assistindo-o.

Escrito, dirigido, produzido e editado por J. T. S. Moore, Revolution OS conta com grandes hackers e empreendedores como: Richard Stallman, Michael Tiemann, Linus Torvalds, Larry Augustin, Eric S. Raymond, Bruce Perens, Frank Hecker and Brian Behlendorf.

Documentário Revolution OS é um artigo original de Mind Bending

por Magnun em 07 de May de 2014 às 18:20

Elcio Luiz Ferreira

VISIE: 02.04 Decisão baseada em números

Sites precisam melhorar continuamente. Você não pode refazer seu site todo ano.
Views:
3
0
ratings
Time:
06:01
More in
Science & Technology

O post VISIE: 02.04 Decisão baseada em números apareceu primeiro em fechaTag.

por elcio em 07 de May de 2014 às 13:35

May 06, 2014

Elcio Luiz Ferreira

VISIE: 02.03 Sua ideia não vale nada

Ideias valem alguma coisa? Claro que sim. Mas, por que uma ideia vale alguma coisa?
Construa alguma coisa antes de tentar vender a ideia. Para um software, a boa ideia é aquela provada pela realidade.
Views:
0
0
ratings
Time:
08:17
More in
Science & Technology

O post VISIE: 02.03 Sua ideia não vale nada apareceu primeiro em fechaTag.

por elcio em 06 de May de 2014 às 14:07

May 05, 2014

Filipe Saraiva

Nos vemos no FISL 15!

 

E logo mais tomo o rumo para um dos maiores eventos de software livre do mundo, o Fórum Internacional de Software Livre!

Como de costume esse ano estarei bastante presente nas atividades do KDE – destaque para a palestra do engenheiro de software Kévin Ottens sobre KDE Frameworks 5, e o encontro comunitário do KDE. Vai ser fácil me encontrar no stand que montaremos na área reservada para os grupos de usuários.

Outras palestras que pretendo assistir estão a metamodelagem em Qt com o Sandro, os 30 anos de história do GNU com a Aracele, os dispositivos para estudos de neurociência com o Cabelo, e mais alguns – ainda estou longe de decidir a “minha” programação do FISL.

E dia 9 às 16:00h apresentarei um artigo no Workshop de Software Livre sobre o desenvolvimento do backend para Python no Cantor.

A grade completa de atividades do FISL conta com mais de 300 palestras, oficinas, minicursos, e muito mais!

Nos vemos lá!

por Filipe Saraiva em 05 de May de 2014 às 21:54

Elcio Luiz Ferreira

VISIE: 02.02 Sobre escolha de tecnologia

Por que se vende tecnologia para o cliente final? Deixe seu desenvolvedor escolher.
Views:
0
0
ratings
Time:
06:20
More in
Science & Technology

O post VISIE: 02.02 Sobre escolha de tecnologia apareceu primeiro em fechaTag.

por elcio em 05 de May de 2014 às 14:24

Magnun Leno

Corrigindo Erro de Chaves no Ubuntu

Há alguns meses acabei precisando voltar a utilizar o Ubuntu no meu notebook (problemas de drivers no Arch Linux). Claro, quem me conhece sabe que o Unity não me agrada muito, e por isso optei pelo Ubuntu Gnome.

Ubuntu Gnome

Recentemente, como todos sabem, foi lançada versão 14.04 do Ubuntu e, consequentemente, surgiu uma atualização para o meu notebook. A atualização ocorreu bem, exceto por um detalhe…

Corrigindo Erro de Chaves no Ubuntu é um artigo original de Mind Bending

por Magnun em 05 de May de 2014 às 13:11

May 04, 2014

Eric Hideki

pygame_logo_bot

pygame_logo_bot

Uma das grandes dúvidas para quem está desejando começar a programar é saber escolher qual a tecnologia que devemos começar, e levando em consideração as diversas alternativas que temos disponíveis no mercado, é totalmente compreensível essa indecisão. Já comentei diversas vezes que tentei outras tecnologias para aprender, seja PHP, Ruby, Actionscript3, Perl e outras, mas a que realmente me identifiquei e aprendi foi Python.

Por isso irei listar algumas das razões por ter escolhido e porque tanto falo da linguagem.

Facilidade

É a tecnologia que temos mais tutoriais e vídeo aulas atualizadas(que é muito importante) espalhadas pela internet, seja através do Curso do Python para Zumbis do Fernando Masanori, seja pelas vídeo aulas de Django do Allisson Azevedo, seja Udacity, Coursera, MIT, Veduca e entre outros. Além da clareza de sua sintaxe.

Comunidade

Temos diversos programadores entusiasmados em falar sobre suas experiências e projetos, PUG’s e Grupy’s em todos os Estados, basta acessa wiki da Python Brasil e encontrar pessoas da mesma região que a sua. Tenho certeza que encontrará alguém que compartilhe dos mesmos ideais que os seus.

São pessoas que tão totalmente abertas a conversar, trocar ideias, tirar dúvidas e colaborar em projetos e iniciativas.

E a cada dia cresce o número de eventos locais espalhados pelo Brasil voltado principalmente para iniciantes, que é essencial para o crescimento da tecnologia.

Poder

Você gosta de web? Então pode criar poderosas aplicações em Django, Flask, Bottle, Web2py, Cherrypy, Pyramid…Veja quantas opções temos. Você não fica preso apenas a uma opção, escolhe de acordo com sua necessidade e identificação.

Quer um CMS? Tem o Plone, Opps CMS, Django CMS, Quokka.

Desktop? PythonQT, Pythonwx, Tktinter.

Mobile? Kivy!

Jogos? Pygame!

São diversos os campos de atuação, fora o que acabei de lançar do Python Brochure no qual fala das aplicações em diversos campos de atuação.

Fora as bibliotecas, Pypi, CPython, JPython, Topaz, Brython e diversas outras aplicações que enriquecem ainda mais.

Essas são algumas das diversas razões que tenho. E deixe contar algumas curiosidades para quem deseja conhecer mais sobre a relação que tenho com Python.

- Nunca trabalhei com Python ou ganhei algum dinheiro. (Trabalho como Front-end);
- Conheço Python apenas 1 ano e poucos meses;
- Criei amizades com pessoas do Brasil inteiro;
- Aprendi programação realmente quando comecei a interagir com outros programadores, seja em encontros, dojos e eventos;
- Todo dia tem alguma novidade a ser estudada;
- Todo dia tem algum projeto novo sensacional;
- Cada mês tem eventos de pequeno a médio porte em todo o Brasil que desejaria estar em todos;
- Atualmente temos 2 conferências de grande porte, uma aconteceu agora da Python Nordeste e em Novembro temos a Python Brasil;
- Cresce o número de grupos de estudo no Facebook, ou seja, você não está sozinho;
- Python é MUITO legal de trabalhar com Raspberry Pi e Arduino :)
- Muitos acham que sou especializado em Python, mas male-male sei fazer uma simples função, acredite. Escrevo mais sobre Python do que escrever código Python.

Deixe suas razões nos comentários :)


por Eric Hideki em 04 de May de 2014 às 20:19

Captura de tela - 04-05-2014 - 16:09:58

Captura de tela - 04-05-2014 - 16:09:58

Na Pycon 2014 foi distribuido gratuitamente a Python Brochure, uma revista falando sobre as possibilidades que a linguaguem oferece aos programadores. Comentários de empresas como a Mozilla, Google, SurveyMonkey e diversas outras.

O mais interessante da revista é mostrar as infinidades de aplicações que a linguagem tem hoje em dia. Muitos dos que não conhecem Python imaginam que a tecnologia se limita apenas a web, muito pelo contrário. Python tem amplo campo na parte de renderização de animações 3D, computação ciêntífica, telecomunicações, e indústrias em geral.

Vale muito a pena a leitura. E é gratuito o arquivo em PDF.

Link: http://brochure.getpython.info/


por Eric Hideki em 04 de May de 2014 às 19:29

Elcio Luiz Ferreira

VISIE: 02.01 Acessibilidade é para todos

Entenda do que realmente se trata a acessibilidade na web. Não é apenas sobre o cego, é sobre todos nós.
Views:
1
0
ratings
Time:
09:24
More in
Science & Technology

O post VISIE: 02.01 Acessibilidade é para todos apareceu primeiro em fechaTag.

por elcio em 04 de May de 2014 às 18:20

May 03, 2014

Elcio Luiz Ferreira

VISIE: 01.07 Você não é uma máquina

Você não é uma máquina. É muito mais do que isso. Você precisa de tempo para descansar e, ao contrário do que o mundo de hoje faz parecer, isso é uma coisa muito boa.
Views:
0
0
ratings
Time:
05:34
More in
Science & Technology

O post VISIE: 01.07 Você não é uma máquina apareceu primeiro em fechaTag.

por elcio em 03 de May de 2014 às 10:05

May 02, 2014

Elcio Luiz Ferreira

May 01, 2014

Eric Hideki

logo

Orgulhosamente digo as pessoas que realmente aprendi Python através do curso de Python que o Bruno ministrou, tanto que na época escrevi um artigo comentando.

Até então ficava batendo a cabeça na parede tentando entender alguns conceitos da linguagem e como poderia criar alguns programas com ele, nisso fiz um curso de Python, Web2py e HTML/CSS/JS para me atualizar.

Então hoje convidei o Bruno para falar um pouco dele e sobre os projetos em que atuou e o que anda fazendo atualmente.

Bruno, fale um pouco de você

b48ee8f5f9432b4d291136ad98cd6333

Moro em Cotia/SP, sou casado há 6 anos, sou apaixonado por animais (dá para perceber pelo nome de meus projetos) e tenho feito alguns trabalhos voluntários envolvendo a proteção animal e a promoção dos direitos animais. Sou vegetariano desde que nasci e vegano desde 2003 (coincidentemente ano em que comecei a trabalhar com Python). Quando não estou programando com certeza estou em algum parque com os cães, no meio do mato onde moro ou cuidando dos 31 animais (entre ratos, jabutis, esquilos, pombos, cães e gatos) que vivem sob minha tutela em casa (todos animais resgatados da rua ou de alguma situação de maus tratos).

Como não rolou (ainda) ser veterinário eu decidi seguir minha segunda paixão que é a tecnologia e hoje sou Programador!

Entrei na T.I como professor em escola de informática e pouco depois comecei a programar em Perl e PHP, isso em meados de 1998, ai depois disso tive uma série de experiencias com outras tecnologias como ASP, C, C/CASL (uma linguagem C based especifica para Palm O.S), inclusive já estive durante algum tempo no lado negro da força quando me especializei em tecnologias Microsoft e fiz até uma certificação em C#/.NET (MCAD). Também trabalhei como DBA e programei muito em linguagem SQL no Oracle e no SQLServer. (dá #medo só de lembrar daquelas procedures, jobs e triggers).

Python eu conheci em 2003, mesma época em que entrei na faculdade de Sistemas de Informação, lá se utilizava Python para automatizar tarefas de SysAdmin e parse de arquivos de texto, ai um pouco depois participei de alguns projetos profissionais e academicos usando e colaborando com o Kurumin Linux e pude aprender muito de Python com o Carlos Morimoto. Por volta de 2005 eu vi a luz no fim do tunel e a chance trocar o PHP por algo melhor quando conheci um novo framework chamado Pylons, passei a acompanhar seu desenvolvimento até que consegui através de uma das listas de discussão do Pylons um Job de grande porte utilizando o framework. (Uma questão curiosa é que o Django teria sido lançado apenas alguns meses antes do Pylons e mesmo assim eu passei um bom tempo sem nem mesmo ouvir falar no Django.).

Infelizmente nesta época não existia mercado de trabalho para Python e então eu logo tive que voltar a trabalhar com .NET, aprendi a programar em C# e tirei minha certificação MS ficando entre 2007 e 2009 desenvolvendo projetos de ECM, ERP, WMS e GEO utilizando tecnologias Microsoft. Assumi um cargo de gerente de projetos/scrum master e em busca de novas tecnologias para a empresa acabei conhecendo o web2py no final de 2008 e apesar de eu estar mergulhado em .NET eu sempre dava um jeito de acompanhar a evolução do web2py, até que por incentivo de meu amigo @elcio da Visie eu acabei tomando a decisão de me aprofundar mais no framework e inseri-lo em novos projetos na empresa em que trabalhava.

Eu comecei então a contribuir com documentação, testes e em pouco tempo estava contribuindo com código, tive a sorte de entrar no time de dev do web2py bem na época em que o framework estava sendo reescrito e aprendi muita coisa, em pouco tempo me tornei um dos principais contribuidores do framework que passou a ser minha ferramenta profissional principal, ai por isso em 2010 eu iniciei o CursoDePython.com.br e desde então tenho trabalhado com treinamentos de Python e de web2py (que na minha opinião é o melhor framework para ensino). Já perdi as contas de quantas pessoas já passaram pelo curso, mas com certeza foram muitas tanto no online quanto no in-company, posso dizer que a frase “é ensinando que se aprende” é realmente verdadeira pois grande parte do que sei de desenvolvimento web e Python eu aprendi mesmo com nas experiências com os alunos.

Mas o mercado de trabalho para web2py infelizmente ainda não é dos melhores e eu tive que dar uma “abandonada” no projeto para me manter no mercado de trabalho e então comecei a trabalhar com Django no final de 2011 em uma startup chamada Dr.Busca, foi muito legal aprendi muito sobre Django que até então eu só tinha ouvido falar, aprendi a ama-lo e a odia-lo ao mesmo tempo! Por conta desta experiência com Django eu entrei na YACOWS em 2013 e tive a oportunidade de trabalhar com projetos bem bacanas, desenvolvemos um CMS para grandes portais usando Django e mais uma série de tecnologias de alta escala, desenvolvi sites de grande visibilidade como os portais JovemPan, Virgula e Revista Rolling Stone. Na Yacows trabalhei com profissionais muito competentes com quem aprendi muita coisa e com uma galera muito bacana que eu já conhecia da comunidade Python.

No ínicio de 2014 eu decidi sair da YACOWS em busca de novas experiências e atualmente sou Programador na equipe de inovação da Catho Online, trabalhamos com Machine Learning, Big Data, Data Mining e uma série de experimentos legais todos com Python! — “Python é vida!” - A frase que a galera utiliza por aqui!

E Web2py? O que você poderia falar sobre ele, já que é um dos principais colaboradores do projeto? E qual será o futuro dele?

O web2py na minha opinião é uma obra de pura genialidade, o Massimo Di Pierro é uma das pessoas que eu mais admiro pela seu conhecimento e visão, além disso é admiravél a dedicação dele ao projeto tendo conseguido durante tanto tempo manter e evoluir o web2py para um dos principais frameworks web do mercado apesar de todas as controvérsias envolvendo o web2py.

O que muita gente não percebe é que o web2py não é apenas um framework web, o web2py é um manifesto pela liberdade de expressão, ou melhor, liberdade de codificação, como o próprio Massimo diz em suas palestras “Desenvolvimento web deveria ser fácil” e é exatamente isso que o web2py propoe, uma ferramenta fácil e acessível para que qualquer pessoa com mínimos conhecimentos técnicos possa desenvolver seus próprio aplicativos web, escaláveis e com tudo o que tem direito. Só por isso o web2py já merece um lugar bem especial na comunidade Python, o web2py deveria ser muito mais amado pelos Pythonistas!

Além disso o web2py é o único framework realmente full-stack, ou seja, ele tem tudo, é auto contido, não depende de nada além dele mesmo e isso é realmente mágico, eu já treinei pessoas que não conheciam quase nada de programação e essas pessoas criaram portais e até iniciaram empresas com web2py. é lindo!

Mas, nem tudo são flores, e o mercado funciona um pouco diferente, grandes empresas precisam de uma certa “validação” e isso o web2py só tem na area acadêmica e em projetos internos, além disso a própria comunidade não conseguiu absorver a idéia de um framework cheio de mágicas e isso acabou gerando muita confusão, tem gente que nunca usou o web2py, nem sabe como funciona e mesmo assim fala mal do framework.

Hoje em dia eu continuo mantendo o portal web2pyslices que foi desenvolvido com o Movuca CMS (que criei usando o web2py), além disso tenho o portal www.menuvegano.com.br que também roda com esse CMS. Mas não utilizo web2py em meus novos projetos pois acabei não concordando com algumas decisões do time de desenvolvimento do framework, eu cheguei a codificar e sugerir mudanças na forma como o web2py lida com os models de dados, também acredito que o sistema de plugins deveria ser mais desacoplado além de que tem melhorias a serem feitas as ferramentas de admin e geração de widgets. Porém entendo perfeitamente o fato do Massimo e do time quererem seguir os principios de compatibilidade e independencia, portanto no fundo admiro bastante esta estabilidade como projeto Open Source focado em facilidade e ensino, mas tenho objeções ao uso dele em projetos com times muito grandes e projetos que precisem crescer de verdade.

O futuro do web2py na minha opinião não está bem definido, não existem esforços para ele funcionar no Python 3 e o web2py parece que será um projeto totalmente diferente e isso realmente daria muito trabalho (assim como aconteceu com o Pylons na transição para Pyramid). Eu vejo o web2py com um futuro brilhante como ferramenta de prototipação, de ensino, como framework para desenvolvimento de aplicativos de baixa escala e em equipes pequenas principalmente quando o time ainda não é tão experiente. Além disso o web2py é perfeito para startups que precisam validar suas idéias. Com certeza a melhor forma de aprender desenvolvimento web e Python é através do web2py.

Você desenvolveu 2 projetos de CMS em Python, o Opps CMS feito em Django e o Quokka CMS em Flask? Quais são as vantagens de cada um e como foi a experiência?

O Opps CMS foi um dos maiores projetos em que já trabalhei tanto pelo tamanho do projeto quanto pela quantidade de pessoas envolvidas, em poucos meses desenvolvemos mais de 20 apps para o CMS e colocamos no ar grandes portais como o Virgula, JovemPan AM e JovemPan FM. Esses projetos além de Django envolveram tecnologias diversas como NoSQL, Redis, mongo, SSE, PostGres, Mysql e servidores web de alta disponibilidade com Nginx, varnish etc. Foi uma experiência em que pude aprender muita coisa mesmo. O Opps tem a vantagem de ser um CMS desenvolvido durante o “voo” pois em todos esses projetos nós migramos os sites existentes e continuamos desenvolvendo junto o feedback das redações de cada meio de comunicação e isso dá uma base muito boa para conhecer o mercado editorial e desenvolver coisas realmente uteis para eles. É um projeto bem legal que está em pleno desenvolvimento!

Com a experiência do Opps eu pude aprender muito sobre CMS e fui pesquisar mais sobre o tema, testei Plone, Drupal, Concrete5, Liferay e comecei até chegar a conclusão de que CMS precisa principalmente de 3 coisas:

  1. Instalação fácil e automatizada
  2. Temas e plugins faceis de instalar e desenvolver
  3. Dinamismo na estrutura de dados

O item 3 é o mais critico e por isso conclui que bancos de dados relacionais com esquema fechado não servem para CMS em que você tem mais de um portal com necessidades diferentes utilizando e nesse ponto até os mais famosos como wordpress e drupal sofrem com esquema de banco de dados. Ai é que mora o segredo do Plone e por isso decidi criar um CMS utilizando um banco schemaless.

O Quokka CMS surgiu dessa vontade de ter uma CMS realmente dinâmico em que eu pudesse desenvolver tanto um blog quanto um mega portal sem a dor de cabeça de manter migrations de bancos de dados e utilizando Python. Como não achei nenhum projeto Python que fosse ao mesmo tempo simples de programar e com estas caracteristicas eu decidi pegar o que aprendi com o Opps e aplicar em um novo projeto.

logo

Para este projeto escolhi o Flask (que se tornou meu framework Python preferido para projetos de larga escala) e o MongoDB por conta de sua facilidade e esquema dinamico.

Hoje no Quokka conto principalmente com a colaboração do Ellison Leão que trabalhou comigo na Yacows é o co-maintainer do Quokka, ainda tem muito a evoluir e a lista de issues tanto de bugfixes quanto de melhorias está bem grande mesmo, porém o Quokka já provou que é um projeto viável e tem um grande número de pessoas utilizando, eu inclusive já coloquei mais de 3 sites no ar com o CMS e como o Quokka a maioria das features que um framework full-stack precisa ele acabou virando uma espécie de aplication framework e tenho feito apps de todo tipo, até mesmo de ecommerce e e-learning já tem módulos desenvolvidos.

Gostaria de ter mais gente da comunidade Python brasileira para integrar o time de maintainer junto comigo e com o Ellison e levarmos esse projeto para o nível de um CMS como wordpress ou Joomla, sei que parece muita pretensão mas é preciso pensar grande.

E temos também uma publicação do livro Web2py Development Application CookBook? Do que ele se trata?

Em 2011 ajudei a escrever o livro junto com o Massimo e outros membros do time de desenvolvimento do web2py, foi escrito em conjunto com mais 7 autores, o resultado final da diagramação não ficou muito bom por alguns vacilos da editora, mas eu considero o livro uma fonte essencial para quem deseja conhecer web2py, tem receitas fáceis para fazer quase tudo.

Escrever não dá muito retorno financeiro e por isso nós decidimos doar os royalties do livro, primeiro foi para Red Cross e depois doamos uma parte da grana também para patrocinar a Python Brasil do Rio de janeiro.

Além disso a experiência de publicar um livro rendeu bons frutos e atualmente estou escrevendo um novo livro de desenvolvimento web com Python e Flask que será lançado em portuguẽs!

Livro na amazon: http://www.amazon.com/Bruno-Cezar-Rocha/e/B007KZBV4M

Como foi ser nomeado um dos membros da Python Software Foundation? E o que acha da nova medida abrindo as inscrições a todas as pessoas interessadas?

Fui nomeado pelo Massimo Di Pierro que já era membro da PSF, eu fiquei muito feliz e honrado e ao mesmo tempo na época achei que a nomeação era injusta pois temos tantos nomes na comunidade brasileira que com certeza mereciam a nomeação mais do que eu, cheguei a pensar em recusar a nomeação pois achava que gente como o @osantana, @rsenra entre muitos outros mereciam mais do que eu entrar para a lista de brasileiros na PSF pois são pessoas com muito mais contribuições para a comunidade Python.

Porém nessa época coincidiu com algumas threads envolvendo o web2py onde um conhecido desenvolvedor da comunidade internacional “desdenhou” da participação do web2py no mercado de frameworks, o Massimo havia nomeado eu e mais um integrande do time web2py e eu recebi muitas mensagens e acabei ficando amigo de muita gente de dentro da PSF e isso então me fez aceitar que tinhamos que particpar principalmente por causa do web2py.

Portanto considero que a minha nomeação para a PSF foi uma forma de validar a importância que o web2py tem para a comunidade Python e achei que era válido ter mais pessoas da comunidade web2py na PSF, isso foi realmente uma quebra de barreiras para mim e coincidentemente depois de vários episódios o web2py parece que finalmente passou a ser um framework respeitado e entendido.

Resumindo, agradeço muito ao Massimo pela minha nomeação e dedico a nomeação a toda a comunidade web2py pois foi por conta do meu trabalho com o web2py que fui reconhecido como um MVP (Most Valuable Pythonista). LOL!

Apoio a medida de abrir a inscrição a PSF para qualquer membro da comunidade, isso com certeza será benéfico ao Python e irá fortalecer a comunidade, porém acredito que deva ser feito com estratégias mais elaboradas e oferecendo vantagens de verdade para os afiliados, simplesmente abrir um formulário de filiação não é algo que vai melhorar em nada.

Eu fui vice-presidente da APyB (associação Python Brasil) e acompanhei de perto muita discussão e até uma quase “morte” da associação justamente por este problema de falta de “sentido” e falta de rumo, a APyB tanto quantoa PSF precisam definir melhor qual o papel e quais as vantagens de ser um membro, caso contrário tenho certeza que a maioria das pessoas não irá se filiar apenas por caridade a comunidade. Volto a frisar uma coisa que disse que e que fui altamente criticado “Somos uma comunidade de profissionais e não uma rede de caridade!” opinião pessoal, Python para mim é trabalho, profissional e eu gostaria de ter as associações que o representam voltadas a esta visão, para permitir que a linguagem e o ecossistema cresça, seja mais respeitado e considerado por grandes empresas e tenha mais emprego, que no final é o que todo mundo quer!

Há também o projeto Natal Animal, no qual foi feito com o Quokka CMS. Conte um pouco sobre a experiência de utilizar esse framework em produção?

O NatalAnimal.com.br foi iniciado por mim e pela @claupapp (minha esposa) em 2010 e é um projeto que a cada ano arrecada recursos no modelo “crowfunding” para ajudar abrigos e santuários de animais abandonados ou que sofreram maus tratos, é como um “criança esperança” mas é para os animais não humanos que não costumam ter apoio de grandes empresas ou dos governos.

A versão inicial era feita em web2py mas como em 2013 eu estava desenvolvendo o Quokka desenvolvi fazer a nova versão em Flask com o Quokka e foi super legal, por causa disso desenvolvi o módulo quokka-cart e integrei com meios de pagamentos, desenvolvi tbm o quokka-fundraising e coloquei o projeto no ar meio em cima da hora, o quokka aguentou bem a demanda que cresceu muito neste ano tivemos muitas transações de pagamento e validações que funcionaram com celery e eu fiquei bem feliz de ver o CMS sendo usado para algo além de páginas e blogs.

Flask é um framework sensacional e muito completo apesar de ser micro, o Quokka tem sido uma tentativa de ter um pacote full-stack em cima do flask e tem funcionado muito bem!


Para mais informações, veja em http://brunorocha.org


por Eric Hideki em 01 de May de 2014 às 16:01

1970799_1416642945255099_2110285372_n

Finalizando as perguntas em grande estilo, hoje temos outra das organizadoras do Pyladies Brasil, a Clara Nobre, no qual fala sobre suas impressões sobre tudo o que aconteceu nesse ótimo evento.

Gostaria que se apresentasse e falasse um pouco sobre você.

1970799_1416642945255099_2110285372_n

22 anos, brasileira, graduanda em Ciência da Computação(UFRN), com curso técnico profissionalizante de Web Design(2011) na IT Cursos e atualmente Suporte de Analista de Infraestrutura da empresa Veezor Network Intelligence. Sou entusiasta da linguagem Python , tenho interesse nas áreas de Infraestrutura de Redes, Linux, Android, Software Livre e Cloud Computing. Sou Co Founder da comunidade PyLadies Brasil e faço parte do grupo Potilivre aqui do Estado.

Quais foram as motivações para criar um evento da Pyladies no Brasil?

As minhas motivações foram as mesmas da criação do projeto lá fora, porquê não mostrar ao mundo que as mulheres na área de TI são tão competentes quanto e ainda mais, porquẽ não unir mulheres que estão paradas, mas que entendem do assunto ou tem interesse, e mostrar a elas que é possivel se reunirem e produzirem algo juntas? A minha motivação foi essa, um evento feito para mulheres e por mulheres de TI.

Qual foi o feedback dos participantes? O que lhe surpreendeu?

O que me surpreendeu não foi nem o feedback dos participantes, foi a diversidade de pessoas que estiveram no evento conosco. Existiam mulheres de diversas áreas e com idades bem distintas que fizeram meus olhos brilharem ao ver que alcaçamos as Ladies de nossa cidade independente delas saberem programar ou não.

Por que Python? O que a linguagem trouxe de facilidade para ensino de programação a pessoas sem qualquer conhecimento?

Para mim é algo bem pessoal, eu adoro passar horas analisando linhas de código no meu bash do Linux, eu realmente me divirto lendo até logs, entretanto eu nucna gostei das disciplinas de programação, e continuo sem gostar, que vejo na Universidade. Não estou desmerecendo linguagem alguma, mas Shell Script por ser uma linguagem de comandos, fez com o que o meu interesse em programação fosse ligado a implementação de algo que eu pudesse acompanhar e ver a cada mudança, outras linguagens por seu nível de complexidade precisam que você chame tanta biblioteca e tanto arquivo que ás  vezes não é possível fazer. Portanto, conhecer Python foi amor pela primeira vista, uma linguagem que me permitia utilizar scripts e aprender tudo o que eu acredito precisar nessa vida, daí fiz o curso Python Para Zumbis do Fernando Masanori e gostei  da linuagem e quis muito aprendê-la e com o tempo fui vendo que a sua sintaxe era tão simples que seria a melhor forma de alguém aprender a programar.

Quanto foi importante o apoio da comunidade para a realização do evento?

Eu só tenho que agradecer a Potilivre que mesmo em sua maioria com integrantes homens, estavam ali nos ajudando e auxiliando e especialmente na parte de correções e cortes. E aos nossos patrocinadores que estiveram colaborado desde o começo, assim como a Empresa Evolux que nos deu total apoio, especialmente porque alguns dos funcionários fazem parte da Potilivre e acabaram sendo os monitores majoritários em nosso evento, apesar de ter treinado as meninas que foram monitoras.



por Eric Hideki em 01 de May de 2014 às 15:10

Elcio Luiz Ferreira

VISIE: 01.05 O que é Cloud Computing

Entenda o termo mais mal usado da internet hoje e não compre gato por lebre.
Views:
0
0
ratings
Time:
11:29
More in
Science & Technology

O post VISIE: 01.05 O que é Cloud Computing apareceu primeiro em fechaTag.

por elcio em 01 de May de 2014 às 13:00

April 30, 2014

Elcio Luiz Ferreira

VISIE: 01.04 A Janela Quebrada em Software

A teoria da janela quebrada em projetos de software.
Pense objetivamente. Divida seu software. Seja caprichoso.
Views:
1
0
ratings
Time:
10:18
More in
Science & Technology

O post VISIE: 01.04 A Janela Quebrada em Software apareceu primeiro em fechaTag.

por elcio em 30 de April de 2014 às 13:34

April 29, 2014

Magnun Leno

Curso de Filosofia GNU - Parte 9

No último texto do Curso de Filosofia GNU os autores, Richard Stallman e Bradley M. Kuhn, chamam a nossa atenção para o confronto entre os conceitos de liberdade e poder. Em dias de Snowden e NSA o software livre deveria ganhar tração, mas parece que todos ainda se sentem muito confortáveis sabendo que uma minoria de poderosos dita as regras e controla todo o nosso dia-a-dia através do software que utilizamos.

GNU/Linux

Lembrando que este é um conteúdo livre obtido no CDTC.

Curso de Filosofia GNU - Parte 9 é um artigo original de Mind Bending

por Magnun em 29 de April de 2014 às 13:00