Listas em zebra com CSS3.

Tadeu's Dev
on Google+

   Olá, hoje irei demonstrar um simples uso de CSS3 para estilazar em zebra uma lista não ordenada UL.
   
   Estive testando algumas formas de se fazer lista(ul) zebra com CSS3, usando a pseudo-classe :nth-child()  
   
  Selecionando elementos sempre pulando um e após do primeiro.
   Se adicionarmos :nth-child(2n) estaremos selecionando todos elementos após o primeiro, isso irá gerar uma lista zebra sem focar o primeiro elemento.
   
   <style>
       ul li:nth-child(2n) {background-color:#f4f4f4}
   </style>
   <ul>  
     <li>A</li>
     <li>B</li>
     <li>C</li>
     <li>D</li>
     <li>E</li>
   </u>

   Selecionando elementos partindo do primeiro sempre pulando um.
   Se adicionarmos :nth-child(2n+1) estaremos selecionando todos elementos após o primeiro, isso irá gerar uma lista zebra partindo do primeiro elemento.
   
   <style>
       ul li:nth-child(2n) {background-color:#f4f4f4}
   </style>
   <ul>  
     <li>A</li>
     <li>B</li>
     <li>C</li>
     <li>D</li>
     <li>E</li>
   </u>

  Aconselho ler o seguinte artigo que ajuda a compreender essa pseudo-classe e suas derivadas.
  http://reference.sitepoint.com/css/understandingnthchildexpressions
 
 o/
tadeu l.p.g
Desenvolvedor Front/Back-End.

Comments [0]

jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...

Tadeu's Dev
on Google+

Olá, hoje vou falar aqui sobre o erro que é gerado geralmente no Internet Explorer quando utiliza-se o plugin jCarousel para gerar carrosseis :D, o erro que aparece no console é o seguinte.

SCRIPT5022: jCarousel: No width/height set for items. This will cause an infinite loop. Aborting... 
jquery.jcarousel.min.js, linha 16 Caractere 8231

Eu geralmente sempre pego esse erro e antes costumava perder um certo tempo para entender porquê ele acontecia!

Resolução:
Nos meus casos, o que sempre gera esse problema é quando eu tento utilizar o plugin e não declaro o tamanho em largura para os elementos a serem rotacionados, no meu caso eu sempre crio listas (<ul>) e flutuo seus elementos filhos(<li>), o resto o plugin faz( cácula o tamanho da lista com a quantidade e preenchimento de cada item da lista, porém no IE isso não ocorre perfeitamente - dae o problema.), como o plugin não calcula o tamanho do item da lista ele gera um erro, então para ajudar o plugin você declara exatamente o tamanho do item da lista, dessa forma o erro acima não aparece e o plugin funciona corretamente!

ex:
Antes:
ul#carrossel {list-style:none;}
#carrossel li { float:left; }

Depois:
ul#carrossel {list-style:none;}
#carrossel li { float:left; width:192px;}

Espero que ajude alguém :D
o/

@anestesya

Filed under  //   carousel   css   fast web dev   javascript   jcarousel   jquery   slider  

Comments [1]

Como corrigir z-index do iframe do Youtube adicionado no meu site?

Tadeu's Dev
on Google+

Recentemente estava usando o player do youtube no meu site para apresentar os videos dentro das divs, porém percebi que quando usava um lightbox para mostrar outros videos, o iframe do youtube ficava com sobreposto as camadas do Lightbox. Pesquisando descobri que para corrigir o problema de z-index em iframes embeds do Youtube, basta adicionar um parametro na SRC do iframe:

A tag fornecida pelo Youtube para incorporar um vídeo no seu site é a seguinte:

<iframe width="554" height="322" src="http://www.youtube.com/embed/av5LPCm144E" frameborder="0" allowfullscreen...

Da forma acima ocorre o problema com o z-index, para corrigir o problema basta adicionar o parametro "wmode=transparent" no final da URL no atributo SRC do iframe, ficando assim:

<iframe width="554" height="322" src="http://www.youtube.com/embed/av5LPCm144E?wmode=transparent" frameborder="0" allowfullscreen...

o/
@anestesya

Comments [0]

Remote Mobile Debug com Weinre.

Tadeu's Dev
on Google+

Olá, hoje o post vai mostrar a você leitor como fazer para utilizar o Web Inspector(presente no chrome) para fazer a depuração do seu web site quando acessado via mobile.Funciona assim, você coloca um script na sua página que vai apontar para o endereço do seu PC com o servidor hospedando uma aplicação de debug, quando o site for executado em um dispositivo qualquer você poderá ter acesso ao debug localmente.

A vantagem de se usar remote debug em dispositivos mobile, é que você tem a opção de utilzar o Web Inspector em tempo real e monitorar as alterações de HTML/CSS/JS.

O que você precisa:
- de prefêrencia um dispositivo móvel, no meu caso estou usando o iPad adquirido na loja Shopfato.com.br
- baixar o software Weinre neste endereço: https://github.com/phonegap/weinre/archives/master

Configurando o ambiente
Para configurar a depuração remota, execute o aplicativo weinre, se você usar OS X basta arrastar o programa para dentro da sua pasta de aplicações e executá-lo, caso você use outro sistema, terá que executar em Java.

  java -jar weinre.jar --boundHost -all- --readTimeout 10 --deathTimeout 30

Vou explicar essas opções: 
 --boundHost -all- permite ao cliente depurar tantro através do IP como do HOSTNAME, isso é útil para quando estamos em redes diferentes.
--readTimeout 10 é o tempo que o servidor usa para ler se foi enviado alguma alteração remota
--deathTimeout 30 é o tempo que o servidor demorar para matar o processo de leitura.

OBS: para uma documentação com maiores informações sobre a execução e configuração do aplicativo weinre dê uma lida na documentação do software em: http://phonegap.github.com/weinre/Running.html
lá também demonstra como criar um arquivo de configuração que é colocado no diretório da aplicação para evitar o uso de parâmetros na linha de comando, útil para a versão Mac.

Agora abra seu navegador e na barra de endereços aponte para http://localhost:8080/ 

0image

Dessa forma você irá cair na página do servidor. Dentro da página existe um link na seção "Target Script", copie a linha de exemplo, algo parecido com:

<script src="http://localhost:8080/target/target-script-min.js#anonymous"></script>

Insira esse script na página web que você quer depurar.

No seu navegador local, execute novamente agora o endereço: http://localhost:8080/client/#anonymous.
Esse endereço vai te levar para a interface de debug, nesta interface na seção Target, clique em um dos itens para selecionar qual dispositivo você vai querer executar a depuração, após selecionar o dispositivo você já pode selecionar algumas das abas como "Elements", "Resources"... etc e começar a depurar a página web direto no seu navegador local.

Image
 

Pronto! Você agora está apto a depurar a página web que é mostrada em seu iPad e modificar a apresentação direto no navegador do seu PC.

o/
@anestesya

Filed under  //   android   css   firebug for iphone   html   iOS   ipad   mobile   remote debug   web inspector   weinre  

Comments [0]

Desenvolvimento web ágil com Zen Coding + Aptana Studio!

Tadeu's Dev
on Google+

Zen Coding é um plugin que pode ser instalado em diversos Editores de Texto e IDE´s de programação, para aumentar a velocidade de desenvolvimento com CSS, HTML, XML/XSL e linguagens HAML via filtros. O principal ponto do Zen Coding é o seu motor de abreviação, que através de expressões nos permitem gerar códigos HTML/CSS e etc, de uma forma rápida. Vamos ver como é isso!

Instalar Zen Coding no Aptanta
Agora que sabemos o que é o Zen Coding, vamos configurá-lo para ser usado dentro do Aptana Studio 3, não se preocupe pois é muito simples. 
Vá em Help -> Install new software..

Clique em "Add" para adicionar um novo local de updates dentro do Aptana.
Dê um nome para o local de atualização do Zen Coding, eu coloquei "Zen Coding", para o endereço coloque: http://zen-coding.ru/eclipse/updates/
Zen Coding irá aparecer como uma subcategoria de "uncategorised", selecione!
Agora basta clicar em "next".

0image

Após instalar basta reiniciar o Aptana!

Escrevendo HTML com Zen Coding!
Após instalar corretamente o Zen Coding ele irá acrescentar um novo menu na barra de ferramentas do Aptana chamado "Zen Coding":

2image

Inicialmente vamos prestar atenção no atalho de tecla Ctrl+E (Expand Abbreviation), esse comando transforma as abreviações/expressões entendidas pelo "Zen" em HTML puro! Então bora lá fazer um teste.

Vamos supor que eu queira criar uma lista de links!
No arquivo HTML e com o Zen instalado eu vou digitar a abreviação:

ul.lista-links>li*3>a[accesskey][href="#"]

Selecione a linha abreviada e use o novo comando  (Expand Abbreviation) ou simplesmente ctrl+e e pronto:

Image

Existe uma boa documentação em como se utilizar o Zen Coding no seguinte endereço: 
http://code.google.com/p/zen-coding/

Também deixo o endereço de um screencast sobre como instalar e usar o Zen Coding no Eclipse.
[screencast]

http://gonzalezmora.com/publications/screencasts/ZenCoding/ZenCoding.html

o/

Twitter: @anestesya

Filed under  //   agil   aptana studio 3   css   eclipse   fast web dev   html   zen coding  

Comments [2]

Less CSS + Media Queries com foco em dispositivos móveis.

Tadeu's Dev
on Google+

Olá, hoje quero demonstrar o uso de CSS3 Media Queries em conjunto com o framework Less CSS, para trabalhar a estilização de páginas para iOS e Android. Os dispositivos que pretendo utilizar nos meus exemplos são um iPod Touch e um iPad.

Antes de começar, gostaria de deixar claro que podemos utilizar duas formas básicas de uso das CSS3 Media Queries para detectar o dispositivo e suas medidas, a primeira delas é através de folhas de estilos externas e a outra forma é utilizando media queries dentro da folha de estilo global.

Manipulando as CSS de acordo com o navegador e o dispositivo.
O mais importante para se trabalhar com Media Queries é saber as medidas o dispositivo responde, por exemplo o Safari no iPhone responde a media querie max-device-width: 480px já o iPad responde a min-device-width: 768px e max-device-width: 1024px;

DICA: Um pequeno detalhe é que para dispositivos que utilizam Android, este dispositivo tem praticamente as mesmas medidas que o iPhone e aceita o uso de media queries max-device-width: 480px, porém existe um pequeno detalhe, nas versões do Android 2.2 para que essa media querie funcione corretamente é preciso adicionar a metatag viewport veja o link sobre a discussão -> https://code.google.com/p/android/issues/detail?id=11961 

Então antes de começar se pretende atingir com o uso de media queries, também dispositivos Android 2.2 ou superior adicione no head do seu HTML a meta tag abaixo:

<meta name="viewport" content="width=device-width" />

Outra dica é para caso você não tenha esses dispositivos em mãos pode-se utilizar a seguinte apicação que emula as diversas telas como iPhone e iPad.
Definindo o uso de folhas de estilo externas com Media Queries.
Se você prefere trabalhar com folhas de estilos separadas em diferentes arquivos, adicione os códigos abaixo no head do seu documento HTML.

<!--[if !IE]>--> <link type="text/css" rel="stylesheet" media="only screen and (max-device-width: 480px)" href="http://example.com/iPhone.css" /> <link type="text/css" rel="stylesheet" media="only screen and (min-device-width: 768px) and (max-device-width: 1024px)" href="http://example.com/iPad.css" /> <!--<![endif]-->

Neste artigo vou utilizar a segunda forma, pois venho trabalhando muito com sistemas fechados que não me permitem alterar o HTML e é nessas horas que dou graças a Deus por ter começado a aprender CSS usando o princípio do site CSS Zen Garden - sim um dos meus primeiros testes com CSS foi participando deste desafio, claro que no começo eu tive sérios problemas com os IE Hacks, mas que hoje já não é mais a minha realidade :D.

Definindo o uso de Media Queries dentro da folha de estilo geral.
O bom uso de media queries dentro do arquivo geral de CSS é a economia nas requisições HTTP que o cliente vai executar no servidor, que no meu caso é muito válido pois trabalho em uma loja virtual onde existe um constante crescimento nos acessos e a tendência é que só aumente, então toda economia nas requisições é válida! 
Ainda com foco na performance, agora estou falando na performance do meu trabalho, em codar tudo isso, vem o uso da Less CSS para me ajudar a separar em arquivos diferentes os estilos para os dispositivos. Em um post anterior(Como usar Less CSS no Windows) mencionei uma forma de trabalhar com Less CSS compilando a CSS geral em uma apartir de diferentes arquivos de folha de estilo.

No meu projeto temos uma única folha de estilo que vou chamar de principal.css, é nela que encontra-se toda a formatação do site e vou inserir modularmente a configuração necessária para mobile via Media Queries. As folhas de estilo irei separá-las com os nomes de fone.css e tablet.css, auto-explicativas né?!

Principal.css
É nesse arquivo que eu faço a chamada para os módulos(.css externas), resolvi colocar a importação dos módulos com CSS através da Less assim quando eu compilar os arquivos .less tudo vai se tornar uma única .css.

principal.less:

@import: "normalize";
@import: "libs";
@import: "tablet-fone";
@import: "tablet";
@import: "fone";

fone-tablet.less:
/* tablet/fone [portrait + landscape], uso para configurações que são padrão para os dois dispositivos */
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px), @media only screen and (max-device-width: 480px) {
  CSS
  }

tablet.less:

/* tabet[portrait + landscape] */
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
   CSS
}

