21 agosto 2013

as PEPs do Python

Hoje vou falar das PEPs do Python.

PEPs são Propostas de Melhoria do Python (Pyhton Enhancement Proposal - PEP) que implica em padrões, melhorias, funcionalidades, estruturas, dicas e por ai vai.

Existe uma lista grande delas que é chamada de pep #0. Dentre estas algumas são indicadas e valem a pena serem lidas.

A pep 20 por exemplo é esta abaixo, ela é um EasterEgg do Python, para encontra-la no próprio Python basta colocar a seguinte linha de comando e dar enter: >>> import this

import this





O Zen de Python, por Tim Peters
Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Plano é melhor que aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o suficiente para quebrar as regras.
Embora praticidade vença pureza.
Erros nunca deveriam passar em silêncio.
A menos que explicitamente silenciados.
Diante da ambiguidade, recuse a tentação de adivinhar.
Deve haver um -- e preferencialmente só um -- modo óbvio para fazer isso.
Apesar de que daquela maneira pode não ser óbvia à primeira vista, a menos que você seja holandês.
Agora é melhor que nunca.
Embora nunca frequentemente seja melhor que *agora*.
Se a implementação é difícil de explicar, é uma má ideia.
Se a implementação é fácil de explicar, pode ser uma boa ideia.
Espaços são uma grande ideia -- vamos fazer mais desses!

Esses são os princípios da linguagem. Não é uma regra oficial, mas uma linha de conduta para que os programas nesta linguagem sejam sempre apresentáveis. Existem muitas outras como falei acima e vale procurar ler várias, mas por enquanto fiquem com o link para a PEP #8, que é um guia de estilo para a linguagem Python, vale a pena.

See you folks!

20 agosto 2013

Codecademy - o futuro da educação

Hoje vou falar de cursos online e para falar disso vou citar exclusivamente o Codecademy que sinceramente é a coisa mais interessante em termos de cursos online que eu já utilizei.

O Codecademy é simplesmente uma ferramenta poderosa se você tiver fome por conhecimento, digo na área de programação, claro.

A princípio a primeira coisa que você verá é uma página de boas vindas e um mini tuto de como as coisas serão dali adiante. Você já é levado a aprender algum conceito de programação de forma orgânica. Ao adentrar o site você fará seu cadastro e terá várias opções a escolher.As linguagens são variadas indo do JavaScript, HTML/CSS, PHP, Python, Ruby e chegando em API's.

Todas essas linguagens serão detalhadamente trabalhadas por meio de uma interface de estudo muito simples. É provável que boa parte do pessoal ache ruim o fato do site ser em inglês, mas acredito que para quem deseja aprender isso seja o de menos.
Um fator que incentiva a evolução do estudo é o ganho de certos badges(emblemas) que dão a sensação de trabalho cumprido, de troféu mesmo, uma bobagem mas muito interessante que incentiva principalmente crianças no estudo da programação.
Eu quando descobri sobre o site já fui atrás do Python e venho me dedicando nas horas vagas, as vezes não, em destrinchar a linguagem. É extremamente gratificante se deparar com uma ferramenta de ensino que realmente funciona. Apesar de ser em inglês e minha proficiência na linguagem não ser extrema tenho me saído muito bem, sem exageros. Eles realmente prezam pela educação através de exercícios extremamente bem pensados e uma evolução gradual que eu jamais tinha visto. É curioso ver que adentraram em função nas primeiras lições discretamente, fazendo a pessoa pensar no geral desde os primeiros passos.

É interessante ver que no desenrolar do curso você será levado a desenvolver projetos reais. Como por exemplo na parte de HTML/CSS você cria uma página de fato, claro dentro do sistema deles.

Há sessões para professores chamada After-School Programming onde são criados grupos para os alunos trabalharem juntos. Ainda não entrei nessa sessão. Vou verificar depois para ver como é de fato isso. Vocês também terão o Codecademy labs que são substitutos na página para as IDE's das linguagens usadas no site para não necessitar baixar nenhum programa. Para quem não souber o que é uma IDE basta clicar no link.

E como citei sobre estudo online tem uma matéria do Olhar Digital que trata disso pela visão de alguns recrutadores. Eu sinceramente não vejo problema algum com o estudo online, acho até que essa modalidade em algum momento vai se tornar uma ferramenta bem comum no dia a dia. O estudo online, ou melhor "à distância", precisa somente de uma forma de comprovação de proficiência mais oficial, no caso do Codecademy as provas são feitas de maneira não presencial então para demonstrar proficiência de fato você vai ter de provar na raça por intermédio de algum projeto concreto. O que não é de nenhum modo ruim, mas poderá desanimar quem gosta de seguir o líder se mostrando apto por meio de notas e diplomas. Claro que isso é uma condição de algumas graduações à distância. Muitas destas, quando desenvolvidas por instituições como faculdades e escolas tem as aulas à distância com provas presenciais. Enfim. Seja de uma forma ou de outra eu sou adepto de que o conhecimento faz a diferença e não é a prova que vai demonstrar isso. Seja por meio de suas notas, um diploma ou um projeto o que vale mesmo é como você se sairá no "vamos ver"!

