DjangoAdmin Custom Preview Widget

Today i faced the challenge of make a custom preview from a TextField inside the admin. Now i want to share with you how i did it step by step, hope it helps…

1 – Trying a 3rd party APP …

So, first thing i did was install django-pagedown and test it to see how it works. I didn’t have any problems to install it, just checked the README and in 5 minutes i was seeing a preview in admin.

Nice, but the project i was working didn’t use markdown, instead it uses a simplest syntax. So, i go to source code from pagedown, and saw the a way to do my custom widget.

What pagedown does in python layer is basic, it just renders a custom widget with a preview textarea for the preview. Continue reading “DjangoAdmin Custom Preview Widget”

Circle-CI Continuous Delivery with dokku

 

Objetivo

Este tutorial tem o objetivo de ensinar como configurar um sistema de Entrega Continua utlizando o Circle CI e o dokku.

 

Pré requisitos

O que é Continuous Delivery ?

Mãos na massa

  • Primeiro, iremos gerar uma ssh-key sem nenhum password e iremos salvar no arquivo deploy_key, digite no terminal:
   $ ssh-keygen -t rsa
  • Adicione a sua nova ssh-key PRIVADA no Circle CI
    • Dentro de seu projeto no Circle CI, acessa as configurações, e vá em  SSH Permissions,
    • Clique em add ssh, depois, em hostname digite o host onde está o seu servidor dokku, e em private ley digite sua private key.
  • Editar o arquivo circle.yml (caso não possua, crie um na pasta root do seu projeto)
machine:
  python:
    version: 3.5.1
dependencies:
  pre:
  - cp contrib/env-sample .env
deployment:
  production:
    branch: master
    commands:
      - git remote add deploy dokku@<ip server>:<app dokku name>
      - git push deploy master
  • Envie sua ssh-key PUBLICA para o dokku para autorizar o Circle CI a fazer o git push para o seu servidor.
cat <path to ssh-key>.pub | ssh root@<your.ip.address> "sudo sshcommand acl-add dokku [circle ci key]"

 

Ative o Circle CI, simplesmente fazendo um push para o seu repositório git. Para checar va no site do Circle CI e veja toda sua build sendo feita.

Está feito, agora tens um sistema de Entrega Continua configurado e funcionando!

 

 

Continuous Delivery ?

Continuous Delivery ou Entrega Contínua é a capacidade de obter mudanças de todos os tipos – incluindo novos recursos, alterações de configuração, correções de bugs e experimentos – em produção, ou nas mãos dos usuários, com segurança e rapidez de forma sustentável.

Conseguimos tudo isso assegurando que nosso código esteja sempre em um estado de implantação, mesmo diante de equipes de milhares de desenvolvedores que fazem mudanças diariamente. Assim, eliminamos completamente as fases de integração, teste e endurecimento, bem como congelamento de código

