The Gorilla Logic Blog
Thoughts from the Gorillas

Derivation Nation

September 4th, 2007

In my last post, I promised to reveal how class diagrams can be your secret weapon in the war against imprecise requirements. How can this be, you wonder? Sure, class diagrams capture entities, attributes, and associations, but they’re completely incapable of expressing the hopes, fears, aspirations and unwarranted hostility of my end users. Surely we need all the subtlety and nuance of natural language to fully capture the essence of what we’re being required to build? Surely we need to capture requirements using the flowing prose of use cases?

As we’ve discussed, precision is certainly something to be aspired to in requirements specifications, and yet, the legal profession provides compelling testimony to the horrible things that happen to beautiful prose when we impose precision upon it. Let’s begin to consider some other things we can express clearly, unambiguously, and some might say beautifully, via everybody’s favorite UML diagram.

Suppose we’ve been asked to build an online storefront offering stolen military hardware at low-low prices. The company, Arms4Less, was founded by several retired mercenaries now holed up somewhere in Honduras. Our primary contact is this crusty old guy we know only as “Sarge”. The first thing he says the system needs to do is “store orders for stuff.”

“You know”, he says, “we sell stuff. Hand grenades, bazookas, napalm cannisters, that kinda thing. We’ll need the usual shopping cart deal, letting customers tell us how much of each product they want.” We sketch out the diagram below.

As you would expect, an Order consists of 1 or more (1..*) items, and each OrderItem specifies the quantity of some product being ordered. Each Product has a price. Now, hopefully you’re regarding this model and saying, “Yeah? So? Why am I wasting time reading this stupid guy’s blog when I could be learning Spring?” In a moment we’ll make this model a lot more interesting. The diamond, by the way, signifies a “composite” relationship between an Order and its items, which essentially means that if we delete an Order, all of its items will get deleted too. (You would of course know what the diamond means if you’d been paying attention instead of doing email in that UML course your boss sent you to.) If the other symbols being used here are mysterious to you, go hang out with Ambler and come back when you’re done.

A tremendously useful, but largely underused (Ambler’s overview doesn’t even mention them), facility of class diagrams is the specification of “derived” attributes. Derived attribute values are - uh - derived. That is, their values don’t need to be stored since they can be completely determined from other data values. For example, Sarge explains that we need to total up each order and make the customer’s got enough dough to cover it. “We do this for the customer’s own protection”, Sarge explains. “You don’t wanna know what’s gotta happen if the guy can’t pay us.” And indeed, we really don’t wanna know until a later iteration. So, we add 2 derived attributes to the model to deal with the order total.

We’ve added a total attribute to both the Order and the OrderItem entities. Note that each has a leading slash, which means “derived” in UML. The OrderLine total is, not surprisingly, derived by multiplying the quantity by the price of the associated product (quantity*product.price). The Order total is the sum of the totals of its items (sum(items.total)). We mentioned earlier that derived attributes don’t need to be stored, and indeed you can see how we can simply calculate these attributes’ values on the fly. Certainly, however, there are situations in which we store derived attributes if, for example, they’re too expensive to calculate dynamically. Such a decision however is purely an implementation choice. Logically, these attributes are derived.  This is all about what the system must do, not how it will do it. So let’s keep our functional requirements logical. As Sarge might say, “You don’t wanna get physical with me unless you’re good and ready, computer boy.”

Now, you’re probably still a little underwhelmed by all this. But as we’ll see in our next episode, we’ve only just scratched the surface of the expressive power of the friendly, little class diagram.

Stu Stern

Real programmers don’t eat diagrams.

August 31st, 2007

Yesterday I discussed how we developers routinely deal with imprecise requirements and while most of us find this to be annoying from time to time, overall we don’t consider this a Big Problem. Or perhaps many of us do recognize this as a Big Problem, but have resigned ourselves to its seeming intractability. In any event, we can all agree that if it were possible for us to unambiguously “encode” requirements precisely, and could do this economically, it would surely be better than the current, preferred practice of getting a “pretty good idea” of what some business guy needs, code it up, and then sit down with the guy to see what we got wrong, and come away with a “pretty gooder idea” than we had previously. And then repeating this process over and over again until we get it right or until it’s time to go live.

