Programming Matters

My thoughts on all things technical, programming and otherwise

Programmer Paradigms and Programmer Audiences

Filed under: General — by Steve Riley at 1:55 pm on Thursday, June 21, 2007

I have been reflecting a lot on the age old question of the “optimal” programming language for a while now. First I’ll issue the usual disclaimers about apples and oranges and how they need to be fit appropriately to the problems they need to solve. But more than anything else one thing stands true. This one thing I rarely see mentioned:

The optimal programming language is the one the programmers who will be using it are best suited to.

This doesn’t mean that it’s the one they already know. This means it’s the one that matches their skill level and the way they think. It’s more important to match up the language with the programmer than the problem that is being solved or any other criteria. There has been a lot of talk lately about “bondage and discipline” languages, dynamic typing and expressive power in programming languages. People think in different ways for different reasons. People have different skillsets. And others can be productive in an environment with rules and can create spaghetti in one without.

If I had a small team of top-notch programmers I would love to fully embrace and use a language like lisp or a purely functional language. That being said I have worked with a large number of programmers who can’t understand the basics of object oriented programming. They know the syntax but klduge the code into something that grinds to a halt and is unmanageable very quickly. The thought of the meta-languages those same programmers would create in lisp send shivers up my spine.

I hear a lot of crap about “the heat and the kitchen” and “if you don’t have the highest quality programmers you are doomed to failure”. Frankly that is pure crap. A certain percentage of programmers are “beyond repair”. But a large number of programmers are extremely solid when in the right environment. Frankly they need more structure and less wiggle room. And then maybe 1 in 10 programmers is the type that can be given full range to “be trusted” to use the full set of programming paradigms in any way they see fit. It may seem a little heavy handed, but show me any experienced team lead who disagrees.

Personally I find “bondage and discipline” languages to be best suited to the real world. We’ve all heard the statement “Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.” That statement is almost correct. I would redact that statement to the following “Any sufficiently complicated and well engineered program contains an implementation of Lisp.” The first statement simply isn’t true by itself because,if nothing else, many implementations of Lisp have been written in C. “ad hoc, informally-specified, bug-ridden, slow” - these added bits certainly don’t have to be the case.

I’ve done a lot of game programming in the past. A very common technique is to have the core in C++/C and have a scripting language sit on top of it. Often times it’s LUA or a Javascript-like language. The programming teams working on the scripting languages vs. the core C++/C code are different groups.

Design patterns are another way of embedding these principles in the language that’s being used. You often hear, “Design patterns! - those are bad smells! The programming language is insufficient - this is the only reason the design patterns are important”. I disagree. Design patterns may involve “wordier” constructs than a language that supports those concepts natively.  This involves less expressive languages having more lines of code to express the same concepts.  This part always makes me laugh. I don’t care what the programming language is - the number one problem I have seen again and again is TOO MUCH CODE and not enough THINKING. I’m not talking about lines of code - I’m talking about code control points or cyclomatic complexity.  Your XP junkie would cry foul but some programmers should learn using a punch card type mentality. Once they have mastered their craft only then should they be able to rebuild and modify “on instinct”. Carpal tunnel syndrome should never be a programmers fear.

I have worked with C code that was object oriented. Yes, I can hear you coughing. It is wordier than any language that embraces some form of OO but it can be done. And once it’s done it isn’t that terrible. Encapsulation using static inside compilation units, function pointer tables and a system to manage it, the whole 9 yards. Turing complete is turing complete.

Sometimes creating a barrier to entry to implementing more advanced concepts can be a good thing.

How many languages could be an optimal number to have at our disposal? With all considerations taken - hiring new coders, etc., etc. Some contenders based on popularity, power and potential include ones from several camps:

1. Java/C# - These guys are today’s C++. And they pretty much shine for the same reasons. Any good programmers you hire will be able to code in them with reasonable proficiency.

2. Lisp and it’s spawns - These guys seem great for that core of coders that will be building domain specific languages and need the expressive power. It’s hard to find programmers that will do it justice (as opposed to kludge up something truly clumsy), but when you do you will have some terse truly elegant code that is both flexible and powerful. But throw the code into a normal pool of programmers and they will beg to rewrite it in Java/C#. So definitely don’t do that.

3. Javascript - Sure it’s Lispy. But it is stands apart because of its ubiquity. You can find plenty of coders who think they can do it justice. And under constrained environments they may be right.

4. Truly functional languages - Haskell, etc. - I’ll be frank. I really can’t say I fully grok the trade-offs with these languages. I definitely don’t see these languages ever going mainstream simply because of the difficulty in finding people to use them appropriately. In certain domains they will rule, in others they will simply be overkill.

Those languages seem to have strong enough support and be sufficiently different to justify their utility.

That being said a lot of the conclusions I have come to are based on “justified” instinct based on my background. The languages I’ve coded in extensively since 1982 include (chronologically) 6502 machine language, “Bill Gates” Basic, Borland’s Turbo Pascal, 80×86 assembler, C, C++ and C#. I have also done some commercial projects in Visual Basic, PHP, Java, and Javascript . I have written code for a large number of languages but my career has involved those listed above.

I feel that in today’s world specialization is in order. Programmers should be able to choose different tracks and learn different languages in school and for their careers. We draw a distinction between digital logic design and programming languages. I think we should also break programming into specialties.

The programming paradigm should fit the programming audience (those who code to it). Like math or any science, programming is becoming a broad enough discipline that specialization is needed. After all, would you want your brain surgery performed by any doctor? I wouldn’t think so.

del.icio.us Digg Reddit dzone Live

