Nóis é muito burro!

Postado em Artigos, Diversos por Felipe Tonello on the July 17th, 2008


Ajude a Combater o Spam! Clique aqui!

Esse é meio que um desabafo e engraçado ao mesmo tempo ;)

A história começa quando vim para o Canadá para trabalhar com Java e no fim das contas comecei a trabalhar com ASP.NET. Eu não tenho nada contra ASP.NET, pelo contrário, é uma ótima tecnologia.
Mas o problema é que aqui na empresa onde trabalho, eles não utilizam meu potencial(não que eu tenha muito). Aqui eu fico arrumando layout e controller ASP.NET, tabulando, fazendo relatórios e assim por diante. PELO AMOR NÉ?
E eu percebi que estava enferrujando em programação, prática e inclusive meu conhecimento.

Mas tudo bem. 5 Meses passaram…

Quando eu e o Luiz Vitor estavamos resolvendo o exercício do Alien Numbers (Google Code Jam 2007). E depois de 5 horas conseguimos hehe aquela alegria!!!

from __future__ import alien_number

Aí começamos a fazer do Maze(Labirinto). Tentamos, tentamos, tentamos e aí não deu mais tempo porque comecou o Google Code Jam 2008.

Os 2 primeiros exercícios da primeira fase eram fáceis. Um era sobre serach engine e outro era de esquema de trens. Não era necessários algoritmos complexos para resolver, apenas lógica.
Aí tudo bem, comecei a fazer o primeiro. Depois de uns 15 minutos entendi o que era para fazer e fui jantar. Jantando fui pensando o que iria fazer para resolver o problema. E tinha chegado numa conclusão simples.
Cheguei no meu computador e fui começar meu código. Em 30 min +- mandei minha versão e bééééééé: ERRADO. Aí fui repensar e vi o que estava errado e mandei de novo: bééééééé.
Aí comecei a ficar encucado. E em quanto isso o Bruno Gola e Lameiro já tinham resolvido. E eu e o Luiz nos elogiando: “Cara, nós somos muito burros!!!! hahahah” “Eu sou uma porta, pelo amor!!!”

Hoje comecei o exercício dos treins. Mais fácil do que o primeiro. Entendi a lógica, comecei a codar. E NADA hehehe Fiz um monte de coisa, vários davam certo mas uns davam errado e percebi de novo que era erro de código. Aí agora desisti já, nóis é muito burro e ano que vêm estamos aí. Só agora vou estudar muito! Comprei uns livros feras d+ de algoritmos, que por sinal recomendo a todos que querem ser bons programadores!

Mas falando a verdade, o Bruno Gola e o Lameiro e inclusive o Luiz são muito bons, muito melhor que eu. Mas eu fiquei injuriado pelo fato de eu não ter conseguido CODAR esses problemas, que estavam resolvidos na minha cabeça.

E agora a moral da história, voltando ao começo do post.

Nunca, mas NUNCA, vá trabalhar em um lugar(ou o que seja) onde não te estimulem e exija seu potencial! NUNCA

Poison

Sinceramente, se eu não tivesse para mudar de empresa agora no final do mês, eu largava tudo aqui, tudo mesmo. E voltava para o Brasil.
Prefiro ser pobre, morar num lugar onde a política é sinônimo de palhaçada, ao que desaprender tudo e ser um inútil.

“Eu vou virar freelancer” - Já pensaram isso?

Postado em Artigos, Diversos por Felipe Tonello on the June 24th, 2008


Ajude a Combater o Spam! Clique aqui!

Freelancer

Conversando com o Jader fui inspirado a escrever esse post.

Muitos, assim como eu, tiveram essa grande idéia de virar freelancer. Ser seu próprio chefe, escolher seus trabalhos, trabalhar com o que gosta, são idéias atrativas né?
Mas tudo o que é bom pode ficar ruim, ou péssimo!
Por que estou falando isso? Não é para assustar não, mas para você refletir sobre sua situação.

Perguntas para reflexão:
- Você já possui um trabalho? Você não gosta dele? Você têm benefícios(refeição, seguro, saúde …)?
Lembrete: como freelancer você não terá mais nada disso

- O que te faz pensar que como freelancer será melhor?
- Contato é a coisa mais importante para um freelancer, você têm bons contatos?
- Você é responsável? Cumpre horário? É disciplinado?
Lembrete: Você terá que acordar cedo, se policiar em msn/plurk/twitter

- Têm responsabilidades para com família? O que eles esperam de você?

- Está disposto a correr os riscos?
Se você responder que sim. Espero que seja o melhor!
É um desafio e não é dos fáceis. Mas pode trazer ótimos frutos e realizações.

