Archive for the 'develop' Category

Executar Eclipse PDT em Linux (especial 64 bits)

Ok, existem milhares de posts pela net a referirem-se a este problema. As dicas são várias, como sempre, mas raramente são explícitas.

Sintoma

O EclipsePDT pacote All-in-one não arranca.

screenshot-eclipse.jpg

JVM terminated. Exit code=13
/usr/lib/jvm/java-6-sun/jre/bin/java
-Xms40m
-Xmx256m
-jar /opt/eclipsepdt/plugins/org.eclipse.equinox.launcher_1.0.1.R33x_v20080118.jar

Causa

Alguns dos plugins incluídos estoiram quando executados numa JVM 64bits.

No meu caso, num AMD Turion 64 a correr Ubuntu 8.0.4 (Hardy Heron), encontrei as seguintes virtual machines em /usr/lib/jvm

  • sun 1.5.0.15 (64 bits)
  • sun 1.6.0.06 (64 bits)
  • java-gcj - java version “1.5.0″ (libgcj - Ubuntu 4.2.3-2ubuntu6)
  • open-jdk - java version “1.6.0″ (64 bits)
  • cacao 0.97 - java version “1.4.2″

O seguinte comando revela imediatamente a full-path de cada um dos java, além de permitir identificar qual o “java” executado por defeito no sistema:

sudo update-alternatives --config java

screenshot-ubuntu-java.jpg

Pode-se consultar a versão de cada um, usando java -version. Mais abaixo veremos qual o JRE a instalar. Nesse caso teremos:

/usr/lib/jvm/java-jre-32-1.6.0_07/bin/java -version

screenshot-ubuntu-java-version.jpg

Confusão

Na maior parte das soluções encontradas na web, atribuem-se imensas causas (macros incorrectas, directorias, paths, permissões, dificuldade em correr 2 instâncias do eclipse)… tudo ao lado… meu deus, o nível sinal-ruído no mundo do linux é brutal.

Dei por mim a instalar manualmente o Eclipse 3.3 e depois a tentar resolver as dependências todas para conseguir instalar via Eclipse Update todo. Pode-se tornar complicado, a sério. É preciso ter o Eclipse SDK v3.3.2 e as versões certas dos SDKs EMF, GEF e WTP mais uma série de features e plugins requeridos por estes.

Esquecer, esquecer tudo isso! Independentemente de usar ou não a instância que o sistema instala automaticamente (no Ubuntu 8.0.4 é o 3.2, raios porque não está actualizado!?) é perfeitamente possícvel descompactar o all-in-one em qualquer lado e simplesmente executar!

Solução

JRE

Fazer download do JRE 1.5 ou JRE 1.6 tanto faz (desde que não seja 64bits).

Para descompactar o arquivo do jvm (.bin) é primeiro preciso torná-lo executável e depois extrair. Para o efeito, tomando como exemplo a versão actual do Java 6:

chmod a+x jre-6u7-linux-i586.bin
./jre-6u7-linux-i586.bin

Copiar a pasta criada para dentro de /usr/lib/jvm e dei-lhe o sugestivo nome de java-jre-32-1.6.0_07

Eclipse PDT

Fazer download do pacote All-in-one e descompactar, por exemplo, para /opt/eclipsepdt/.

Executar

Executar o Eclipse com o switch -vm

/opt/eclipsepdt/eclipse -vm /usr/lib/jvm/java-jre-32-1.6.0_07/bin/java

Agora basta criar um item num painel ou num menu com esse comando.

No arranque o Eclipse PDR vai sugerir que se crie um workspace em /home/yourusername/workspace/. Basta aceitar.

eclipse-hello-world.jpg

Permissões

Convém que o root seja o owner da instalação do Eclipse. Se cópia não foi feita com um sudo mv é provável que assim não seja e é necessário executar algo como:

sudo chown -R root:root /opt/eclipsepdt

Finalmente, existem N formas de testar e publicar projectos com o PDT. Para um utilizador que vem do windows, por exemplo, a forma mais straight-forward de todas significa simplesmente criar um projecto dentro da pasta pública do apache.

Neste caso, como utilizador out of the box não será possível criar projectos em /var/www, apenas em /home/yourusername/workspace/. Não vamos alterar isso, vamos simplesmente criar um link simbólico de uma directoria no apache para uma outra no workspace que o eclipse criou para o utilizador.

cd /var/www;
mkdir teste;
ln -s /home/yourusername/workspace/teste teste

Já está. Agora http://localhost/test aponta com total transparência para /home/yourusername/workspace/teste.

No windows consegue-se um efeito semelhante através das directivas Alias do Apache, apontando certas URLs para os projectos no workspace. Mas isso implica sempre algum trabalho redobrado com determinadas aplicações PHP, nomeadamente quando envolvem mod_rewrite.