Vantagens

  •  Lançamentos de baixo risco –  O objetivo principal da entrega contínua é tornar as implantações de software indolores, eventos de baixo risco que podem ser executados a qualquer momento, sob demanda. Ao aplicar padrões, é relativamente fácil conseguir implantações de tempo de inatividade zero que não sejam detectáveis para os usuários.
  • Tempo mais rápido para o mercado – Não é incomum que a fase de integração e teste / correção do ciclo de vida de entrega de software em fases tradicional consuma semanas ou mesmo meses. Quando as equipes trabalham em conjunto para automatizar os processos de criação e implantação, aprovisionamento de ambiente e regressão, os desenvolvedores podem incorporar testes de integração e regressão em seu trabalho diário e remover completamente essas fases
  • Maior qualidade – Quando os desenvolvedores têm ferramentas automatizadas que descobrem regressões em poucos minutos, as equipes são liberadas para concentrar seu esforço na pesquisa do usuário e em atividades de teste de nível mais alto, como testes exploratórios, testes de usabilidade e testes de desempenho e segurança. Ao construir um pipeline de implantação, essas atividades podem ser realizadas continuamente ao longo do processo de entrega, garantindo qualidade é construída em produtos e serviços desde o início.

  • Custos mais baixos – Qualquer produto ou serviço de software bem-sucedido evoluirá significativamente ao longo de sua vida útil. Ao investir na construção, teste, implantação e automação do ambiente, reduzimos substancialmente o custo de criação e fornecimento de alterações incrementais ao software, eliminando muitos dos custos fixos associados ao processo de lançamento.
  • Melhores produtos / Ciclo de feedback curto – A entrega contínua torna econômico trabalhar em pequenos lotes. Isso significa que podemos obter feedback dos usuários ao longo do ciclo de vida de entrega. Técnicas como o teste A / B nos permitem adotar uma abordagem baseada em hipóteses para o desenvolvimento de produtos, através da qual podemos testar idéias com usuários antes de construir recursos inteiros. Isso significa que podemos evitar os 2/3 dos recursos que construímos e que oferecem valor zero ou negativo aos nossos negócios.

  • Equipes mais felizes – Uma pesquisa mostrou que a entrega contínua faz `deployment` menos doloroso e reduz `burnout`. Além disso, quando entregamos mais freqüentemente, as equipes de entrega de software podem se envolver mais ativamente com os usuários, aprender quais idéias funcionam e quais não, e ver de primeira mão os resultados do trabalho que fizeram. Removendo as atividades dolorosas associadas à entrega de software, podemos nos concentrar no que mais nos importa – focar nas necessidades dos nossos usuários.

Por onde começar ?

No meu blog falo sobre desde como configurar uma apliacação web à Dokku (Nginx + uWSGI + PostegreSQL ) – Deploy com um comando

 

 

[pt-BR] Dokku (Nginx + uWSGI + PostegreSQL ) – Deploy com um comando

O que é dokku ?

Dokku é um Plataform as a service, estilo o Heroku, e tem o objetivo de facilitar o deploy de aplicações. Ele deixa a sua aplicação dentro de um container utilizando o docker, mas sem ter a dor de cabeça de configurar o docker. Para fazer o deploy de um projeto é necessário rodar simplesmente git push dokku master.

Mas como fazer essa magica funcionar ?

Continue reading “[pt-BR] Dokku (Nginx + uWSGI + PostegreSQL ) – Deploy com um comando”

Python Decouple – Como configurar suas variáveis sensíveis

Python Decouple ?

O python decouple, mais conhecido somente por decouple, serve para criarmos um arquivo com todas as configurações sensíveis do projeto como login e password do banco de dados, no Django a sua SECRET_KEY, as suas variáveis de acesso do AmazonS3 e qualquer outra informação que possa variar entre o ambiente de desenvolvimento e produção.

O decouple procura por variáveis setadas no ambiente, caso não encontre nas variáveis de ambiente ele irá procurar por um arquivo .env onde as variáveis deverão estar setadas.

Por exemplo, no Django, a variável SECRET_KEY não deve ser exposta publicamente (via git ou qualquer controle de versão), então podemos mascarar ela dentro de settings.py:

# em settings.py
SECRET_KEY = config('SECRET_KEY')

E criamos um arquivo .env na mesma pasta do manage.py