Freelancer

Freelancer é uma boa, eu fui por 6 meses. Aprendi bastante, ralei bastante. Fiz palestras, projetos opensource, ajudei em projetos e etc. Foi muito proveitoso para mim. Mas no meu caso o que me atrapalhou foi a questão da disciplina.

Então, antes de tomar uma decisão pense! pense muito! E sejamos todos felizes! :)

E você? É freelancer? Relate sua experiência e dicas!

Você gosta do seu emprego? Em busca do emprego perfeito?

Tags: , , , ,
Postado em Artigos, Open-Source, Python, Tecnologia e Tendências, nerd por Felipe Tonello on the May 29th, 2008


Ajude a Combater o Spam! Clique aqui!

I Love LinuxÉ impressionante como todo mundo que se forma em uma faculdade sai com aquela esperança de revolucionar o mundo, criar uma empresa como o Google ou até mesmo ir para lá como desenvolvedor super power em Python.

É, dizem que nada é impossível mesmo. Mas até quando temos que ficar sonhando?

Bom, apesar de ter menos de 2 anos de experiência eu já trabalhei em 4 empresas, desde pequenas até gigantes. Sempre tentando achar um emprego perfeito.

Como você define algo bom? Salário? Benefícios? Projetos? Tecnologia usada? Aprendizado?

Para nós que somos geeks(linuxeros) isso é mais difícil ainda! Gostamos de Python, PHP, Linux, Vim etc etc. Mas muitas vezes temos que engulir seco por trabalhar com ASP.NET (meu caso).
É, estou me cansando de novo. Não gosto da environment de trabalho, do projeto e principalmente da tecnologia usada. Meu direito, certo?

Mas até onde compensa ficar pulando de trabalho em trabalho, tentando achar algo que você se adapte? Ou então trabalhar por conta?
Muitas vezes você não pode fazer isso. Por falta de oportunidade ou “simplesmente” responsabilidades a cumprir.

Python PoweredBom, eu já estava deixando essa coisa de ter emprego perfeito de lado. Até que me apareceu uma oportunidade para trabalhar com Linux, Python, PHP, C++/Qt GTK. Tudo opensource. Parece até um sonho. Aceitei na hora!

Mas e você? Acha que um dia vai para ser um Guido van Rossum do Google? O que faz para que isso um dia possa ser realizado? Vale a pena lutar por isso? Ou, talvez, não esquenta cabeça mais com isso?

Aqui eu dei um exemplo pessoal, mas não necessariamente você gosta de Linux.

Conte sua história :)

RobotQt - Simulador de robôs autônomos

Tags: , , ,
Postado em Artigos, Open-Source, Projetos, RobotQt por Felipe Tonello on the April 23rd, 2008


Ajude a Combater o Spam! Clique aqui!

É com grande euforia que anuncio o novo projeto que eu, Leandro Lameiro, Leandro Guilherme e Luiz Cardoso estamos planejando: RobotQt.

Mas o que será esse projeto?

RobotQt será um projeto com foco educativo e acadêmico. Com esse software, o usuário poderá simular sua programação autônoma de seu robô. Por exemplo em projeto como o FIRST.

Objetivo do projeto

Temos como o objetivo principal(por enquanto) motivar e incentivar o uso da robótica em escolas e universidades. Com o nosso software não será preciso ter um hardware físico para fazer testes. Outro fator positivo é que iremos portar nosso software para Windows, Mac e Linux.

Como funciona?

A idéia inicial(depois explico o porquê inicial) do projeto é fazer com que um usuário configure seu robôzinho com motores e sensores. Fazendo assim testes de uso dos sensores e motores.
O legal disso é que a engine pode ser estendida, fazendo com que você possa crias suas próprias classes. Exemplo: Você vai usar um tipo de sensor que não tem por padrão no software, então é só extender a classe abstrata Sensor e criar o seu próprio.
A parte mais legal do projeto é a programação da parte autônoma. Isso será feito com Lua(incentivo ao software livre brasileiro ;) ). Todos os sensores e motores será acessado pelo seu programinha feito em Lua. Podendo fazer testes, loops e tudo que um autônomo têm direito.

Para o futuro do projeto, pretendemos suportar um maior numero de padrões de robótica e também hardware. Além da dar suporte para Python.
E pelo fato de ser software livre, acreditamos ter um suporte muito bom da comunidade e principalmente com código para dar uma maior extensão ao nosso suporte à sensores, etc.

Desenvolvimento

Projeto será desenvolvido com C++ e Qt4. Terá suporte a scripting em Lua.
E estamos também participando no Qt-Contest.

Quer ajudar no projeto?

