Archive for May, 2008 Page 2 of 3



PHP UnitTesting com SimpleTest

Estou a usar o SimpleTest há já mais de um ano, mas nunca tinha verdadeiramente puxado por ele. Agora, que estou a juntar as peças da minha framework, preciso de actualizar os testes por forma a levar o projecto 100% até o próximo nível: test now, code later.

Neste momento, as classes que constituem o core e a base dos controladores (o C do MVC), estão 100% testadas. Claro que nem todos os testes passam ainda, but that’s not the point here…


$test->addTestCase(new test_OE_Base());
$test->addTestCase(new test_OliveConfig());
$test->addTestCase(new test_OliveMessage());
$test->addTestCase(new test_OliveStorageDefault());
$test->addTestCase(new test_OliveLocatorDefault());
$test->addTestCase(new test_OliveLoaderDefault());
$test->addTestCase(new test_OliveExecutorDefault());
$test->addTestCase(new test_OliveConfiguratorDefault());
$test->addTestCase(new test_OliveConfigurableBase());
$test->addTestCase(new test_OliveComponentBase());
$test->addTestCase(new test_OliveExecutableBase());
$test->addTestCase(new test_OliveModuleBase());
$test->addTestCase(new test_OliveControlBase());
$test->addTestCase(new test_OliveFrameworkBuilderBase());
$test->addTestCase(new test_OliveApplicationFactoryBase());

São já 447 testes e ainda falta testar/escrever todas as componentes de Output (V) e Model (M)… Ah! Recordo-me agora que quando eu era substancialmente mais novo as noitadas de sábado eram substancialmente mais divertidas.

Olive Framework tests with SimpleTest

Acerca do SimpleTest

Quando avaliei as frameworks de teste para PHP escolhi o SimpleTest por implementar todas as features (e mais um par de botas) e, ao mesmo tempo, permitir escrever testes com um código, de facto, muito simples.

Entre outras funcionalidades, o SimpleTest permite gerar Mocks em run-time e configurá-los para agir como actores (retornar valores consoante os argumentos) e críticos (testar chamadas e argumentos). Eis um exemplo:


  /**
   * should call given strategies and return as soon as some strategy returns data
   */
  public function test_load_specific_strategy()
  {
    // create
    $configurator = OliveConfiguratorDefault::instance();

    // create mock strategy
    $strategy1 = new MockOliveConfigStrategy();
    $strategy1->expectNever('load');

    // create mock strategy
    $strategy2 = new MockOliveConfigStrategy();
    $strategy2->expectOnce('load', array($this->_path, $this->_name));
    $strategy2->setReturnValue('load', $this->_data);

    // create mock strategy
    $strategy3 = new MockOliveConfigStrategy();
    $strategy3->expectNever('load');    

    // pass mocks
    $configurator->add_strategy($this->_strategy[0], $strategy1);
    $configurator->add_strategy($this->_strategy[1], $strategy2);
    $configurator->add_strategy($this->_strategy[2], $strategy3);       

    // load with specific strategy
    $data = $configurator->load($this->_path, $this->_name, $this->_strategy[1]);

    // assert data
    $this->assertIdentical($data, $this->_data);
  } 

Ainda mais á frente, permite também fazer Web Testing, scraping, navegação, submissão de forms e autenticações. Digo mais à frente porque, apesar do mecanismo ser claro como a água, ainda não consigo pensar em estratégias eficazes para implementar testes desta natureza. Mas lá chegarei.

Mas o SimpleTest tem outras características de ganhador: está relativamente bem documentado, principalmente com exemplos que te possibilitam estar up and running em menos 10 minutos; tem uma comunidade bastante activa (mailing list); a versão que está cá fora é 1.0.1, ou seja, para lá do Beta; o desenvolvimento está bastante activo e os planos são claros no que toca a levar o SimpleTest ao colo até ao php6.

A versão que eu estou a usar é um pouco antiga e foi hacked para permitir testar se durante a execução dos testes houve ou não output para o browser. Por isso ainda não o actualizei para a última versão e ainda não experimentei o plugin para o Eclipse que promete um nível de integração porreiro com o PDT e o XDebug.