SECRET_KEY=1c&rge8ac9dq)y62z&u3=a4td=hb)d3(fc*w4rm3_=hw50tuvr

Agora este arquivo .env deverá ir para o .gitignore pois ele nunca deve ser ‘commitado’.

Com isso o decouple irá setar a variável quando o projeto rodar procurando pela variável primeiro nas variáveis de  ambiente e caso não encontre irá procurar no .env. Como este aquivo .env não irá para o controle de versão, no servidor de produção precisamos setar a variável de ambiente SECRET_KEY ou criamos um arquivo .env direto no servidor.

Instalação

Para instalar o decouple basta digitar:

# no terminal com virtualenv ativo
pip install python-decouple

E adicionar em requirements.txt:

python-decouple

 

Utilizando o Decouple

Para utilizar o decouple será necessário criar um arquivo .env na mesma pasta do manage.py (Django), e adicionar este arquivo ao .gitignore.

Para mascarar a variável DEBUG, vamos em settings.py:

# em settings.py 
from decouple import config

...

DEBUG = config('DEBUG', default=False, cast=bool)

e no arquivo .env:

# em .env
DEBUG=True

Note que no arquivo .env não pode haver espaços.

Como o decouple procura primeiro nas variáveis de ambiente, se você executar o seguinte comando:

# no terminal (linux - Mac)
DEBUG=False python manage.py runserver

Não importa o que esteja setado no .env, a variável de ambiente irá ser prioritária e o decouple não irá procurá-la no arquivo .env.

Agora com isso você poderá mascarar qualquer variável sensível de forma simples e rápida!

 

Improving your time #2 – Pomodoro technique

Do you know that moment when you have to start some task and you think “I going to start it right after i read my twitter.” and when realize it you already pass three hours reading twitter, checking you emails and read all facebook notifications? This is very common symptom, specially when you task is not so pleasure, its called procrastination. It’s a real problem for who have deadlines and need to get things done, so i want to help you to avoid this.

One technique to avoid procrastination is the Pomodoro technique. Basically it consists to dedicate a determinate time to do a task, like 25 minutes and when you the times end you give your self a good recompense, something that gives you pleasure. When you do this you are training your brain to reduce that bad feeling when you have to start a unpleasant task, so next time it`s going to be easier to start it.

If your task is very unpleasant, you can make a deal with yourself and do the pomodoro  with 5 minutes, when it ends if you still stuck you can change to another task. This helps to you start a unpleasant task, and many times you are going to find that it wasn’t so bad as you think and maybe even when you realize it, the time pass and has been more than 20 minutes that you are in that task. The problem with unpleasant task is the start, after you start it, often it’s get easier and not so unpleasant.

So to conclude, to do the pomodoro technique you set a timer and focus in doing a unpleasant task for that time, after that time give yourself a very pleasure things, like go for a walk or check your facebook (not so pleasant for me, but it`s another role subject), or go play with your dog. When you have to do some very hard task put a timer for 5 minutes and if you don’t progress after it stop and change your task. Our brain is very complicated and we just need to comprehend it and not fight against it!

A last recommendation is the course from Coursera Learn How to Learn, it have many techniques and teach how to learn anything more effectively.

Improving your time # 1 To-Do list for everything

We live in the century of technology and extreme competition(not for long i hope) and we need to manage time in the best way possible. I want to share with you how i do it and what tools i like to use for managing my time. It isn’t a rule that amply to everyone, but you can get some pieces and do it in the best way for you.

As i start to study by myself, i find it very challenge to stay focus with all distractions that we have today. So i start study the best way of ….. study. Yes, it’s crazy how we think we know something and just a little read about it can change all your certainty.

Continue reading “Improving your time # 1 To-Do list for everything”

How to start Django project with Pyenv

First things first….

You may are asking: “Why should i use a virtualenv ?”

That`s a good question, and the answer is easy:

You use a Virtual Environment for isolate all  your project dependencies. When your are developing a Django Project you may need some packages for a specific project and some other packages for other project, even a different version of django. With a Virtual Environment you certify that  only the dependencies of your project are installed and with the correct version of each one. You can have a project with Django 1.8 in a virtualenv and another project with Django 1.10 with out any problems. When we think about deployement its even better because you know which packages are needed for the specific project, with a simple pip freeze in terminal inside your VirtualEnv you can check all your packages, it really helps! So i hope at this point you already undestand why use a VirtualEnv. Continue reading “How to start Django project with Pyenv”