Programmers as Drivers on the Highway:Lisp / Ruby / Javascript / etc. vs. Java / C# / C++ / etc.

Filed under: General — by Steve Riley at 4:01 pm on Tuesday, May 22, 2007

Preface:

Please read Programming Paradigms and Programmer Audiences for a more through explanation of the metaphor below.

Driving:

Freedom…..

  1. I know how fast I can safely drive and don’t need a speed limit to govern this.
  2. I should be able to make a u-turn on the highway if I need to.
  3. If there are no oncoming cars at a red light I should be able to drive through.
  4. When there is space to park right in front of my destination and its not marked as a parking space, parking lot spaces are truly inconvenient.
  5. Turn signals aren’t useful for someone who is paying attention.
  6. A driver’s license doesn’t actually help me drive any better.
  7. I’m aware of my car and don’t need to have it inspected constantly in order to know it running properly.
  8. Having tags on my car isn’t useful to me - if I commit a driving violation pull me over and I’ll give you that information.

I am clever enough and good enough to master all of these things.

Constraints…….

People are inconvenienced by them.

However,

  1. I feel safer knowing others have to obey the speed limit.
  2. I don’t want people making u-turns on the highway.
  3. People driving through red lights are accidents waiting to happen.
  4. Parking spaces don’t impose perfect order by any means, but the order they do impose is good enough to prevent parking congestions.
  5. Turn signals are reassuring because it seems like no one is paying attention.
  6. Having a drivers license makes certain things more uniform and less arbitrary.
  7. If people weren’t required to get their cars inspected the road would be a dangerous place.
  8. People feel accountable with tags on their cars, they are more likely to play by the rules and abide by their contracts.

I don’t feel people are clever enough and good enough to master all of these things without rules.
Programming:

Freedom………

  1. Rapid code generation and prototyping gets things up and running faster.
  2. Lambda functions make it possible to elegantly solve some otherwise difficult problems.
  3. If I know it is safe I should be able to do it …. period.
  4. I should be able to organize data and code any way I’d like, flexibility and true macros are a good thing.
  5. If I call a function it will see what I’m passing when it gets there - signature signaling is gratuitous.
  6. I don’t need formal class definitions….. I’m not sure what the point is.
  7. Compile time checking is pointless - run time checking does it all.
  8. Static typing enforces rules that would be enforced anyways.

I feel I am clever enough and good enough to master all of these things.

However,

Constraints…….

  1. So people create some truly terrifying prototype code.
  2. Some people find lambda functions difficult to grok.
  3. A lot of people will shoot themselves in the foot if handed a gun
  4. Programmers can create some truly obscure metalanguages, and given the flexibility create masterpieces in obfuscation
  5. When functions have explicit contracts they are more likely to at least try and follow them
  6. Formal class definitions make it easier for most people to understand what is going on.
  7. No matter how much you test you probably haven’t tested enough.
  8. Static typing makes people more aware of what the rules and contracts actually are.

How do I think I drive:

I’m streamlined, clever and carefree. I bend the rules when I can to get the most flexibility I can.

How do I really drive:

Sometimes those rules and regulations really save me. And I am extremely glad they are there for others. There are some idiots on the road.

SOLUTION:

Why won’t these idiots just get off the road (not going to happen).

If programmers aren’t up to the tricky stuff they should be coding (not going to happen).

REALITY:

Everyone obeys the rules but bends them when they can to get the flexibility they need.

Languages need to support multiple paradigms to truly be safe and useful.

del.icio.us Digg Reddit dzone Live

24 years of game programming: thrills, chills and spills: part 3 of 3

Filed under: Game Industry, Programming, General — by Steve Riley at 7:37 pm on Tuesday, May 15, 2007

If you haven’t read the first and second parts of this article, you’ll probably want to check them out here and here.

So I was working with a company that did 3D development for games! It was 1998 and things were still fresh and new in that area. The three API’s of mention were Glide, Direct 3D and OpenGL. I was working with some amazing artists and programmers and was glad to be learning more about the ins and outs of 3D development and tools. This was my first taste of a scene graph using Paradigm Entertainment’s Viskit. Scene Graphs are amazing things - and I was learning everything I could. Viskit was based on SGI’s Performer and like OpenGL - they had done something really, really right when crafting this API. Viskit sat effortlessly on top of OpenGL or Direct3D. I ended up working quite a bit on our Multigen loader to get all the bells and whistles supported. We used Max for our prerendered scenes but at this point Multi-Gen creator was huge in developing real-time models. It was a great app that made both programmers and artists feel immediately at home. Scene Graph nodes could be mapped very easily to Multi-Gen nodes. It was a perfect match.

As usual my dedication ran high. I was able to entice a truly stellar programmer from my time in NJ to live with me a significant portion of the month so he could code on the team as well. I worked with two artists that two this day I have to say are second to none. We created an amazingly beautiful world with truly stunning environmental effects. It was enthralling. In the end though small companies with only one project are fraught with peril. In 2000 Aeon closed it’s doors and my love for Viskit took me to my next job at console developer Paradigm Entertainment. They had built a version of Viskit that ran on all the next-gen consoles including the X-Box, Game Cube, PS/2 and even the dreamcast. It could still be baselined on the PC as well. This was my first time working with consoles - a fixed format machine, finally!
It was now 2000 and I found myself in Dallas, Texas, In typical game industry fashion several weeks after joining Paradigm they sold themselves to Infogrammes. However, they still were able to call their own shots for my time at the company. It was awesome having 3 or 4 teams working with 3D technology for multiple consoles. This technology was developed by a dedicated core technology group - I hadn’t been lucky enough to work with a company big enough to have this luxury before. They were the think tank of the company always getting all the heavy pressures but coming up with some truly stunning innovations. All of our artists were using Maya - which worked well, it supported a group hierarchy for scenes like Multi-Gen creator had previously.