Educação OpenSource: MIT OpenCourseWear

Provavelmente, aquilo que vou dizer já aqui terá sido referido. Sei que não se trata propriamente de uma novidade mas já tenho isto aqui para publicação há muito tempo: os conteúdos dos cursos do MIT estão totalmente vertidos na web.

Mit OpenCourseWare

Auto-aprendizagem

De certeza que todos encontraremos aqui, no mínimo, uma ou outra boa leitura, salvo quem sofra de preconceito extremado contra a forma americana de ensinar. Das artes ao Urbanismo, passando pela Psicologia, Economia e toda a espécie de Engenharias, são ao todo 1800 unidades disponíveis para download sob licença Creative Commons.

MIT Course Index

Esta iniciativa inspira-me a aprender algumas coisas sobre assuntos que me interessam mas nunca encontrei tempo para explorar de forma disciplinada. Ciência Política, História, Psicologia, Linguística, Literatura, assuntos que por vezes me prendem na Wikipedia durante horas a fio. Mas dou por mim a saltar de artigo em artigo, totalmente absorvido na simplicidade como o conhecimento é apresentado, mas totalmente disperso no hyper-texto: sem objectivos, sem sequências lógicas, sem closure. E, consequentemente, sem grandes resultados.

Uma lição de boas práticas

Esta iniciativa deveria também inspirar os responsáveis por instituições culturais por esse mundo fora a adoptarem um modelo mais aberto e democrático. É também uma grande lição de como tirar proveito da rede e, em última análise, uma avassaladora demonstração de qualidade em gestão documental: estruturação e apresentação dos cursos, regras, documentos, media, bibliografias, papers, readings, assignments, avaliação, etc… tudo uniformizado para apenas 1800 “cadeiras” e inclusivé, em muitos casos, os conteúdos estão disponíveis em versão portuguesa, espanhola e chinesa.

Não sei como vai o ensino universitário em Portugal, mas há 15 anos atrás os “textos de apoio” das cadeiras eram umas sebentas ridículas, compilações de fotocópias reprografadas e encadernadas pela AE. Talvez o ensino tenha melhorado mas isso não se reflecte ainda na web.

Conhecem casos de Universidades Portuguesas cujos sites mereça ser minimamente explorado?

Mr.Bungle - Pink Cigarette

Hum… Mike Patton… o que dizer… grande maluco, grande génio… queria partilhar essa ideia mas não é fácil. É difícil explicar o respeito que tenho por esta figura. Gosto de algum do trabalho dele mas não de todo. Faith No More é evidentemente uma das maiores bandas de sempre. Mr.Bungle têm momentos hilariantes, geniais, mas é geralmente difícil. Fantomas é desconcertante, para dizer o mínimo. Tomahawk kicks ass, Peeping Tom é muito cool e Mondo Cane é realmente inesperado.

Not…

Acima de tudo, escolher uma só música para o representar aqui é realmente difícil. Quem não conhecer Mr.Bungle não se entusiasme com esta música. Os albums de Mr.Bungle são um pouco como este video: desconfortáveis.

Colaborações de Mike Patton (fonte: wikipedia): John Zorn, Dan the Automator, The Melvins, The Dillinger Escape Plan, Melt-Banana, Sepultura, Merzbow, Kool Keith, The X-Ecutioners, Team Sleep, Björk, Subtle, Rahzel, Amon Tobin, Eyvind Kang, Lovage e Kaada.

A sua goela é tão rara que até serviu para dar voz aos monstros de um blockbuster recente.

Excelente artigo sobre música 2.0

No blog remixtures, um excelente artigo acerca dos desafios da música a curto/médio prazo (enquanto indústria)

Andas a ler a Wikipedia, Meo?

Não ponho de todo em causa a campanha do Meo. Muito pelo contrário. Não só tem bastante piada como é original e parece que eles já gravaram spots temáticos para todas as situações, desde o lançamento do serviço até ao natal, talvez para o caso remoto de Portugal ganhar o euro2008.

