TDD + Ruby: Número de Fibonacci
June 15, 2009 at 3:34 am | In Ruby/Rails | Leave a CommentEstou necessitado de escrever posts melhores, eu sei, mas enquanto isso, tava brincando aqui com TDD + Ruby, então resolvi fazer um código para gerar a sequencia de Fibonacci fazendo o uso de TDD.
Para quem ainda não sabe, o numero de fibonacci e uma sequencia de numero, que é gerada começando com 1 e em seguida somando os dois anteriores para se conhecer o próximo, na prática:
Começamos com 1, então o proximo numero será : 0 + 1 = 1, o seguinte será 1 + 1 = 2 … 2 +1 = 3 … e assim vai… essa sequencia é defenida como sendo recursiva, a formula é:

Bom, o problema ta entendido(eu acho) rs.
Como vamos fazer o uso de TDD, vamos começar escrevendo nossos testes
Precisamos ter um método chamdo por exemplo fibo, esse método deve receber como argumento um inteiro, inicialmente se passarmos 0(zero) devemos ter como retorno 0(zero), entõa vamos criar o esqueleto do teste:
require "test/unit" require "fibonacci.rb" class Test < Test::Unit::TestCase def test_case_name end end
Acima está o esquelete de um teste básico, na primeira linha fizemos a inclusão do framework de teste, no segundo require chamamos a nossa classe fibonacci(que ainda nao existe), e logo em seguida temos o primeiro método para teste, vamos mudar o nome dele e acresentar o comportamento que nossa classe fibonacci deve ter quando receber zero.
require "test/unit" require "fibonacci.rb" class TestFibonacci < Test::Unit::TestCase def test_fiboZero assert_equal(0, Fibonacci.seqfibo(0)) end end
Todo teste deve iniciar com o palavra test, logo em seguida vem nosso teste propriamente dito, é justamente o que falamos acima, se receber Zero, retorne Zero, vamos rodar nosso teste para ver o que acontece:
LoadError: no such file to load fibonacci.rb
Ops, certamente teriamos um erro ai mesmo, pois ainda nao criamos nossa classe fibonacci, vamos cria-la,(sem nehum codigo ainda) e rodar novamente:
Ops, denov, so temos um arquivo e mais nada então recebemos o seguinte:
Started
E
Finished in 0.002 seconds.
1) Error:
test_fiboZero(TestFibonacci):
NameError: uninitialized constant TestFibonacci::Fibonacci
C:\Documents and Settings\casa\Desktop\Nova pasta\fibonacciTest:5:in `test_fiboZero’
1 tests, 0 assertions, 0 failures, 1 errors
Vamos criar essa classe, acresente o seguinte em fibonacci.rb:
class Fibonacci def self.seqfibo(num) return 0 if num == 0 end end
Bom, isso provavelmente irá fazer nosso teste passar, rodando recebemos o seguinte:
Started
.
Finished in 0.002 seconds.
1 tests, 1 assertions, 0 failures, 0 errors
Legal, tudo passou, nosso primeiro caso esta feito, agora, podemos pensar em outro comportamento para nossa classe. . . .bom testamos com zero agora vamos tentar passar um(1) para o método e ver o que acontece, incluindo mais método para teste (poderia ser feito no mesmo método, mas vou separar aqui), nosso código de teste agora fica assim:
require "test/unit" require "fibonacci.rb" class TestFibonacci < Test::Unit::TestCase def test_fiboZero assert_equal(0, Fibonacci.seqfibo(0)) end def test_fiboUm assert_equal(1, Fibonacci.seqfibo(1)) end end
a lógica dos teste aqui, nao mudou nada, vamos rodar para ver:
Started
F.
Finished in 0.033 seconds.
1) Failure:
test_fiboUm(TestFibonacci) [C:\Documents and Settings\casa\Desktop\Nova pasta\fibonacciTest:8]:
<1> expected but was
<nil>.
2 tests, 2 assertions, 1 failures, 0 errors
Bom, vimos ali que o teste esperava 1 mas retornou nil, vamos implementar essa lógica na nossa classe, agora temos isso:
class Fibonacci def self.seqfibo(num) return 0 if num == 0 return 1 if num == 1 end end
Exatamente igua ao anterior, agora não seria nada bom ficar acresentando todos essas asserts ai para testar cada um dos numero que esperamos obter, para isso em nosso teste vamos criar um array de arrays contendo vários cassos de testes algo do tipo:
testes = [[0,0][1,1][2,1] . . .]
e logo interar por esse array passando esses valores para nosso teste, logo iremos ter um unico método, nossa classe teste fica + – assim agora:
require "test/unit" require "fibonacci.rb" class TestFibonacci < Test::Unit::TestCase def test_fiboZero teste = [[0,0],[1,1],[2,2],[4,5],[3,2]] teste.each do |t| assert_equal(t[1], Fibonacci.seqfibo(t[0])) end end end
Bom, creie um array de array com alguns cassos, agora so falta implementar na classe fibonacci um funcao recursiva para fazer o calculo, então agora tempo:
class Fibonacci def self.seqfibo(num) return num unless num > 2 seqfibo(num-1) + seqfibo(num-2) end #um metodo pra executar def execute for i in 1..10 puts seqfibo(i) end end end
Agora rodamos o código de teste e recebemos:
Started
.
Finished in 0.002 seconds.
1 tests, 5 assertions, 0 failures, 0 errors
Bom, aqui acabamos nossa implementação, obviamente da para melhorar e fazer muitos outros teste, e melhorar o teste, e tudo mais, se alguem achar erros, ou quizer falar algo, porfavor deixe um comentário.
[Dica Rápida] Problema ao rodar Ruby no E-TextEditor
June 11, 2009 at 2:19 pm | In Ruby/Rails | 4 CommentsSe você é um usuário Windows e usa o E-textEditor e estiver tentando usar o comando ctrl+r para rodar seus codigos e está recebendo a seguinte mensagem:
ruby: no such file to load — ubygems (LoadError)
faça o seguinte para concertar esse problema:
1 – Baixe a ultima versao do RubyGems do site
2 – Descompacte-o dentro da sua pasta de usuario do Cygwin, no meu caso em: C:\cygwin\home\edipo
3 – Abra o terminal do Cygwin e execute os seguintes comando:
$ unset RUBYOPT
$ ruby setup.rb
Pronto isso deve resolver.
O Twitter esta fazendo você postar menos?
June 8, 2009 at 4:20 am | In Opinião | Leave a CommentOuvi essa pergunta não sei em que lugar esses dias, e fiquei pensando sobre isso alguns minutos (sim minutos isso não merece mais do quem alguns poucos minutos J), e cheguei à conclusão que em alguns casos sim, ele faz com que você não crie um post, eu apenas digite umas palavras e poste um link, na “caixinha” de 140 caracteres.
Eu uso o twitter a menos de três meses, minha escolha de criar um não foi a pela quais infelizmente grandes partes das pessoas fazem que é: Ter o Maximo de seguidores possíveis criei o meu com o intuito de poder compartilhar de forma rápida e fácil algumas coisas que são de meu interesse e que interessam as pessoas que me seguem, claro às vezes posto qualquer merda do tipo “Ai que frio que ta aqui”, mas isso acontece com todo mundo, antes de eu ter um twitter eu já via muitas pessoas usando e falando bem, mas nunca tive o interesse de criar uma conta, até que um dia criei, e fiquei impressionado com o quão ele é bom quando usado da maneira correta, apesar do twiiter “fazer” a pergunta “O que você esta fazendo” ele não é sobre isso, a partir do momento em que você começa a usar o twitter de forma correta ele é fantástico.
Antes de mais nada, twitter não é microblogging, sim é Wikipédia diz isso, mas não acredite nela nesse assunto ela fala merda. Bom, Blog e Twitter são coisas diferentes logo não podemos substituir um pelo outro, o que na verdade acontece é que as vezes, por exemplo, você ta lendo algum livro legal, ou ta estudando alguma coisa X e pensa “Ops, isso é legal merece um post” ai você para e diz – Ah vou logo colocar um link sobre o assunto no twitter e escrever “Olhem que legal isso”, certo, isso funciona é bom sim, mas não é um coisa que se pode equiqualar com um post com algunas paginas no seu blog, nesse exemplo isolado você esta somente passando a informação que você acabou de ler ou coisa do tipo para frente, no caso no blog é diferente, você está ali no seu espaço escrevendo a sua opinião sobre dado assunto colocando seus exemplo e tudo mais.
Isso é realmente incrível, porque eu vou fazer um post para escrever algo =< que 140 caracteres, não é dignos de um post, o que se deve fazer é realmente separar as coisas, quando você sabe que um dado assunto não irá lhe render um post decente, simplesmente não o faça, claro, isso também não quer dizer que você deve twittar qualquer merda que esteja lendo ou algo assim.
Basicamente eu penso assim, você pode transmitir o que quer com até 140 caracteres? Se sim use o twitter senão, use o seu blog, e logo depois use o twitter para transmitir o link para o post J, acredito que é assim que deve ser vista as coisas quando se trata disso, é e tenho dito Ops, será que eu poderia ter dito isso em 140 caracteres?
Coisas que possam lhe interessar:
Qual Tipo é ? INT … FLOAT
April 17, 2009 at 5:53 pm | In Engraçado | 1 CommentAcabei de ver isso no Twitter do Carlos Brando e não pude deixar de colocar aqui a imagem, lá vai:

Minha última aquisição(Livros).
April 16, 2009 at 9:10 pm | In Leitura | Leave a CommentUma coisa que acredito que não tem como ser dinheiro jogado fora é comprar livros, sim livros, seja ele um romance, técnico, ou seja lá que diabos se trate o livro, sempre mas sempre você irá aprender coisas novas, algumas vezes você aprende muito outras nem tanto, mas sempre aprende algo.
Sim, na internet tem muita coisa, mas ela nunca vai substituir o livro, em livros você tem boa parte de um determinado assunto organizado de forma que você possa realizar consultar por exemplo de forma rápida e fácil e sem necessitar de uma conexção
.
Sim temos os livros digitais em alta também que é uma grande idéia, cito como algo fantánstico o que o pessoal da pragprog.com faz que é lançar os livros em beta onde você pode comprar em pdf e quando o livro tiver pronto você recebe a versão em papel.
Mas enfim, os dois livros que comprei foram:
A Cabeça de Steve Jobs de Leander Kanhney
Startup de Jessica Livingston
Escolhi começar lento startup, pelo simples fato do livro ser organizado em entrevistas, como entrevistas me interessam muito resolvi escolher esse para começar.
Não li muito, li 4 entrevistas até agora foram elas:
- Steve Wozniak, co-fundador da Apple;
- Mike Lazaridis, co-fundador da RIM, fabricante do BlackBerry;
- Sabeer Bhatia, co-fundador do Hotmail, empresa posteriormente adquirida pela Microsoft;
- David H. Hansson, sócio da 37signals;
A que mais gostei sem dúvida alguma foi a do Wozniak, eu não conhecia tanto sobre ele, e sobre o que ele fez, mas o cara era e é realmente bom, acredito que bom não seja a palavra certa para esse cara, e creio que seja dificil achar palavras para descrever o quanto Woz é uma pessoa surpreendente, não so em termos técnicos mas também nos pessoais, as pessoas deveriam agradecer a ele as vezes
.
As outras entrevistas também são bem legais, assim que eu acabar faço um post sobre o livro inteiro, e o mesmo quando eu acabar de ler o do Jobs.
Abaixo algumas fotos dos livros:





É isso ai, t+.
Ubuntu 9.04 Beta … PRA min ja é melhor que o 8.10
March 27, 2009 at 6:39 pm | In LInux | 1 Comment
Sim, pode chamar de louco mas eu já to usando o Ubuntu 9.04 a curiosidade não deixou esperar mais, e assim que foi liberado a versão beta eu ja fiz um update, minhas supresas foram muitas, 1 minha Wireless continuou funcionando, e o medidor do nível da bateria do note (Acer 5050 ) finalmente funcinou, sim funcinou olhem:

Viram? . não vou fazer um post falando detalhadamente como esta o uso do Beta aqui bem porque eu to usando ele de fato a nem 1 hora, essas foram minhas primeira impresões sobre ele, ah,também posso dizer que esta relativamente mais rápido para iniciar e para abrir as coisas, vamos ver com o tempo..
Se quizerem saber nóticias do “front” visitem meu Twitter.
Chega de RECLAMÕES GRATUITOS
March 8, 2009 at 3:15 am | In Geral | 1 CommentAcabei de ler um post no Blog do Aurelio sobre um cara chamado Ângelo Beck, do qual não pude deixar de postar aqui no blog e aprovitar para falar tambem do James.
Ângelo Beck é aquele tipo de pessoa que faz qualquer um repeensar melhor suas atitudes(reclamar e reclamar), eu chamaria esse cara até de herói, assim como considero já o James Edward Gray II, para quem não sabe o James é famoso pelo Ruby Quiz e também seus livros TextMate: Power Editing for the Mac, Best of Ruby Quiz, mas o que esse James e Beck tem de mais, bom primeiro os dois são programadores, segundo os dois tem alguma deficiência, o Beck é cego, e James tem sérios problemas físcos, ele está em uma cadeira de rodas à vários anos.
Vocês pararam para contar quantas vezes em um dia agente reclama das coisas, dizendo “a eu não consigo fazer isso”, “a não quero aprender, é dificl demais”, “Não tenho tempo’, “Já trabalho demais ….”, ou seja reclamamos e reclamamos, só isso, nada de agir, ir atrás das coisas, por isso estou postando isso aqui, citando os nomes acima como GRANDES EXEMPLOS DE VIDA, Beck é um programador CEGO, não irei relatar aqui tudo pois vocês podem ler Blog do Aurelio , mas vocês devem imaginar o quão dificil deve ser programar sendo cego, agente(quem programa) reclama muitas vezes falando,”eu não sei como se faz certa coisa”, “nao sei não sei nao sei…” e temos grande facilidade de simplesmente abrir o google fazer uma pesquisa e ler e ler e ler, com uma facilidade incrível, podemos pegar livros e ler facilmente, enfim vários recursos, mas não muitos só ficam reclamando, ( leiam o Blog do Aurelio para ver como são as coiasas com o Beck), como é dificil para ele se achar dentro de um código, e tudo mais.
James é outra pessoa do tipo que realmente lhe faz se sentir um verme( de fato ), ele fez e faz grandes contribuições para a comunidade Ruby em geral, escreve excelentes artigos no seu blog, foi reponsável pelo excelente Ruby Quiz, afim fez e faz centenas de coiasas sem se lamentar e chorar, simplemente por ter os sérios problemas que tem.
Muitas pessoas, fica reclamando porque tem que estudar, trabalhar e não sei mais o que, “A eu faço faculdade X é muito dificil, é a mais dificil de todas,,,” são os verdadeiros “RECLAMÕES GRATUITOS”, não estou dizendo aqui que não devemos reclamar das cosias, o que eu acho é que não se deve fazer é ficar reclamando somente para querer se parecer SUPERIOR aos demais, isso é de um grau tão baixo que nem encontro palavara para colocar aqui.
Espero que esses dois exemplo façam com que todo dia antes de começar a reclamar de alguma coisa, você parem e lembrem desses dois caras e o que ele fazem.
Aqui deixo uma citação do Beck:
Ângelo Beck
E você leitor(a), qual era mesmo aquela sua desculpa para não programar?
![]()

Começando com GIT. Parte 1
February 22, 2009 at 3:07 am | In GIT | 3 CommentsOlá pessoal, a algum tempo já postei aqui como fazer para instalar e configurar o GIT
no Ubuntu Linux, e disse que haveria mais sobre o git aqui no blog, pois bem passou maior
tempão e não postei nada sobre o GIT, pois bem, aqui estou, nesse segundo post sobre git vamos dar uma olhada
no básico do git, vamos criar um “projeto” de “mentira” para simularmos o uso básico do git.
1 – Começando…
Para começar vamos criar um diretório para armazenar nosso “projeto”, vamos chamar esse
diretório de ‘demo’, dentro dele vamos criar uma pasta libs uma log e alguns arquivos,
então vamos para o nosso bom o velho terminal.
OBS: Estou rodando no Ubuntu, caso você seja do mundo Windows recomendo seguir os
passos do ótimo post do Fábio Akita sobre como montar um ambiente de programacão
Ruby/Rails no Windows, esse inclue o GIT.
Bem dito isso … no terminal:
mkdir demo
cd demo
mkdir libs logs
touch file1.rb file2.rb file3.rb file4.rb
Bom acho que não prescisa nem explicar… criamos as pastas com mkdir e alguns arquivo com
o touch, bom nosso diretório demo esta assim:
.
|– file1.rb
|– file2.rb
|– file3.rb
|– file4.rb
|– libs
`– logs
2 directories, 4 files
2 – O arquivo .gitignore.
Esse arquivo é de grande importância nele podemos definir o que queremos que o git ignore
por exemplo, arquivos de log (nossa pasta log, por exemplo) não necessita de controle de
versão, um pasta que contém algumas imagem usada no projeto idem e assim por diante,
aqui entra seus critérios do que você não quer que o git controle.
No meu caso eu costumo ainda adicionar um linha para ele ignorar os arquivos temp(~),
que o editor(gvim, gedit…) cria.
Tendo isso em mente podemos criar nosso .gitignore.
touch .gitignore
gvim .gitignore
Acima criamos o arquivo .gitignore e abrimos ele com o gvim e digitamos o seguinte:
log/*.*
*.rb~
OBS1: Isso não é nada “mundo real” como não estou criando um projeto de verdade não irei
ter arquivo de log (.log) de verdade, então simplesmente mandei ele ignorar tudo dentro
da pasta log/, apenas para demonstração.
3 – Inicializando o GIT…
Agora vamos colocar o GIT em ação para inicializar o repositório git usamos o comando
git init… então na pasta demo ….
git init
você irá receber a seguinte mensagem:
Initialized empty Git repository in /home/edipo/Desktop/demo/.git/
Tudo OK, nosso repositório foi inicializado.
Agora se você der um ls -la(lista arquivos incluindo ocultos) irá ter algo assim:
ls -la
total 32
drwxr-xr-x 5 edipo edipo 4096 2009-02-20 00:52 .
drwxr-xr-x 11 edipo edipo 4096 2009-02-20 00:20 ..
-rw-r–r– 1 edipo edipo 0 2009-02-20 00:21 file1.rb
-rw-r–r– 1 edipo edipo 0 2009-02-20 00:21 file2.rb
-rw-r–r– 1 edipo edipo 0 2009-02-20 00:21 file3.rb
-rw-r–r– 1 edipo edipo 0 2009-02-20 00:21 file4.rb
drwxr-xr-x 7 edipo edipo 4096 2009-02-20 00:52 .git
-rw-r–r– 1 edipo edipo 0 2009-02-20 00:34 .gitignore
drwxr-xr-x 2 edipo edipo 4096 2009-02-20 00:20 libs
drwxr-xr-x 2 edipo edipo 4096 2009-02-20 00:20 logs
4 – Adicionando os arquivos ao git…
Agora que já temos nossos arquivos, incluindo o .gitignore e nosso repositório inicializado
podemos adicionar nossos arquivos ao git, para fazer isso você usa o comando git add .
o .(ponto) do comando quer dizer TODOS arquivos, mas você também pode adicionar somente um
usando por exemplo git add nome_arquivo.
Bom vamos ver em que estado estamos agora, para isso temo o camando git status que nós diz
como as coisas estão:
git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use “git rm –cached <file>…” to unstage)
#
# new file: .gitignore
# new file: file1.rb
# new file: file2.rb
# new file: file3.rb
# new file: file4.rb
#
e ai está temos nossos novos arquivos, agora pricisamos fazer o primeiro commit para isso
usamos o comando git commit -m -a ‘mensagem’, bom -m quer dizer que queremos colocar
uma mensagem e -a todos os arquivos, você pode também usar somente commit -a
ai ele irá abrir seu editor de texto padrão então você adiciona sua mensagem no arquivo
que será aberto, então:
git commit -a
o vim será aberto digito ‘i’ para ir para o modo de edição e digito a mensagem “Primeiro
Commit” dou ESC e
para sair e salvar, pronto vou receber o seguinte no terminal:
git commit -a
Created initial commit 3825061: Primeiro Commit
1 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 file1.rb
create mode 100644 file2.rb
create mode 100644 file3.rb
create mode 100644 file4.rb
Ok está ai os arquivos, agora podemos usar o comando git log para ver como estão as coisas:
git log
commit 382506110486d1d89de8debbe8ef54f0bd83d8c2
Author: edipo <edipofederle@gmail.com>
Date: Fri Feb 20 12:46:23 2009 -0300
Primeiro Commit
Então ai está o nosso primeir o commit.
5 – Modificações…
Bom legal até agora, vamos agora modificar alguns arquivo para a ver como o git age.
vim file1.rb
i
vamos criar uma simples classe Ruby nesse arquivo, coloque o seguinte ou qualquer outra
coisa que você queira.
class File1
def hello(name)
puts "Hello #{name}."
end
end
salve o arquivo, voltando ao terminal usamos o git status para ver se algo mudou..
git status
# On branch master
# Changed but not updated:
# (use “git add <file>…” to update what will be committed)
#
# modified: file1.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)
Bom, ai está o nosso arquivo que fizemos a mudança, antes de dar um commit precisamos adicioná-lo então…
git add file1.rb
agora rodando o git status temos:
git status
# On branch master
# Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# modified: file1.rb
#
Vamos fazer mais uma mundaça agora no arquivo file2.rb, vamos colocar algo simples nele como isso:
class File2
def sum(x,y)
x + y
end
end
Ok, agora que alteramos outro arquivos vamos usar o comando git status para ver como estão as coisas:
git status
# On branch master
# Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# modified: file1.rb
#
# Changed but not updated:
# (use “git add <file>…” to update what will be committed)
#
# modified: file2.rb
Agora o git nos diz que temos dois arquivos modificados mas somente um( file1.rb) para ser ‘committed’, então
agora damos um:
git commit
ele irá abrir o seu editor com o seguinte conteudo:
# Please enter the commit message for your changes.
3 # (Comment lines starting with ‘#’ will not be included)
4 #
5 # Committer: edipo <edipofederle@gmail.com>
6 #
7 # On branch master
8 # Changes to be committed:
9 # (use “git reset HEAD <file>…” to unstage)
10 #
11 # modified: file1.rb
12 #
13 # Changed but not updated:
14 # (use “git add <file>…” to update what will be committed)
15 #
16 # modified: file2.rb
No inicio do arquivo digite a mensagem do commit, – Commit somente para file1.rb nao para file2.rb”
salve, e você irá receber a seguinte mensagem:
Created commit bc36724: Apenas Commit do file1.rb nao do file2.rb
1 files changed, 5 insertions(+), 0 deletions(-)
e dando um git status temos:
git status
# On branch master
# Changed but not updated:
# (use “git add <file>…” to update what will be committed)
#
# modified: file2.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)
Então temos o file2.rb que ainda nao foi add, vamos fazer mais alguma modificação em algum arquivo.
e dadando um git status agora temos os dois arquivos que foram modificados:
git status
# On branch master
# Changed but not updated:
# (use “git add <file>…” to update what will be committed)
#
# modified: file2.rb
# modified: file3.rb
se dermos um git commit iremos receber a mesma acima:
git commit
# On branch master
# Changed but not updated:
# (use “git add <file>…” to update what will be committed)
#
# modified: file2.rb
# modified: file3.rb
#
no changes added to commit (use “git add” and/or “git commit -a”)
Agora temos duas modificações vamos fazer um commit adicionando todos(dois) arquivos, para isso:
commit -a
a opcão -a é para add todos arquivos, deixamos ele assim:
1 Adicionando todas as modificacoes
2 # Please enter the commit message for your changes.
3 # (Comment lines starting with ‘#’ will not be included)
4 #
5 # Committer: edipo <edipofederle@gmail.com>
6 #
7 # On branch master
8 # Changes to be committed:
9 # (use “git reset HEAD <file>…” to unstage)
10 #
11 # modified: file2.rb
12 # modified: file3.rb
13 #
recebemos o seguinte ao salvar o arquivo:
Created commit 6c010c9: Adicionando todas as modificacoes
2 files changed, 10 insertions(+), 0 deletions(-)
Ok, ai esta, agora vamo ver como ta nosso log:
git log
commit 6c010c9a8168c5c4978125e57eab7f82b795e82b
Author: edipo <edipofederle@gmail.com>
Date: Fri Feb 20 22:37:30 2009 -0300
Adicionando todas as modificacoes
commit bc36724bdfd5411466f27d72ce9dede1164478a3
Author: edipo <edipofederle@gmail.com>
Date: Fri Feb 20 22:13:37 2009 -0300
Apenas Commit do file1.rb nao do file2.rb
commit 382506110486d1d89de8debbe8ef54f0bd83d8c2
Author: edipo <edipofederle@gmail.com>
Date: Fri Feb 20 12:46:23 2009 -0300
Primeiro Commit
Bom é isso nesse post, já deu para perceber o quão legal é o git, e como ele deixa as coisas organizadas, obviamente isso nao é um projeto real, e estamos “desenvolvendo” sozinhos, mas para fins de aprendizado creio que já deu para pegar algo, no próximo post iremos dar uma olhada em branchs e merges, é isso ai pessoal, espero que venha a ajudar alguem, por favor se alguem achar algum erro nesse post faza-me saber deixando um comentário, e se você
gostou tembém deixe um comentário, até mais pessoal e usem o GIT
URL Amigáveis em PHP.
February 9, 2009 at 1:19 am | In php | Leave a CommentSuponha que você tenha um script como posts.php na raiz de seu site, então temos uma URL como esta: http://www.yoursite.com/blog.php. Tal página é utilizada para exibir os posts, o post em questão é encontrado sendo passado dois paramentros para a URL, cat(category) e id.
Com base nisso temos o acesso a um certo post digamos o terceiro post que foi gravado no banco acessando a seguinte URL: http://youtsite.com/blog.php?id=3.
Bem essa é a forma como muitos o fazem, mas existem alguns problemas com isso, não problema de execução, isso funciona corretamente, alguns problemas são: esse tipo de URL é MAL indexada pelos sistemas de busca( leia-se Google), esse tipo de URL é aquelas que o fazem dizer “Eca, isso é feio.”, bem isto não é tão feio, você pode encontra algo ainda mais feio, assim:
http://www.example.com/index/Y29udGVudD1vdXRwdXRfbGlzdCZhY3Rpb249c2V0YXJyYXk==
Uma maneira de melhorar isso seria usar uma URL no seguinte estilo:
http://yoursite.com.br/blog/web/1/
ou
http://yoursite.com.br/posts/web/how_write_a_book/
Habilitando o suporte a Rewrite.
Aqui creio eu reside umas das desvantagens de se usar o Rewrite, localmente não temos problemas com isso pois temos total acesso aos arquivos de configuração do apache, já a história muda quando se trata do servidor remoto, onde você hospeda se código, muitos servers não tem essa opção habilidade, alguns após o pedido podem liberar isso para você outros não, com isso em mente vamos seguir em frente.
Para habilitar o suporte você deve acessar o arquivo /etc/apache2/sites-enabled/000-default
Irá ter um trecho igual a esse:
1 <Directory /var/www/>
2 Options Indexes FollowSymLinks MultiViews
3 AllowOverride None
4 Order allow,deny
5 allow from all
6 </Directory>
Mude para
1 <Directory /var/www/>
2 Options Indexes FollowSymLinks MultiViews
3 AllowOverride All
4 Order allow,deny
5 allow from all
6 </Directory>
Isso serve para habilitar o suporte a links simbolicos, e agora habilite o Rewrite assim:
a2enmod rewrite && sudo invoke-rc.d apache2 restart
Pronto se os passos acima derem certo, esta feito.
O Arquivo .htaccess
Para começar sim, esse é um arquivo somente com extesão, segundo, é nele que vamos dizer que queremos o Rewrite habilidato e onde iremos escrever as nossas regrar para “reescrita” das urls.
Nosso .htaccess ficaria como isto:
RewriteEngine on
RewriteBase /blog
RewriteRule posts/([a-zA-Z\\s]+)\/([0-9]*)/(.*)$ post.php?cat=$1&id=$2&nome=$3
Para nosso exemplo iriamos ter algo assim no .htaccess, explicando melhor o que acontece ai:
Linha 1: “ligamos” o Modo Rewrite. Linha 2: Dizemos que a base te todo o conteudo será em /blog
Na linha 3 é onde reside a nossa lógica de reescrita da url, como você pode notar temos uma expressão regular ai, vamos entender um pouco o que ela faz:
posts/ quer dizer que tudo que começar com posts/ irá usar esse nossa expressão, então seguimos com ela e temos ([a-zA-Z\\s]+) aqui dizemos que queremos somente letras e espaços em branco, ([0-9]*) aqui somente numeros, e por fim qualquer coisa.
Essa explicação foi muito superficial e é provavel que você não tenha entendido caso nunca viu uma expressao regular na frente, para isso ao final desse post irá ter alguns links contendo alguns sobre ER.
então dizemos que qualquer ocorrencia de um “string” contendo algo que case com a expressao deve ser “lido” como post.php?cat=$1&id=$2&nome=$3.
Ops que diabos são esses $1, $1, $1, o que esta entre os parenteses está sendo “guardado” nessas variaveis, o que nos leva a conclusão que SIM agora podemos acessar essas váriaveis atráves do método $_GET.
Bom basicamente é isso, abaixo segue um exemplo do uso da URL como descrito acima, é apenas uma demostração caso você queira testar ai, os códigos abaixo consistem em um exemplo onde são apresentados dois links como se fosse um “blog”, esta usando Mysql para puxar os dados de exemplo, creio que com isso irá dar para ter um idéia e para você ir fazendo uns testes em cima dele, então lá vai:
list.php
1 <?
2 require “connet_db.php“;
3 echo “<h1>List Posts</h1>“;
4 $posts = mysql_query(“SELECT * FROM posts“);
5
6 $linhas = mysql_num_rows($posts);
7
8 if (!$posts) {
9 echo ‘Não foi possivel executar a consulta: ‘ . mysql_error();
10 exit;
11 }
12 for($i=0; $i < $linhas; $i++){
13
14 $dado = mysql_fetch_row($posts);
15 echo “<p><a href=\”/blog/posts/$dado[2]/$dado[0]/$dado[1] \”> $dado[1] </a></p>“;
16
17 }
18
19?>
post.php
1 <?
2 require “connet_db.php“;
3
4 $request = $_SERVER['REDIRECT_URL'];
5
6 echo “Category = “, $_GET['cat'];
7 echo “<br>“;
8 echo “ID = “, $_GET['id'];
9 echo “<br>“;
10
11 $cat = $_GET['cat'];
12 $id = $_GET['id'];
13 $nome = $_GET['nome'];
14
15 $consulta = mysql_query(“SELECT * FROM posts WHERE category=’$cat‘ and id=’$id‘ “);
16
17
18 $linhas = mysql_num_rows($consulta);
19
20 if (!$consulta) {
21 echo ‘Não foi possivel executar a consulta: ‘ . mysql_error();
22 exit;
23 }
24 for($i=0; $i < $linhas; $i++){
25 $dado = mysql_fetch_row($consulta);
26 echo “<p><b>Title:</b>“, $dado[1], “</p>“;
27 echo “<p><b>Catgory:</b>“, $dado[2], “</p>“;
28 echo “<p><b>Body:</b>“, $dado[3], “</p>“;
29 }
30
31 echo “Vejamos temos um array da URL, você pode usar ele para cirar seus links, ou se preferir use o GET como feito acima“;
32 $parts = explode(‘/‘, $request);
33 array_shift($parts); // deleta o primeiro elemento do array pois é sempre vazio
34
35 echo“<pre>“;
36 print_r($parts);
37 echo “</pre>“;
38
39
40 ?>
Tá ai o exemplo, obviamente falta a arquivo de conexao com o banco de dados, abaixo tem um link para baixar todos os arquivos do exemplo. Bom é isso espero que venha a ser útil para alguem. Até a próximo.
OBS : Perdoem a falta de identação do código mas o wordpress que faz isso(as vezes)
[OFF] Confirmado: Firefox não suporta HTML e é um programa em versão Beta ainda …
January 28, 2009 at 2:24 am | In Padrões Web | 2 Comments
Pois é se confirmou mesmo, como relatei no ultimo post , FireFox não suporta HTML, e é um programa em face Beta… ISSO segundo a VIVO, na qual eu enviei um email reclamando do site delas não funcionar todo no Firefox, eis aqui a resposta um pouco mais longo que a que postei no post anterior.
Prezado Sr. Édipo Luis Féderle,
Bom Dia!
“Em atenção ao seu e-mail, agradecemos o seu contato e conforme solicitação descrita pelo senhor, informamos que ao desenvolver o site da Vivo, pensando no conforto e acessibilidade ao cliente, o mesmo foi configurado para atuar de melhor forma no Internet Explorer, salientamos que o Mozilla Firefox não dispõe de todos os recursos necessário para o pleno funcionamento de nossa pagina.
Ressaltamos que, nosso site é desenvolvido em uma base de banco de dados MSDE e toda a programação é realizada em arquivos com extensão HTML. Portanto o Firefox é um programa incompatível a essa extensão, salientando que o as versões disponíveis do Firefox no mercado hoje, são versões Beta, ou seja, o fabricante do navegador não disponibilizou uma versão definitiva de seu navegador, onde após realizado, o mesmo poderá disponibilizar o acesso a todas as funcionalidades de nosso site, lembrando que isto vai depender de seus desenvolvedores.
Expressamos nossa intenção de esclarecer que a Vivo preocupada em atender a necessidade diferenciada de cada cliente, realiza pesquisas e busca dados que são imprescindíveis para adequar cada vez mais seus produtos e serviços ao perfil de seus consumidores, no qual em breve, clientes que possuam o navegador Mozilla Firefox, também disponibilizarão de todos os recursos utilizados em nosso site.
Agradecemos o seu contato e nos colocamos à sua disposição.
Atenciosamente,
Marco Aurélio Simono
Equipe Fale Conosco”
Resumindo, grande palhaçada isso não?
Blog at WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.