Portanto sintam-se a vontade para passar por lá e diga nos comentários se de fato esse mecanismo será mesmo o futuro da educação.

Até a próxima!

09 agosto 2013

Android Device Manager

Olá Geeks de plantão!

Hoje venho eu aqui para falar de algo completamente diferente dos outros posts, mas que é de utilidade pública! Temos agora a função perfeita de localizar nossos Androids (Android 2.2 e superiores - me confirmem esse detalhe nos comentários ok) e venho explicar aqui de forma rápida como fazer isso:

Procurei na internet, mas as informações estão um tanto quanto distorcidas da realidade. Pelo que vi e provei não é nenhum aplicativo que será instalado. Não! Você não precisa procurar no Google Play um app para isso. Basta somente acessar esse link aqui Android Device Manager. Esteja conectado ao Google com sua conta padrão, quero dizer, a mesma do seu dispositivo. (atualizado! 18/02/2014)

Automaticamente a página irá identificar seus dispositivos e irá mostrar a sua localização. Como podem notar essa página ai está em inglês e como sou curioso testei em português (troque o final do link por pt_BR ao invés de en_US) e verá que a página fica em português mas ainda não aparece nada de mapa, pelo menos não quando testei.

20 julho 2013

Fechamento abrupto da janela...

Saudações Geeks para os Geeks de plantão!

Após um bom tempo, sem tempo, resolvo voltar aqui e fazer deste lugar algo mais. Como comecei a trabalhar muitas coisas ficaram de lado, mas pensei um pouco e comecei a vincular ao meu novo ofício minhas destrezas de programador (rsrsrsrs).

Sendo assim me coloquei a fazer um aplicativo que auxiliasse a empresa num cálculo basicão que vez ou outra precisam e por milagre divino eu consegui. Finalizei o código básico em três dias. Nesse meio tempo relembrei tudo o que poderia à medida que eu necessitei. Ainda estou implementando mais uns recursos antes de lançar o programa Beta e isso vai requerer um tempo maior, mas o principal eu já consegui.

Assim, nesse vai e vem das velhas fontes de informação sobre Python me deparei com algo que já me irritou antes, deveras. A janela teima em não esperar e fecha numa velocidade absurda. Procurei muito, sempre achando que meses atrás eu tinha encontrado um meio simples que sinceramente não lembro. (Na verdade acho que estou trocando a forma de C++ pensando que era Python. =/ ). Sendo assim, como não consigo me relembrar pensei em fazer uma gambiarra que funcionou. Eu ainda acredito que há uma maneira muito mais simples, um comando de uma palavra só e ficarei grato se alguém postar aqui, mas o que desenvolvo com esse post é justamente o improviso. Não sabe? Não lembra? Mesmo assim ainda poderá haver um meio de resolver.

Pois bem. Vejam o super código abaixo:


Como podem ver, esse super código, se você clicar no arquivo .py, onde ele será executado independente do IDE, a janela nem ao menos demorará o suficiente para que olhemos pro canto certo. Isso é um inconveniente que sinceramente acho que todas as linguagens já deviam ter uma configuração padrão para evitar isso, mas como não tem há uma gambiarra pra isso muito simples utilizando IF e WHILE.

O WHILE será usado para implementar um comando de fechamento de programa. Primeiro vamos criar uma variável global (padronizei de EXIT em caixa alta mesmo) onde esta variável receberá o valor 0.

Observem abaixo:



Após iniciar o loop while e trabalhar o corpo do código é necessário criar uma condição IF como podem ver no exemplo acima. Essa condição definirá que o usuário está mesmo querendo terminar o programa e portanto o valor da variável global EXIT mudará para 0 fazendo com que o loop WHILE termine. Podem ver que há duas declarações de IF aninhadas. A primeira simplesmente determina se o usuário quer sair de fato e a segunda condição IF cria somente um travamento para janela, que fica esperando um valor qualquer já que o IF e o ELSE vão mudar o valor da variável EXIT para 0 independentemente.

Esse segundo IF é o segredo, fazendo com que a janela permaneça aberta até pelo menos o clique do enter. Uma solução não muito elegante, mas que vai auxiliar enquanto uma mais direta não aparece.