cobertura serviço meo, por telemóvel

Mas esta acção acerca da cobertura do serviço Meo - flash aqui, por enquanto - não acrescenta absolutamente nada à acção do Sporting no princípio da época. Pelo contrário, o Paulo Bento soava bem melhor, mais tranquilo (pun intended) e convincente. E mesmo sem nenhum pretexto para pedir o número de telefone aos utilizadores conseguiram, segundo consta, bater todos os recordes para uma acção do género em Portugal.

Meo Sporting é que não pá, sou mesmo do Benfica

E é engraçado descobrir que conquistou uma menção no artigo sobre Marketing Viral da Wikipedia.

In 2007, Portuguese football club Sporting Portugal integrated a viral feature in their campaign for season seats. In their website, a video [15] required the user to input his name and phone number before playback started, which then featured the coach Paulo Bento and the players waiting at the locker room while he makes a phone call to the user telling him that they just can’t start the season until the user buys his season ticket. Flawless video and phone call synchronization and the fact that it was a totally new experience for the user led to nearly 200,000 pageviews phone calls in less than 24 hours.

E este seria inspirado em que outro? talvez estrangeiro? Nunca cheguei a saber, mas a ser ideia era original, executada com tanta mestria - “flawless video and phone call synchronization” - merecia um belo prémio. E terá ganho?

Sabe-se lá… não há dúvida que por trás destas acções existem verdadeiros artistas, mas tirando os casos óbvios das figuras públicas envolvidas, como os Gato, ou os casos raros em que temos acesso ao making of da acção, nós (falo pelo público em geral) ficamos na total ignorância sobre o quem, o como, o porquê e outros detalhes interessantes.

Um português a fazer históra, Live daqui a 10 minutos

vejam live, no http://billabongpro.com hoje quarta feira 14 de Maio às 23:30 (faltam 10 minutos) e vejam o Tiago Pires, o primeiro português no circuito pro… já está na 3ª ronda, chegará à 4ª?

WCT2008, Teahupoo Tiago Pires apurado para o Round 3

UPDATE: o Joel Parkinson é o adversário do saca no 4º heat do round 3, (hoje, Quarta, 14 de Maio às 23:30)

UPDATE: o Joel Parkinson é un cínico, o grego do surf. Depois do Saca sacar um 10!!! (dez!, o segundo de todo o evento) saíu do Tahiti sem glória porque caíu na ratoeira do Aussie e foi-lhe assinalada uma interferência. Parkinson, queres jogar xadrez!? compra um tabuleiro, meu…

São neste momento 9 da manhã no Tahiti e finalmente começou a 3ª Etapa do circuito.

Afinal os heats estavam todos trocados e o Tiago Pires tinha pela frente Roy Powers (HAW) e Jeremy Flores (FRA). O Tiago saíu da água em 1º lugar e conseguiu assim o apuramento directo para o 3º round da prova. Mais do que isso, com metade dos heats do round 1 terminados, Saca está com a 2ª melhor onda (9.17) e o terceiro melhor heat (15.17).

tiagopires-teahupoo-heat1.png

Dá-lhe agora puto.

Quem quiser tentar a sorte, noite dentro, o evento é transmitido live aqui: http://billabongpro.com/ é entrar e clicar no LIVE. Ou tentar a sorte directamente aqui.

João Bartolomeu e a bomba do 13 de Maio

eu juro que quando comecei a ler isto questionei: mas porque raio o Cão com Pulgas se lembrou agora de recuperar as sábias palavras do pequeno grande Otávio? Afinal, a cantiga é a mesma, é marcar a conferência para daqui a dois dias… é que entretanto ainda há tempo (haja razão) para mudar de ideias.

As falácias da crise de migração para PHP6

Nos últimos tempos, os artigos alarmistas acerca da próxima versão do PHP multiplicam-se pelos blogs como memes em tardes de inércia generalizada. (oops…)