fone.less:

/* fone[portrait + landscape] */
@media only screen and (max-device-width: 480px) {
  CSS
}

Bom é isso ae pessoal, espero que ajudem vocês ae!

o/

referências
http://coding.smashingmagazine.com/2010/07/19/how-to-use-css3-media-queries-to-create-a-mobile-version-of-your-website/
http://www.mollerus.net/tom/blog/2011/02/css3_media_queries_and_the_android_22_browser.html
http://webdesignerwall.com/tutorials/responsive-design-with-css3-media-queries
http://webdesignerwall.com/tutorials/iphone-safari-viewport-scaling-bug
http://perishablepress.com/press/2010/10/20/target-iphone-and-ipad-with-css3-media-queries/

@anestesya

Filed under  //   css3   ipad   less css   media queries   mobile   web dev  

Comments [2]

Como usar Less CSS no Windows

Tadeu's Dev
on Google+

Less-css-logo

Olá leitor, vou deixar aqui uma dica de como usar o conhecido framework ágil Less CSS no Windows. Se você digita dezenas de códigos em CSS, esta ai algo pra facilitar sua vida ;). Não vou entrar em detalhes sobre o uso da Less CSS e nem mostrar os recursos da linguagem, neste post vou apenas mostrar uma forma eficiente de compilar os arquivos '.less' para '.css'.

Compilar ou executar no lado do cliente?
Para aqueles que conhecem e mesmo aqueles que desconhecem a Less(aka, um apelidinho para a lib :P ), ela é um arquivo de JS que pode ser executado do lado do cliente. É ai que você se pergunta, pô pra que vou querer compilar isso então?
Respostas simples: alguns projetos como aplicações e lojas de e-commerce( como a que trablaho atualmente - Shopfato.com ), sempre temos que executar o menor número possível de JS no lado do cliente, devemos focar em trazer uma experiência mais suave e com mais produtos e imagens na tela, então todo processamento ecomonizado no lado do cliente como por exemplo: requisições de HTTP, loads de JS, tamanho de imagens como outras técnicas usadas para diminuir o carregamento da página no navegador do usuário, é válida. Logo se compilarmos o arquivo de CSS e entregar prontinho para o usuário estaremos poupando o tempo de construção da interface da página para o mesmo. Por isso prefiro compilar o arquivo '.less' antes e enviar ao servidor como um arquivo único.
Agora que você já sabe o porquê de compilar ao invés de executar no cliente, vamos ver como fazer isso.

Compilador para a linguagem Less CSS.
O compilador original da lib Less chama-se lessc e é desenvolvido para rodar em ambientes *nix usando nodejs que também é feito para rodar em ambientes *nix, porém o compilador o windows possuí uma ferramente de execução de javascripts no terminal e pode ser usada para executar o less.js que é o compilador da linguagem. Então o que precisamos fazer é apenas executar o script de JS na linha de comando e compilar o script? Bom.. sim e não! Temos que mudar algumas coisas para isso, claro! Já fizeram isso pra gente! 