Mais tarde verei se/quais implicações pode ter o symbolic link.

E outras coisas incluindo como configurar o debugger, svn e subclipse e mais além.

Search trending the world: SOA and SAAS

I just read a nice post on mashable pointing out that web-hosting is on the low and social media now owns the market share for those publishing, sharing and community building tasks you could only engage in if you had a hosting account.

Sooo true…

SOA and SAAS

So I took the opportunity of checking some more trends… So I did SOA and SAAS and the result is quite interesting: both show steady growth and an amazing, really, amazing synched seasonality.

Google Trends - SOA and SAAS

To be more precise, in the past 3/4 years:

  • SAAS search trend peaks twice a year, after the summer and new-year… the two peaks are becoming more sharp, year after year.
  • SOA has a steep valley every late December, and it’s becoming deeper every year. SAAS nearly reached SOA by the end of 2006 and it cleary surpassed in late 2007.
  • But the search trend for SOA does not show a valley in the fall opposing SAAS fall steady peaks.
  • OTOH, SOA’s steady growth has slowed down and it became really wobbling through 2nd and 3rd quarter of both 06 and 07. Every year it looks more like a roller-coster.
  • Finally, news about SOA and SAAS are becoming more popular all the time, but had an impressive low by the end of 2007.
  • News about SOA took a head start but SAAS is now catching fast.

So, Autumn’s weather is nice for planning your next SAAS product? no one cares for SOA round christmas? SAAS is the buzz-word on new years eve?

Is the limited attention of the industry’s collective conscience bouncing between the focus on the best business model and the architectural concerns?

And, more important: what does this data tell us about the weather tomorrow?

Ramblings on PHP and IDE’s

PHP: milhões de utilizadores, centenas de ambientes, 1 IDE semi-oficial.

Perspectivas sobre o PHP são tantas como os developers: cada um de nós tem um portfolio diferente de experiências com outras linguagens, cada um de nós estabelece relações com a linguagem, consoante as rotinas diárias adquiridas, os tipos de projectos, os workflows, e até mesmo as ferramentas utilizadas.

Além do mais, a linguagem é evolutiva e todos podemos sonhar… Eu me atenho a uma linguagem, mas apenas enquanto estou a trabalhar com ela. Hum… e maior parte do tempo estou! Há um trabalho de design que até pode ser feito a papel e caneta, ou whiteboard, mas depois vem o trabalho de testar/programar, passado no IDE.

Sim o IDE é o nosso amigo fiel, e a linguagem essa paixão a quem tudo perdoamos. E passamos imenso tempo juntos. E não é de férias numa ilha. Não, é mesmo a trabalhar e à procura de resultados.

Já para não falar de que muitas vezes uso o próprio IDE como ferramenta de design… e aí passo todo o clico de vida do projecto a trabalhar com ele (IDE) e ela (linguagem)… à procura dos nomes dos membros… o que pode ser um pesadelo quando estás a escrever unit cases ou fazer refactoring… e não és o kung-master-fu-jedi-god-freekin-father do editor de texto.

Eu acho que um bom casamento ele/ela dá qualidade de vida e faz crescer. Para mim é indispensável para um trabalho produtivo, … como eu concebo, claro.

Para essa integração, contribui tanto o IDE que entrega funcionalides ao developer, como a linguagem que as define. Como o artesão que em cima disso os interpreta.

Nota: o meu IDE de eleição é o Eclipse PDT.

5 expressões regulares (html, url e email incluídos)

Eu sou incrivelmente nhurro quanto toca a aprender expressões regulares. Mais ainda a memorizar as syntaxes. O que me vale é a incrível quantidade de recursos que se encontram.

Este artigo explica bem 5 casos, típicos, frequentes.

  • Validar um username: duh!
  • encontrar um tag xhtml: ah!
  • encontrar um tag xhtml com certo atributo: ui!
  • validar e partir um email: claro!
  • validar e partir uma url: idem!

E funcionam.

Como diz no artigo, 5 expressões regulares que qualquer programador deve saber.

Ou saber encontrar quem saiba.

Uma vantagem do type-cast em PHP seria fazer mais EAFP e menos LBYL

Note:for English readers hitting this post: written in Portuguese, about a non-existing feature (variable class type cast) of php5, bith 5 and 6, and one good-argument on how it would improve the language.

UPDATE: check this post for a “solution” to class cast in PHP.

No meu post anterior referi-me a uma característica do PHP que eu vejo como uma limitação, no sentido que limita - acima de tudo - a performance do meu trabalho no dia-a-dia.

Click para continuar a ler “Uma vantagem do type-cast em PHP seria fazer mais EAFP e menos LBYL”

Limitações do PHP: verdadeiro type cast

Note:for English readers hitting this post: written in Portuguese, about a non-existing feature (variable class type cast) of php5, bith 5 and 6, and one good-argument on how it would improve programming efficiency through ide improved functionality.

