Rails Summit - Chad Fowler
A incrivel capacidade de olhar além!

Talvez seja essa a melhor maneira de começar falando sobre Chad Fowler, em quanto todos se impressionavam com java e .NET ele se aventurou em linguagens desconhecidas como RUBY.
Eu sempre quiz conhece-lo, queria olhar pra ele, procurar algo diferente(um terceiro olho, sei la), algo que o fizesse ver tao longe, por minha surpresa eu fiquei frente a frente com Chad Fowler, e pude olhar e descobrir algo que me deixou chocado, descrobri que ele não tem nada de especial, nenhum olho magico, nenhum sexto sentido, mais pude ver um homem apaixonado por sua arte, isso me tranquilizou, apesar de ter perdido um herói ganhei um ídolo. Fiquei mais feliz assim!!
Bem Vamos ao que Chad Fowler disse no Rails Summit!
Ser Fantástico!!!
Não sei se consegui absorver tudo que ele disse, mais eu me esforcei ao máximo, e por fim ele queria que eu me tornasse fantástico(talvez tenha conseguido).
O que é ser fantástico? Fantástico e aquele membro da equipe que brilha e faz a equipe brilhar! E aquele programador que sempre consegue transformar o ato melancólico de programar em algo maravilhoso e singular.
Marketing Pessoal!
Não adianta ser o melhor programador do mundo se só você sabe disso, uma maneira fantástica de mostrar seu potencial em programação seja fazendo projetos OpenSource, com certeza quando você compartilha código todos descobrem o quanto você é magico e fantástico.
As vezes te falta uma grande idéia então a segunda dica é faça parte de algum projetos OpenSouce, seja colaborador de algum projeto que você se identifique.
Caso voce não tenha nenhum projeto que você se identifique ao ponto de participar do código ou ainda nao conheça o projeto ao ponto de ajudar com código, então, Documente e Divulgue ajude a documentar e divulgar algum projeto Opensouce, crie tutoriais, faça passo a passos, etc, divulgue!!
Caso voce nao possa fazer tutoriais, por não ser tão conhecedor do projeto, então Traduza Tutoriais ou Noticias ligados a projetos OpenSouce, com certeza ja exite muitos tutoriais escritos que muitos nao conseguem usar por estar em outra lingua, então traduza, divulgue.
Blog Pessoal!
Por fim crie urgentemente um blog pessoal! se voce ja tem, invista mais tempo invista sempre e a todo tempo, crie a cutura de escrever ao menos uma vez ao dia sobre sua experiencia, seja sucinto porem constante, eu tenho um amigo que esta se preparando para escrever uma artigo aqui no blog da comunidade, mais ja faz 3 meses, pois segundo ele, ele quer escrever o melhor artigo ja escrito, eheh, e por fim nao escreveu nada ainda, é muito melhor ser simples mais constante, acredite todos querem resolver problemas simples do dia dia, nao estão preocupados com a complexidade do universo, voce vai ajudar muito mais gente sendo constante.
Participe de Comunidades!
Participe de comunidades seja ativo, dedique tempo e recursos para crescimento dos grupos que acredite, faça Fóruns, faça divulgação em faculdades, em Escolas assemelhadas, seja ativo, use camisas que divulguem, chapeus, adesivos no carro, não seja exagerado, mais seja visível.
Estude Muito!
Por fim, por mais lindo que seja Ruby, o fato é que ele passará, entao nao adianta saber só Ruby, saiba mais, se possível sobre tudo aprenda a programar em outras linguagens, aprenda novas coisas, não só sobre informática aprenda sobre tudo, sobre política ou antipolítica, sobre barcos, sobre esportes sobre algo, seja feliz gaste tempo não fazendo nada, gaste tempo e dinheiro com filhos e mulher, gaste a si mesmo em tudo, pois nao adianta deixar nada de voce intacto para depois, aprenda algo que voce acha sem sentido, sei la, castelo de areia, pular de para quedas, é isso que vai te tornar diferente e especial mais por fim seja feliz.
Seja um Programador Fantástico!!!!!!
Bem acho que acabou, acredite não quiz dizer o que Chad Fowler disse, e sim o que entendi sobre o assunto, acho que ele deve ter falado mais sobre ser Fantático, algo mais sobre música, bem falou tudo diferente do que eu mais com o mesmo sentido, heheeh, bem por fim sejam Fantasticos!!! Valeu!
Cobertura do Rails Summit