Download dos arquivos necessários.
1 - faça o donwload da versão mais recente da Less.js.
2 - entre no projeto  less.js-windows que encontra-se no github: https://github.com/duncansmart/less.js-windows e baixe os seguintes arquivos do projeto:
     lessc.wsf
     lessc.cmd

Pronto com esses arquivos no mesmo diretório basta executar no terminal, abra a linha de comando com WINDOWS + R digite cmd e tecle enter, vá até o diretório onde encontra-se os arquivos e entre com o comando.

cscript //nologo lessc.wsf meu-arquivo.less meu-arquivo.css -compress

*-compress vai minificar a saída e é opcional.

Dica: o arquivo lessc.cmd é um atalho para este comando e pode ser executado no lugar do comando original.

lessc arquivo.less [saida.css] [-compress]

Bom, é isso ae!

o/

Filed under  //   css3   desenvolvimento   framework   less css   nodejs   web   windows  

Comments [0]

Como hackiar a nova timeline do Facebook - aka. awesome facebook timeline

Tadeu's Dev
on Google+

Hacked-timeline

Recentemente o Facebook tem anunciado mudanças drásticas na timeline. Vou disponibilizar a forma de como se fazer esse hack, que só pode ser visto por usuários que são desenvolvedores.

Passos para hackiar sua timeline: 