Most development projects begin with a fuzzy expression of requirements as articulated via some combination of text, pictures, and threatening emails by some end users, and end with a concrete expression of requirements as expressed in code and entreaties for forgiveness by programmers. As we discussed, there is currently no widely recognized middle ground between the fuzziness of warm, friendly natural language-based requirements specs, and cold, hard code. As a result, developers are left to interpret the fuzzy as their first step toward implementing a solution. Precision Requirements Modeling (PRM) is a set of techniques for transforming fuzzy requirements into a “code-ready” requirements specification. PRM allows requirements to be expressed with the precision of code, without getting bogged down in requirements details. Perhaps most tantalizingly, PRM specifications are temselves executable, which means we can let end users test drive a specification prior to developers becoming lost within the dense tangle of the implementation jungle, where they become increasingly isolated from civilization as they fashion primitive tools and frameworks, and engage in pitched warfare with competing tribes using .NET.

PRM begins with good-old-fashioned domain modeling. Virtually all OO developers engage in some level of domain modeling whether they realize it or not. Every time you specify a class that represents a business concept, you’re engaging in domain modeling. Even the staunchest of anti-modeling activists can often be caught in moments of weakness drawing UML-ish boxes and lines on a whiteboard. Anybody who has worked on anything but the most trivial of applications has come to recognize the usefulness of UML class diagrams or, at a minimum, entity relationship diagrams as a way of allowing members of a team to get a shared understanding of the major abstractions or data representations being used and how they relate to one another. Of course, you can always just fire up a debugger and trace through your buddy’s code, but most of us were prefer a less - uh - extreme approach to integrating the disparate pieces of an implentation.

Class diagrams and ERDs are some of the best ways of communicating among a team an application’s entities, their attributes, and their relationships to each other. In terms of attributes, most developers specify no more than names and types of what will be persisted. But as we shall soon see, class diagrams have the potential of communicating so much more if we would just let them. How well do you really know class diagrams? Sure you draw them occasionally. Sometimes you may even bring them to lunch with your colleagues. But if you would just get to really know them, you would see that they’re among your best friends.

I n our next installment, we’ll get better acquainted with some class diagrams and see how, with some minor extensions, they can be used to unambiguously specify large portions of any requirements specification, and bridge the gap between warm, fuzzy business people and cold, hard programmers.

Stu Stern

Just what we need — more lawyers.

August 30th, 2007

One of the things you gotta love about “agile” is the name. Is it ever bad to be “agile”? Is there a good alternative (other than synonyms) for “agility”? Here at Gorilla Logic, we’ve devised what we modestly consider a breakthrough approach to requirements definition. “Precision Requirements Modeling” is the best our marketing department has been able to come up with as the moniker for this new approach. Although mind-numbingly accurate in its characterization, the name lacks a certain zing. Perhaps “Naked Precision Requirements Modeling” would be better.

While all developers want to be rich, thin, agile, and left alone, the same cannot be said of their wanting to be “precise”. This is a curious thing when you consider that programming of course is nothing if not “precise”. Code specifies precisely what the system will do. For the time being at least, computers don’t have the ability to ponder a set of instructions and decide how best to carry them out. Programming code is literal, bereft of simile, metaphor, and clever double entendres. Functional requirements on the other hand are captured as natural language either because they’re being written by non-programmers, or because they need to be reviewed and approved by non-programmers. Natural language tends to be pretty imprecise. (That’s why we need programming languages.) Our industry has thus become accustomed to routinely working with imprecise requirements specifications.

Now some will argue that natural language can be quite precise. Aren’t legal contracts shining examples of precise, natural language? Perhaps the world needs more lawyers. On the other hand, legal contracts tend to be fairly unintelligible to non-lawyers, and although I can’t prove this, I will assert that most lawyers would make crummy programmers. Since non-lawyers are going to be writing the code, we probably need something other than legalese to communicate requirements.

Some will say, “aha”! This is precisely why striving for precision in requirements is a waste of time. “Those wacky business people can’t possibly know if they want something or not until they see it running on their own desktops anyway”. To a large extent this is of course true, but the number of cycles required to get things accepted by an end user will surely be reduced in direct proportion to how well we can understand the requirements prior to writing each round of code. Many theologians will say that although better requirements will reduce the cycles, they don’t necessarily reduce the overall effort, since we’re just substituting time spent requirements writing for time spent coding (and wouldn’t you rather be writing code right now?). In fact, given what we’ve discussed about the imprecise nature of natural language, aren’t we just better off capturing the requirements as code rather than trying to turn a requirements specification into a legal contract?