A tónica assenta invariavelmente numa suposta crise de migração. O cenário é muitas vezes colocado como apocalíptico, qual y2k bug, que vai deixar milhões de sites sem funcionar, developers em sarilhos, empresas de alojamento em encruzilhadas e, no w.c.s. vai provocar uma debandada geral de programadores que deixarão o PHP despido do seu maior capital, a maior comunidade mundial de web-develop… err… web-program… err.. web-mast…. err… enfim, pessoas.

PHP6 é polémico!? Por favor…

PHP 6, já agora aproveitem para mudar o logo!Basta dar uma olhada pelos resultados da pesquisa “PHP6″ no Google. Para variar das language flame-wars agora temos uma migration flame-war dentro da própria comunidade.

Para não variar, existe muita falta de esclarecimento. É isto a que os developers do python se referem quando dizem que a comunidade PHP tem uma má relação sinal/ruído. Mas primeiro vou desmontar o argumento mais falacioso das opiniões mais catastróficas.

Retro-compatibilidade = mudança lenta

Uma mudança de versão implica mudanças. Duh! E ninguém se atreve a colocar em causa que as mudanças são para melhor. O que está em causa é a retro-compatibilidade com características que estão diagnosticadas há quase 10 anos como pecados originais do PHP.

O PHP5 saiu há séculos (4 anos!) e ainda existem milhões de sites alojados em PHP4, com register_globals e magic_quotes, um legado do PHP3 que deveria ter sido eliminado antes do “famoso” 3.23. mas que na verdade ainda pode ser usado no 5.

A recompensa para esta política populista de manter hordas de fiés proprietários do PhpBB (v1) a funcionar “sem problemas” é dada pelos próprios. São eles que se preocupam com as notícias de que o register_globals vai desaparecer porque na verdade terão que migrar do 3 para o 6.

Além de mais de nada adiantou manter a retro-compatibilidade com o PHP4. Não só o se 5 manteve poluído com uma infinita quantidade de hacks herdados do 4, como existem ainda pessoas a utilizar as ingénuas funcionalidades do 3.

E em toda a verdade, nem sequer há razão para alarme. Ou seja…

O hosting e as versões paralelas

Há um ano atrás vi-me forçado a escrever mails para conseguir um hosting PHP5 em Portugal por um preço razoável! Relembro que o 5 saiu há quase 4 anos e que apesar do suporte que a própria comunidade continua a dar à migração para o 5, muito continua por fazer. Mesmo sabendo-se que o PHP4 foi descontinuado no final de 2007, a oferta de alojamento em PHP4 continua aí, a vender-se que nem ginjas.

Portanto sosseguem. A questão não está na linguagem mas sim nos alojamentos. Irá acontecer com o PHP6 o mesmo que aconteceu com o PHP5. E com o MySQL5.1 e as transacções e o INNODB e a integridade referencial… Que continuam a ser uma miragem, ou mesmo um mistério, para muitas pessoas.

As empresas de alojamento, com dezenas ou centenas de máquinas, disponibilizarão serviços com o 6 ao lado das existentes com o 5. E entretanto mantêm o 4 até não haver mais clientes que justifiquem manter o último dinossauro a sugar corrente do bastidor.

Para não falar das que ainda nem sequer descobriram o 5. Hey guys, how about this?.

Quanto aos “utilizadores”, apesar dos quatro piscas, cinco cintos e três retrovisores serem hoje utilitários que o bom-senso não dispensa, quem não tiver disponibilidade para trocar o velho Fiat127 por um Uno pode sempre invocar que o primeiro é um clássico e assim evitar umas multas.

Mas não os condeno de todo, são utilizadores e não developers. Não podem é ser voz activa no que ao futuro do PHP diz respeito. Além do mais recomendo vivamente que questionem se circulam em segurança e se gastar 11 litros aos 100 realmente compensa.

Mas afinal o que significa migrar para o PHP6?

Chutando a bola para a frente, gostava acima de tudo de esclarecer o seguinte: aparentemente muitos dos posts que circulam na net desde o início de 2008 baseiam-se numa wishlist de Rasmus Lerdorf publicada aqui em 2005… Afinal foi o próprio que utilizou, com alguma infelicidade, a palavra “controversial”.

Mas ninguém deveria pronunciar-se sobre o assunto antes de ler a minuta da reunião dos core developers tida alguns meses mais tarde em Paris. E já agora, porque não consultar o wiki de desenvolvimento do próprio PHP e olhar para a lista TODO PHP6 e, consoante a orientação, ficar preocupado ou aliviado por haver ainda tantas questões em aberto.

E as questões já fechadas, o que implicam?… Desculpem, mas não vou de todo publicar um YAP6MMG (yet another php6 migration mini guide) quando existem artigos como este disponíveis.

Desilusão

Afinal a montanha pariu um rato. Isso sim é polémico! A migração é banalíssima (excepto para os que migram directo do PHP3) e no que toca a verdadeiras novidades deixa muito a desejar.

Deixou de lado alguns pedidos interessantes, como adicionar suporte para type hinted class properties, delegates, o construto try {} finally {} e object casting to primitive types, advogando que “isto não é o PHP way” ou “viola o princípio KISS do PHP” ou “existe uma função para esse efeito” ou simplesmente “não queremos fazer isto”. Por outro lado introduz novos hacks que por si só davam matéria para muitos artigos.

Eu continuarei a aplicar a regra de ouro que me tem posto a salvo de úlceras e complicações nervosas: take it as it comes. Afinal o PHP é open-source. E gratuito. E os alojamentos são mesmo muito baratos.

MySQL Workbench substitui (oficialmente) o DBDesigner4

NOTA: MySQL lança (hoje!) oficialmente o MySQL Workbench, ferramenta visual de modelação de dados com suporte alargado das funcionalidades do MySQL. (para assistir ao web seminar, basta registar-se com a MySQL)

Intro

Analisar, conceber e implementar uma base de dados podem e devem ser tarefas unificadas no contexto de um processo de desenvolvimento integrado, iterativo e incremental. Na verdade, todo o processo de desenvolvimento pode ser suportado por ferramentas CASE mas estas são geralmente dispendiosas e apenas acessíveis às grandes empresas.

No mundo do desenvolvimento web, principalmente no mundo das tecnologias open-source, os sistemas disponíveis estão ainda um pouco longe do seu potencial, mas é possível montar um ambiente de desenvolvimento bastante completo, nomeadamente sobre o Eclipse. Este IDE open-source, desenvolvido em Java, não só disponibiliza os plugins necessários para desenvolver em praticamente qualquer linguagem, como também para desempenhar eficazmente as tarefas de análise e desenho e até mesmo fazer round-trip engineering ao longo de todo o ciclo de desenvolvimento.

erd.png

Contudo, para as tarefas de modelação de dados nunca encontrei um plugin, ou conjunto de plugins, que permitisse uma completa sincronização dos diagramas ERD (na foto) com a base de dados física, nomeadamente por faltarem features específicas do MySQL, o (meu) RDBMS de eleição para o desenvolvimento web.

DBDesigner

Até há pouco tempo, os resultados da pesquisa por mysql visual modeling no Google apontavam inequivocamente para o DBDesigner, um projecto Open Source, sem suporte oficial da MySQL.

dbdesigner.png

Apesar de implementar as features essenciais, o DBDesigner prova-se muito pouco eficiente para quem queira manter os diagramas sincronizados com a base de dados. Alguns bugs irritantes, pouca usabilidade e uma configuração demasiado abstracta são alguns dos turn-offs mais difíceis de contornar.

Além do mais, o desenvolvimento parece ter ficado suspenso após o lançamento da versão 4. Nunca me convenceu verdadeiramente e apesar de o ter utilizado largamente para documentar a fase de análise e desenho, nunca o utilizei consistentemente ao longo de todo o ciclo de desenvolvimento dos projectos.

Workbench

É aqui que entra o Workbench, sucessor do projecto DBDesigner4 mas construído de raiz a pensar num suporte alargado a todas as funcionalidades do MySQL, que entretanto evolui muito rapidamente entre as versões 4 e 5.