Consoles are truly outstanding beasts to develop for. In all the years of working on the PC I had always dreamed of being able to develop for fixed platforms. You could know that once your testing was done it was good to go - no surprises based on machine configurations later in the pipeline. C++ was still the defining factor in game programming, although plenty of PS/2 code was written in Microcode as well. Common acceptance of scripting languages for high level prototyping was still a few years off. The best part about working at Paradigm was access to resources. When teams ramped up they could have 8-10 artists and almost as many coders. Things could really come together fast.
2003 found me back in Virginia where I started working for ITSpatial - a company that did 3D representations of cities a la Google Earth … before Google Earth had been around. In fairness there was Keyhole, but what ITSpatial offered was a different kind of thing all together. ITSpatial built a product that provided data integration and fusion in an environment that supported 2D and 3D mapping. This was perfect for command and control applications, situational awareness and emergency training. It was really one big serious game and had many of the elements of a full fledged game development effort and content production pipeline. The only thing difference was the price point of the product and the number of shipping units.

ITSpatial was strong and knew a lot about sales and business development. They were phenomenal sales people. I will always be amazed at how effortlessly they were able to get potential clients in the building, looking at demos - 3 or 4 times a week some weeks. They really were devoted to finding and wooing clients. This is a skill I’ve still got a long way to go on. I guess in some ways I’m still 100% a programmer at heart:)

In 2005 I broke away and this time started my own company Eureka 3D, Inc. I’m more of a hired gun/contractor with the luck to have access to a lot of other proven hired gun contractors. Eureka3D has worked on entertainment 3D, GIS and I’ve really boned up on my web programming skills in the last two years. Deep down inside I’m still wanting to get back “into the game” and sink my teeth into that big 2 year development project. Right now my pipeline is very full and I really am enjoying what I’m doing - so no complaints!

Here we are in 2007. What have I learned from the game and serious game industry after all these years? So much… I’ve worked with top notch programmers, others who couldn’t program their way out of a paper bag; I’ve worked with great artists, and a young up and coming project manager who was one of the sharpest guys I’ve ever met. I’ve worked with some truly genius biz-dev types that knew how to sell and pitch to clients. In 24 years every theory on project management for software/hardware/games has been debated, turned over and debated again much to my chagrin. I’ve seen every element of the business from pitching the contracts, building proof of concepts to final testing and delivery/deployment/distribution. I’ve learned a thing or two about politics and how important it is to avoid if at al possible. I’ve literally seen programmers in drop-down, drag out fights (visiting programmers from another company no less!). Religious wars over version control systems, graphics api’s, and taking on the latest new technology - been there, seen that.
The main thing I’ve learned however is that I thrive on the high-intensity, creative, ingenius environment that games and serious games involve. Finding a team that works well together, or a few truly brilliant individuals makes it all so worth while. I know I want to keep raising the bar and never lose the adventure. Because in the end it’s about the product, the team, and the experience. What an amazing 24 years it’s been!

del.icio.us Digg Reddit dzone Live

The Top 10 Attributes of a Great Programmer

Filed under: Programming, General — by Steve Riley at 1:25 am on Monday, February 5, 2007

With all the latest attention again on what does and doesn’t make a good programmer, I couldn’t help but put together my own top 10 list.

The Thinker

  1. Being a great problem solver.
  2. Being driven and lazy at the same time.
  3. Ability to understand other people’s code
  4. Having a passion for programming
  5. Loving learning for the sake of learning
  6. Being good at math
  7. Having good communications skills
  8. Strong debating skills
  9. Extreme optimism
  10. Extreme pessimism
    After putting together this list some aspects surprised me, and I was the one who put together the list. So let me explain each in detail.These attributes describe those I’ve found in pretty much every great programmer I’ve come across. There were a number that fell through the cracks and I’ll explain those later.

    1. Being a great problem solver - Hopefully everyone recognizes this one. Most good programming is all about being able to find solutions where others can’t see them. If you don’t have this skill the others matter far less.
    2. Being driven and lazy at the same time - This one surprises some people. Programmers question things and are often “too lazy” to take the long route. The will spend countless cycles trying to simplify the problem and simplify their task. That said they having a burning need to get the job done, they just want to do it as efficiently as possible.
    3. Ability to understand other people’s code - This point is essential but cuts some good programmers off from being great programmers. It doesn’t matter how well you can rewrite everything yourself - you need to be able to work with other people’s code on existing projects, lean on opensource in new projects, and learn good techniques from the code base that is already out there.
    4. Having a passion for programming - on some level you have to love programming for programming’s sake. I suppose to be truly great at anything you have to love it in most cases.
    5. Loving learning for the sake of learning - Programming is a moving target. Unless you love the art of edification you will sink fast. There are no laurels to rest on and no one cares what you did yesterday. Unless you are aware of the techniques on the horizon, you won’t be ready to embrace them when they become relevant.
    6. Being good at math - Different people will have different opinions here - but at the very least having a strong grip on pre-Calculus math. I’ve never seen a great programmer without a solid grasp of at the very least algebra and trig.
    7. Having good communications skills - This doesn’t mean that they can communicate with anyone and everyone. Specifically this means that they are able to clearly express their thoughts on their own terms. I’ve met plenty of great programmers who couldn’t communicate well with the world at large. However, given someone to talk to who understands the problem domain, they were all able to clearly state the problem and the solutions proposed.
    8. Strong debating skills - This follows the same logic as #7.
    9. Extreme optimism - Great programmers I have encountered have an insane certainty they can get the job done once they have chewed on it a bit.
    10. Extreme pessimism - Great programmers I have encountered have an insane insistence that when they lack the information needed to make a good judgment that they won’t be able to make one at all.

    Some of the things I instinctively wanted to put on the list but couldn’t say were true of at least 95% of great programmers include the following:

    1. Being extremely organized - Understanding when and where organization is important, yes. But anal attention to detail is something present in great programmers as often as it is people in other disciplines.
    2. Being good at managing other people and or programming projects - Somehow these skill sets are wonderfully synergistic when they sit side by side, but management and programming are often completely different disciplines.
    3. Being able to write good design documents - Same as #2. This skill may make some people better programmers and I am in favor of learning it. However, plenty of great programmers I have encountered couldn’t write a coherent design doc if their life depended on it. This will know doubt be debated by heavily by some.
    4. Having an ability to estimate time frames - Once again like #2. This is an acquired skill and a very useful one. However, I have seen absolutely zero correlation between great programmers and estimation skills.
    5. Prolific reading of tech books - I do this all the time myself, but many great programmers don’t. Let me be clear though - most programmers who aren’t all that hot could definitely benefit from bootstrapping their skills with some good reading.
    6. Ability to transfer their programming skills to any programming domain - Although many can, some great programmers can’t, or refuse to, grok other programming technologies. I like to think that this is a “refuse to” situation.
    7. Write code that is correct the first time around - Many great programmers commonly have syntactic issues flagged by compilers or at runtime interpretation. Some are zealots about the details the first time out, others are much more “extreme” in this area.
    8. Having other areas of great skills - some great programmers are good at only one thing - programming.
    9. Social or antisocial - Great programmers come in both forms.
    10. Are someone you’d want on you team - Unfortunately some of them just can’t work with others well.