Perhaps. But this argument ignores the fact that when we code, we deal with far more than functional requirements. As much as 80% of code can be concerned with implementation details as opposed to business logic. (Actually, I just totally made up this statistic, but if you write code, I’m sure you’ll agree that a very large proportion of code is solely concerned with plumbing). So the problem is that when we run off and code up a set of loosely defined requirements, we spend a whole lot of time dealing with implementation details that along with the business logic will need to be redone if our interpretation of those requirements is somehow incorrect.

Ah, but isn’t this what “refactoring” is all about? The answer to that question is “no”. Refactoring is about cleaning up an implementation. It’s about avoiding over-engineering by just writing the damn code, and then restructuring that code when it becomes unwieldy, rather than building elaborate frameworks before we truly understand what our implementation requires. “Requirements refactoring” is a euphemism for getting things wrong. When we need to “refactor code” to reflect a requirements “clarification”, we are simply rewriting code that was written to do something nobody actually wanted.

If there were only some way to “code” requirements without having to deal with implementation details. Then, we could indeed use code as our medium for capturing precise requirements, without wasting a lot of time on unneeded implementation should those requirements prove inaccurate. Hmmm, if only there were some way to capture requirements as code without implementation details…. Oh, that’s right. There is a way. And coincidentally, it’s what we’ve been working on for the last five years here at GL.

Stu Stern

Searching for love in all the wrong use cases

August 29th, 2007

Having established (ie, forcefully asserted) that it is generally Bad to engage in ritualistic development practices, but Good to adhere to a particular practice when it’s well-suited to surmounting some challenge, let’s consider the first snarling beast that leaps out to menace most young, impressionable development projects before they’ve even secured funding — requirements definition.

Functional requirements are strange and mysterious things. Many programmers have never actually seen any, relying instead on rumor, innuendo or hearsay to guide their development objectives. For many, functional requirements are the only things keeping programming from being their dream vocation. Programming after all is, at its best, a beautifully artistic endeavor wherein we devise clever structures to manage the complexity of some problem, and transform chaos into order. Implementation “elegance” is regarded as one of the highest achievements we can attain as developers. As each new project begins, we think wistfully of the various forms of abstraction and all the intricate frameworks we have mastered over the years, and consider how, armed with the depth of our experience, this project will surely be different from our past ones. This time we’ll build the thing Right, methodically assembling a great edifice from a series of simple building blocks. Each will be as cohesive as the nucleus of an atom, but as loosely coupled from one another as the grains of sand along the seashore. You kick off your shoes, and wander along the beach, smelling the salt air and thinking about that time under the boardwalk — then, suddenly, a subject matter expert comes marching down the beach with several unruly business owners in tow, and all hell breaks loose.

Real-world requirements are seldom elegant. On the contrary, they tend to be maddeningly messy. For many applications, the hand-waving of some business stakeholder-guy can be sufficient for reaching an understanding of what needs to be built. But, alas, the majority of applications we build are far more “interesting” than these. Confronted by the terrifying unknown of some obscure workflow that has evolved over millions of years and countless mergers and acquisitions, many developers immediately fall back on their religious texts for guidance and comfort against the onrushing horror. They begin frantically writing user stories, drawing anatomically inaccurate stick figures, and in the dark of the night wondering why the gods of order and logic have forsaken them despite their best attempts to follow the good and righteous path documented and indexed in their most venerated religous text (second edition, totally updated with a new preface by the author).

Why must it be so? Why do business requirements, which on the surface seem so simple compared to the complexity of the software platforms we, as accomplished software developers, whip into submission almost every day, so often defy our best efforts to wrestle them to the ground though we pelt them with CRC cards and lock them in use cases? Is there no way to reduce the arbitrary tangle of business rules to some elegant expression of the problem that can return us to our idyllic afternoon at the seaside?

Grab a towel and some sunscreen and allow me to introduce you to Precision Requirements Modeling.

Stu Stern

Too Much Religion

August 28th, 2007

Programmers are a religious sort, unquestioningly engaging in ritualistic practices pronounced as “good” by the industry’s high priests, and likewise shunning those practices branded as blasphemous. Everyone knows for example that mixing business logic with user interface code will damn your soul to Hell for all of eternity. Likewise, engaging in waterfall development leads to nowhere but poverty and pestilence. And each time you use dependency injection, an angel gets his wings.