railssummit
Ae possoal!!
A Comunidade Amapaense de Rails esta no participando do Rails Summit 2008, ao todo, viream ao evento nada mais nada menos que 4 participanetes da comunidade Amapaense de Rails, são eles, Isaac Guerra, Guilherme Carvalho, Rafael Pomar e Vinicius.
Estaremos blogando nossas observaçoes aqui no blog da comunidade, comentes divulguem.
Valeu!!
Conhecendo um pouco sobre a Linguagem Ruby!
O que é a Linguagem de programação Ruby?
Segundo Yukihiro Matsumoto, ou “Matz”, o criador da linguagem Ruby:
“Ruby é uma Linguagem de script interpretada para programação orienteada a objetos, de modo fácil e rápido. Ela tem vários recuros para processar arquivos de texto e para fazer tarefas de gerenciamento de sistemas. Ela é simples, direta ao ponto, extenssível e portável. Oh, preciso mensionar, é totalmente livre, o que significa não só livre de precisar pagar para usá-la, mais tambem a liberdade de usar, copiar, modificar e distribuí-la”
Pensamentos de Mats:
Para mim o propósito da vida é parcialmente em ter prazer. Programadores as vezes sentem prazer quando podem se concentrar na parte criativa da programação. Então Ruby foi projetado para fazer programadores felizes.
Matz começou a trabalhar no Ruby em 24 de fevereiro de 1993, a primeira versão alpha ficou pronta em dezembro de 1994. Até 1996, ele trabalhou sozinho, quando começou a se formar uma comunidade ao redor da linguagem. A partir daí, apesar de ainda fazer a maior parte do desenvolvimento sozinho, Matz passou a receber fixes e patches da comunidade.
Características da Linguagem
- Principio da Menor Surpresa
- Orientada a Objetos “de verdade” (nao como java “pseudoorientada”)
- Tipagem Dinamica
- Fortemente Tipada
- Mixins
- Clousures ou Blocos
- Continuations
- Bindings
Porque usar Ruby?
“Voce quer aproveitar a vida, não quer? Se conseguir terminar seu trabalho mais rápido e seu trabalho for divertido, isso é bom, não é? Esse é o proposito da vida, em parte. Sua vida é melhor.Quero solucionar problemas que encontro no cotidiano usando computadores, então preciso escrever programas. Usando Ruby, quero me concentrar nas coisas que faço, não nas regras mágicas da linguagem, como começar com public void alguma coisa alguma coisa para dizer “print hello world!”. Apenas quero dizer “print this!”. Não quero todas as diversas palavras mágicas. Quero me concentrar na tarefa. Essa é a idéia básica. Por isso tenho tentado fazer o código Ruby conciso e suscinto.” Mats
A Linguagem Ruby e com certeza uma excelente ferramenta para se fazer um bom programa, ela traz em si, um aglomerados de boas coisas de vá¡ria Linguagens, tais como Lisp, Perl, Python, Ada, Smaltalk, Eiffel, e muitas outras. Traz em sim o poder das linguagens Dinamicas, o poder da Orientaçao a Objetos, O Poder dos Mixins, O Poder dos Blocos, O poder dos Continuations e Binfings.
Se voce esta lendo este artigo é muito provavelmente que ja tenha ouvido falar na linguagem Ruby, talvez esteja se preguntando, “Será que devo estudar e aprender esta linguagem”, com toda certeza o meu conselho é que voce estude, mesmo que não tenha nenhuma pretenção de usá-la brevemente. A linguagem Ruby traz em si a proposta de tornar a ato de programar algo prazeroso e agradavél, contexto esses abandonado e despresado pelas outras linguagens, só isso ja bastaria para usá-la, porém, alem de tudo ela traz consigo uma comunidade forte de pensadores, não de somente usuários e sim de críticos que tornar o simples processo de aprender Ruby ainda mais edificador e agradável.
Nos proximos Artigos abordaremos as características Tecnicas da Linguagens
Fontes:
www.rubyonbr.org
www.akitaonrails.com
www.ruby-lang.org
simplesideias.com.br
Linguagem de Programação! Conhecendo para melhor Escolher!