UPDATE: check this post for a “solution” to class cast in PHP.

Escrevo este post como verdadeiro fã do PHP. Mas não como aquele que se limita a louvar as suas potencialidades, antes como aquele que gostava que o PHP evoluísse e se tornasse ainda mais poderoso.

Click para continuar a ler “Limitações do PHP: verdadeiro type cast”

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.

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

Python at last!

Trabalho com PHP há 12 anos mas nunca me tornei um fundamentalista. Certamente que prefiro o PHP a qualquer ASP mas não posso nunca fechar a porta a outras linguagens. Nomeadamente Java, Python, Ruby e Perl, com os quais já tive alguns “encontros”, mais ou menos complexos, e me enchem de curiosidade.

O problema está na falta de oportunidades. Quando tenho um projecto para implementar não posso optar por uma linguagem que não domino, não posso sair do meu domínio e colocar em risco a produtividade, qualidade e valor-hora do meu trabalho. Felizmente que não me têm faltado projectos, portanto continuo longe destas aventuras.

Mas finalmente eis que surge a oportunidade: Python (zope) at last!

Alguém tem dicas?

UPDATE:







Close
E-mail It
diluting amoxicillin chemicals used in crack cocaine benefits to women from testosterone creame phentermine cheap online discover payment method getting off of seroquel side effects nevada medical marijuana buy offshore medications adderall cocaine and seroquel idiosyncracy advair dyspnea and zocor cephalexin cap 500mg zocor problem alcohol mixed recipe phentermine discount no prescription cheap phentermine accept cod ziac 56.25 mg alcohol full download zyrtec vs allegra zyrtec 26 side effects children sad stories of heroin addicts clinical trial results glyburide alcohol word find dr hale studies metformin breastfeeding infants morphine sulfate cr kidney damage mix amitriptyline and wellbutrin denatured alcohol remove wax pharmaceutical methamphetamine softtabs capsule prednisone acetate alcohol associated illness zyprexa diabetes risk ciwa for alcohol cocaine prices today organon steroids home marijuana laws by state can you use methylprednisolone for pneumonia bassett ortho posture alcohol treatment center westland mi alcohol don't mix light with dark can lipitor be split methamphetamine recovery wellbutrin ciprofloxacin intestines clean my system of marijuana alcohol adipex interaction toothache naproxen ibuprofen ortho foot mcallen systematic drug and alcohol interventions does opana contain morphine soma r zyban in smoking cessation dosage buy celebrex good work dude tretinoin cream acne treatment drug war chronicle marijuana news archives compare nicotine and cocaine addictions overnight delivery of opium poppies hazards of denatured alcohol zoloft arthritis alcohol risk factors marijuana dashboard agent memorial day weekend marijuana privacy project keflex cephalexin capsule best marijuana high fetal alcohol syndrome pittsburgh does zanaflex work immediately take androgel with tamoxifen azithromycin 250 mg methamphetamine easy recipe fish congestive heart failure lipitor recreational hydrocodone wholesalers solutions to alcohol problems drinking dependent most alcohol accidents onset of action paxil alcohol induced respiratory illness versuri ecstasy norco california companies buspar safe alcohol sda specifications will chewing oxycodone kill me sodium bicarbonate amphetamine yasmin product label is lortab vicodin boniva fosamax buy tamiflu suspension marijuana grow faqs tramadol zyrtec xenical metformin for polycystic ovary complexion yasmin marijuana and hyperthyroidism nettle root testosterone ativan valium norco mexico pharmacy alcohol and acne lsd and kansas phentermine foradil phentermine evista effexor withdrawal eyesight adderall and wellbutrin together alcohol class in cleveland county nc isosorbide alcohol myth of soma cheats 3 17 beta estradiol testosterone stacy aids pregnant cocaine effexor side effex pcp management llc charlotte nc crimes associated with ritalin bruce banninga cocaine kidney pain stone vicodin current marijuana wars australia's dynamic methamphetamine market zyrtec florida nv mortgage soma does lsd have any medical use deshidratacion de alcohol female level testosterone silagra generic viagra cialis cumwithuscom adverse effects of acetaminophen buy amphetamine aspartate insulin resistance glucophage l-phenylalanine amphetamines growing marijuana with black lights side affects nicotine patch 503 hydrocodone marijuana withdrawl symptoms and tips cocaine help lines increase naturally testosterone excuses to get prescribed vicodin creatine and testosterone colchicine manufacturer diamond cleaning alcohol manufacturer of ritalin heroin for pain management buy propecia online neonatal marijuana methamphetamine side effects of ciprofloxacin for dogs newspaper articles on alcohol and health nicotine thrive lozenges canada tylenol max dose buy hydrocodone no overseas prescription ingredients in albuterol acetaminophen and ibuprofen taken together