The religious tenets of our industry of course have mostly arisen from hard-learned lessons about what seems to generally work and what seems generally not to. Still, it is clearly the case that there is no single path to project nirvana. Every development initiative grapples with a unique variety of technical, political, and sociological challenges. Some projects even succeed. It is of course natural that people examine the practices used by the really successful ones, and strive to emulate them to maximize their own chances for salvation.

Successful software development, alas, cannot be achieved by blindly following the prescriptions laid down in some sacred textbook or blog posting. The sacred texts do indeed provide valuable techniques discovered only after the spilling of vast amounts of blood by our ancestors who came down out of their mainframes to spread out across the network, converting green screens to rich clients, and procedures to objects. So, let us embrace the tools and techniques, but let us also recognize that the reason software projects fail is that there is no “Way” that one can simply follow to guarantee success.

Software development projects present us with a series of challenges. Each of those challenges can generally be addressed with some established set of tools and techniques. When we complete a successful project we are typically tempted to look back on the steps we took along the way and announce to our colleagues, “Ah, yes, truly we have found The Way. Let The Way be written down so that it be made repeatably so, and we can look forward to nothing but happy days for ourselves, our managers, and our manager’s managers.” And yet we then see others try to follow The Way, only to find misery, chaos, and even death. Okay, maybe not death.

So are we condemned then to roll the dice each time we undertake a new development initiative? I don’t think so. But the solution is not religion. The solution is in learning a few highly useful techniques, but rather than applying them ritualistically, we should instead learn to assess the particular challenges presented at a particular juncture of a particular project, and to select among and adapt the various techniques to the challenge at hand.

The Way does not exist. This is The Only Way.

Stu Stern


