|
|
Tarsis Azevedo |
|
Pro Git é um livro muito bom se voce ja conhece um pouco de git e quer se aprofundar mais, ou se voce nao conhece e quer conhecer bem.
Nele voce vai aprender sobre controle de versao distribuido, workflows para melhor utilização dos recursos do git, melhores praticas com git. Alem disso voce aprenderá a instalar e configurar um servidor git, a como gerenciar e colaborar com projetos e inclusive a extender o git.
O livro pode ser lido capitulo por capitulo se voce nao sabe nada sobre Controle de versao distribuido. Ou voce pode ler somente os capitulos que lhe interessam, se voce ja tem um conhecimento basico do git.
Na amazon.
Ou voce pode ler no proprio site do livro. Ou voce pode baixar do github.
Recentemente comecei a aprender C. Sim eu não sei C, não tive na faculdade e sempre senti falta de saber melhor como as coisas funionavam por dentro do computador, já que minha maior experiencia em programação é com python, que é uma linguagem de altissimo nivel.
Com C voce trabalha mais perto da maquina, direto com bytes, alocação de memoria, tem que fazer as estruturas de dados.
E pra aprender eu escolhi estudar pelo livro Learn C The Hard Way do Zed Shaw. É um livro que te instiga a estudar os conceitos por voce mesmo, ensina em cima de exemplos bem praticos e eficientes, te adiciona ao ecossistema da linguagem, apresentando ferramentas e tecnicas que vao te ajudar a pensar em C.
Uma das coisas que ele me instigou a estudar foi todos os possiveis formatos e suas variações para o printf, a função que escreve na saida padrão (o print do python).
#include <stdio.h>
int main() {
printf("%s\n", "Hello World!");
return 0;
}
#output
Hello World!
O printf recebe 2 parametros: uma string com os formatos mapeados e um minimo de valores igual ao mapeado.
#include <stdio.h>
int main() {
printf("%d %s\n", 1, "Hello again!");
return 0;
}
#output
1 Hello again!
Esta função é capaz de imprimir diferentes tipos de dados (char, string, int, float, octal, hexa, outros aqui) de acordo com a formatação que voce usar.
#include <stdio.h>
int main() {
printf("Char: %c %c \n", 'b', 65); // char pode receber um int referente a Tabela ASCII (http://www.asciitable.com/).
printf("Decimais: %d %ld\n", 1988, 650000L);
printf("Precedido com espaços em branco: %10d\n", 1988);
printf("Precedido com zeros: %010d\n", 1988);
printf("Numeros com base diferente: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
printf("Floats: %4.2f %+.0e %E \n", 3.14554, 3.3214, 3.1234);
printf("Truque de tamanho: %*d\n", 5, 10);
printf("String simples %s\n", "Oi!");
return 0;
}
#output
Char: b A
Decimais: 1988 650000
Precedido com espaços em branco: 1988
Precedido com zeros: 0000001988
Numeros com base diferente: 100 64 144 0x64 0144
Floats: 3.15 +3e+00 3.123400E+00
Truque de tamanho: 10
String simples Oi!
Os formatos seguem o seguinte prototipo: %[
flags][tamanho][.precisao][quantidade]formatoFlags, largura, .precisão, tamanho são opcionais.
| Formato | Saida | Exemplo |
|---|---|---|
| c | char | a |
| d ou i | signed int | 1 |
| e | Notação Cientifica usando o caracter e | 3.9265e+2 |
| E | Notação Cientifica usando o caracter E | 3.9265E+2 |
| f | float | 3.4 |
| g | usa o menor numero possivel de f e e | 3.54 |
| G | usa o menor numero possivel de f e E | 3.54 |
| o | unsigned octal | 610 |
| s | string | Hello World |
| u | unsigned int | 2345 |
| x | unsigned hexa | 7fa |
| X | unsigned hexa com letras maiusculas | 7FA |
| p | ponteiro de endereço | B800:0000 |
| n | Nada impresso. O argumento deve ser um ponteiro para um int assinado, onde o número de caracteres escritos até então é armazenado. | |
| % | % seguido de outro % irá printar % na saida | % |
| Flag | Descrição |
|---|---|
| - | Alinhado a esquerda dentro do tamanho definido. Alinhamento a direita é o padrão (veja a tabela de formatação de tamanho). |
| + | Força a o resultado ser mostrado com um simbolo de + ou -. Por padrão, somente numeros negativos são mostrados com -. |
| # | Usado com o, x e X indica que o valor será precedido de 0, 0x ou 0X respectivamente, para valores diferentes de 0. Usado com e, E e f, força o output para mostrar um ponto decimal mesmo sem numeros depois dele. Por padrão, se nenhum numero estiver depois do ponto decimal ele nao é mostrado. Usado com g e G o resultado é mostrado com zeros a direita. |
| 0 | Numero 0 é printado ao invés de espaços em branco quando o tamanho é especificado. (veja a tabela de formatação de tamanho). |
| Tamanho | Descrição |
|---|---|
| (Numero) | Número minimo de caracteres a serem printados. Se o valor a ser printado for menor que o numero, será adicionado espaços em branco para atigir o numero limite. O valor nao é trucado caso seja maior que o limite. |
| * | O tamanho nao é especificado na formatação da string, mas é passado como argumento precedendo o argumento a ser formatado |
| .precisão | Descrição |
|---|---|
| .numero | Para formatos inteiros (i, d, u, o, x, X): precisão especifica o numero minimo de digitos a serem mostrados. Se a quantidade de digitos for menor que o limite, entao serão acrescentados zeros ao final. O valor nao é truncado se a quantidade de digitos for maior que o limite. Precisão 0 significa que o nenhum valor é printado se o numero for 0. Para formatos e, E, f: é o numero de digitos que serão mostrados depois do ponto decimal. Para formatos g e G: é o numero maximo de digitos significantes a serem mostrados. Para s: é o numero maximo de caracteres a serem mostrados. Por padrão, todos os caracteres serão mostrados até o caracter nulo que finaliza uma string (por exemplo \n) Para c: não tem efeito. Quando nenhuma precisão é especificada, o padrão é 1. Se o periodo é especificado sem um valor explicito para precisão, 0 é assumido. |
| .* | A precisão nao é especificada na formatação da string, mas é passado como argumento precedendo o argumento a ser formatado. |
| quantidade | Descrição |
|---|---|
| h | O argumento é interpretado como um short int ou unsigned short int (só se aplica aos formatadores de inteiro: i, d, o, u, x, X). |
| l | O argumento é interpretado como um long int ou unsigned long int (só se aplica aos formatadores de inteiro: i, d, o, u, x, X) e como um caractere de largura ou cadeia de caracteres de largura para formatadores c e s. |
| L | O argumento é interpretado como um long double (somente para formatadores de float: e, E, f, g e G). |
O printf é muito poderoso, e espero ter ajudado a conhece-lo melhor.
Obrigado, até a proxima!
se voce tem um blog sobre programação, provavelmente voce postará snippets de codigo e provavelmente voce vai querer que esse snippet tenha syntax highlight como no seu editor de codigo preferido.
é bem facil, basta voce usar um modulo JS e CSS chamado google code prettify.
para cofigura-lo na pagina. basta voce colocar esses 2 links no seu html.
<link href="prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="prettify.js"></script>
e depois chamar uma função no load da pagina.
$(function() {prettyPrint();});
obs: para chama-lo assim voce deve carregar o jquery na pagina.
obs 2: mais informaçoes de configuração, veja o readme. do projeto.
basta voce colocar seu codigo dentro de uma tag code ou pre com a classe prettyprint e pronto, seu codigo vai ficar bonito na pagina!
um exemplo:
<code class="prettyprint">print "Hello World!</code>
é isso, até mais!
compilação dos melhores links da semana
http://www.componentowl.com/blog/2012/02/zen-coder-vs-distraction-junkie/
http://www.codinghorror.com/blog/2012/02/farewell-stack-exchange.html
http://www.dirtymonkey.co.uk/blog/zen-of-python-poster
http://www.designforfun.com/facebookposters/
http://www.slideshare.net/lincolnloop/customizing-the-django-admin/
http://blog.sanctum.geek.nz/vim-anti-patterns/
http://techspot.zzzeek.org/2012/02/07/patterns-implemented-by-sqlalchemy/
http://css-tricks.com/the-css-box-model/
http://designpepper.com/podcasts-for-hackers
Eu recentemente acabei de ler este livro sensacional sobre usabilidade na web.
Ele trata sobre a arquitetura de informação de uma pagina web, mostrando elementos básicos que toda pagina deve ter, o que fazer e o que não fazer, como montar sua pagina principal e como executar testes de usabilidade. Te abre os olhos pra questões básicas muitas vezes esquecidas por nós em nossos projetos web.
Por isso mesmo! Você deve ser plural, conhecer um pouco de tudo. Design, infraestrutura, usabilidade, CSS, HTML, semantica, protocolo http e todo o ecosistema que engloba a web.
Neste otimo post o Henrique Bastos fala mais sobre pluralidade para programadores web. Vale a leitura!
Se você quiser ler somente um livro sobre usabilidade na sua vida, LEIA ESTE!
Voce pode escolher o melhor preço no buscapé, por esse link.
Ou se preferir, pode comprar a versao em ingles, na amazon.
Pode ter certeza, este livro é um otimo investimento para melhorar seus projetos web, e deixar seus usuarios mais felizes! Aproveite e boa leitura.
Até a proxima!
uma compilação dos melhores links que li na semana.
https://www.destroyallsoftware.com/talks/wat
http://speakerdeck.com/u/mdo/p/bootstrap-2
http://www.startuplessonslearned.com/2012/02/hacker-way.html
http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming
Testes automatizados emergiram como uma das boas praticas da engenharia de software, e seus resultados sao comprovadamente eficazes.
Eu utilizo bastante essas tecnicas quando programo em python/django com ferramentas como o splinter, unittest entre outras. Porem quando programava em javacript, eu sempre senti falta desses testes automatizados.
tl;dr - Jasmine is a behavior-driven development framework for testing your JavaScript code. It does not depend on any other JavaScript frameworks. It does not require a DOM. And it has a clean, obvious syntax so that you can easily write tests.
Em setembro do ano passado (2011), comecei a trabalhar no projeto de cobertura de eventos na globo.com. E tinhamos como desafio principal, atualizar uma pagina em tempo real via streaming com fotos, videos e textos. Pra isso os componentes da pagina teriam que interagir muito, recebendo e tratando os dados enviados do streaming. Usamos muito js com o framework mootools, e pra testar usamos o jasmine, o que nos proporcionou uma segurança e qualidade de codigo excelentes!
Agora chega de falar!
Pra começar, vc descreve um cenario que vai testar.
Como exemplo, vamos fazer um fizzbuzz
describe("Fizz Buzz", function(){
it("numero igual a tres deve retornar fizz", function(){
expect(fizzbuzz(3)).toEqual("fizz");
});
});
Depois de escrever o teste, a gente escreve um codigo pra passar:
var fizzbuzz = function(numero) {
return "fizz";
}
Agora mais um cenario:
it("numero igual a cinco, deve retornar buzz",function() {
expect(fizzbuzz(5)).toEqual("buzz");
});
mais um pouco de codigo:
var fizzbuzz = function(numero) {
if (numero === 3) {
return "fizz";
}
return "buzz";
};
Bom ai vcs podem continuar a brincar e terminar o codigo.
Bom vc pode carregar os scripts(download aqui) do jasmine numa pagina html estatica e por ultimo carregar o seu teste. Um exemplo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Jasmine Test Runner</title>
<link rel="stylesheet" type="text/css" href="lib/jasmine-1.0.2/jasmine.css">
<script type="text/javascript" src="lib/jasmine-1.1.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-1.1.0/jasmine-html.js"></script>
<!-- include source files here... -->
<script type="text/javascript" src="aquivo/que/voce/quer/testar.js"></script>
<!-- include spec files here... -->
<script type="text/javascript" src="arquivo/de/teste.js"></script>
</head>
<body>
<script type="text/javascript">
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
jasmine.getEnv().execute();
</script>
</body>
</html>
Se vc tem um projeto em ruby com rails, vc pode usar uma gem pra rodar os testes.
Se vc tem um projeto em python, pode usar o jasmine-test-runner, feito pelo cobrateam.
Se vc tem um projeto em outra linguagem, veja aqui como rodar o jasmine.
Entao é isso!
Até a proxima, []’s
Palestra ministrada no FISL 12 em 2011 sobre TDD, Refactoring e boas praticas de programação!
Feedbacks sao bem vindos!
Até mais!
Sou usuario do vim a algum tempo e sempre estou procurando aprender mais e mais sobre esse excelente editor.
Recentemente encontrei um otimo post no blog do Yann Esposito para iniciantes aprenderem vim rapidamente e tambem para veteranos querendo aprender algumas magicas desse otimo edito de texto.
Gostei tanto do post que resolvi traduzi-lo para divulgar o vim e mostrar como voar com ele.
TL;DR: Quer aprender vim (o melhor editor conhecido pela humanidade) da forma mais rapida possivel. Eu sugiro um caminho. Comece aprendendo o basico pra sobreviver, entao integre todos os truques devagar
Vim, o editor de texto de seis bilhões de dólares
Melhor, mais rapido, mais forte
Aprenda vim e ele será seu ultimo editor de texto. Ele não é o melhor editor de texto, eu sei. É dificil de aprender, mas incrivel de usar.
Eu sugiro aprende-lo em 4 passos:
No final dessa jornada você se tornará um superstar do vim!
Mas antes de começar, um aviso. Aprender vim será doloroso no começo. Isso leva tempo. É muito parecido com aprender a tocar um instrumento musical. Não espere ser eficiente com vim do que com outro editor em 3 dias. Na verdade vai levar 2 semanas ao inves de 3 dias.
Em um editor de texto normal, escrever no teclado é o suficiente para escrever alguma coisa e ve-la na tela. Não dessa vez. Vim está no modo Normal. Vamos entrar no modo de Inserção. Digite a letra i.
Agora voce se sente um pouco melhor. Voce pode digitar textos como um editor de texto normal. Para voltar para o modo normal, tecle ESC.
Voce sabe trocar entre o modo Normal e de Inserção. E agora a lista de comandos que voce pode usar no modo Normal para sobreviver:
i- modo de Inserção. TecleESCpara voltar ao modo Normal.x- para deletar o caracter em baixo do cursor.:wq- Salvar e Sair (:wpara salvar,:qpara sair).dd- deletar e copiar a linha atual.p- colar.Recomendado:
hjkl(altamente recomendado, mas nao obrigatorio) - movimentos basicos do cursor (←↓↑→). Dica: j é a seta para baixo.:help <comando>- mostra o help do<comando>, voce pode começar a usar o:helpsem nada mais.
Somenten 5 comandos. Isso é muito pouco para começar. Uma vez que esses comandos começarem a sair naturalmente (pode ser no final do dia), voce pode ir para o nivel 2.
Mas antes apenas uma observação no modo Normal. Em editores normais, para copiar voce deve usar a tecla Ctrl (Ctrl + c geralmente). Na verdade, quando voce pressiona o Ctrl, é como se todas as funcionalidades das teclas mudassem. Com vim no modo Normal, é como se seu Ctrl sempre estivesse pressionado.
Uma ultima observação sobre notações:
<C-V>: e terminam com <enter>. Por exemplo, quando eu escrever :q isso significa :q<enter>Voce sabe os comandos para sobreviver. Agora é hora de aprender mais alguns comandos. Eu sugiro:
a- insere depois do cursoro- insere uma nova linha depois da linha correnteO- insere uma nova linha antes da linha correntecw- substitui do cursor até o final da palavra
0- vai para o inicio da linha^- vai para o primeiro caracter nao-branco da linha$- vai para o final da linhag_- vai para o ultimo caracater nao-branco da linha/padrao- procura por padrao
P- cola antes do cursor, relembre que p é para colar depois da posição corrente.yy- copia a linha corrente, mais facil que oddP
u- desfazer<C-r> (**Ctrl-r**)- refazer
:e <caminho/para/arquivo>- abrir:w- salvar:saveas <caminho/para/arquivo>- salvar em<caminho/para/arquivo/>:x, ZZ ou :wq- salvar e sair (:xsomente salva se necessario):q!- sair sem salvar, tambem:qa!até mesmo se houver algum buffer modificado escondido:bn (resp. :bp)- mostra o proximo (resp. anterior) arquivo (buffer)
Separe algum tempo para aprender esses comandos. Uma vez aprendido, voce deve estar apto para fazer tudo que voce faz em qualquer outro editor. Mas até agora, isso é um pouco estranho. Mas siga-me até o proximo nivel e voce verá porque.
Parabens por chegar tao longe! Nós podemos começar a parte interessante. No nivel 3, nós iremos falar somente sobre comandos que são compativeis com o vi antigo.
Vamos ver como o vim faz para te ajudar a repetir um comando:
. (ponto) - irá repetir o ultimo comandoN<comando> - irá repetir o comando N vezes.Alguns exemplos, abre um arquivo e digite:
2dd- irá deletar 2 linhas3p- irá colar o texto 3 vezes100idesu ESC- irá escrever “desu” 100 vezes. (ponto)- irá repetir o ultimo comando, escrevendo mais 100 vezes “desu”3.- irá escrever 3 “desu” (e não 300, muito inteligente)
Saber como se mover de modo eficiente no vim é muito importante. Não pule esta seção.
NG - vai para a linha Ngg - atalho para 1G, vai para o começo do arquivoG - vai para a ultima linha
w- vai para o começo da palavra seguintee- vai para o final da palavra seguintePor padrao, uma palavra é composta de letras e caracteres underscore ( _ ). Vamos chamar de uma PALAVRA um grupo de letras separadas por caracteres em branco. Se voce quiser considerar PALAVRA, entao use letras maiusculas:
W- vai para o inicio da PALAVRA seguinteE- vai para o final da PALAVRA seguinte
Agora vamos falar sobre movimentos mais eficientes:
%- Vai para o correspondente(, [, {* (resp #)- vai para a proxima (resp anterior) ocorrencia da palavra sob o cursor.
Acredite em mim, esses tres comandos são ouro.
Lembra sobre a importancia dos movimentos no vim? Aqui está a razão. Muitos comandos podem ser usados seguindo um formato geral:
<posição de inicio><comando><posição final>
Por exemplo: 0y$ significa:
Nós tambem podemos fazer coisas como ye, copie daqui até o final da palavra. Tambem podemos fazer y2/foo copie até a segunda ocorrencia de “foo”.
Mas se foi possivel com y (copiar), é tambem possivel com d (deletar), v (seleção visual), gU (maiuscula), gu (minuscula), etc…
Com todos os comandos anteriores voce ja deve se sentir confortavel com o vim. Mas agora, aqui estao as features realmente maneiras. Algumas dessas features foram a razão pra eu começar a usar o vim.
0, ^, $, g_, f, F, t, T, ,(virgula), ;
0- Vai para a coluna 0^- Vai para o primeiro caracter da linha$- vai para a ultima colunag_- Vai para o ultimo caracter da linhafa- Vai para a proxima ocorrencia da letra a na linha.,(resp;) irá para a ocorrencia anterior da busca (resp proxima).t,- Vai para o caracter anterior a primeira ocorrencia de ,3fa- Vai procurar a terceira ocorrencia da letra aFeT- Parecido comfet, porem procura pra tras
Uma dica muito util é :dt" que irá remover tudo antes de ".
<ação>a<objeto> ou <ação>i<objeto>Esses comandos só podem ser usados depois de uma operação no modo Visual. Mas eles são muito poderosos.
<ação>a<objeto> ou <ação>i<objeto>
Onde ação pode ser qualquer ação, por exemplo, d (delete), y (copiar), v (selecionar no modo Visual). E um objeto pode ser: w uma palavra, Wuma PALAVRA(palavra extendida), s uma sentença e p um paragrafo. Mas tambem pode ser um caracter natural como ", ', ), }, ].
Digamos que o cursor esteja no primeiro o de (map (+) ("foo")).
vi"- irá selecionarfoo.va"- irá selecionar"foo".vi)- irá selecionar"foo".va)- irá selecionar("foo").v2i)- irá selecionarmap (+) ("foo").v2a)- irá selecionar(map (+) ("foo")).
<C-v>.Blocos retangularss são muito uteis para comentar muitas linhas de código. Tipicamente: ^<C-v><C-d>I-- [ESC]
^- vai para o inicio da linha<C-v>- inicia a seleção por blocos<C-d>- move para baixo (comojjjor%, etc… )I-- [ESC]- escreve — para comentar cada linha
Note que no Windows voce poderá ter que usar <C-q> ao inves de <C-v> se seu clipboard nao estiver vazio.
<C-n> e <C-p>.No modo de Inserção, digite no inicio de uma palavra, e entao digite <C-p>, magicamente…
Macros: qa faça alguma coisa q, @a, @@
qa vai gravar suas açoes num registrador a. Entao @a irá refazer a macro salva no registrador a como se voce tivesse feito isso na mão. @@ é um atalho para refazer a ultima macro executada.
Exemplo
Numa linha que contem o numero 1, digite isso:
qaYp<C-a>q
qa- começa a gravarYp- duplica esta linha<C-a>- incrementa um numeroq- para a gravaçao@a- escreverá 2 abaixo do 1@@- escreverá 3 abaixo do 2Agora faça 100@@ e criará uma lista de numeros até 103.
v, V, <C-v>Vimos um exemplo com <C-v>. Há tambem v e V. Uma vez que a seleçao foi feita, voce pode:
J- juntar todas as linhas.<(resp.>) - indentar para a esquerda (resp. para a direita).=- auto indentação
Adicione alguma coisa no fim das linhas selecionadas:
<C-v>- vá para a linha desejada (
jjjou<C-d>ou/padraoou%etc…)$vá para o fina da linhaA, escreva alguma coisa,[ESC]
:split e :vsplit.Aqui estao os comandos principais, mas voce pode olhar mais em :help split.
:split- irá criar um split (:vsplitcriará um split vertical).<C-w><dir>- ondediré qualquer um dehjklpara mudar de split.<C-w>_(resp.<C-w>|) - maximiza o tamanho do split (resp. split vertical).<C-w>+(resp.<C-w>-) - Aumenta (resp. diminui) o split.
Aqui estao 90% dos comandos que eu uso todos os dias. Eu sugiro que voce aprenda nao mais que 1 ou 2 comandos por dia. Depois de duas ou tres semanas voce começará a sentir o poder do vim nas suas mãos.
Aprender Vim é mais uma questao de treinamento que de memorização. Felizmente vim vem com otimas ferramentas e uma execelente documentação. Rodevimtutor para voce se familiarizar com os comandos basicos. Alem disso voce deve ler atentamente está pagina: :help usr_02.txt.
Entao, voce aprenderá sobre !, folds
, registradores, os plugins e muitas outras features. Aprender vim é como se estivesse aprendendo piano e tudo ficará bem.
Agora que voce ja sabe vim, use-o da maneira correta. Esqueça seu mouse, Ctrl-c + Ctrl+v, use as features do vim, se forçe a usa-las, eu garanto que depois que voce se sentir confortavel, vai voar.
Qualquer duvida e/ou critica podem deixar nos comentarios.
Até a proxima
OBS: Post totalmente editado no VIM, usando markdown.
Na ultima semana rolou em Porto Alegre mais um FISL na PUC. Foram 4 dias conhecendo e conversando com muita gente, revendo amigos, comendo muito churrasco e sentindo muito frio!
Esse foi meu segundo FISL, e como dizem: a segunda vez é ainda melhor!
Fiquei grande parte do tempo no stand da globo.com, conversando com pessoas da comunidade python, conhecendo gente de todo brasil e fazendo novas amizades. Tive contato com muitos alunos e futuros programadores, uns mais interessados e outros só querendo brindes xD
No stand da globo.com apresentei uma lightning talk sobre Coding Dojo e convidei a galera para participar de um dojo no sabado a tarde!
E apareceram mais pessoas que eu esperava.
Junto com o Israel Teixeira, do dojorio, guiamos um dojo em python colocando em pratica os conceitos de TDD aprensentados por ele na sua palestra. O codigo e o feeback estao no github.
Tambem nesse FISL tive a oportunidade de apresentar minha primeira palestra em um grande evento, e o resultado nao poderia ser melhor!
Sala cheia, muitas perguntas e elogios.
Esse FISL foi inesquecivel, agora que venha a QCON Br e a Python Brasil! Nos vemos lá!
ps: veja o que o Henrique Bastos tem a dizer sobre o FISL 12!
Se voce é programador e precisa subir maquinas virtuais pra testar sites no IE 6/7/8/9, ou quer fazer deploy para ambientes iguais os de produção, e pra mais varias coisas que precisam ser rapidas e são mega chatas e demoradas, e voce usa VirtualBox – Voce esta fazendo isso errado.
O vagrant é uma ferramenta para a construção e distribuição de ambientes dedesenvolvimento virtualizados, escrita em ruby que usa o VirtualBox da Oracle como base, e prove funcionalidades que permitem criar, distribuir, reproduzir e configurar Maquinas Virtuais(VM) de forma rapida (fonte: github do projeto).
Como eu disse anterior mente é muito facil, basta ter o ruby, e a virtualbox instalada, uma internet boa ajuda tambem.
Tendo isso instalado vamos começar:
Execute esse comando:
$ gem install vagrant
Certifique-se que tudo está instalado corretamente.
Antes de criar sua maquina, crie uma pasta para abrigar os arquivos de configuraçao:
$ mkdir vagrant-machine
Agora vamos criar uma VM com ubuntu 10.04
$ cd vagrant-machine $ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box $ vagrant init lucid32 $ vagrant up
Feito isso sua VM ja está pronta para ser acessada!
Claro que nao!!! Agora vamos configurar seu ambiente! Primeiro, abra o arquivo Vagrantfile na pasta vagrant-machine e deixe ele assim:
Vagrant::Config.run do |config| # Setup the box config.vm.box = "lucid32" end
Execute o comando de reload para carregar suas modificações
$ vagrant reload
Teste o acesso a sua VM para ver se está funcionando corretamente
$ vagrant ssh
OBS: Tudo que voce colocar na pasta onde está seu Vagrantfile, aparecerá na VM na pasta /vagrant. Para ter certeza, execute este comando na VM:
$ ls /vagrant
Bom agora voce tem que instalar os pacotes que voce precisa no seu ambiente. Para isso eu escolhi usar o chef para gerenciar a instalação. Esse processo depende muito do seu ambiente, entao deixarei referencias para montagem de ambientes usando o chef.
Para estudar o vagrant e o chef eu fiz uma VM configurada para ser um servidor de CI
Nela estao instalados os seguintes pacotes: * Django 1.3 * Apache * git * MySql * Jenkins (servidor de CI)
OBS: Execute a VM e acesse o servidor de CI pela url http://localhost:8080/
Bom, é isso, divirtam-se com suas novas VMs rapidas e praticas.
Duvidas e criticas, deixem nos comentarios.
Até a proxima
Todo dia, toda hora alguém levanta a mesma questão: Rails escala? Djángo escala? <seu framework preferido> escala?Se você ainda faz essas perguntas, fique sabendo que se sua aplicação não escala, a culpa é toda sua provavelmente você esta fazendo merda algo de errado.Ok, já que você disse, o que posso fazer pra melhorar?!O Gregg Pollack, criou uma seria de vídeocasts dando dicas super rápidas e simples para escalar uma aplicação rails. => VEJA OS VIDEOCAST AQUI <=São dicas como, page cache, expiration, load tests e mais outras coisas legais que podem ser aplicadas facilmente e rapidamente em qualquer projeto rails.Para django, existe essa thread no StackOverflow que explica varias formas de escalar uma aplicação djangoLegal, mas eu trabalho com outro frameworkEssas dicas podem ser aplicadas em quase todas as linguagens e frameworks. Basta fazer o paralelo entre a ferramenta mostrada no vídeo|thread e uma similar que pode ser usada com seu framework.Uma simpless pesquisa no google já traz sua resposta!
Se tiver outra indicaçao de material, ou dica, deixa ai nos comentarios,
Thanks.
O should-dsl é uma ferramenta de teste que tem como principal objetivo tornar o codigo mais legivel e limpo. (http://www.should-dsl.info/)
Depois de instalado (o site ensina como fazer) é bem simples começar a escrever os testes. Tá duvidando, então olha só:
class Pessoa:
louco = False
careta = True
def colher_cogumelos(self):
self.cogumelos = ['cogumelo1', 'cogumelo2', 'cogumelo3', 'cogumelo4', 'cogumelo5']
return self.cogumelos
def fazer_cha(self, *ingredientes):
cha = ingredientes
return cha
def beber(self, oque):
self.louco = True
self.careta = False
self.versos = ['espinho', 'espinho']
return self
def guardar_cogumelos(self, cogumelos):
self.recanto_espiritual = cogumelos
return self.recanto_espiritual
class TestSoParaLoucos(unittest.TestCase):
def setUp(self):
self.pessoa = Pessoa()
def test_deve_ser_careta_sem_tomar_nada(self):
self.pessoa |should| be_careta
def test_deve_estar_louco_depois_de_tomar_um_cha_de_cogumelo(self):
cogumelos = self.pessoa.colher_cogumelos()
cha_de_cogumelo = self.pessoa.fazer_cha(cogumelos)
cha_de_cogumelo |should| contain(cogumelos)
self.pessoa.beber(cha_de_cogumelo) |should| be_louco
self.pessoa.versos |should| have(2).espinhos
def test_deve_guardar_cogumelos_escondidos(self):
cogumelos = self.pessoa.colher_cogumelos()
self.pessoa.guardar_cogumelos(cogumelos)
self.pessoa.recanto_espiritual |should| have(5).cogumelos
if __name__ == '__main__':
unittest.main()
Isso foi só um exemplo ludico, pra mostrar as possibilidades da ferramneta! Hoje ela contem varios matchers(as funções de teste) para os mais variados objetivos. Voce pode ver a lista completa aqui
Voce tambem pode fazer seus proprios matchers
Se voce gostou do projeto e quer ajudar, aqui vc encontra varias formas de contribuir!
Entao eh isso, Até a proxima xD
Quem programa em django, sente falta de um Heroku[1], como no rails para fazer deploy e colocar a aplicaçao online mais rapido e de graça.
Obervação: Existe um serviço que tem essa proposta, ser um Heroku pra Django, é o Djangy (https://www.djangy.com/), Porem ele esta em teste! Voce pode entrar e pedir um convite. Eu ja pedi mas nao foi aceito ainda! =/
Uma Solução…
… pra esse problema é o alwaysdata.com . Eles tem varios planos de hospedagem, e um deles é totalmente free!!! xD
Assim, voce pode desenvolver sua aplicação e ja colocar no ar!
Facil assim?
Sim, fácil assim!! A interface deles é muito simples. Você configura seu servidor com a versão do python/django que usa com 1 clique.
Depois é só enviar a aplicação via ssh para o server, seguir os passos deles pra deploy[2] e pronto, sua aplicação django estará no ar!!!
Que massa! Isso é perfeito!
Não!
Ele tem alguns pequenos problemas:
Até a proxima pessoal,
Abraços.
[2]http://wiki.alwaysdata.com/wiki/D%C3%A9ployer_une_application_Django
[3]http://tarsisazevedo.posterous.com/truque-ssh-sem-senha
Voce tem que acessar um servidor muitas vezes ao dia, e esta cansado de digitar senha toda hora? Voce nao aguenta mais gravar mil senhas? Tem que digitar todas as mil senhas para tentar acessar sua maquina remota?
Seus problemas acabaram!!!
Voce só vai precisar de:
Tudo pronto? Entao…
Abra o terminal e digite:
ssh-keygen -t rsa
Bom agora voce vai ver as seguintes mensagens:
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
APENAS TECLE ENTER PARA TODAS!!!!
Agora faça o seguinte:
scp ~/.ssh/id_rsa.pub root@sua_maquina_remota:~
Se isso deu certo, agora acesse sua maquina:
ssh root@sua_maquina_remota
Estando na maquina faça o seguinte:
cat id_rsa.pub » .ssh/authorized_keys
Se o diretorio .ssh nao existir, crie-o assim: mkdir .ssh
Feito isso, apenas saia da maquina remota e tente acessar novamente.
Agora voce nao precisa mais de senhas!!!
Porem…
Existe uma lei do universo que diz o seguinte: se algo pode dar errado, vai dar errado, entao…
Se depois de seguir todos esses passos, voce encontrar com esse erro:
“agent admitted failure to sign using the key”
Basta fazer o seguinte na maquina local, nao na maquina remota:
sudo apt-get install ssh-add
Por fim..
deixe seu feedback(problemas, sugestoes, etc) nos comentarios.
Obrigado, e até a proxima pessoal!
Referencias:
http://polishlinux.org/apps/ssh-tricks/
http://www.pedropereira.net/ssh-sem-senha-autenticacao-atraves-de-certificados-rsa/
http://www.baptiste-wicht.com/2010/07/tip-how-to-solve-agent-admitted-failure-to-sign-using-the-key-error/