Ainda não temos nenhum release, estamos em fase de planejamento. Mas todo tipo de ajuda será bem vinda!
Acesse o site do projeto!

Fiquem atentos, vou sempre estar postando mais sobre o projetinho.

Technorati Tags: , , , , ,

Slackware 12 e roteadores, como conectar via fio?

Tags:
Postado em Artigos, Hardware, Slackware por Felipe Tonello on the January 31st, 2008


Ajude a Combater o Spam! Clique aqui!

Galera, vamos ver que é bem fácil conectar à um roteador usando o slackware 12.

No caso aqui em casa usamos 2 computadores conectados por fio e 1 sem fio.

Se você já conectou tudo certinho no roteador, só falta o nosso slack reconhecer basta fazer assim:

  1. # ifconfig eth1 192.168.0.4 netmask 255.255.255.0 up
  2. # route add default gw 192.168.0.1
  3. # dhcpcd eth1

Só unica coisa aí, é que você precisa saber qual porta eth vai ser necessária “upar” e qual o final do seu ip dentro da rede(no meu caso é o 4), mas tanto faz isso.

Resposta do desafio criptografia Blowfish

Tags: , ,
Postado em Artigos, Python, nerd por Felipe Tonello on the November 21st, 2007


Ajude a Combater o Spam! Clique aqui!

Já faz um tempinho que coloquei o ‘Desafio criptografia Blowfish’ no meu blog. Só que ninguem conseguiu, ou tentou, resolver o problema.

Vamos ver que é bem simples esse desafio.

Primeiro coisa a fazer é ler o desafio e perceber que temos 2 coisas importantes alí:

  1. Mensagem criptografada
  2. Senha da mensagem.

Feito isso já podemos matar o problema. Como?
Primeiro escolha a linguagem de programação que você quer resolver. No caso vamos utilizar Python.
Você pode baixar o blowfish.py aqui.

Se você abrir o código, pode perceber que no final do arquivo têm uns exemplos de uso. Ou simplesmente faça:

  1. $ tail blowfish.py -n 20

A saída será essa:

  1. if __name__ == ‘__main__’:
  2.     key = ‘This is a test key’
  3.     cipher = Blowfish (key)    print "Testing encryption:"
  4.     xl = 123456
  5.     xr = 654321
  6.     print "\tPlain text: (%s, %s)" %(xl, xr)
  7.     cl, cr = cipher.cipher (xl, xr, cipher.ENCRYPT)
  8.     print "\tCrypted is: (%s, %s)" %(cl, cr)
  9.     dl, dr = cipher.cipher (cl, cr, cipher.DECRYPT)
  10.     print "\tUnencrypted is: (%s, %s)" %(dl, dr)
  11.     print "Testing buffer encrypt:"
  12.     text = ‘testtest’
  13.     print "\tText: %s" %text
  14.     crypted = cipher.encrypt (text)
  15.     print "\tEncrypted: %s" %crypted
  16.     decrypted = cipher.decrypt (crypted)
  17.     print "\tDecrypted: %s" %decrypted

Agora já sabemos como faz para chamar o método de criptografar e descriptografar.

Mas peraí, no exemplo acima o mensagem era uns números e não vários caracteres como na do nosso desafio.
Aí vem a primeira pegadinha..
nossa string foi convertida para codificação base 64.
Então teremos de converter toda a string para uma string conhecida pelo blowfish(ou não, temos que ver).

  1. import base64
  2. base64.b64decode(’string_do_desafio’)

Beleza, agora sabemos que está tudo ok. Temos que conhecer o Blowfish.

Para isso vamos dar uma pesquisada na internet.

…10 minutos depois…

Bom, pelo que eu vi aqui na wikipedia e vejo isso: A entrada para essa parte do algoritmo são 64 bits…
Com complexas contas chegamos que 64 bits = 8 Bytes = 8 caracteres. Para quem não entendeu ainda, fizemos 64 bits / 8 bits = 8 Bytes

Então quer dizer que o blowfish só recebe em blocos de 8 caracteres as entradas.. hmmmm interessante..
Sabendo isso, vamos ter que separar nossa string com muitos caracteres em várias de 8 caracteres apenas.

Faremos isso com um for normal e vamos cortar a string em vários blocos de 8 caracteres. Mas e se o último bloco conter apenas 6 caracteres? Para termos certeza de que a string contem 8 caracteres podemos forcar com o método string.ljust(variavel, 8 )

Não se esqueça que a senha também não deve ter menos de 8 caracteres, então está a outra dica: Usar o ljust() na senha também.

Depois disso é só você criar seu código. Eu criei uma classe bem simples que criptograda e descriptografa.