about tramadol hci
actos phentermine online pharmacy
adipex phentermine
aetna health care phentermine diet pill
baclofen ultram
best soma online
bipolar xanax long term common
brand soma watson
buspar xanax
buy wholesale xanax bars
buy carisoprodol diazepam online soma
buy carisoprodol soma
buy cheap fioricet
buy cheap generic zyban
buy cheap soma
buy cheap tramadol
buy cheap tramadol hydrochloride ultram
buy clomid
buy clomid cheap
buy clomid online
buy eon phentermine overnight
buy fioricet codeine
buy fioricet online
buy fischer soma f9000 boots
buy link onlinewbst soma
buy liquid ephedra
buy meridia online
buy paxil cr online
buy phentermine
buy phentermine direct
buy phentermine no doctor consultation
buy phentermine online phentremine
buy phentermine online american express payment
buy phentermine online ritalin order
buy phentermine ship to mo
buy phentermine using mastercard
buy phentermine viagra
buy phentermine with a master card
buy phentermine with discover
buy phentermine with fast shipping
buy products containing ephedra
buy rx phentermine online
buy softtabs now online
buy soma
buy soma 1
buy soma cheap inurl
buy soma cheap overseas
buy soma mattress
buy tramadol
buy tramadol online
buy ultram without a prescription
buy vicodin on line
buy xanax
buy xanax 2 mg without prescription
buy xanax online without prescription
buy xanax overnight alprazolzm ups fedex
buy xanax us pharmacie doctors
buy xanax usa pharmacy overnight
buy xanax usa pharmacy overnight delivery
buy xanax with no prescription
buy xanax without a prescription or membership
buy xenical orlistat zenical zenacal propecia finasteride
by soma watson
can ultram raise blood pressure
canada ephedra die pills
canadian soma
carisoprodol and soma at huge savings
carisoprodol carisoprodol site soma pochta ru soma
carisoprodol linkdomain soma pochta ru
carisoprodol online soma
carisoprodol soma 0
carisoprodol soma 120ct 9900 free shipping find more
carisoprodol soma pochta ru
carisoprodol soma watson
cat health phentermine diet pill
cheap discount tramadol 120ct
cheap online pharmacy tramadol
cheap pharmacy refill tramadol ultram
cheap soma online
cheap ultram online today discount
cheap xanax
cheapest online soma
cheapest soma online
cheapest ultram
cialis silagra penegra generic viagra cum with us com
cipro side effects in women
cipro with orlistat for urethritis
clonazepam vs xanax
cod online order phentermine carisoprodol
cod prescription soma
consultation online soma
cr discount paxil
depression teen diet phentermine pill
description generic soma
diabetic diet protein phentermine pill
diet drug meridia
diet free phentermine pill shipping
diet meridia pill prescription prior without htm
diet pill called phentermine
difference between prozax and xanax
discount fioricet
discount meridia
discount meridia rx
discount paxil cr
discount ultram
discount ultram rx
doctors who prescribe xanax
drug classification tramadol
drug information tramadol htm
drug interaction tramadol flexeral
drug interactions between percocet and xanax
drug online store ultram
drug soma testing
drug use tramadol
ducane meridia 30537401
dwi soma
easy november choose valium xanax
effexor
effexor and side effects
effexor and tramadol reaction
effexor withdrawal using prozac
ephedra
ephedra ban
ephedrine for allergies
ephedrine hcl oklahoma
ephedrine hcl side effects
ephedrine online
ephedrine weight loss supplement
fast reliable ultram online medication pharmacies
fedex no prescription xanax
fibromyalgia ultram ultracet
find get paxil generic paroxetine for only 149
fioricet cod order
fioricet info soma carisoprodol
fioricet online
fioricet side effects
fioricet us pharmacy
fioricet without prescription si
generic 2mg xanax pictures
generic fioricet
generic for paxil cr
generic kamagra viagra
generic paxil
generic paxil india
generic soma
generic tramadol
generic vicodin
generic xanax
get online soma
how is generic paxil
how to get xanax from doctor
how to make xanax
how to quit xanax
huxley soma
hydrocodone
hydrocodone and xanax
hydrocodone and xanax mixed together
hydrocodone online order
i want to buy phentermine
identify soma mushroom
imitrex canada online pharmacy phentermine boards of
indian pharmacy tramadol
information about cipro
information on soma
injecting xanax
la makita soma
levitra lipitor online pharmacy pharmacy zoloft phentermine
link domain buy phentermine online 1
loss meridia pill weight
low carb dieting diet phentermine pill
low price ultram
lowest price on xanax
mail order soma
medical transcription degree online
medicare supplement phentermine diet pill
medication ultram faq
meridia and zoloft
meridia diet pills
meridia online
meridia online pharmacy
mexico online buy ultram
mixed phentermine prozac
multiple prescriptions of xanax
myth soma
no prescription needed xanax
no prescription phentermine 37.5
no prescription xanax fedex
no prescription xanax fedex ups
no prescrition phentermine diet pills
online ordering ultram
online pharmacy for valium and soma
online phentermine xenical
online tramadol pharmacy
online xanax fedex
online xanax sales
order cheap pharmacy tramadol
order fioricet no prescription
order phentermine diet pill
order qoclick ultram
order soma
order xanax no perscription
order xanax now visa
order xanax online
order xanax paying cod
overnight tramadol
paroxetine hydrochloride tramadol
patient reviews meridia
paxil losing weight
paxil with ultram
paxil with ultram
pet medicine tramadol 50mg
phentermine
phentermine adipex no rx
phentermine and zoloft interaction
phentermine and zoloft together
phentermine b2b
phentermine diet pills
phentermine duromine online no script
phentermine forum top
phentermine no prescription
phentermine no prescription guarantee overnight
phentermine no prescriptions
phentermine online
phentermine online pharmacy
phentermine online script
phentermine princess street
phentermine sales no prescription
phentermine shipped to florida
phentermine without a prescription
phentermine without prescription
phentermine zoloft
picture a xanax pill
pictures of xanax valium
post xanax anxiety
post xanax anxiety subject
post xanax anxiety subject xannies benzo lover
prescription drug soma
prozac and ultram interaction
purchase phentermine
purchase phentermine no prescription
purchase soma online
purchase tramadol
purchase xanax
ranitidine cheap tramadol
sd soma
sent soma meds cod
side effects from soma
side effects soma
side effects to snorting vicodin
soltan soma
soma 350mg
soma 490
soma and indications
soma carisoprodol
soma carisoprodol dilaudid
soma carisoprodol info
soma cheap
soma cod
soma discount code
soma discount coupon
soma drug toxicity
soma enterprises
soma erowid
soma fm indie pop
soma from canada for cheap
soma ghoshal
soma holiday
soma home
soma intamates
soma life
soma lounge
soma model
soma net
soma online carisoprodol
soma online com
soma online no prescripti
soma online pharmacy
soma order
soma pharmacy
soma philadelphia
soma prescriptions online
soma puzzles
soma residence
soma rush track frame
soma sales
soma saliva life fluid
soma sexy
soma sonic
soma symptoms
soma toronto chocolate
soma training
soma training andrew
soma tv
soma umaxppc qoclick
soma watson
soma withdrawal
soma withdrawel
soma without a prescription
soma yoga newport
suicide by xanax overdose
switching from paxil to effexor
switching paxil to effexor
symptoms of xanax addiction withdrawl
teens abusing xanax
temp soma
top notch rx online perscription ultram
tramadol
tramadol urine drug screen
tramadol 50mg
tramadol 50mg free presciption
tramadol 50mg free presciption usa
tramadol 50mg imitrex sumatriptan butalbital apap wcaffeine
tramadol cod overnight
tramadol drug
tramadol drug addiction
tramadol drug utilization review
tramadol hci
tramadol hydrochloride
tramadol interrupting online
tramadol no prescription
tramadol online
tramadol overnight pharmacy
tramadol overseas best price
tramadol roomed online
tramadol sneezing online
tramadol ultram
tramadol ultram usarx
tramadol very cheap
tramadol without prescription sit
tramdol tramadol 180 pills
type of drug is soma
ultram and mobic
ultram and prozac interaction
ultram chat
ultram er doseuge
ultram for back pain side effect migraine
ultram medication
ultram online
ultram online order
ultram tramadol cod
ultram tramadol uses
uninterested side effects of xanax
us based pharmacy overnight xanax
valium vs xanax
valium vs xanax vs ativan
vicodin valium oxycodone online
watson and soma
weight loss phentermine
what does generic soma look like
what drug schedule is xanax
what is hte difference between hydrocodone and codeine
what is soma product
what is the difference between valium and xanax
what is the drug ultram
what is the side effects of xanax
what is xanax used to treat in medicine
what schedule is fioricet
where can i purchase phentermine and have it cod?
where to buy generic viagra cheap
where to buy mexican soma
work at home medical transcription
www soma online
xanax
xanax cymbalta
xanax 5mg
xanax addiction
xanax and blood pressure
xanax and depression
xanax and drug test
xanax and wellbutrin
xanax buy online
xanax detox diet phentermine pill
xanax detox diet phentermine pill
xanax generic description
xanax generic pdr
xanax high blood pressure
xanax no prescription feded delivery
xanax no prescription fedex ups
xanax no prescrpyion fedex
xanax online australia
xanax online rss feed
xanax online ups delivery
xanax overseas
xanax pacastan
xanax pharmaharry
xanax prescribed for
xanax price
xanax valium
xanax vs xanax xr
xanax without a prescription
xanax xr generic versions
xenadrine and phentermine
zoloft and xanax
viagra
buy viagra
generic viagra
buy viagra online
cheap viagra
free viagra
viagra prescription
viagra online stores
viagra online
viagra side effects
viagra for women
order viagra
herbal viagra
viagra for sale
discount viagra
viagra sale
viagra uk
natural viagra
viagra without prescription
buy cheap viagra
female viagra
cheapest viagra prices
buy generic viagra
cheap generic viagra
free viagra sample
viagra canada
try viagra for free
viagra pills
side effects of viagra
order viagra online
viagra 6 free samples
viagra alternative
viagra on line
cialis vs viagra
purchase viagra online
can viagra causes legs to ache
what is generic viagra
buying viagra online
buy viagra meds online
viagra no prescription
buy viagra online 35008
viagra soft tabs
viagra dosage
low cost viagra
buy viagra cheap
viagra uterine thickness
viagra alternatives
viagra vs cialis
viagra samples
online viagra
viagra over the counter
viagra from india
viagra lawyers
buy viagra now
viagra stories
buy viagra on line
viagra attorneys
viagra mexico
viagra free trial
canadian viagra
viagra prices
buy viagra australia
viagra covered by insurance
viagra substitute
splitting viagra
viagra patent
free sample prescription for viagra
viagra oral jelly
viagra reviews
viagra jokes
womens viagra
viagra pharmacy
viagra 100mg
cialis levia and viagra
legal viagra
fda on viagra
over the counter viagra
viagra pill
viagra generic
generic name of viagra
viagra overnight
buying viagra
cheap herbal viagra
cheapest viagra
viagra blood pressure
viagra cheap
viagra sample
viagra overdose
prescription for viagra
effects of viagra on women
generic viagra india
pfizer viagra
mail order viagra
viagra buy
viagra and cialis
u 3312 viagra cialis
cialis viagra
what does viagra do to females
ladies viagra
buy online viagra
buy viagra per pill
free sites computer search viagra find
on viagra
viagra women
online viagra store
cuddle chemical viagra boosts performance
viagra patent pfizer
viagra boosts chemical cuddle performance
viagra facts
viagra from usa
bad side effects of viagra
buy viagra order viagra
free viagra samples
viagra online cheap
viagra fuerteventura market
free sample viagra
no prescription viagra
best price for generic viagra
viagra and alcohol
viagra free pills
what is viagra
viagra price
viagra cialis
order 50mg viagra
viagra side affects
viagra potenzmittel
impotence viagra
can women take viagra
viagra cialis levitra
buy cheap viagra online uk
viagra experiences
viagra results
viagra low cost
order cheap viagra fas
viagra versus cialis
non prescription viagra
free trial of viagra
purchase viagra
viagra effekter biverkningar
herbal viagra australia
viagra generic brand
buy viagra ups
low cost viagra online
viagra 50 mg
viagra testosterone
recreational viagra use
viagra viagra
viagra times
where to buy viagra
buy viagra onli
generic viagra mexico
viagra commercial
viagra boosts chemical cuddle
viagra attorney ohio
gernic viagra
buy viagra pill
uk viagra sales
viagra online uk
mexico pharmacy generic viagra
herbal v viagra study
viagra and discovery
drinking and viagra
songs about viagra
viagra natural
viagra effects on women
viagra fuerteventura
generic viagra overnight
viagra forum
viagra sverige
death by viagra
cheapest viagra in uk
mexican viagra
viagra sales
uprima cialis viagra
viagra faq
discounted viagra
buy viagra online australia
generic viagra pill
buy viagra uk
side effects from viagra
viagra no prior prescription
viagra cartoon
viagra lawyer columbus
viagra blindness
buy viagra online inu
viagra effects
viagra as ergogenic aid
find viagra free computer sites
cost of viagra
viagra info
best natural viagra
women viagra
guaranteed cheapest viagra
viagra sex
get viagra
viagra lawyer ohio
viagra attorney columbus
viagra jelly
buy viagra online 35008 buy
viagra free sites computer find
free samples of viagra
cialis super viagra
canada viagra
buy viagra australian
2007 viagra hmo
effects of viagra
is there a female viagra
viagra substitutes
dangers of viagra
cheap viagra online
viagra or cealis
natural alternative to viagra
bought viagra fuerteventura
pharmacy viagra
videos viagra
find sites computer shop viagra free
acheter du viagra
cialis v s viagra
viagra sales uk
buy sublingual viagra online
viagra free sample
fake viagra
viagra for woman
does viagra work
order discount viagra
viagra st
viagra for cheap
cialis new viagra
best herbal viagra
what does viagra do
viagra next day delivery
buy viagra without prescription
viagra use
viagra litigation
free viagra online
india viagra
buy australian viagra
free viagra samples before buying
discount viagra pills
t 84 viagra
viagra warning
viagra instructions
viagra from canada
viagra free sites computer find search
viagra find sites computer search
sublingual viagra
impotence and viagra
viagra max complaints
vicodin viagra
viagra beneficial side effects
viagra and nitrous oxide
viagra testimonials
apcalis levitra viagra
viagra for men
find viagra free sites computer
cialis versus viagra
discount viagra online
free viagra without prescription
generic viagra overnight delivery
viagra cialis generica
find viagra free sites edinburgh
find viagra free sites
viagra tolerance
generic viagra online
viagra discounts
viagra online no rx comparison
getting viagra in the philippines
money order viagra
viagra australia
viagra find free computer sites pages
viagra price strategy
viagra discount
can viagra cause restless leg syndrome
women and viagra
find sites computer shop viagra search
buy viagra in canada
rate generic viagra
free viagra canadian pharmacy
viagra retail discount
viagra online overnight delivery
soft viagra
viagra online no rx
dog ate viagra tablet any danger
generic viagra cheap
compare viagra
viagra suppositories ivf
viagra vs levitra
qry viagra
buy viagra in uk
discount generic viagra
viagra dosing
viagra illegal phillipines
viagra bon marche
viagra free samples
viagra 50mg
generisch viagra
buy discount viagra online
detumescence priapism viagra
q viagra meta
harm of expired viagra
viagra news edinburgh comment moo
viagra ad
viagra experience
viagra sideffects
viagra type drugs
viagra works
viagra online shop in uk
viagra paypal
viagra pay with paypal
buying viagra online uk
rapid tabs viagra
is viagra from india safe
cheapest price for viagra
online ed drugs viagra samples package
viagra shelf life
get viagra drug online
diabetes and viagra
viagra overnight delivery
viagra song
viagra sex domination
female viagra cream
viagra purchase online
what is better viagra or levitra
non presciption viagra replacements
adverse side effects of viagra
viagra logo
discount priced viagra
cheap viagra nz
womens viagra
women does viagra work
viagra ingredients
does viagra really work
viagra uk 32
is viagra safe for women
indian viagra
viagra free sites computer find online
mixing vicodin viagra
cialis or viagra
zenerx natural viagra
viagra effect women
edinburgh uk news viagra site search
canadian generic viagra
prescription free viagra
viagra buy online
viagra herbal substitute
pleasure viagra
where to buy viagra on line
viagra dosage recomendation
buy viagra by pill
free sample of viagra
women taking viagra
viagra purchase
where can i get free viagra
arlene farmer viagra
q viagra search
oyster viagra
ge n eric viagra
viagra federal express
viagra sildenafil citrate information
viagra ads funny
viagra levitra cialis pharmacist perscription drugs
counterfeit viagra
search viagra free sites find computer
mode demploi viagra
discount viagra in the usa
viagra pics
lialda viagra
wild horses viva viagra
viagra equivalent
viagra directions
viagra joke
natural viagra substitutes
viagra generico impotencia
garlic better than viagra
query viagra
effects of viagra mixed with cocaine
buy cheap viagra online
viagra does not work
viagra from canada legitimate
ending viagra use
counterfeit viagra abu dhabi
where to buy viagra online
viagra manufacturer
viagra side effects dangers
viagra users discussion
generic price viagra
buy taladafil viagra
viagra cialis delivery
viagra recreational
buy viagra in bangkok
generic viagra soft tab fast
viagra online no prescription
viagra covered california hmo
viagra forums
viagra 50mg sverige
viagra boosts post cuddle chemical
teenney transplant and viagra
lowest prices viagra
viagra picture funny
viagra for pulmonary hypertension
colleagues viagra
search viagra pages computer find
viagra boots
what to know about viagra jelly
cheap viagra overnight
song viagra in the water
viagra for doggies
viagra free sites computer edinburgh find
q viagra kgs 0 kls 0
viagra cheap no prescription
find search viagra edinburgh free
find viagra free sites edinburgh computer
viagra next day shipment
viagra free trials
free sample viagra vs cialis
online viagra prescriptions
dosage viagra
pn 1 viagra
mail order viagra in uk
viagra information
viagra mail order uk
viagra tutorial
viagra sildenafil citrate
compare cialis and viagra
woman taking viagra
viagra supplement
compare cialis viagra levitra
best price for viagra
niacin works like viagra
from generic india viagra
viagra ads
phentermine viagra
cheapest generic viagra
free samples viagra
newsletter viagra
ordering viagra
cheap generic viagra no script
viagra generique
health net viagra non-formulary cost
viagra on line uk
cialis and viagra together
order pfizer viagra with mastercard
atenolol viagra
buy viagra online without prescription
womans viagra
compare cilalis and viagra
herbal viagra uk
viagra gel
free herbal viagra samples
disp no 19105 viagra
viagra and women
viagra on-line
viagra coverage california
viagra news edinburgh comment search
viagra etc
otc viagra
cialis viagra combo
viagra use of
viagra product strategy
affects of viagra
viagra eyes
viagra and cocaine
viagra best prices
generic viagra canada
viagra cost
mail order for viagra tablets
viagra mail order
viagra edinburgh find search free
generic sample viagra
find viagra free sites search
viagra comparison prices online
viagra jet lag
negative side affects of viagra
habituate viagra
viagra cartoons
semen turns yellow viagra
find viagra free sites computer edinburgh
viagra free sites find computer
cialis viagra sampler
c-ring viagra
next dat delivery generic viagra
gay viagra stories
viagra pay by e-check
viagra price comparison
take cialis and viagra together
overnight viagra
free sample pack of viagra
q viagra
viagra penis size
viagra free sites computer edinburgh
herbal viagra replacements
viagra ejaculation
multiple acts viagra
free viagra sample viagra sample
salis vs viagra
find viagra free sites edinburgh search
q viagra btng search meta
viagra without a prescription
health net viagra
mexico viagra
can i take viagra
edinburgh uk viagra news comment moo
viagra oral sex