Node.js onde usar?
10 de Abril de 2012, 0:00 - sem comentários aindaUltimamente estou estudando bastante Javascript para colocar algumas aplicações em Node.js no ar, ate que tive a minha primeira necessidade real de usar Nodejs.
Na Nodegrid tivemos a necessidade fazer grande processamento assíncrono, temos um servidor de cache que foi desenvolvimento por necessidade de armazenamento e controle do que esta em cache e tempo para expirar o mesmo, poderia ser usado memcache mas a Nodegrid esta fazendo um serviço de hosting de memcache, com isso teríamos o problema de concorrência de nome dentro do banco chave e valor (Memcache).
No case que tenho com a Nodegrid na solução de cache (Djazz.cache) começamos a desenvolver usando ‘C’, funcionou muito bem, mas com o passar do tempo a manutenção do software começou ficar trabalhosa. Eu tenho experiencias com software grande em C (Kernel BSD) e mesmo assim a manutenção de um software não é nada confortável. Migrei para Python com Twisted, mais infelizmente o códigos usando Twisted não fica muito agradável ou seja não é Pythônico então olhei para o projeto Node.js que tem a característica simples e facil de trabalhar com processamento assíncrono.
Recomendo olhar o trabalho que os commiters do Node.js estão fazendo, tem muitas ideias ótimas e outra que precisa ser melhoradas.
Vejo a Node.js como uma solução ótima e simples para trabalhar com conexões assíncrono, ainda hoje não vejo o Node.js substituindo uma linguagem que já esta a anos rodando em backend como Python, Ruby, Java e etc. Ao meu ver o Node.js vai crescer ainda mais o seu uso nas necessidades específica (assíncronas), pela simplicidade de implementação e fácil manutenção.
Link o slide da palestra “Node.js em produção“
Hello world!
9 de Abril de 2012, 0:00 - sem comentários aindaWelcome to WordPress. This is your first post. Edit or delete it, then start blogging!
Test é para os fracos
24 de Fevereiro de 2012, 0:00 - sem comentários aindaEm novembro fiz mais uma palestra sobre teste unitários
só que agora com o titulo da palestra bem diferente "Test é para os fracos", o motivo desse titulo é para deixar a palestra mais dinâmica pois escrever teste não é uma tarefa muito simples no primeiro contato.
Tem muitas pessoas que acha que escrever teste não garante que o software não tem bug, isso é claro, mas vamos encarar o problema quando quando tiver que mudar o software, caso ele esteja como teste na parte onde esta sendo implementado novas funcionalidade e venha quebrar ai sim vamos dar valor aos teste.
Uns dos tópicos da minha palestra é como acostumar a escrever teste, geralmente não é um trabalho muito simples, quando começamos a praticar técnicas de desenvolvimento de software como TDD é um trabalho muito chato pois não temos experiencia e nem costume de escrever um teste para depois implementar o software passar na quela teste, vendo este cenário podemos chegar a conclusão que muitos desenvolvedores não sabe realmente o que precisa ser desenvolvido e com isso fica ainda mais complicado de praticar TDD.
Antes de desenvolvermos um software a primeira coisa é saber o que o software vai fazer, só assim a pratica de TDD começa e ficar mais fácil e fluente, uma dica que dou para quem começa da implementa camada de teste unitário em um projeto é participar de Coding Dojo e de PythonStorm (Ideia do nosso amigo Rodolpho Eckhardt) onde é reunido um grupo para fazer para bater um papo sobre tecnologia (Python) e falar sobre melhores praticas.
Esse é referente aos primeiros slides da palestra, vou escrever as próximos slides no próximos webposts.
Link dos slides da palestra: http://www.slideshare.net/avelinoo/test-para-os-fracos
VIM a IDE para programadores Python
22 de Dezembro de 2011, 0:00 - sem comentários aindaDepois muito tempo sem escrever nada no meu blog, escolhi esse tema para chamar a atenção do pessoal que esta começando desenvolver em Python que sempre pergunta qual é a melhor IDE para desenvolver em Python ou qual quer programador que usa uma super IDE pesado porque tem o recurso X, Y e Z.
Com o VIM podemos ter todos os recurso avançado que temos em qual quer IDE, basta algumas configurações para que esses recursos ser ativado, para facilitar a vida de todos compartilhei o meu .vimrc
e nesse post vou explicar como usar o mesmo.
"Em 2 de novembro de 1991, Bram Moolenaar publicava a primeira versão do edito vim. O vim nasceu como um clone para Amiga do editor vi criado por Bill Joy em 1976, adicionando algumas funcionalidades extras, daí seu nome (VI iMproved ou VI Melhorado). Este editor se adaptou rapidamente a outras plataformas. "
Assumindo que o vi
já esta instalado no meu micro, vamos instalar as configurações que eu fiz, basta rodar os seguintes comando no seu bash (Linux ou Mac):
curl https://raw.github.com/avelino/.vimrc/master/bootstrap.sh -o - | sh
Após isso ele vai baixar o repositório na sua pasta HOME
.
Recomendo o uso o VIM em GUI pois podemos chegar 256 cores, ou seja, colocar temas mais agradável e assim deixando o uso do vim
mais confortável para o desenvolvimento, para Linux é o gvim
e para mac o macvim
(Para mac o Björn Winckler fez um ótimo trabalho, na minha humilde opinião é a melhor versão do VIM via GUI).
Chega de blablabla né, vamos logo para o que realmente interessa, como o VIM
ficou e como utilizar ele?
Usando o vim para navegar nas pasta de um projeto:
Buscando arquivo por nome dentro do projeto:
Listar todas as class e def do arquivo esta esta aberto (Python)
Lista de comandos para usar no 'vim', lembrando que esses comando foi customizado:
-
:cd
/path Abrir pasta -
tn
Abrir nova aba -
te
Abrir nova aba e carregar arquivo -
t]
Proxima aba -
t[
Voltar aba -
Ctrl+c
Adicionar todos os arquivos no cache para poder fazer busca de arquivo (recomendo fazer isso ao abrir o projeto) -
Ctrl+f
Busca arquivo e abre na mesma aba -
Ctrl+s
Busca arquivo e abre em uma nova aba -
\b
Abre arquivo que esta no buffer do vim (Arquivo abertos) -
\d
,\n
ouF3
Abre navegador de arquivo -
\f
Lista todas as class e def (Python) -
\j
Vai para declaração de um metodo -
\r
Renomear todos os metodos -
[e
Move linha para cima -
e]
Move linha para baixo -
\v ou
Ctrl+w + v` Divide a tela em vertical -
\h
ouCtrl+w + s
Divide a tela em horizontal -
\w
ouCtrl+w + q
Fecha a aba atual -
Ctrl+k
Abre console Python -
Ctrl+j
Roda o script Python aberto -
\sh
Abre bash (shell) -
\p
Manda o arquivo em aberto para o dpaste.com -
\ga
Git add . -
\gc
Git commit -
\gsh
Git push -
\gs
Git status -
\gd
Git diff -
\gr
Git remove -
\S
Remove todos os espaços do final -
\c
Lista controle de versao do buffer
Google Nexus S, atualização oficial para Android 4.0 (Ice Cream Sandwich)
17 de Dezembro de 2011, 0:00 - sem comentários aindaDia 16/12/2011 o Google lançou oficialmente a atualização do aparelho Nexus S para Ice Cream Sandwich (Android 4.0), a noticia saiu no Twitter oficial do Google Nexus.
Para você atualizar o seu Nexus S faça o seguinte procedimento:
-
1
- Faça download da imagem do Android 4.0 para o Nexus S no seguinte link: http://android.clients.google.com/packages/ota/google_crespo/VQ8PQk_V.zip ou http://dl.dropbox.com/u/763381/VQ8PQk_V.zip -
2
- Coloque oVQ8PQk_V.zip
SD do seu Nexus S e você deve renomear o arquivo paraupdate.zip
-
3
- Desligue o seu aparelho -
4
- Aperte o botão dovolume
para cima + o botãopower
, seu celular vai iniciar no modulofastboot
-
5
- Selecione a opçãorecovery
-
6
- Vai começa carregar e aparecera umtriângulo
com um!
, nessa tela você deve aperta o botãopower
+volume
para cima (Deve ser na sequência relatado no post
) -
7
- Vai aparecer um menu onde você deve selecionar a seguinte opçãoApply update from /sdcard
-
8
- Após instalar você deve selecionarreboot system now
-
9
- Pronto,Android 4.0.3
instalado no seu Nexus S
Quando o seu celular for ligar a primeira vez com Android 4.0 ele vai ficar um pouco lento pois vai refazer o dalvik cache
.
Lembrando que você tem que ter a versão do Android oficial do Google instalado no seu Nexus S, caso não esteja não vai conseguir fazer os procedimentos, pois estamos atualizando para a versão oficial do Google.
O Google vai liberar aos poucos a atualização automatica para os Nexus S pois se não vai acabar com o link das operadoras, no Brasil principalmente que nosso 3G é um 2G.
Nova versão da API do Dropbox
14 de Outubro de 2011, 0:00 - sem comentários aindaDia 14.09.2011 o Dropbox lançou a nova versão 1.0 da API, nesse lançamento trouxe muitas novidades e melhorias:
- Suporte para aplicações web
- Suporte para criação de pasta (Na versão 0.1 da API não tinha)
- Novo site para desenvolvedores, com documentação simples e completa https://www.dropbox.com/developers_beta
- Melhor compartilhamento de arquivo, streaming, busca por arquivo e suporte para revisão de arquivo
- Implementação no controle de nomes de arquivos, para não sobrescrever arquivos já salvo
- SDK atualizado para iOS, Android, Python, Ruby e Java que implementa todas modificações e documentação
Link do repositorio (Python Pypi) da nova biblioteca http://pypi.python.org/pypi/dropbox/1.1
O dropbox implementou um oauth onde podemos desenvolver software e fazer o usuário usar a conta de dropbox dele para armazenamento de arquivos:
Vou falar um pouco sobre 3 metodos que esta dentro da biblioteca "dropbox" client, rest e session:
Com o metodo session é por onde tudo começa, onde você linka o seu software com uma conta Dropbox, exemplo:
# Include the Dropbox SDK libraries
from dropbox import session
# Get your app key and secret from the Dropbox developer website
APP_KEY = 'INSERT_APP_KEY_HERE'
APP_SECRET = 'INSERT_SECRET_HERE'
# ACCESS_TYPE should be 'dropbox' or 'app_folder' as configured for your app
ACCESS_TYPE = 'INSERT_ACCESS_TYPE_HERE'
sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
Caso esteja usando a conta do Dropbox do usuário podemos pegar informações da conta dele:
client = client.DropboxClient(sess)
print "linked account:", client.account_info()
Agora usando o metodo "client" podemos fazer get e put de arquivos:
from dropbox import client
f = open('working-draft.txt')
response = client.put_file('/magnum-opus.txt', f)
print "uploaded:", response
Após criar o arquivos podemos ler ele:
print client.get_file('/magnum-opus.txt').read()
Reescrever o arquivo com uma nova revisão para criar um novo arquivo:
out = open('magnum-opus.txt', 'w')
out.write(client.get_file('/magnum-opus.txt',rev='362e2029684fe').read())
Para trabalhar com REST temos um ótima documentação https://www.dropbox.com/developers_beta/reference/api
Problema com hashlib + md5 (Python 2.7)
4 de Outubro de 2011, 0:00 - sem comentários aindaEstava com o seguinte problema "Error: No module named _md5", primeiramente pensei que foce problema de de compilação do Python, mas olhando o problema proximo achei alguns artigo falando desse problema e um deles estava no bug.python.org
A solução que cheguei foi, criar uma lib chamada "_md5", criei um arquivo chamado "_md5py":
class _md5:
def __init__():
import md5
return md5
Lendo as documentação vi que a lib "hashlib._md5" foi deprecada pois a md5 ficou no lugar. Espero que ajude outras pessoas que esta com esse problema.
Problema com hashlib + md5 (Python 2.7)
4 de Outubro de 2011, 0:00 - sem comentários aindaEstava com o seguinte problema "Error: No module named _md5", primeiramente pensei que foce problema de de compilação do Python, mas olhando o problema proximo achei alguns artigo falando desse problema e um deles estava no bug.python.org
A solução que cheguei foi, criar uma lib chamada "_md5", criei um arquivo chamado "_md5py":
class _md5:
def __init__():
import md5
return md5
Lendo as documentação vi que a lib "hashlib._md5" foi deprecada pois a md5 ficou no lugar. Espero que ajude outras pessoas que esta com esse problema.
Porque fazer teste unitario em javascript?
22 de Julho de 2011, 0:00 - sem comentários aindaÉ complicado confiar em um software que não tem teste unitario, hoje estava escrevendo alguns códigos em JavaScript e resolvi escrever esse post pois muitos desenvolvedores JavaScript não costuma testar seus códigos.
QUnit é um Framework open source de teste unitário para JavaScript, ele foi desenvolvido para fazer teste unitarios no desenvolviemento do proprio Jquery mas é capas de testar qual quer código Javascript (Ate mesmo testar código Javascript do lado do servidor NodeJS)
Em baixo segue o exemplo de uma implementação simples:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="http://code.jquery.com/qunit/git/qunit.js"></script>
<script>
function calc(val1, val2, oper){
val1 = typeof val1 == 'undefined' ? 0 : val1
val2 = typeof val2 == 'undefined' ? 0 : val2
oper = typeof oper == 'undefined' ? "+" : oper
if(oper == "+")
cal = val1 + val2
else if(oper == "-")
cal = val1 - val2
else
cal = false
return cal
}
</script>
<script>
$(document).ready(function(){
module("Test render html")
test("test valor in #test1", function(){
equals("ok ok ok", $("#test1").html())
notEqual("ok ok ok ", $("#test1").html())
})
module("Test function calc()")
test("test basic return 10", function(){
equals(10, calc(10))
notEqual(10, calc(11))
})
test("test basic sum 2 parameter", function(){
equals(20, calc(10, 10))
notEqual(21, calc(10, 10))
deepEqual(20, calc(10, 10))
notStrictEqual("20", calc(10, 10))
})
test("set operator +", function(){
equals(20, calc(10, 10, "+"))
equals(false, calc(10, 10, "..."))
})
test("set operator -", function(){
equals(1, calc(10, 9, "-"))
})
})
</script>
</head>
<body>
<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup, will be hidden</div>
<div id="test1">ok ok ok</div>
</body>
</html>
Esse código assima estou fazendo dois tipo de teste, um modulo de item renderizado na pagina e outro modulo de teste de uma função de calculo.
Segue abaixo o print de como ficou o test:
Porque fazer teste unitario em javascript?
22 de Julho de 2011, 0:00 - sem comentários aindaÉ complicado confiar em um software que não tem teste unitario, hoje estava escrevendo alguns códigos em JavaScript e resolvi escrever esse post pois muitos desenvolvedores JavaScript não costuma testar seus códigos.
QUnit é um Framework open source de teste unitário para JavaScript, ele foi desenvolvido para fazer teste unitarios no desenvolviemento do proprio Jquery mas é capas de testar qual quer código Javascript (Ate mesmo testar código Javascript do lado do servidor NodeJS)
Em baixo segue o exemplo de uma implementação simples:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css" type="text/css" media="screen" />
<script type="text/javascript" src="http://code.jquery.com/qunit/git/qunit.js"></script>
<script>
function calc(val1, val2, oper){
val1 = typeof val1 == 'undefined' ? 0 : val1
val2 = typeof val2 == 'undefined' ? 0 : val2
oper = typeof oper == 'undefined' ? "+" : oper
if(oper == "+")
cal = val1 + val2
else if(oper == "-")
cal = val1 - val2
else
cal = false
return cal
}
</script>
<script>
$(document).ready(function(){
module("Test render html")
test("test valor in #test1", function(){
equals("ok ok ok", $("#test1").html())
notEqual("ok ok ok ", $("#test1").html())
})
module("Test function calc()")
test("test basic return 10", function(){
equals(10, calc(10))
notEqual(10, calc(11))
})
test("test basic sum 2 parameter", function(){
equals(20, calc(10, 10))
notEqual(21, calc(10, 10))
deepEqual(20, calc(10, 10))
notStrictEqual("20", calc(10, 10))
})
test("set operator +", function(){
equals(20, calc(10, 10, "+"))
equals(false, calc(10, 10, "..."))
})
test("set operator -", function(){
equals(1, calc(10, 9, "-"))
})
})
</script>
</head>
<body>
<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup, will be hidden</div>
<div id="test1">ok ok ok</div>
</body>
</html>
Esse código assima estou fazendo dois tipo de teste, um modulo de item renderizado na pagina e outro modulo de teste de uma função de calculo.
Segue abaixo o print de como ficou o test: