Showing posts with label estudo. Show all posts
Showing posts with label estudo. Show all posts

Wednesday, November 6, 2013

"The Future of Programming"

"The Future of Programming"

This is more like a warning than a trully blog post.

Hello guys,
its been sometime without post anything... Since i was moving out my home to a new one and i got stuck in my day work i find it hard to write some big post.
Anyway, this is no scuse, i now...

I, as most of my days ways checking out the news and see older weekly email lists that i assign and saw this video between the links, i find this peace of audio and image very instructive, everbody who is a programmer or want to be should watch and begging to rethink the way we do our things.

The video speaks for itself... watch and get you own perspective.

Bret Victor - The Future of Programming [1].

Some key points that Bret says on his talks are very interesting to implement in now days, those that impress me are the following:
  • Grail System [2];
  • Actor Model [3];
  • SmallTalk Browser [4]:
    • Almost the same screen on his presentation [5];
Another article that is very enlightenment is this, it talks about why arrays start with 0 index or 1 index... i read it on the Guido van Rossum (father of python) blog, check both!

Citation Needed [6].
Guido van Rossum blog [7].

Thanks

[1]: http://www.youtube.com/v/8pTEmbeENF4?autohide=1&version=3&attribution_tag=EVRJF1Slx80pSNhBlW8y5g&autoplay=1&feature=share&showinfo=1&autohide=1
[2]: http://c2.com/cgi/wiki?GrailSystem
[3]: http://en.wikipedia.org/wiki/Actor_model
[4]: http://en.wikipedia.org/wiki/Class_browser
[5]: http://seaside.st/about/screenshots?_k=x4bar8gA
[6]: http://exple.tive.org/blarg/2013/10/22/citation-needed/
[7]: http://python-history.blogspot.ca/2013/10/why-python-uses-0-based-indexing.html

Monday, March 18, 2013

Raspberry Pi: build a home web server (BETTER WAY)!

Raspberry Pi: build a home web server (BETTER WAY)!

Long time no see people!!! Depois de praticamente 2 meses sem postar nada estou eu aqui novamente!
Como podem perceber o nome da postagem (BETTER WAY) quer dizer que eu aprendi muito nestes últimos 2 meses! Foram bem corridos, com o fim do ano e viagens. Enfim, vamos la!!

Bom, como vocês devem se lembrar do meu último post estava criando um servidor web local (intranet)  usando o raspberry pi. Não vou repassar toda a parte introdutória do post passado nesse, aqui vou direto ao ponto!

Minha stack final até o momento:
  1. Raspberry Pi (claro!!);
  2. Arch Linux Arm (2013-01-22);
  3. dnsmasq (i trully love this one!!!);
  4. nginx;
  5. supervisor;
  6. gunicorn;
  7. python2;
    1. flask;
Beleza, tudo só isso... vou mostrar os passos para instalar esses caras e deixa-los funcionando. Lembrando que, eu não me responsabilizo por quaisquer dados causados pela instalação e posterior uso de seus equipamentos.
Não estou levando em consideração precauções de segurança, no meu caso o acesso a esses dispositivos passa por um router, o qual fornece o DNS e outras implementações como firewall.

Instalação

Bom, o primeiro passo é instalar a versão do Arch Linux Arm no cartão de memória que será inserido no pi. Este passo já fora explicado no tutorial anterior (la eu usei o Arch Linux Arm), então não irei me alongar aqui.
Depois de instalar a imagem conecte o SD no pi e ligue-o na energia elétrica, se a tela do monitor ficar pequena (cortando o shell), bom nesse caso você precisa alterar o arquivo de configuração do pi. A melhor opção é desligar o pi, tirar o SD dele e conectar no pc novamente.
Altere o arquivo config.txt que estará em /boot/config.txt. Eu apenas habilitei e fui mudando os valores de framebuffer e overscan até ficarem legal no meu monitor. O problema de se alterar essas informações desta maneira é que cada outro terminal pode precisar de novas configs.

Feito isso o próximo passo é atualizar todo o sistema. Para logar no Arch Linux pela primeira vez o usuário e senha são root e root.
Após o login execute:
pacman -Syyu

Isso irá atualizar todo o sistema e os repositórios cadastrados.

Agora vamos instalar todos os packages que iremos utilizar! Todos mesmo!!! One line to rule them all!!! HAHAHAHAAHA