Linguagem de Programacao
Meu nome e Isaac Guerra, sou programador a vários anos e sempre tenho me deparado com as mesmas dúvidas sobre linguagens de programação!! E o que sempre me incomoda é tentar saber, qual é a melhor? Talvez você também se sinta pressionado a sempre estar mudando de linguagem para acompanhar o mercado ou para integrar uma equipe diferente, mais no fim o sempre se pergunta qual é a melhor linguagem pra você.
Talvez seja melhor definirmos quais sao pontos importantes para uma linguagem ser boa, ou, o que realmente é importante para uma boa linguagem de programação.
Para entendermos bem sobre requisitos de linguagem seria interessante voltar-mos e vermos um pouco da história das linguagem, para levantarmos onde e quando o que usamos hoje se tornou padrão.
No começo quando criaram os primeiros computadores a valvulas, eles processavam alguns programas simples, e esses programas eram escritos diretamente em suas memórias e só continham 0s e 1s, isso mesmo não se escreviam programas, e sim binarios que seria processados diretamente nos processadores. Isso com certeza era muito ruim, pois se alterassem qualquer bit, o resultado dava errado, sem falar no tempo que se levava para se escrever um programa. Aqui ja notamos que teria que haver um meio termo entre a linguagem binária, que o computador entende, e a linguagem humana que nos entendemos, e esse meio termo é que nos chamamos de linguagem de programação, e desde então estamos tentando encontrar a lingagem ideal para ser transformarmos pensamentos em bits.
Neste momento o que tinhamos para apoiar o programador eram alguns microcódigo internos no processador (RISC, CISC), que realizavam rotinas mais complexas diminuindo assim a extensão do programa, bem mais chamar microcódigo é muito complicado, é quase como escrever binários, entao criaram os primeiros programas de apoio que serviam para montar as chamadas de microcódigos, os chamados montadores(Assembly), acredite os montadores eram revolucionários e ajudaram em muito as coisas.
Ainda que ja tivéssemos os montadores o processo de escrever um programa era muito complexo, pois tudo era feito pelo programador, tipo, se vc quisesse esvrever algo na memória RAM tinha que ir na memória achar um espaço vago, e depois escrever, ou seja, tinha que gerenciar todo o Hardware, isso era muito complexo e um programa ficava quase que 99% de codigo para gerencia Hardware e 1% com o foco fim ou seja o programa.
Neste momento vieram a linguagem de Primeira Geração que tinham como objetivo essas facilidades de genciamento de memória, outros periféricos. Escrever um programa com a obrigação de cuidar do hardware ficou mais facil, mais ai veio um complicante, a multiprogramação, ou seja varios programas rodando no mesmo hardware, bem neste momento nao era mais suficiente pois alem de gerenciar o hardware tinha que conciliar o acesso ao hardware com outros programas.
Foi quando criou-se uma camada de software que tem por objetivo gerenciar e assumir a responsabilidade de controlar o acesso ao Hardware, o Sistema Operacional(Linux, Unix, BSD, etc). Neste momento a programação ficou bem mais simples, pois essa camada apoia o Programador, onde, quando ele precisa de um espaço na memoria RAM basta pedir ao S.O. e ele realiza toda a complexa tarefaz de falar com o Hardware, e assim é com todos outros perifericos(Video, Impressora, Rede, etc) ai ficou fácil bem mais fácil, onde escrever um programa e quase que totalmente focar no objetivo fim, ou seja as funcionalidades do programa.
Até neste momento o ato de programar era pura e simplismente criar procedimentos que seriam executados pelo processador, sendo assim todos os programas nada mais eram que um monte de procedimentos, e as linguagens de programação davam condições de se escrever esses procedimentos, uma das facilidades era dar nomes aos procedimentos para depois poder chamalo pelo nome, isso é legal, outra coisa que as linguagem fazim bem era, poder nomear endereços de memória e depois chama-las pelo nome.
Foi quando um dia alguem pensou que poderia organizar melhor os procedimentos, bem a ideia nao mudou e sim mudou a organização das coisas, ainda tinhamos procedimentos nomeados, e areas de memoria nomeadas, entao criaram o objeto, um objeto nao e um procedimento a ser processado, nem tao pouco uma area de memoria a ser acessada, e sim um estrutura organizacional que juntaria em si procedimentos e memória. Por fim um programa conteria muitos objetos e os objetos conteriam os procedimentos e as variaveis, e um se comunicaria com outros por meio de menssagens. Bem parecido com o mundo real, Nasceu ai a Programação Orientação a Objetos. Muito mais complicado, mais no fundo a mesma coisa. Bem mais neste mesmo período os programadores estavam preocupados com outro problema e nao deram muita bola para a POO.
O mundo assistia a primeira onda de informatização, ja tinhamos computadores capazes de processar grandes volumes de dados e aplicações multiprocessadas, com multiusuarios, etc. E o problema era guardar grande volumes de dados de maneiras persistente, foi quando nasceu os primeios programas destinados a gerencia de dados persistentes, os SGBDs. Com isso programar ficou ainda mais facil pois ja nao nao tinhamos que se preocupar com codigos de maquina, ja nao era necessário se preocupar com acesso a hardware, agora nao era mais necessário se preocupar com guarda e busca de dados persistentes. E assim o mundo ficou por mais de uma decada, sem muitas novidades.
Nesse meio tempo nasceu várias alternativas, criaram-se impérios em Software, porém no mundo da programaçao nada de muito novo acontecia, era tudo procedimetnos nomeados, e areas de memória nomeadas, guadando dados em SGBDs onde quase tudo era feito para rodar sobre um S.O(ruindows). O problema de deixar o S.O. cuidar do acesso ao hardware e que se o S.O for ruim a aplicaçao que funciona sobre ele também será ruim, outro problema é que se a aplicaçao faz chamada as funóes do S.O ele fica altamente dependente dele, e isso foi foi o que motivou a próxima mudança no mundo do Software.
Um empresa gigante na área de Hardware(SUN) queria que as aplicaçoes rodassem em qualquer hardware ou S.O, foi quando nasceu uma nova plataforma com esse Objetivo(JAVA), essa plataforma era composta por alguns modulos, um a camada de abstraçao entre a Plaicaçao e o Sistema Operacional(VM), um interpretador RunTime, Um gerenciador de Memória(GC), Um compilador e uma Linguagem para ele(JAVA) e por fim uma biblioteca cheia de funçoes prontas(JDK). Bem para melhor funcionamento dessa estrutura ele buscaram um paradigma de programaçao que apoiasse essa filosofia, e acharam o Orientaçao a Objetos, que ja existia porém nao era muito usada.
Agora sim Programar ficou mais simples ainda, ja nao precisavamos nos preocupar com codigo de maquina, nem acesso ao hardware, nem persistencia de dados, agora uma aplicaçao poderia ser rodada em qualquer Hardware ou S.O, tinhamos também um Avanço na gerencia de memória com o “Garbage Colector” diminuindo a preocupaçao com o uso da memória RAM, tinhamos uma infinidade de codigo pronto disponívem no “Development Kit”, e o que restou para o desenvolvedor era apenas digitar poucos códigos, ai o mundo ser tornou muito chato para o progamador.
Neste mundo certinho, cinza, rapidamente germinou a cultura de transformar o ato de programar em um processo de simples engenharia, quadrado, pobre e sem brilho, foi quando mudou-se o foco do programa para o projeto, e criaram-se várias formas de escrever projetos de software(UML, etc) e por fim a documentaçao ficou rapidamente varias grandesas mariores que o proprio software, e o programador se tornou apenas um mero digitador sem grande importancia, as linguagem de programaçao(JAVA. etc) apoiaram os engenheiro e massacravam os programadores com seus, tipos e interfaces, tornado um programa um amontoado de regras que inibiam a criatividade do programador.
Bem chegamos nos dias atuais, e podemos pensar em alguns pontos que sao importantes par uma linguagem de programação.
Memória: Gerencia de memória não é tão importante estar sob responsabilidade do programador, pois hoje temos o Sistema Operaciona gerenciando o Hadware, e o Garbage Colector que gerencia o uso da propria memória. Sendo assim ao criar um variavel nao e tao importante dizer que tipo ela será, a linguagem pode fazer isso dinamicamente, sem problemas.
Hadware: É interessante que a linguagem tenha uuma infriestrutura que possibilite a execuçao em qualquer hardware, usando ou nao uma estrutura de Maquina Virtual.
Procedimentos: É notorio que o Paradigma de Orientaçao a Objetos e melhor que o Procedural, onde os procedimentos pertencem a um objeto. Porém, é interessante essa estrutura não seja tao rigida ao ponto de dificultar a programaçao, é bom que se possa criar metodos coletivos, individuais, staticos e também que se possa em tempo de execuçao criar métodos para suprir alguma necessidade desconhecida, é legal também a possibilidade de criar metods nao nomeados e dinamicos para suprir algo como programaçao dinamica.
Persistencia de Dados: Bem o Paradigma de Orientaçao a Objetos é muito bom na gerencia de procedimentos, porém não apoia em nada em persistencia de dados, e a integraçao com os antigos SGBDs e pessimo. Seria muito interessante que a Linguagem de programaçao possuíssem em sua infraestrutura a capacidade de Persistencia de dados, transparente e eficiente, que mantesse o acesso a dados totalmente na forma de objetos com uma boa infraestrutura de compartilhamento desses objetos(Algo como uma Gemstone Samlltalk).
Bibliotecas: Uma boa linguagem deve ter uma boa Biblioteca Objetos fundamentais para a funçoes mais massantes prontas porem é importante que esses Objetos sejam facilmente alterados e melhorados.
Criatividade: Por fim uma boa linguagem de programação apoia o programador em sua tarefa, pois a linguagem nada mais que que uma ferramenta para ser usada, a linguagem tem que ser simples, poderosa, deve apoia a criatividade do programador, deve ajuda-lo a encontrar possiveis falhas.
Bem na verdade exstem hoje algumas linguagem que suprem bem esses requisitos, cito smalltalk, ruby, Phyton, etc.
No fim temos que ter uma visao do que seria interessante para o futuro, mais isso veremos em um outro artigo.
Enviando email com RoR - A busca pela felicidade
Estive com um problema em mãos, criar um cadastro de contato e enviar por email, esse não é um grande problema, tendo em vista que uso RubyOnRails, que transforma a maioria dos meus problemas em soluções.
Buscando na NET (google, claro) achei os ótimos textos do Marcos Zimmermann
e claro, a famosa Rails para sua diversão e lucro do Ronaldo Melo Ferraz, que você encontrará em http://www.htmlstaff.org/ver.php?id=5016 (aliás, esta é sem dúvida uma referência em apostila para iniciantes em RoR, obrigado Ronaldo), também encontrei um texto em inglês: http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer mas… (sempre tem um mas!), acontece que, sempre que tentava iniciar o servidor ocorria o seguinte erro:
/usr/lib/ruby/gems/1.8/gems/activesupport-2.1.0/lib/active_support/dependencies.rb:278:in `load_missing_constant’: uninitialized constant ActionMailer (NameError) .
Até onde eu sabia ActionMailer estava correto, será que era eu quem estava errado?
Após subir ao monte everest, procurar o monge-que-tudo-sabe para me mostrar o segredo da felicidade ele me disse:
Filho meu, o segredo é:
No arquivo config/enviroment.rb, em vez de usar ActionMailer::Base
use config.action_mailer
funciona que é uma beleza….
Agradeci ao grande monge, e segui minha viagem pelos trilhos…
então fica assim:
se for enviar email usando o gmail, seguindo o tutorial do Marcos Zimmermann em vez de:
ActionMailer::Base.default_content_type = "text/html" ActionMailer::Base.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :authentication => :plain, :domain => "sead.com", :user_name => "email@gmail.com", :password => '******'
}
use:
config.action_mailer.default_content_type = "text/html" config.action_mailer.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :authentication => :plain, :domain => "sead.com", :user_name => "email@gmail.com", :password => '******'
}
ou se você está utilizando o Tutorial do Ronaldo Melo Ferraz, em vez de usar
ActionMailer::Base.server_settings = { :address => "mail.yourdomain.com", :domain => "yourdomain.com", :user_name => "user@yourdomain.com", :password => "******", :authentication => :login }
use:
config.action_mailer.server_settings = { :address => "mail.yourdomain.com", :domain => "yourdomain.com", :user_name => "user@yourdomain.com", :password => "******", :authentication => :login } Funcionou comigo, e também vai funcionar com você!
Outras configurações (não menos importantes), podem ser feitas no arquivo config/enviroment.rb, vou demonstrar algumas delas:
config.action_mailer.delivery_method = :smtp | :sedmail | :test
Configura o modo de entrega de email.
O modo :smtp é o default do rails no modo de desenvolvimento, se quiser desabilitar o envio de email nesse modo, edite o arquivo development.rb no diretório config/enviroments e adicione a seguinte linha:
config.action_mailer.delivery_method = :test, que é o padrão no modo de teste. O email não será enviado, mas sim anexado a um array (acessível via ActionMailer::Base.deliveries)
config.action_mailer.raise_delivery_errors = true | false
se estiver setado true, todo erro que ocorrer ao enviar o email levantará uma exceção.
Obs.: nem todos os erros são imediatos
config.action_mailer.default_charset = “utf-8”
não preciso falar muito, alguém tem dúvida?
Agradeço ao Marcos Zimmermann
e ao Ronaldo M. Ferraz pelos excelentes tutoriais.
Amapá “no trilho”!
Alguns dias atrás, tivemos a idéia de criar um blog sobre Ruby e Rails. Depois de horas em um Brainstorm, resolvemos que nosso blog se chamaria AmapáOnRails, dedico às pessoas do Amapá que querem aprender ou aprimorar seus conhecimentos nessa maravilhosa linguagem de programação.
Além de espalhar o Ruby em nosso estado, temos tambem como objetivo ajudar a comunidade no que for necessario: bugs, plugins, etc.
Contamos com a ajuda de todos para divulgar nosso blog, que é o primeiro no estado do Amapá sobre Ruby e Rails.
Desde já agradeços!
Jeová Guilherme, Isaac Gueera e Rafael Pomar