del.icio.us Digg Reddit dzone Live

Wonderful Blogs, Evil Splogs and Now Entertaining Clogs….

Filed under: Web, Technology, General — by Steve Riley at 5:44 pm on Friday, January 26, 2007

Wonderful (web)blogs, evil sp(am)logs and now entertaining c(orporate)logs. We’ve come a long way since the .plan files that internet users made publilc to keep people up to date back in the day. Each popular thing evolves - this is the nature of technology and the net. And .plan files evolved with the power of html to the force of nature they are today.

Blogs, splogs and clogs. Technology has a way of coining cute terms and sticking to the theme. The latest in the series, the clog, a new breed of corporate advertising log. What’s a clog and how did they get here? Let’s look from the start.

When blogs came on the scene they changed the landscape over night it seemed. Who would have thought that such a simple concept could have such impact.? I remember years ago when online diary sites were a minor hit. And I do mean minor. It was inconceivable that in the future many, many people would be busy posting their ideas and feelings about topics on the web on daily basis. But that time came. Networks and communities sprung up overnight. Social networking sites like myspace and livejournal became 10 pound gorillas. At some point it seemed like everyone had a blog. It didn’t take for that crafty breed of annoying innovator , the spammer, to take notice.

Enter splogs. Spammers scraping sites to generate the appearance of personal, fresh content. They usually smell bad like all spam, but they proliferated all the same. Spammers were sprinkling bot dust on real blogs and even creating deep scraped blogs of their own. They did this of course to fool people into clicking on and buying products. Or to generate enough raw pages and links to get pagerank and get their affiliate sites high up in search engine rankings. Google and blogging software were finding themselves fully occupied to combat this. At around the point where everyone had a blog and was complaining about the prevalence of splogs….. clogs start to come on the scene.

These not so distant relatives of splogs and blogs are unique in their own right. Companies paying money to increase their search engine rank and presence on the web by creating high quality corporate blogs. Typically the polish of their content was higher than blogs, however, their motives were oddly similar to sploggers. They wanted to add real quality content and value to increase search engine placement, create more interest and generate exposure. Sometimes the lines get blurred. Everybody remembers the Blair Witch online hype from before that movie. This was the grandmother of cloglike thinking, studios themselves creating interest using efforts that appeared to be grassroots . UTube has been hit by the same kinds of things in their arena. Nobody likes deception. But oddly enough many of these high quality paid or encouraged clogs are starting to take hold. Many companies let their employees blog about their jobs online at work. The line is blurred in a good way.
Today there are quite a few companies clogging and adding real value to the web. They are entertaining and providing the information using the informal setup of the
blogs. In many cases they are visually appealing and contain great content. The web has grown up like all industries do. At first pioneers break new ground, prove their concept and gain notoriety. Then the corporate world catches on and takes the concept, polishes it and runs with it. This is certainly the case with clogs.

Think about Joel Spolsky or Matt Cutts… personable bloggers who mention their companies in each passing breath. But this is all good. Content is still king. And everyone has come to the table willing to share. Blogs, splogs and clogs….

The overriding question is where will it end and what will be next in this evolution?

del.icio.us Digg Reddit dzone Live

Next Page »

 