pacman -S sudo base-devel openssl pcre zlib libxml2 udev-automount dnsmasq nginx supervisor mongodb python2 python-pip2

Legal neh?? Mas o que fizemos/instalamos???

O principais são o base-devel que irá instalar mais um tonelada de packages e libs incluindo o compilador gcc.
O udev-automount que irá automagicamente montar as unidades que forem conectadas a porta usb do pi, facilitando nossa vida ao inserir um stick usb como unidade de armazenamento.
E claro todo o resto da stack. Se você não quiser instalar algum dos packages é só não coloca-lo na linha listada acima.

Ainda é necessário instalar o flask!! Para isso execute:
pip2 install flask Flask-Assets gunicorn pymongo mongoengine

Acabamos de instalar o flask, Flask-Assets (que junta todos os arquivos .js em um único javascript e css tb), gunicorn (nosso servidor WSGI local que executa código python) e os binds python para o servidor mongodb.

O próximo passo é definir para nosso raspberry pi um endereço de ip fixo, o motivo disso é que queremos que o dnsmasq consiga redirecionar algo do tipo mypi.lan.internal.server para o ip do nosso pi e chamar consequentemente nosso site web!
Como eu estou usando um route, entrei na configuração do mesmo e adicionei um endereço fixo para meu raspberry pi (192.168.1.48).
Agora é preciso alterar 2 arquivos de sistemas, ambos estão em /etc/ e são:

  • hosts
  • resolv.conf.head
No hosts (não hosts.conf hein!) basta acrescentar:
192.168.1.48       mypi        localhost

Note que o endereço é mypi, o restante do nome o dnsmasq irá colocar para nós (iremos configurar isso la).

No resolv.conf.head (crie ele se não existir!) devemos acrescentar:
nameserver 192.168.1.48

E finalmente vamos alterar o arquivo do dnsmasq para que ele funcione:
Linha 62:

local=/lan.internal.server/

Linha 99:
no-dhcp-interface=eth0
Linha 119:
expand-hosts
Linha 128:
domain=lan.internal.server


Feito essas alterações nos arquivos de configuração de rede e do dnsmasq devemos alterar as configurações do nginx. Para configurar um novo vhost procure pelo arquivo do nginx, ele vai estar em /etc/nginx/nginx.conf.
Embaixo esta a configuração que tenho utilizado juntamente com o gunicorn. Atenção apenas as pastas (você deve colocar o caminho para seus arquivos estáticos [/media/www/static], onde estão os arquivos do seu programa [/media/www/home] e claro o ip:port na qual o gunicorn será executado [no meu caso 192.168.0.25:8080]). O resto pode ser deixado como padrão... lembrando que aqui, não ainda não ativei compactação via gzip no nginx (e vai ficar para uma próxima).


server {
    listen       80;
    server_name  mypi.lan.internal.server;


    location ~ ^/(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|images|flash|media|static)/

    {
        root   /media/www/static/;
        expires 1d;
    }


    location / {

        #root   /media/www/home/;
        #index  index.html index.htm;
    try_files $uri @proxy_to_app;
    }


location @proxy_to_app {

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://192.168.0.25:8080;
}
}


Depois disso é hora de configurar o supervisor para executar nosso processo do gunicorn que irá carregar nossa app em flask!!!

O bacana do supervisor é que com o comando echo_supervisord_conf > /etc/supervisord.conf você gera um arquivo de conf padrão! ;) bem simple não?
Entretanto apenas isso não garante que o gunicorn seja executado, por conseguinte devemos alterar o arquivo de conf criado acrescentando as seguintes linhas acima da explicação de como subir um programa usando o supervisor. Procure por [program:theprogramname] no arquivo e acrescente acima ou abaixo:


[program:gunicorn]
command=gunicorn app:app -b 192.168.0.25:8080
directory=/media/www/home
autostart=true
autorestart=true
redirect_stderr=True


Atenção para colocar o mesmo ip:port que especificado la no nginx hein!! Outro detalhe importante é o de colocar o nome do arquivo python que representa o app do flask. No meu caso, eu deixei o mesmo padrão que é descrito nos docs do flask, ou seja arquivo app.py, class name app, por isso do gunicorn app:app.

Pronto! Agora só subir todos os serviços e torcer pra tudo estar configurado corretamente!
systemctl enable dnsmasq
systemctl start dnsmasq
systemctl enable nginx
systemctl start nginx