workbench.png

Apresenta também grandes melhorias ao nível da interface, mais usabilidade e mais estabilidade. E a promessa de evoluir rapidamente com base no input da comunidade: bugs, feature requests e até mesmo plguns.

Em versão Beta até há pouco menos de um mês, é notório o suporte da MySQL ao desenvolvimento deste novo produto. No dia 12 a MySQL irá fazer mais uma acção de divulgação do Workbench através de um webinar aberto a todos. Basta registar-se aqui e “comparecer” às 15 horas.

Worbench OSS e Standard Edition

Nas palavras da própria MySQL o Workbench é o primeiro produto MySQL com uma nova política de distribuição. Por outras palavras, este “produto” é distribuído em duas versões, gratuita e paga, com a primeira a ser truncada de algumas características. Será certamente uma das consequências da recente aquisição da MySQL pela SUN, em Janeiro de 2008 (ver análise da Gartner sobre as consequências desta aquisição).

MySQL WorkBench

Eu disse “truncada”? Segundo o site do projecto isto não é verdade, afirmando claramente que a versão comunitária “is not crippled in any way”. Contudo, a Standard Edition “adds modules and plugins allowing for an optimized workflow”:

  • object privilege system
  • schema validation plugins
  • model reporting and online printing
  • reverse engineering and synchronization against live database connections.

Plugins

O WorkBench é desenvolvido sobre uma arquitectura de plugins escritos na linguagem Lua (com origem no Brasil) e, apesar de ainda não estar aberto à comunidade, o repositório de plugins tem um lugar reservado no site oficial do produto.

Obviamente, questiona-se como será possível no futuro manter a versão Standard Edition se aparecerem plugins alternativos aqueles que são distribuídos em exclusivo na versão “paga”. Existirá uma política de restrição da API para os plugins desenvolvidos pela (para a) comunidade?

Acima de tudo, espero que o desenvolvimento do Workbench caminhe no sentido da inter-operabilidade, e que brevemente obtenhamos algum grau de integração entre os modelos (guardados num formato standard em xml) gerados no MySQL Workbench com outros sistemas de CASE que implementem a generalidade do UML, nomeadamente com a EMF do Eclipse.

Links

Conceitos