Na verdade é bem simples sim. Vou postar meu código aqui e quem quiser baixar ele fique a vontade..

Tente desvendar o mistério e resolva o desafio!!!

Agora só falta postarem o resultado, ficou fácil né? hehe

Faça download do cript.py

cript.py

  1. #
  2. # Feito em 22/08/2007
  3. #
  4.  
  5. import sys
  6. import string
  7. import base64
  8. import blowfish
  9.  
  10. __author__ = "Felipe Ferreri Tonello <felipe.tonello@gmail.com>"
  11.  
  12. class BFCript:
  13.     """
  14. Classe que usa criptografia Blowfish juntamente com encodificacao Base64
  15.  
  16. uso: cript.py cript|descript ’senha’ ‘texto’
  17.  
  18. PS: Quando for descriptografar, o texto deve estar codificado em Base64
  19.    """
  20.     CRIPTOGRAFAR = 0
  21.     DESCRIPTOGRAFAR = 1
  22.    
  23.     def cript(self,  sKey,  sTxt,  iAction):
  24.         bf = blowfish.Blowfish((len(sKey) < 8 and [string.ljust(sKey, 8)] or [sKey])[0])
  25.        
  26.         if iAction == self.DESCRIPTOGRAFAR:
  27.             sTxt = base64.b64decode(sTxt)
  28.        
  29.         sCript = ""
  30.        
  31.         for i in [x*8 for x in range(0,  len(sTxt)/8+1)] :
  32.             sSBox = sTxt[i:i+8]
  33.             if len(sSBox) > 0 :
  34.                 if iAction == self.CRIPTOGRAFAR:
  35.                     sCript += bf.encrypt(string.ljust(sSBox,  8))
  36.                 elif iAction == self.DESCRIPTOGRAFAR:
  37.                     sCript += bf.decrypt(sSBox)
  38.        
  39.         if iAction == self.CRIPTOGRAFAR:
  40.             return base64.b64encode(sCript)
  41.         elif iAction == self.DESCRIPTOGRAFAR:
  42.             return sCript
  43.  
  44. ##################################################
  45.  
  46. if __name__ == "__main__" :
  47.     bfc = BFCript()
  48.     if len(sys.argv) != 4 or (sys.argv[1] != "cript" and sys.argv[1] != "descript"):
  49.         print BFCript.__doc__
  50.         sys.exit(0)
  51.     elif sys.argv[1] == "cript" :
  52.         print bfc.cript(sys.argv[2], sys.argv[3],  bfc.CRIPTOGRAFAR)
  53.     elif sys.argv[1] == "descript" :
  54.         print bfc.cript(sys.argv[2],  sys.argv[3],  bfc.DESCRIPTOGRAFAR)

Detalhes, compensam?

Postado em Artigos, Desenvolvimento WEB, Projetos por Felipe Tonello on the September 13th, 2007


Ajude a Combater o Spam! Clique aqui!

Eu gosto muito de ler blogs de web em geral, pois falam muito sobre acessibilidade, projetos e assim por diante. Bem legal.
Estava lendo esse post no tableless legal falando sobre detalhes.

Para quem não ta afim de ler tudo lá: Resumidamente nos mostra, por um raciocínio, que os detalhes fazem a diferença. E realmente faz. Em tudo em nossa vida.

Quando você vai comprar um tênis, e olha aquele da adidas lindo cheio de 3 listrinhas da marca, bonitão. Você decide comprar ele.
Mas quando olha pra plaquinha do preço dele, você cai de cara no chão! “R$400,00. O cara acha que sou o que?!”. Exatamente, os detalhes custam mais caro né. Se você tiver o dinheiro, ótimo, mas se não o tiver, já era! Vai ter que comprar aquele olimpikus de 100 conto.

Agora vamos analisar em nossos projetos. Colocar detalhes a mais com certeza deixaria o cliente mais satisfeito ainda. Não importa onde, no layout do sistema, no código do sistema, na acessibilidade, e assim por diante. Mas e aí, você cobraria por esses detalhes?

Será que fazendo isso não perderia o cliente?!

Mas agora, será que fazer detalhes no seu desenvolvimento que não tomaria tanto tempo, ou não seria algo muito complexo de se fazer, não compensaria? O seu cliente ficaria muito mais satisfeito, pois você fez além e pelo mesmo valor, e com certeza em um outro trabalho ele lembrará de você: “Aquele cara me fez um ótimo trabalho, em um valor acessível e com detalhes que fizeram a diferença!” (tá bom, eu sei que exagerei um pouco agora hehe)

Lembre-se sempre disso. Pode fazer a diferença!

Próxima Página »