The Internet Marketing Experts at Adventual.com
is relafen a narcotic medlineplus drug information tretinoin topical aq myonlinemeds biz nasacort tramadol valtrex does constipation from effexor go away phentermine no prescription pharmacy cialis faq an alternative for hydrocodone morning after pill and wellbutrin keppra medication what are hydrocodones marijuana effects brain what percentage of student-athletes use steroids alcohol and herion candida diet lamisil inpatient alcohol rehabilitation baltimore maryland cialis viagra mastercard accepted nicotine dependence disorder ed alcohol drug alcohol abuse ministries orlando florida alcohol anhydrous ointment wool heart disease and chronic ibuprofen use kessler's alcohol manicuring marijuana swollen ankles heroin nicotine withdrawal syndrome abdel salam fluoxetine sertraline soma puzzle origami alcohol austin chemistry burning alcohol ohio alcohol related car accidents zithromax generic name ortho 1 35 s yasmin oral contraception and alzheimers does alcohol and drugs effect sperm elavil symptom withdrawal aricept and namenda seizures ordering prescription xanax online generic prozac color alcohol prevention facts european alcohol age aciphex flomax index php alcohol in ear throbbing banning alcohol at sporting events alcohol related car accidents statistics nicotine blood system alcohol stearyl wolfsheim heroin she said side effects from weaning off diovan urinary tract infection and ciprofloxacin alcohol by volume specific gravity order softtabs medicine cialis london effects of steroids church distance from alcohol washington state marijuana hairloss paxil drug test ranitidine side affects tylenol rapid release gels side effects drug interaction celebrex tramadol aricept mortality vascular dementia cns effects of soma alcohol amine ether ketone aldehyde weaning off of lexapro prednisone oral rats discount paroxetine generic paxil pcp pneumonia xray detailed instructions for synthesizing homemade mdma effects of accupril wellbutrin empty stomache effects of suddenly stopping prednisone can synthroid be taken with actonel discount prednisone pain substance p morphine ritalin options delivery hydrocodone online overnight pharmacy xanax vs valium anxiety lipitor pysician's insert wellbutrin augmentation erection ativan addiction symptoms premarin monogram discount adipex p is lexapro med for thyroid top alcohol fuel set up flexeril overdose treatment tylenol and zocor ibd cats steroids therapeutic dose premarin synthesis ijpc ciprofloxacin flexeril faq about celebrex brain damage alcohol abuse methods for making mdma tamoxifen discontinued polyvinyl alcohol formula what is in claritin simvastatin singulair triamterene hc marijuana affects on the brain lsd effects of forensic alcohol test branch alcohol calories comparison effects of drugs and alcohol alcohol abuse disorder buy imitrex spironolactone and polycystic hydrocodone interaction with flomax 5generic sildenafil depakote and laser hair removal generic cialis pills free sample toprol xl 25 sibutramine phentermine orlistat cholesterol born date signs alcohol phentermine direct no clubs discount cost 10 mg ambien itching from penicillin adipex loss pill weight american career college norco ca penicillin skin rash adipex legal in canada interaction with alcohol medication adderall laughing gas glucophage 500mg drug and alcohol rehab new jersey smoking premarin didrex online cod prednisones neem welcome to soma archive buy hydrocodone online legally methamphetamine t-shirts cialis tadalafil tablets ritalin fibromyalgia attention deficit disorder paroxetine 20mg tab bontril drug information bud light percentage of alcohol marijuana and hypothyroidism patent expire lexapro drinking too much alcohol dead poppy plants with highest opium yield marijuana and semen analysis generic for lorazepam flovent mdi phendimetrazine 180 count paroxetine hcl tab 20mg bupropion hydrochloride marketed as the antidepressant marijuana seeds carmela ortho rehab washington state alcohol party supplies penicillin dosage for horses crack alcohol serzone withdrawal alcohol muscle relaxant medrol pack dosing nizoral side affects azithromycin drug interaction list kenalog inj for treatment of psoriasis 200 proof alcohol 2007 marijuana legal in what state adipex cheap diet pill buy drug generic generic online viagra description of lsd experience alcohol recovery case manager job description celexa off weaning cocaine quality controls marijuana soup alcohol alcoholism effects ghb legal uses pcp lsd amphetamine methamphetamine cocaine buy nicotrol inhaler alcohol drug residential treatment for heart lanoxin alcohol and drug education programs rubbing alcohol poisoning contradictory outcomes on ketamine viagra on dogs flomax and ambien ibuprofen prescription strength detox drug lorcet 20 ecstasy prolactin orlando drug and alcohol facilities on line prilosec marijuana exchange benicar hct drug gtt eyes alphagan singulair legs astrazeneca nexium rebate alcohol brain bubbles byetta with alcohol alcohol chemical compound ritalin dexedrine good news claritin snoring alcohol customs travel ireland disfunci n metoprolol j 5post softtabs zenegra artificial sweeteners speed alcohol into blood dog dose xanax employment laws alcohol mass celebrex vaniqa flonase allegra attorney celecoxib effects side prescribe valium paroxetine sales seroxat metformin miss a dose lose prednisone sarcoidosis weight cost of pcp history zocor description dilantin in blood ravesupply mdma took buspar amitriptyline with xanax cocaine metabolism cytochrome p450 prednisone side xanax 5 muscle mass loe testosterone buy cheap soma online alcohol in morayshire keppra anti-seizure medication liquid serzone australia vicodins no prescription delivery glucophage zenocal albuterol pregnancy fever alternate tylenol ibuprofen augmentin sarcoidosis alcohol disciples of christ celebrex celecoxib south dakota family contract with alcohol issues isopropyl alcohol cas prices for methamphetamine breath analyser alcohol test cephalexin origin ambien buy online zyrtec wellbutrin macrobid nasacort imitrex bar xanax gerolsteiner water used on marijuana viagra perscription prednisone dose pack alcohol tobacco and firearms bureau 6 best price for propecia federal alcohol law detroit marijuana epidemic oxycontin addiction and side effects celebrex manufacturer boards chongqed hgh steroids low prices alcohol on air planes cheap evista pills one last call for alcohol lyrics marijuana and natural detox ibuprofen and drowsiness effects of cocaine usage christian alcohol treatment texas cocaine lyrics fioricet fioracet alcohol purchase in stores elavil cream gemfibrozil 60 mg actonel bad for teeth remeron organon micromedex metformin hillcrest meridia tramadol mexico online pharmacy celexa and zoloft interaction yerba mate have cocaine in it cheap phentermine without prescription phentermine cheapest zithromax crush most powerful alcohol soma drug detection alcohol facet point injections diazepam during pregnancy dot drug alcohol training ranitidine no prescription comparing tramadol to lortab olympics and steroids colorado alcohol rehabilitation indication for lipitor acetaminophen cod 3 tablettev clopidogrel credo timing 15 hrs drinking alcohol lower back pain effects of phenergan iv push deficiency symptom testosterone drug equivalents of lipitor skin spots alcohol buy vicodin now cocaine sellers interactions of neurotin hydrocodone attack heart lawsuit vioxx seroquel dangers by carisoprodol online diazepam ip los jovenes y el alcohol tobacco nicotine content variety alcohol uae dubai methamphetamines treatment prednisone psoriatic arthritis alcohol counseling st louis missouri help with withdrawal symptons from marijuana continuous use of ortho tricyclene low clinical pharmacology xanax generic viagra soft tab soma the strokes lyrics it's monday tylenol florida acetic acid isopropyl alcohol limiting reagent bupropion diet pills phentermine and heart lsd marijuana mix razadyne seroquel not take together prevacid antacid treating low labido with bupropion loratadine for hyprtension oxycodone pain gain weight zyrtec multiple myeloma methylprednisolone atsa alcohol 96 puro de cana buying generic viagra nicotine cigarettes dj youri fuck on cocaine lapacho and coumadin xenical non prescription valium joint pain zyprexa 2b anxiety depakote uses alcohol and common cold micro oily retin skin delivery guaranteed overnight soma alcohol dependence health psychological marijuana effects discount tamiflu can dogs take anipryl with cephalexin cost prilosec atomized alcohol concerta wellbutrin hydrocodone 10 650 phentermine viagra delivered overnight can i take lipitor with lunesta dur 8 elite ureteroscope ritalin recommended adult dosage alcohol bomb chlorine best way to grow marijuana indoors advair 25051 puff beginners guide outdor marijuana growing flexeril xanax urine ambien anaphalyxis interaction between prednisone and tramadol dxm xanax sertraline hcl info fexofenadine manufacturer opium body men buy advair from canada alcohol poisoning hand sanitizer and small baby with cocaine and marijuana heroin back in hollywood 25 mg norvasc discount purchase fluconazole pharmacy marijuana garden pictures los actos administrativos lipitor bilirubin free maine nicotine patch accepted cod tramadol alcohol health risks for men topical steroids for eczema eating marijuana effects buy viagra online a href ritalin and headache workplace alcohol history of cocaine baby clomid posted side suzs ranitidine warts difference between orlistat and allie online pharmacies for propecia finasteride r isomer of naproxen agent antifungal fluconazole deals on ecstasy alcohol effect on siezures medication online phentermine hydrocodine vicodin loratab sammy sosa steroids remeron usage abscess cipro norco aluminum floor jack has ritalin proven to be useful advair inhalers yellow speed amphetamines orange foods to increase male testosterone foetal alcohol genital abnormalities order tadalafil from u s phentermine online cheap diet pills court hearings on adderall alcohol assessments done in anoka county diovan glaucoma diy marijuana detox lorazepam diazepam half-life chart uk brand name for enalapril suicides related to oxycodone effexor depression anxiety research women richmond prempro lawsuit attorney generic soma carisoprodol alcohol ads on television hearing loss and oxycontin crystal methamphetamine hydrochloride recepie oxycontin death statistics from ativan withdrawal help metformin hc about high on medical marijuana school cheapest in uk viagra marijuana laws for calvert county maryland claritin coupon albuterol inhalation aerosol 17g dosage side effects of toprolxl and zocor soma watter cocaine naisal damage enalapril canine side effects seroquel syncope hypotension pcp lung scar tissue xalatan order agent alcohol based effectiveness hand washing b loss phentermine vitamin weight xisico b50 pcp alcohol s major effects on judgment safe alcohol limits valium and kids 1 onz of marijuana wedding premade punch with alcohol alcohol consuption in colleges in texas benefits alcohol arnold schwarzenegger smoking marijuana natural ecstasy generic versions of phentermine effects of alcohol article names of alcohol shots mcmahon medical marijuana canada marijuana shop 2444 levitra 10mg 3521 is fortical equivalent to miacalcin alcohol shop lisinopril 20mg photos otc amoxicillin herbal alternative viagra levitra herb prempro first prescribed prednisone canines calcium levels alcohol addiction resources tramadol tramadol hci online cheap pharmacy order phentermine without calling my doctor speakers on alcohol abuse risperdal and shivering xalatan medication robin williams alcohol father bob phendimetrazine lose weight loss diet pills avodart clomid diflucan dostinex glucophage c six am the heroin diaries minocycline acne vitamin c side effects metoprolol epinephrine 2028 20tablets yasmin ortho appendectomy alcohol effects in its life buspar compared to generics phentermine p over night delivery biohazard steroids buy cialis site generic drug for norvasc fioricet with codine what enhances the effects of adderall nicotine and its addicting ways 10mg 3.54 valium does cipro treat alpha-hemolytic strep curacao alcohol base isopropyl alcohol on face ultram purchase pepare tramadol for injection ciprofloxacin hydrochloride ophthalmic early history of cocaine heroin water pipes drug and alcohol counselor salary range phentermine while pregnant effects of alcohol on the kidneys medical marijuana san francisco general hospital ambien sliding doors autoignition temperature of butyl alcohol ecstasy baby drugs and facts about steroids hydrocodone mexico dui alcohol level ii classes picture zoloft compare prices for xenical take a look at trazodone antidepressant info miralax ativan ritalin lortab without prescription vicodin muscles in eye alcohol poisoning oxycodone serotonin syndrome merck lisinopril patient information zyprexa causing intolerance of alcohol ortho gardening book peter allegra esq nexium and rebate alcohol media player when the the opium war occur cheap price softtabs ecstasy effects on humans pcp sqq89 vicodin lortab online recommendations legal alcohol limit in michigan generic for neurontin contents in marijuana opium addict story valium pill identification false pcp readings caused by otc acid folic prenatal ecstasy deaths in canada cheapest phentermine official store adderall and alcohol interaction infomation on cocaine body effect of nicotine nicknames of steroids bone thugs ecstasy mp3 skelaxin 400mg legalize medical marijuana richardson presidential prescription marijuana pill marijuana vaporizers alcohol and drug treatment programs phentermine free shipping no prescription needed environmental hazards in cocaine didrex without prescription diuretics synthroid delivery florida online pharmacy phentermine elidel cancer warnings no prescription needed true phentermine tretinoin cream emollient .025 ativan for sedation for mri $50.00 phentermine different strains of marijuana pure indica lsd owlsley canadian paxil pharmacy buy offshore medications adderall phentermine prescription drug difference between hydrocodone and naproxen oklahoma drug and alcohol treatment psychological treatments for alcohol abuse estradiol dosage injection muscle testosterone xanax show up on drug tests nicknames for methamphetamine buy valium online uk alcohol abuse in alaska ritalin long term use paul cheney klonopin fibromyalgia oxycodone and acetaminophen harvesting outdoor marijuana pictures folic acid and conceiving twins ranitidine during pregnancy meridia 5 mg cocaine diarrhea side effects of lorcet pcp fungal prednisone thermoregulation cats and valium is marijuana an addictive substance going off effexor what nascar driver has viagra average cost of steroids history timeline of alcohol p450 enzymes tolerance alcohol viagra at a young age mixing prescription drug with alcohol xanax vs buspar alcohol consumption daily indication keflex pending ortho lawsuits oral ketamine alcohol christmas gift ideas bonds steroids photos coumadin vs warfarin wean off wellbutrin alcohol aldehydes ketones oxidation tojo ionamin loss weight information online information hemmingway alcohol texas revenge marijuana gov legal limits of alcohol folic acid 1000mcg tablet alcohol mint drink called mohana detrol oxycontin urinalysis results alcohol stil oxycontin deafness codeine cough promethazine syrup ecstasy warning signs marijuana matthew hashish massachusetts pregnancy using clomid fuel tank synthroid products otc vicodin detox health education marijuana lesson plan games afghanistan cultivation opium first agoraphobic nosebleed pcp torrent stamp out marijuana opium kathmandu ridalin mixed with alcohol alcohol response times zyban canada order anabolic steroids treating osteoporosis too much testosterone women is phentermine safe lorazepam adult dosage effexor xr panic disorder ultram and robaxin atorvastatin lipitor 134523038 safety data pregn overdose of zestril clinical psychologist evaluations for alcohol abuse marijuana detox clean green tea hashish produzione hydrocodone pill description cirrhosis alcohol diovan 160 25 hct wbr vioxx lawyer health care staffing adipex diet pill on line pharmacy vicodin dutch marijuana law skin test amoxycillin allergy coming down on cocaine attorney celebrex texas vioxx crack cocaine production phentermine used for gas alcohol 25mg morphine patches lamisil sore throat grow blueberry marijuana soma arts san francisco flonase panic attacks 5th of alcohol sideffects of cocaine tramadol er dosages vicodin no presciption no consultation fast facts about cocaine lisinopril identify tablet will phentermine cause positive results crack cocaine user profile ketamine clinical trials for depression medicine protonix adipex results b6 b12 and folic acid tylenol wikipedia tazorac benzoyl peroxide information of ortho evra soma club houston tx talking back to prozac closes thing to triphasil history of opium penicillin and bread mold websites for ambien ultravate cream diflucan outdated l tyrosine with wellbutrin auto dur 108 knox college galesburg marijuana kentucky statistics on methamphetamine use buy xanax with online consultation infant fetal alcohol wellbutrin and serotonin dogs using prednisone side effects of extra strength tylenol marijuana menu g 13 online pharmacy no prescription needed lasix what does propoxyphene do paul mccartney lsd ranitidine how long before it works albuterol ipratropium alcohol black out drug and alcohol abuse prevention safe injectable testosterone tylenol college scholarships prescription information vicodin yasmin rios shemale ortho tri cylcen lo spotting color buy consultation doctor hydrocodone no online 37 effects phentermine side drugs tobacco and alcohol no prescription needed for cheap adipex side effects from stopping adderall xr alcohol center christian treatment soma bright eyes show drug online prescription vicodin colesterol lsd types od steroids marijuana addiction progression marijuana not a drug types of rubbing alcohol zyban nicotine patch xanax and memory jagjit singh alcohol celexa for kids national clearing house alcohol and drug list of words for marijuana patanol eye alcohol treatment and california sibutramine urine drug tests singulair and dangers and pregnancy flomax bph buy vicodin no prescription doctor cod generic cetirizine zoloft discontinuing alcohol injections for treatment morton's neuroma blacks and testosterone ceftin drug information pill benicar fetal alcohol syndrome at birth passing alcohol urinalysis test yasmin headache tylenol simply sleep review clonazepam patient advice including side effects 300 mg wellbutrin with 20mg lexapro brains on cocaine sildenafil vs vardenafil furosemide without prescription overnight delivery glipizide how to administer tylenol 100 mg prednisone and wound healing low testosterone and immunity ritalin sr side effects atorvastatin cva treatment cialis generic tadalafil best price compare psilocybin therapy aromastat vs exercise propecia alcohol essay fetal syndrome 2005 cialis followup november post viagra fluconazole polymorphic esterification of alcohols clomid drug interaction codiene and hydrocodone drug interaction problems soma massage therapy ottawa online prescription renova tramadol zithromax depakote and lexapro sertraline mixed with fluoxetine anaprox naprosyn naproxen fentanol versus oxycodone cocaine hotline what is cetyl stearyl alcohol alabama vioxx lawyer hydrocodone overdose alcohol withdrawal phases sleepiness fosamax danger plavix reimbursed by medicare cost a ounce of cocaine 5mg finasteride alcohol and toxicology oxycodone used decay depakote tooth yasmin boland moon marijuana rolling tips cheap cialis find cleaning a marijuana glass pipe alcohol and substance abuse treatment cincinnati side effects of prednisone drug phenergan and pregnancy test addiction and wellbutrin miralax generic growing marijuana in wisconsin 15 mg valium preganacy and cocaine use robb celeb christina ricci prozac nation hypertension acetaminophen what does cephalexin capsol look like reasons not to use steroids buy generic fioricet quit marijuana tips uk cialis risperdal withdrawal symptom bupropion and hydroxycut heroin abuse recovery agencies co dovan and plendil mircette tablet cialis vardenafil alcohol drug abuse organization albuterol sulfate drug zoloft equivalent crimes drug alcohol alcohol addiction boards detox oxycontin medication cocaine engineer best morphine let's take a trip effects og marijuana alcohol law bartenders dartmouth symposium on drugs and alcohol celebrex and canker sores synthroid cytomel weight loss relapse and heroin and environment dms-iv alcohol dependence case sample alcohol treatment centers adolescents ohio positive steroids loratadine and black licorice weight gain advair singulair on line prescriptions cialis pills mike ditka levitra valium and vicodin addiction alcohol mare super weston clonazepam drug information medication taking amoxic clav with tylenol generic online zyrtec synthroid wellbutrin pravachol actos aricept india phentermine no prescription 2007 buy cheap pharmacy phentermine usa does tamoxifen cause liver cancer pregancy alcohol march for dimes alcohol 58 alcohol effects to the body prednisone and hair loss umaxppc yasmin amy hasan directions for taking viagra what kind of drug is cocaine penicillin pk picture of ativan tablet dr rehm alcohol on iv morphine to morphine sr conversion biaxin use in cats morphine generation jugend vintage crew burnout k dur dosage best price for lexapro meridia cost glyburide drug interactions vaniqa cost liquid morphine doseage dosages valium macrobid 100 mg rate of recovery for marijuana alcohol drink desert storm nicotine patchs success rate facts vs fiction on marijuana symptoms of paxil doxazosin mesylate synthroid and pain killers hydrocodone strenght alcohol and nerve damage official site of yasmin davidds buy online renova energy from lortab 12-session alcohol and drug program education touching cocaine urine can you drink alcohol on acyclovir negative effects of marijuana smoking baycol settlement secrets methamphetamine manufacture recent ecstasy deaths causes of alcohol different penicillin producing mushrooms alcohol absorption inhibitor heroin and circulatory problems heparin coumadin what makes anabolic steroids different contraindications of flexeril taking aciphex and always feeling hungry ortho innovations alcohol proof for various drinks oxazepam 600 mg ziac alcohol smoking kids esomeprazole drugs phenergan syrup codeine beer kegs alcohol content diazepam online usa pharmacy lysergic acid diethylamide actos plendil ranitidine long term impotence altace lorazepam pharmacology what is $80 of marijuana called cocaine and peripheral neuropathy drug interactions diazepam acetaminophen dog steroid affect of alcohol on a fetus omeprazole magnesium 100 n propoxyphene cialis singular interaction is cephalexin a canine antibiotic naproxen 500 mg side effects morphine er nicotine patch and pregnancy ovulatio using clomid alcohol handbook isopropyl costs of morphine maine marijuana boric acid buy cheap effects marijuana prevacid versus nexium imitrex vs generic brand preferred effects of androgel on levitra ritalin cocaine prescription drug to reduce alcohol cravings pregnant and tylenol pm prilosec dose for gerd seborrheic dermatitis and sprays containing alcohol azithromycin to treat gonnorhea naltrexone and ms marijuana legalization and the black market phentermine 40mg metrogel mole walgreens prescription for 100 mcg synthroid is ultracet a narcotic drug no alcohol good nights sleep synergism between alcohol and steroids tylenol televishon comercial heal my propecia side effects phentermine kosmix topic page when did cipro go generic asthma and ibuprofen sildenafil citrate and zocor oral testosterone zyban for sale drinking alcohol and nosebleeds side effects for xanax did cayce drink alcohol zyprexa hair loss wieght gain acetaminophen codeine 3