Close
E-mail It
tramadol mechanism wellbutrin pravachol zovirax cialis viagra australia supply buy cheap tramadol o avandia and glucophage tetracyclines mechanism of action generic drugs for lexapro levitra vs cialis vs viagra sildenafil citrate us overnight delivery celexa vs prozac us licensed pharmacies carisoprodol by chicos phentermine 37.5 without precrition different mg of atenolol liquid tadalafil ingestion doses of lexapro alcohol falce positive for fioricet synthroid medication long term use cervical radiculopathy prednisone diclofenac interactions with xanax prozac dailey strength wellbutrin 200 sr maximum prescribed daily does of ultram clomiphene vs tamoxifen as pct dangers of prednisone in dogs canines meridia industrial members corporation email contacts buspar or xanax inventor of lorazepam wyeth soma inc when is xanax prescribed carisoprodol vs methocarbamol workign around sexual side effectson lexapro singulair and acid reflux lexapro positive side effects saturday tramadol delivery medicine cause tendinitis phentermine xanax withdrawls matt lauer as the amazons viagra t pallidum treponema doxycycline tetracycline kentucky weight lose adipex phentermine xanax anxiety 0.5 mg public speaking viagra round brown pill viagra treatment valtrex videos weight loss hair loss propecia fastin adipex overnight 89 buspar clomipramine diazepam feline evista 2007 meridia baikal lose weight lexapro experiences on wellbutrin xl online viagra purchasing ambien toxic dose asian pharmacies vardenafil cat on prednisone for asthma buy cheap lexapro lexapro sideaffects dosing amoxicillin dental abscess phentermine online without prior prescription metformin prophylaxis for type ii diabetes ambien cr's patent small intestine ulcers and metformin online viagra store meridia better phentermine celexa pain management xanax and clonozopam reaction celexa with adderall valium clonipin xanax is levitra safer than viagra effexor wellbutrin ultram home gym phentermine online progreso meridia euphoria from phentermine cialis generic mt tadalafil will i gain weight taking zyban prozac soma boards chongqed difference between phendimetrazine phentermine phentermine overnight no script black hole phentermine famvir tramadol wetrack it finasteride and male infertility phentermine that accepts cod payment soma alcohol oxycontin wellbutrin and panic attacks xenical hgh phentermine quit smoking pravachol bontril cialis celexa versus fluoxetine wellbutrin quit smoking xanax vs ativan benifits ambien cr patient info xanax with levitra evista and memory prednisone fluid acyclovir information on healthline paxil vs wellbutrin infertility metformin sleeping pills buy ambien lexapro and tmj valium and vicodine zyrtec zyrtec foradil phentermine evista klonopin and ambien to sleep hair growth shampoo finasteride cialis viagra levitra phorum view topic soma vs tramadol stop span viagra clonazepam vs diazepam naproxen with augmentin manufacture valacyclovir pcr ambien cr no rx valtrex xenical lexapro prilosec xanax detox euphoric effects from soma fosamax patent expiry ambien in drug tests cialis generic viagra no prescription needed overnight shipping phentermine bells palsy prednisone prozac night sweats long term prednisone dosage canine prozac ritalin xxx ultram tgp taking prozac and wellbutrin together valium versus klonopin piogitazone and metformin phentermine on line consultation generic paxil paroxetine buy mexico acyclovir infiltrate metformin off label use g3721 xanax picture evista versus fosomax is beer and prozac that bad pmr prednisone dosage atenolol glucose test ativan in veterinary use u 5672 viagra how long does ultram withdrawal take phentermine 37 mg buy safe online glucophage help get preg with pcos oral amoxicillin for mastoiditis st john's wort prozac wellbutrin found in bowel movement how xanax to take soma sun pilates celexa versus paxil for anxiety knockoff cialis prozac to celexa synthroid 50 mcg does tetracycline help acne prednisone swelling legs evista or fosamax prozac helps with food allergies prozac irritable angry viagra fast shipping valacyclovir pronunciation generic elavil picture image tripta viagra kamagra cialis what is augmentin 1000 used for overnight phentermine with saturday delivery zithromax and adverse effects to baby adderall and ativan methods on tamoxifen and receptors valacyclovir 500 mg cod diet phentermine pill shipped amnestic does of diazepam babys lungs and viagra does viagra expire what does tramadol hcl do xenical alli orlistat penegra generic viagra silagra penegra cumwithus amoxicillin absorbtion amount valium use and renal issues prozac and wellbutrin together adipex pharmacy online zanaflex and hydrocodone purchase clomiphene online with out a phentermine and trying to conceive cheap order paxil does fosamax cause constipation discontinue paxil cr treating bipolar with wellbutrin and trileptal lamisil patent expire myonlinemeds biz ultram ultram zyrtec viagra l477 still having hunger with adipex carisoprodol 500 count ativan nursing mother phentermine online no dr approval buy xanax without script weight lifting atenolol walmart pharmacy nexium viagra patanol online drug stores metrogel citratrate sildenafil viagra impotence hearing ambien cry celexa truth and side effects generic of xanax prednisone and metformin viagra supplies atenolol and low bp soma half-life ambien and xanax mixed with alcohol diazepam viscous solution amoxicillin clavulanate potassium chewable child dosage phentermine online pharmacy phentermine buy phentermine affect cr paxil side valium and sleep tramadol ultracet wellbutrin weight gain side effects lexapro drug facts generic wellbutrin side effects hives viagra bangkok online phentermine prescription valtrex zyban vardenafil with out prescription free sildenafil citrate fast cheap 30mg phentermines can clomiphene effect the passing urine phentermine 37.5 free shipping alprazolam online from diet tablets phentermine viagra reaction time canine ultram dosing somas 44 pics