1 - Você tem que ser um facebook dev - (desenvolvedor de aplicativos para FB - facebook. )

No campo de busca digite procure por "developer",  e você vai ser levado para a página de desenvolvedores no FB,

2 - Clique em "Create App"
Siga os passos necessários para se criar um app no Facebook.

3 - Quando sua app estiver criada, dentro da página de configurações da aplicação tem um guia na lateral com o nome de Open Graph.
Clique em "get started" e siga os passos necessários até terminar de configurar corretamente.

4 - Pronto quando você voltar ao seu perfiil vai receber um aviso que você se tornou um desenvolvedor do FB, aceite e verá que um chamado para sua nova timeline.
Agora basta personalizá-la.

é isso.
o/

Filed under  //   awesome facebook timeline   facebook hacks  

Comments [0]

Como configurar Appstats no Google App Engine(Python)

Tadeu's Dev
on Google+

Esse é mais um post da série Google App Engine, sobre o SDK do Google App Engine(aka. GAE), faz algum tempo que já o utilizo e apesar da documentação ser bem completa gostaria de escrever aqui minha experiência com ele. 
O assunto deste post fala sobre um recurso muito importante no GAE chamado Appstats, esse recurso nos permite o monitorar as chamadas a feitas a API do GAE.

Appstats
Appstats é uma biblioteca para o App Engine, que permite apresentar o perfil de desempenho do seu aplicativo no App Engine e ver exatamente quais chamadas de API seu aplicativo está fazendo para uma determinada solicitação e quanto tempo demoraCom a capacidade de ter uma visão geral do desempenho de uma solicitação de página inteira, e para perfurar até os detalhes de uma chamada RPC individual, agora é fácil de detectar e eliminar redundâncias e ineficiências no funcionamento do seu aplicativo App Engine. Appstats está disponível tanto para o Python e Java runtime, para maiores informações sobre o Appstats visite a documentação(Python) aqui.

Habilitando o Appstats.
Para podermos abilitar o Appstats devemos editar o arquivo app.yaml e habilitar o appstats na diretiva builtins:

application: minhaapp
version: 3
runtime: python
api_version: 1

builtins:
- appstats: on

Após adicionar a configuração acima no arquivo app.yaml, temos que criar um arquivo de configuração chamado appengine_config.py no diretório raíz da aplicação. Nos diretórios com as libs do GAE existe um arquivo de exemplo com todas as configurações necessárias, basta apenas copiar ele para o diretório principal da nossa aplicação. 

Para encontrar o arquivo de configuração no OSX navegue até o diretório de aplicações e do GAE vá até a pasta:

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/appstats/

Copie o arquivo sample_appengine_config.py para seu o diretório raíz da sua aplicação com o nome de appengine_config.py em seguida abra o arquivo e descomente as linhas da seção 0:

def webapp_add_wsgi_middleware(app):
  from google.appengine.ext.appstats import recording
  app = recording.appstats_wsgi_middleware(app)
  return app

Caso seu aplicativo utilize Django, então deixe a configuração acima comentada e descomente as configuraçöes abaixo:

from google.appengine.dist import use_library
use_library('django', '1.2')
import django
Em particular existem algumas outras opções interessantes que podem ajudar na depuração das aplicações.

Debug
Procure pela configuração appstats_debug:

appstats_DEBUG = False 

altere para 

appstats_DEBUG = True

Isso permite depurar a aplicação com diferentes níveis de detalhe. 

Níveis do Debug.
Na diretiva appstats_DUMP_LEVEL, é possível utilizar 3 níveis de configuração:

appstats_DUMP_LEVEL = -1, faz com que nenhuma informação adicional seja apresentada.
appstats_DUMP_LEVEL = 0, mostra apenas em apenas 1 linha, informações de depuração.
appstats_DUMP_LEVEL = 1, mostra um pouco mais de 1 linha de informações de depuração.
appstats_DUMP_LEVEL = 2, o nível 2 tem o objetivo de mostrar o maior número de informações de depuração que a aplicação pode mostrar, detalhe que caso esse nível seja ativado, as requisições feitas para a aplicação podem demorar para serem respondidas e o seu log irá mostrar inúmeras operações que sua aplicação irá realizar até enviar a resposta ao cliente.

Feito isso sua aplicação já deve estar com o Appstats funcionando e apresentando informações de depuração(que são exibidas nos logs) conforme o nível selecionado.
Para visualizar a tela do Appstats vá em http://localhost:8080/_ah/stats e você deverá ter uma tela parecida como esta:
Media_http1bpblogspot_fiybd
No próximo post irei explicar melhor os logs apresentados no Appstats.
o/
@anestesya

Filed under  //   GAE   api   app   appengine   appstats   python   rpc  

Comments [0]

Corrigir o erro de "padding" ao decodificar uma string em Base64

Tadeu's Dev
on Google+

Hoje estive trabalhando em uma aplicação para o Facebook, seguindo o "how-to" do próprio Facebook ele diz que quando o usuário acessa minha aplicação o Facebook envia uma "signed_request"  com as informações do usuário, utilizando o algorítimo Base64 e fala que basta decodificar essa string para pode acessar as informações em texto puro, até ai está OK. 
Na prática porém, quando executo os passos para decodificar a aplicação, pronto! Erro.

O erro
Um erro que diz que a string em Base64 não está correta!

File "C:\Python25\lib\base64.py", line 76, in b64decode
    raise TypeError(msg)
TypeError: Incorrect padding

Resolução do problema:
Para resolver esse erro basta adicionar '==' ao final da string, então a string codificada chega assim:

"pFp0sLbu81kz8BEY1ejOSe8S6-HfGD2Qi5PuBifPbo4" 

Se tentarmos decodificar usando o módulo 'base64' (padrão do python2.5), vamos topar com o erro mostrado acima, então para fugirmos dele alteramos a string recebida para:

"pFp0sLbu81kz8BEY1ejOSe8S6-HfGD2Qi5PuBifPbo4=="

E pronto! Problema resolvido.

Função alterada e funcionando corretamente:

def load_signed_request(self, signed_request):
    """Load the user state from a signed_request value"""
    sig, payload = signed_request.split(u'.', 1)
    sig = sig+'=='
    payload = payload+'=='
    sig = base64.b64decode(sig)
    data = json.loads(base64.b64decode(payload))
   
    expected_sig = hmac.new(
        _FbSecret, msg=payload, digestmod=hashlib.sha256).digest()
    ....
 
Links interessantes sobre o assunto:
Documentação no Facebook: http://developers.facebook.com/docs/samples/canvas/
Documentação do módulo Base64: http://docs.python.org/library/base64.html
Aplicativo on-line que descodifica e codifica em Base64: http://ostermiller.org/calc/encode.html
Resolução do problema encontrada no StackOverflow: http://stackoverflow.com/questions/3302946/how-to-base64-url-decode-in-python

o/

tadeu l.p.g
bacharel em Ciência da Computação
desenvolvedor front-end(xhtml, css, js).
sysAdmin em linux(slackware, debian, redhat) hospedagem web. (nginx, php, wordpress).
(anestesya arroba gmail ponto com)
blog: http://tadeuluis.wordpress.com
rascunhos: http://anestesya.posterous.com

Filed under  //   base64   bug fix   facebook apps   padding   python  

Comments [0]