Como provavelmente notaram, há várias condições de resposta de SIM na primeira condição IF. Isso é muito útil já que o usuário terá opções diversas para conseguir finalizar o programa. Verifiquem bem todas as opções e tentem entender por que todas elas foram feitas.

That's all folks!

Isso está me auxiliando enquanto não recordo a linha de comando exata. No entanto, como deixei claro, o post é para mostrar mesmo que independente de implementações que tenhamos na manga, ainda assim temos possibilidade de resolver o que quer que seja. (claro, que não seja bug da linguagem!)

See you!

ATUALIZAÇÃO---------------------- 15/08/2013


Olá. Com o tempo sempre aparecem coisas mais interessantes e começamos a ver que antes poderíamos ter feito diferente. Esse é um dos casos e acredito que voltarei para esse post para atualizar várias vezes, visto que os exemplos acima são de fato extremamente iniciantes.


Portanto, assim sendo, aqui vai uma atualização para reduzir a quantidade de opções no "IF". Essa redução ajuda a deixar o código menos bagunçado, feio mesmo. Ainda não é a melhor alteração a ser feita mas por enquanto serve. Verifique o novo exemplo:



Aqui está sendo utilizado o ".lower()" que faz com que o que for digitado pelo usuário não tenha caracteres em caixa alta. O mesmo pode ser pensado no contrário com o ".upper()" e colocando as opções de acordo no "IF".

04 março 2013

Pygame… start!

Para quem se interessou pelo pygame eu vou tentar trazer alguma luz sobre o caso e como utilizar os
recursos à medida que eu mesmo consiga absorver o conteúdo.

A princípio é necessário instalar a biblioteca do pygame. Acesse esse link e escolha o que se encaixa com o seu S.O. e versão do python. Para começar vamos olhar o exemplo abaixo:



O import pygame importa o pacote com todos os módulos do pygame instalados e a chamada "pygame.init()" inicializa cada um desses módulos. Isso deve ser feito sempre, claro. Provavelmente você encontrará um pacote sendo inicializado junto, o sys.


A inicialização do módulo sys vai servir primeiramente para quando for executado o comando quit, mais a frente ficará mais claro.

Agora vamos para uma janela:


A primeira linha serve para ser colocado o tamanho da janela, height - altura, width - largura. O que aparece na última linha display.set_mode() é uma função que irá pegar os valores informados em size. Esses valores podem ser indicados diretamente na função como no exemplo abaixo:


Sendo exatamente com dois parênteses como mostrado e só com um quando se usa a variável size. Estou incerto de chamar size de variável ou de atributo, mas como o nome size não se encontra dentro de uma class vou considerar uma variável até segunda ordem.

Usando um pouco de dedução o speed serve para definir a velocidade de movimentação dentro das coordenadas x e y. Nesse caso ele, o objeto escolhido sofrerá uma mudança total de um movimento em diagonal pra em linha reta se simplesmente trocarmos um dos números - 2 para 0 por exemplo.

Na linha que encontramos black temos três valores que são o Red, Green, Blue. Essa variável será utilizada mais adiante.

Agora vemos uma parte interessante que lê uma imagem que deverá inicialmente estar dentro da mesma pasta onde será salvo o arquivo .py. Se salvar com outro nome basta trocar o ball.bmp por ele.


O image.load() é a função que carregará a imagem e o get_rect() é onde terá a coordenada do retângulo. Nesse caso imagino que o padrão está sendo determinado ao não ser informado nada.

Agora na parte final desse código temos um loop while. Nessa parte do while vamos encontrar a função quit que mencionei anteriormente. É ai, nesse primeiro if, que se a janela for fechada o programa será terminado. Acredito que isso se refira a limpar da memória tudo que foi carregado para gerar a janela. Vou confirmar isso posteriormente.


Após o ballrect podemos ver como foi feito para que a imagem ao tocar nas laterais venha a ter um movimento oposto ao inicial.

Mais abaixo encontramos o .fill que serve para determinar a cor de fundo da tela, é onde utilizamos o black determinado no inicio. As outras funções eu ainda não compreendi com clareza, por isso vou deixar pra depois.

Esse código é o mesmo que se encontra na wiki do pygame. Basta clicar nesse link para acessar a página, mas o código completo pode ser visto clicando no 'continue lendo', abaixo. Se não estiver vendo o continue lendo provavelmente você já vai estar vendo o código completo. Ao testar você verá uma bola ou imagem se movimentar dentro da janela sempre que o mouse se mover. Ainda estou atrás de descobrir o por que da dependência do mouse. O que ou qual função faz isso nesse código. Qualquer dúvida adicione uma resposta abaixo. Ou se souber algo sobre isso que mencionei agora ficarei grato em saber.