systemctl enable supervisord
systemctl start supervisord


Bom, acesse a sua url padrão no navegador e você perceberá que não é carrega, não se esqueça de configurar o dns primário e secundário em sua conexão com a internet. Essa parte é importante caso seu roteador (assim como o meu) não permita configurar um dns interno.


Referências:

Friday, March 15, 2013

OpenBadges by Mozilla

 
Esse post será um tanto quanto curto, o tempo me escapa esse ano, 2013 realmente começou com tudo e nem mesmo quando terei férias terei o tempo necessário para atualizar sempre o blog, mas não o abandonei e nem mesmo esqueci.

Hoje vou falar de uma iniciativa da mozilla, o OpenBadges. Pra quem é ligado a fundação mozilla ja ouviu falar e até mesmo ja ganhou alguns badges. O objetivo é bem interessante, você realiza alguns exercícios e em troca ganha um bagde (adesivo) dizendo que você sabe daquele assunto ou tarefa.
Parece simples não??? E é... o que é necessário para começar??

Bom, para começar que tal fazer uma visita a página principal do OpenBadges ( http://openbadges.org/ ). La tem tudo explicado do funcionamento, mas darei um geral aqui.
Você precisa criar um backpack (é o local onde estarão armazenados seus badges), para criar um backpack é só acessar o site e criar uma conta ( http://backpack.openbadges.org/ ). Pronto!!!
Agora é só sair por ae coletando badges!!!


A própria mozilla disponibiliza alguns como é o caso dos badges para quem gosta do Mozilla WebMaker ( https://badges.webmaker.org/ ) ... ;D


É válido citar também o site do P2PU ( https://p2pu.org/ ), la você poderá conseguir dezenas de badges... 

Olha que legal, além de postar sobre o OpenBadges, um dos desafios que estou fazendo pede para assim que terminar você crie um blog post falando sobre o que foi realizado... e consequentemente aqui estou eu!! hahahahahahahaha

O desafio é bem simples: 
"This task is going to introduce you to writing a basic html document. But you'll do it on paper, using a pen, for fifteen minutes."

Ok, esse desafio é bem simples, mas não deixa de ser trabalhoso, afinal você tem que escrever um blog post inteiro sobre sua façanha... e colocar uma foto! :O

Enfim, bom divertimento a vocês todos...

Thursday, August 9, 2012

Fazendo um app no Heroku

Fazendo um app no Heroku



Fala pessoal?


Fiquei de colocar aqui no blog os passos os quais utilizei para fazer um currículo digital, pois bem... chegou a hora!


Como eu havia mencionado em uma postagem passada eu utilizei de algumas tecnologias, citarei todas com respectivos links:

  • python
  • virtualenv
    • Permite você criar ambientes separados em python, você pode escolher quais libs instalar, sem tê-las por todo o sistema. Funciona como um container para seu projeto.
  • flask
    • Um micro framework em python, bem simples e rápido, com baterias não inclusas. Mas com muitas baterias a disposição.
  • flask-assets
    • Extensão do flask (uma dessas baterias não inclusas), que permite você agrupar e minificar arquivos estáticos do seu app.
  • mongoengine
    • "The object-document mapper to connect Python and MongoDB". Vai lhe ajudar a melhorar a sua interface de conexão entre o mongohq e seu app!
  • jQuery
    • Se você ainda não usa esta perdendo muito!
  • twitter bootstrap
    • Conjunto de classes css e plugins jquery que vão lhe ajudar a deixar seu app mais bonito e funcional. É esse micro framework jquery é do pessoal do twitter.
  • font awesome
    • Fontes com ícones dos mais diversos, se você olhar não vai mais largar! ahhahahhahaha :D
  • git
    • Ferramenta de versionamento.
  • heroku
    • Nosso fornecedor de IaaS.
  • mongohq
    • Rodar o mongodb nas nuvens! Uhu!


Você pode estar se perguntando, "poxa vida, tenho de aprender tudo isso para colocar algo no ar la no heroku?".
Claro que não, o negócio é que eu quis experimentar um pouco mais, resolvi que iria colocar algumas coisas em um banco de dados noSQL, o que não é necessário.
Enfim, primeiro passo, foi criar localmente um ambiente (ok, não precisa ser apache pra isso, mas eu usei mesmo assim). O legal do flask e outros frameworks em python é que você pode subir um "web server" na linha de comando sem precisar configurar um apache da vida. Isso é um ponto positivo!

Pra colocar um site la no heroku é bem simples, só seguir esse tuto na página deles: Getting Started with Python on Heroku.

Depois de seguir estes passos bem simples do heroku e claro ter feito sua aplicação/site/whatever você pode ativar o mongohq. Para isso é só entrar na interface do heroku e solicitar a ativação do mongohq para sua nova app.
O heroku vai lhe retornar as informações de conexão com o banco, então você os coloca na aplicação. Como eu estou usando flask e o mongoengine, para cadastrar o banco de dados foi simples:




app = Flask(__name__)
app.config["MONGODB_DB"] = "app5632158"
app.config["MONGODB_USERNAME"] = "rdenadai@gmail.com"
app.config["MONGODB_PASSWORD"] = "yhgb2398"
app.config["MONGODB_HOST"] = "staff.mongohq.com"
app.config["MONGODB_PORT"] = "10050"
db = MongoEngine(app)



Bem fácil não? Ainda estou usando o flask-assets que é uma extensão bem bacana que permite você juntar os arquivos css/js em um único só, melhorando assim a performance da sua app na hora de baixar os arquivos estáticos do servidor!

assets = Environment(app)
js = Bundle('jquery.js', 'default.js', 'twitter-bootstrap.js', filters='jsmin', output='gen/packed.js')
css = Bundle('default.css', 'normalize.css', 'font-awesome.css', 'twitter-bootstrap.css', filters='cssmin', output='gen/packed.css')
assets.register('js_all', js)
assets.register('css_all', css)

Feito isso no app.py do seu app, pra utilizar é só ir nos templates e colocar:



{% assets "css_all" %}
<link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}" />
{% endassets %}



{% assets "js_all" %}
<script type="text/javascript" language="javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}

Fazendo estes passos, que achei bem simples (depois que você aprende são bem simples mesmo!), coloquei no ar um app no heroku!


Só não vá correndo contar isso pro seu chefe...

Falowaer


Friday, July 13, 2012

Currículum Vitae

Currículum Vitae

Boas! Essa postagem será um pouco mais técnica. Na verdade, nos últimos dias eu fiquei colocando no ar um "site" que na verdade é um currículo online meu. Pois é, você pode se perguntar: Currículo online? Mas não tem vários sites que fazem isso?

A resposta é sim, e ao mesmo tempo não.

Sim, existem vários sites que permitem você colocar la seu currículo, e muitos são bem bacanas! Mas ano passado, eu ouvi e vi um cara falar o seguinte:
"Então você trabalha com informática, e não tem um currículo online que você mesmo fez?"

Fiquei pensando sobre o assunto e cheguei a conclusão de que um currículo online feito por mim mesmo, passa a idéia, de que:
  • Eu sei fazer design de um site, mesmo que pequeno;
  • Sei codificar na linguagem que eu escolher pro meu "site";
  • Sei usar o banco de dados o qual escolhi;
  • Sei configurar, mesmo que basicamente um server.
Realmente eu sei fazer tudo isso, mas como colocar em 1 página A4 todas essas informações e outras mais para alguém avaliar? Alguns podem até afirmar que um currículo extenso vai afugentar os contratantes, mas se você possuir as duas opções (um curriculo em pdf de 1 página A4, e um "site" com uma bela descrição), pode vir a facilitar o contratante, quem se interessar poderia ir la no seu "site" e ler mais sobre você.

Perceba que a intenção não é ser um blog, mas talvez uma página agregadora, com informações extras que você queira colocar, no formato que você escolher!

Bom, finalmente resolvi fazer isso, e pra começar aprendendo mesmo, resolvi usar o heroku!
Como eu gosto muito de python e ja faz um tempinho que o heroku habilitou python la, resolvi que iria utilizar ambos!
Mas ai fiquei com uma dúvida, seria ideal usar o django pra fazer uma mera página? Achei mesmo que não, e acabei escolhendo usar o flask e não me arrependo não. É um framework bem simples, leve e rápido de aprender.
Acabei o "site", ficou muito legal, mas sabe quando você pode melhorar? Foi o que fiz!
Resolvi colocar o mongodb e o mongoengine rodando, para fazer algumas coisas simples e usar para evitar repetição de html (na parte das keywords e livros). Ficou jóia!
Com toda a certeza, ainda tem coisas que posso melhorar e acrescentar, como por exemplos os projetos que tenho online! É, eu tenho uns "programinhas" disponíveis na internet (mais especificamente no Google Code, mas vou coloca-los no github), que podem enriquecer ainda mais meu currículo online, sendo que no pdf A4 de 1 página não caberia (beleza que num tem tanto programa assim neh).

Resumindo? Não espero que consiga altos empregos com isso, mas acredito que possa dar um pouco mais de visibilidade para quem um dia poderá me contratar!


Quer ver como ficou o trabalho "pronto"? Clique aqui!

Na próxima postagem eu coloco todos os passos que fiz!
falowaer ;)


Thursday, May 31, 2012

Aprendizado Contínuo

Aprendizado Contínuo


Então você é daqueles que não gosta de estudar? Odeia pegar nos livros? Bom então essa publicação não é pra você! Mas não se preocupe, a vida esta repleta de pessoas que gosta/odeiam estudar, então com certeza um par você poderá encontrar.
Mas afinal de contas, o que nos leva a estudar?
Para alguns a resposta é simples e imediata: "Estudo pois quero conseguir um emprego bom e ganhar muito dinheiro!".
Parece ser uma boa resposta, e até mesmo simplista demais, afinal nem todo mundo que estuda ganha dinheiro e o inverno também é muito verdadeiro, nem todos que ganham muito dinheiro estudaram...
Limitar nossos estudos e direcionamentos, pelo simples modo de ver a vida dessa maneira (estudar para ganhar dinheiro), faz-me pensar se as pessoas não vêem seus motivos de forma obscura demais.

A verdadeira razão

Estudamos pelo simples fato de aprender, claro que aprendendo cada vez mais, e até mesmo especializando cada vez mais em um assunto, poderemos colher benefícios desse estudo, como um emprego melhor, uma idéia brilhante que nos faça ter muito dinheiro. Mas acredito, que não devemos estudar voltando nossa mente para esse fim, caso contrário, se não atingirmos esse objetivo, ficaremos frustrados e deixaremos de estudar, nos acomodando (ficamos no Ok Plateau).

Mas o que é esse Ok Plateau?
Quando nos acomodamos, ou achamos que ja sabemos demais sobre determinado assunto, ou melhor, quando paramos de ficar melhor em algo. E estudar é isso, teoria e prática, ficar cada vez melhor sobre determinado assunto, tentando evitar o "Ok Plateau"

Q: Can you explain the "OK Plateau?"
A: The OK Plateau is that place we all get to where we just stop getting better at something. Take typing, for example. You might type and type and type all day long, but once you reach a certain level, you just never get appreciably faster at it. That's because it's become automatic. You've moved it to the back of your mind's filing cabinet. If you want to become a faster typer, it's possible, of course. But you've got to bring the task back under your conscious control. You've got to push yourself past where you're comfortable. You have to watch yourself fail and learn from your mistakes. That's the way to get better at anything. And it's how I improved my memory. (Joshua Foer)


Por conseguinte, devemos pensar, não, acreditar que estudamos para um objetivo a curto prazo (e não a longo prazo, como ganhar dinheiro), o objetivo de aprender mais e nos tornarmos melhores! Aceitando esse objetivo podemos mudar nosso conceito sobre o estudo e consequentemente sobre nós.

Por onde começar?

Bom, legal, quero fazer isso, mas como faço?
As possibilidades podem ser muitas, mas acredito que o melhor seria o seguinte:
  • Procure identificar os objetos, temas, coisas que tem preferência;
  • Busque sempre informações sobre o tema;
  • Encontre as pessoas que são referência na área e siga-as como puder;
  • Procure por grupos para interagir, eles podem ser fontes de muitas informações;
  • E o principal, não importa o quão não goste de um tema, procure conhece-lo, pois o mesmo pode lhe abrir os olhos para outros assuntos!
Seguindo essa linha, um site muito legal que encontrei e que permite você testar seus conhecimentos sobre determinados temas, e quem sabe abrir sua mente para outros tantos é o P2PU (https://p2pu.org/). Entre la e veja se tem algo que lhe interessa, você pode até mesmo se surpreender!

Keep Learning...

falowaer