software engineering

Archived Posts from this Category

Ads Factory “GoogleX, GoogleY” means (lat, long) not (horizontal, vertical)

Posted by Jim DeLaHunt on 30 Jun 2011 | Tagged as: CMS, Joomla, robobait, software engineering, web technology

I want to pass along a tip about confusing field names used in the Ads Factory component for Joomla for geographic data.  I encountered this while customising this component for a client. At first I thought it was a bug, but now I think it’s just an odd naming convention.

Ads Factory, by Romanian developers The Factory,  is a commercial component for Joomla 1.5 which lets you add classified ads to your Joomla site. (My client had me working with version 1.x on Joomla 1.5, but I see there is also a version 2.1 of Ads Factory which is Joomla 1.6 native.) There are quite a few places where Ads Factory includes geographic information: each user record can record a latitude and longitude for that user; each ad can record a latitude and longitude for the advertised merchandise; and there is way to make a “radius search”, i.e. find all ads within a given distance of a user-specified location.

These latitude and longitude values are stored in database fields with name suffixes “X” and “Y”. The user’s latitude and longitude are stored in fields “GoogleX” and “GoogleY” of the Ads Factory user table. Similarly, but not completely consistently, the ad’s latitude and longitude are stored in fields “MapX” and “MapY” of the Ads Factory ads table. The confusion comes in understanding which field stores the latitude, and which stores the longitude.

Latitude is, of course, the signed number of degrees north of the equator of a point on the earth’s surface. It ranges from +90.0 (the North Pole) to 0.0 (the Equator) to -90.0 (the South Pole). Thus, it’s a vertical coordinate. Longitude is the signed number of degrees east of the 0° meridian (roughly Greenwich, England). It ranges from +180.0 to -180.0. My part of North America is 122-123° west of Greenwich, so we have longitudes of -123.0 to -122.0 or so. It’s a horizontal coordinate. This is a well-established convention in many mapping standards.

Tidy Cartesian mathematicians like me use the convention of (X,Y) coordinates, where X is the horizontal coordinate and Y is the vertical coordinate. This is a well-established convention in geometry and graphics (though there are some exceptions).

My first interpretation of Ads Factory field names like  “GoogleX” and “GoogleY” was to interpret them according to the Cartesian convention: X is horizontal, and so stores longitude, while Y is vertical, and so stores latitude. Thus (MapX, MapY) would be (longitude, latitude), the opposite of what one expects from mapping. Odd. I was surprised to find some parts of the code storing latitude in X (the horizontal coordinate!) and longitude in Y (the vertical!), which was surely a bug. I was horrified when it appeared that every part of this code had the same bug!

Then I understood the convention. Ads Factory’s developer appear to have used the (X, Y) convention to indicate just the order of the coordinates, but not their Cartesian meaning.  (MapX, MapY) means (latitude, longitude), as is conventional in mapping.  X is the vertical coordinate, Y is the horizontal coordinate, in the Ads Factory context. If you remember that X means “first”, not horizontal, and Y means “second”, not vertical, the Ads Factory field names are self-consistent, and the code uses them correctly.

I haven’t seen any Ads Factory documentation which explains this, so I hope this note will help some of you Ads Factory enhancers who are using these fields.

Postscript: what did my client ask me to do with Ads Factory for their site?  Modify the radius search to search around the user’s latitude and longitude, instead of a location the user enters. Also, to sort the keyword and category search results by distance from the user. Quite straightforward to do, though it requires customisations to the Ads Factory code that have to be re-done everytime one upgrades the Ads Factory component.

How to resolve EasyEclipse error ‘Eclipse… requires plug-in “system.bundle”‘

Posted by Jim DeLaHunt on 31 Mar 2011 | Tagged as: robobait, software engineering, web technology

I use the EasyEclipse distribution of Eclipse, the free (libre) software development environment. I just figured out how to fix an obscure error message:

Eclipse Web tools editors (2.0.1) requires plug-in "system.bundle"
Eclipse Data Tools (1.5.1) requires plug-in "system.bundle"

When I would start up EasyEclipse (version 1.3.1 for Mac OS X, with Python, C++, Java, PHP and more support added), it would tell me that I had some outdated components, and offer to update them for me.  But when I opened the menu item Help… Software Updates… Manage configuration, I would get the ominous error alert:

“The current configuration contains errors and this operation can have unpredictable results. Do you want to continue? [Cancel] [OK]”.

I wasn’t able to  find documentation about this problem specifically. (My purpose in writing this is to help others benefit from what I learned.)

Continue Reading »

Choosing between UTF-8 and UTF-16: which has the better bytes-per-character ratio?

Posted by Jim DeLaHunt on 31 Dec 2010 | Tagged as: Unicode, i18n, language, software engineering

Software engineers sometimes are called on to specify which encoding a text file format should use.  These days, the top contenders for encoding are UTF-8 and UTF-16, both based on the Unicode Standard. One factor (amongst several, and perhaps not the most compelling) in choosing between them is storage efficiency: the number of bytes per character, or amount of storage per unit of text. If a given text takes a kilobyte of storage in UTF-8 and twice that in UTF-16, that’s a difference, which may be meaningful.

I recently looked for quantitative data about space efficiency of UTF-8 and UTF-16, and couldn’t find very much. Engineering discussions about storage efficiency are better informed by quantitative data than by opinion and supposition. I want to give one morsel of quantitative data more visibility, and clarify this issue. Continue Reading »

11 Django gotchas

Posted by Jim DeLaHunt on 31 Aug 2010 | Tagged as: Python, Unicode, robobait, software engineering, web technology

This post has been a long time in the making. A year ago, I started work on my Twanguages code. This was code to analyse a corpus of Twitter messages, and try to discern patterns about language use, geography, and character encoding.  I decided to use the Django web framework and the Python language for the Twanguages analysis code.  I know Python, but I was learning Django for the first time.

Django is really, really marvellous.  When I tried this expression, and got the Python array of records I was expecting,

q2 = TwUser.objects.annotate(ntweets=Count('twstatus')).filter(ntweets__gt=1)

I wrote in my log, “I think I just fell in love. Power and concision in a tool, awesome.”

But Django gave me fits.  It has its share of quirks to trap the unwary novice. Eventually I began writing notes about “Django gotchas” in my log.  Some of them are Django being difficult, or inadequate. Some are me being a clueless novice, and Django not rescuing me from my folly. But all of them were obstacles.  I share them in the hopes of helping another Django novice.

Here are my Django gotchas.  They are ranked from the most distressing to most benign. They apply to Django 1.1, the current version at the time. (As of August 2010, the current version is 1.2.1.) A couple of gotchas were addressed by Django 1.2, so I moved them down to a section of their own. The rest presumably still apply to Django 1.2, but I haven’t gone back to check.

  1. API fails unhelpfully. I wrote a simple query expression like:
    S2 = models.TwStatus.objects.get( key )

    I got a lot of weird errors, e.g. “ValueError: too many values to unpack” (where key is string) and “TypeError: ‘long’ object is not iterable” (where key is long). I had made a mistake, of course; the call to get() should have a keyword argument of “id__exact” or the like, not a positional argument. The correct spelling is this:

    S2 = models.TwStatus.objects.get( id__exact=key )

    The gotcha is that Django’s .get() isn’t written defensively. It isn’t very robust to programmer errors. Instead of checking parameters and giving clear error messages, it lets bad parameters through, only to have them fail obscurely deep in the framework. If defensive programming of the Django API would slow it down too much in production, I’d love to have a debug mode I could invoke during development. Continue Reading »

Why the PostScript language is Turing-complete

Posted by Jim DeLaHunt on 30 Apr 2010 | Tagged as: software engineering

A couple of weeks ago on the XML-dev mailing list, there was a discussion comparing declarative and procedural computer languages. Someone wondered why the PostScript language, though used mostly for declarative purposes like describing pages, was still a Turing-complete programming language. That’s actually a topic I know something about, so I contributed the following answer. I’m posting it here, lightly edited, because I thought it might be of wider interest. —JDLH

A good place to go for a discussion of why it is Turing-complete, despite being intended to describe page appearance, is in the Introduction (Chapter 1) of the PostScript Language Reference Manual.

In particular, it says, “The extensive graphics capabilities of the PostScript language are embedded in the framework of a general-purpose programming language. The language includes a conventional set of data types, such as numbers, arrays, and strings; control primitives, such as conditionals, loops, and procedures; and some unusual features, such as dictionaries. These features enable application programmers to define higher-level operations that closely match the needs of the application and then to generate commands that invoke those higher-level operations. Such a description is more compact and easier to generate than one written entirely in terms of a fixed set of basic operations.” Continue Reading »

How to make standalone Django documentation on Mac OS X 10.5 using MacPorts.

Posted by Jim DeLaHunt on 06 Aug 2009 | Tagged as: Python, robobait, software engineering, web technology

One of the many nice touches of the Django framework is that it provides tools and instructions to make a standalone Django documentation set from its distribution.  (Django is an application framework for the Python language that helps with database access and web application.)  Standalone docs are great for people like me who work on a laptop and are sometimes off the net. But I’m using Mac OS X, I get my code through Macports, and Django’s instructions don’t quite cover this case.  So I just figured it out.  Here’s the tricks I needed.  Maybe it will help you.

Continue Reading »

Heads up for 1234567890 day!

Posted by Jim DeLaHunt on 12 Feb 2009 | Tagged as: Vancouver, software engineering, time

1000000000 seconds since the POSIX epoch, as celebrated in Denmark in 2001During a high school class, my teacher interrupted his discussion of classical Greek history to say, “it’s twelve thirty-four on the fifth of June, 1978″. In other words, 12:34 5/6/78 (in the British notation). Alert people in the United States had already celebrated that moment on May 6th. If you missed that moment, you have another chance on Friday: 1234567890 day.

Humans love to find patterns, and dates have rich potential for that. For instance, I was walking through a train station on a business trip in Tokyo in February, 1990. I noticed that people were making an unusual fuss about the train tickets. 1990 was 平成2年 , or “Heisei year 2″, in the calendar based on the Japanese era name. The date was printed on the train tickets as “H2-2-2″. The symmetry made them collectors items. (I wish I could lay my hands on a ticket from that day, to convince myself I didn’t invent this memory…)

I have a fondness for finding leaks in the software engineering abstractions that represent our messy real world.  I wrote last year about POSIX time, and the limitations in its representation of modern calendars and time zones. So when a leaky abstractions turns up as a pretty pattern, it’s irresistible.  And that’s what happens this Friday.

Continue Reading »

Simple script-detection algorithm for font switching?

Posted by Jim DeLaHunt on 26 Aug 2008 | Tagged as: Unicode, i18n, language, multilingual, software engineering

Does anybody know of a simple script-detection algorithm (or heuristic) for font switching?

This came up with one of my clients. Suppose you have a guest book on your web site, and seven visitors left you the following inspiring messages:

  1. すべての人間は、生まれながらにして自由であり、かつ、尊厳と権利とについて平等である。
  2. 人人生而自由,在尊严和权利上一律平等。
  3. Semua orang dilahirkan merdeka dan mempunyai martabat dan hak-hak yang sama.
  4. 人人生而自由,在尊嚴和權利上一律平等。
  5. Alle Menschen sind frei und gleich an Würde und Rechten geboren.
  6. ‘Ολοι οι άνθρωποι γεννιούνται ελεύθεροι και ίσοι στην αξιοπρέπεια και τα δικαιώματα.
  7. 모든 인간은 태어날 때부터 자유로우며 그 존엄과 권리에 있어 동등하다.

(It looks like your visitors all read the Universal Declaration of Human Rights courtesy of the UDHR in Unicode project).

Now suppose you are so touched that you want to lay out all seven messages in a PDF file, and print it out as a booklet.  You have a beautiful layout template, and various complementary fonts: Latin script, Japanese, Korean, simplified Chinese, Traditional Chinese, and Greek script.

Which font to you apply to each message?  More importantly, is there a simple heuristic by which software can make the choice? (More after the jump.)

Continue Reading »

“Do all languages in the world use Western numerals (1, 2, 3 etc) to express numerical values?”

Posted by Jim DeLaHunt on 02 Apr 2008 | Tagged as: culture, i18n, language, software engineering

One of the answers I occasionally write at LinkedIn Answers seemed worth reposting here. The question was: “Do all languages in the world use Western numerals (1, 2, 3 etc) to express numerical values?“. My answer (slightly revised):

The simple answer to your question is, “No”. Or, “Yes”. It depends which exact question you are asking.

Is it the case that all languages in the world use only Western numerals (usually known as “Arabic” or “Hindu-Arabic numerals“, by the way) to express numerical values? No. Many languages use multiple number forms, depending on context. In the English language, for example, a numerical value could be expressed with words (”one”) in text, Hindu-Arabic numerals (”1″) in a technical context, or Roman numerals (”i”, “I”) in lists. Arabic, Hindi, Japanese, and Chinese all have native characters to express numerical values, which are used in some contexts.

Do all languages in the world use Western numerals sometimes, in some contexts, to express numerical values? Yes — mostly, probably. The qualifications are because I hate to make generalisations about human culture; it’s so diverse. And, note that languages without written forms probably don’t use Hindu-Arabic numerals at all.

Is it the case that Western numerals are — in all cultures, in all contexts — the idiomatic, preferred way to express numerical values? No. They aren’t even sufficient for all contexts in English (viz “one”, “i”).

Do all cultures which use Western numerals to express numerical values do so in the same way? No. In particular, the punctuation between the whole and the fractional part of a number, and the grouping of digits, differ by cultures. North America uses “1,234,567.89″; many European cultures use “1.234.567,89″; I’ve seen Japanese texts that say “123,4567.89″. See the CLDR number format patterns, creating international number formats in Excel, and the user guide to ICU formatting numbers.

Let’s shift focus from expressing numbers in cultures to implementing numbers in software products.

If you were making priority decisions for a software product (that’s my background) to expand its market internationally, and that product expresses numerical values using Hindu-Arabic numerals in some contexts appropriate in North America, can you be confident that it’s the only system you’ll need to express numerical values? No. You of course need to look at the cultural requirements of each new market as you go. But I’m confident that over time, some market will require some system other than Hindu-Arabic numerals to express numerical values. So I’m confident that sooner or later, you will have to give that software product the ability to express numerical values in a variety of ways (i.e., to internationalise it).

Postscript: the questioner, LinkedIn product manager Minna King, was kind enough to mark this as the “Best Answer” of the six posted.

[Edited for clarity based on reader feedback.]

Times Change, or, We Live In Complex Times

Posted by Jim DeLaHunt on 24 Mar 2008 | Tagged as: history, software engineering, time

A few days ago, I had to set the clock on my GPS unit. My GPS unit! It talks to over 24 satellites, each of which has atomic clocks accurate to nanoseconds — yet it didn’t know that Daylight Savings Time began in March instead of April.

We software engineers use variety of abstractions to represent points and durations in time. We synchronise to time servers which are accurate to the millisecond. Behind them are atomic clocks. Our abstractions can represent times centuries in the past and future. They are tidy, regular abstractions. But Daylight Savings Time is a reminder that the reality of time is messy and irregular. It is affected in small ways by astronomy, and in large ways by politics and human idiosyncrasy. That’s why I had to manually set the clock on my GPS unit.

One of the thing I love about engineering is where technology meets human idiosyncrasy. The technology bends to support the idiosyncrasy, and the human idiosyncrasy bends to fit the technology. Time representation is one such case.

Many software systems have an abstraction that represents time in terms of the number of seconds since some special reference date and time. <time.h> is the POSIX manifestation of this, storing times as integer numbers of seconds and microseconds since a 1970 reference time. From the integers, the system computes human-friendly structures like years, months, dates, hours, and minutes (leap years are no big deal). There’s a mechanism for converting from Coordinated Universal Time (UTC) to local time in various time zones. This includes Daylight Savings Time. All very tidy.

But when you start to look hard at time zones, things start to get interesting. Most of us live in time zones which are whole numbers of hours before or after UTC. In Vancouver, Canada, local time is eight hours earlier than UTC during Pacific Standard Time, and seven hours earlier than UTC during Pacific Daylight Time. But the time in Newfoundland and Labrador, on Canada’s east coast, is 30 minutes rather than an hour offset from its neighbour to the west. Afghanistan, India, Iran, three zones in Australia, and Venezuela also have time zones 30 minutes out of phase with most of the world. Nepal and Chatham Island, New Zealand, are 45 minutes out of phase: when it’s 05:00h in Vancouver, it’s 01:45h on Chatham Island. Time zones were regularised greatly in the 19th and 20th centuries. Before then, some timezones were arbitrary minutes and seconds out of sync with each other. (The TZ data set, tzdata2008b.tar.gz or its successor, is a fascinating read, with lots of historical time zone information and bibilographies.)

Daylight Saving Time has a richer and more controversial history than you may have known. David Prerau’s book Seize the Daylight: The Curious and Contentious Story of Daylight Saving Time“, gives three centuries of that history. It’s reasonably well known in North America that some jurisdictions observe daylight saving time and some don’t. What’s less appreciated is that the rules for daylight savings time vary over time. Many software systems, even when they provide for time zones and daylight savings time, do so through static data tables. They get caught out when, as in the Energy Policy Act of 2005 in the USA, or every year in Israel, somebody decides to change daylight saving rules. Most software systems don’t have a way of describing all the historical changes in daylight saving time; they do really well to store one historical rule for a time zone. This is what happened to my GPS unit. I’ll have to manually set its daylight saving time until the maker comes up with a firmware patch that corrects the time zone tables.

About those time zone labels, like “CST”: they are ambigous! “CST” can mean “U.S./Canada Central Standard Time, Australian Central Standard Time, China Standard Time, or Cuba Summer Time“, points out Raymond Chen in “The Old New Thing“. Software systems generall don’t well with the ambiguity. Specifications for representing dates in plain text, such as the W3C’s profile of ISO 8601, “Date and Time Formats” or RFC 2822 - Internet Message Format, section 3.3. Date and Time Specification, are important because they offer a way to write dates unambiguously.

Another problem that crops up when time zone definitions vary, be it for daylight saving or other changes, is that it becomes more complicated to calculate time spans. If I want to calculate the number of seconds between April 1, 2005 08:00h and April 1, 2008 Vancouver local time, I’ll need to allow for the fact that the 2005 time is standard time but the 2008 time is daylight savings.

I’ll also need to allow for leap seconds. Remember that abstraction that each day has 24 hours, each hour has 60 minutes, and each minute has 60 seconds? Well, usually that’s true. But some minutes in UTC are defined to be 61 seconds long, so some days are 86,401 (instead of 86,400) seconds long. These leap seconds get added by the International Earth Rotation and Reference Systems Service (IERS) in order to keep the sun rising on time. It turns out the earth actually takes a bit longer than 24 hours * 60 minutes * 60 seconds to turn one day, so without leap seconds the sun would rise later and later UTC. ( You’ll be glad to know there will be no leap second on June 30, 2008. Way to turn, planet Earth!)

So to calculate that time span between 2005 and 2008 correctly, I’ll need to allow for the minute of December 31, 2005 23:59h UTC being 61 seconds long.

So seconds are small and finicky. Surely we can be confident about the date, right? Well, that’s complicated too.

Trivia question: on what date in 1917 did Russia’s “October Revolution” occur? Well, on November 7, of course! It was October 25 in the Julian calendar in use in Russia at the time (”old style”), but November 7 in the current Gregorian calendar (”new style”). They differ by 13 days this century. These calendar differences are widespread across the world over the last 1000 years. Until 1750, England’s civil year started on March 25, not January 1. Thus January 30 1649 (”new style”) was known at the time as January 30 1648 (”old style”). Wikipedia can tell you way more about these “Old Style” and “New Style” date complexities.

On many world maps, there is an “international date line” zig-zagging across the Pacific ocean. To the east of this line, local time is earlier than UTC; to the west, later than UTC. I hate to be the one to break it to you, but this line doesn’t actually exist. Time zones are the choice, essentially political, of human jurisdictions. That zig-zag on the map is the cartographer’s way of showing you which time zones are which side of UTC.

Being political, time zones can change dates. The Pacific island republic of Kiribati stretches from 172° E to 150° W longitude. Centered in the Gilbert Islands in a time zone 12 hours after UTC, upon independence it acquired islands to the east in time zones 11 and 10 hours before UTC. This meant that the ends of the country observed different dates, and only four days per work week overlapped. Effective January 1, 1995, Kiribati changed the Phoenix Island and Line Island time zones to 13 and 14 hours after UTC respectively. This changed their dates, so finally, the whole country was on the same date. But beware if you have to compute a time span between 1994 and 1995 for Kiribati, because their local time didn’t include December 31, 1994! Nevertheless, they didn’t (pace Wikipedia’s Geography of Kiribati article) move the International Date Line, just some time zones.

Usually the <time.h> abstraction of time, as a count of seconds and microseconds after a certain reference date and time, works plenty well for software engineering. There are certainly many sources of error in our time data (inaccurate clocks, clobbered time stamps) that are much greater than the limitations of this abstraction. But remember, time measurement is a human convention, and human conventions almost always have really interesting complexity, and variation over time.

Don’t let the tidiness of the abstraction blind you to the richness of the reality.

buy Maxaquin no visa online without rx necesito comprar Compazine kaufen ohne rezept buy canadian Accutane online uk uk Accutane mastercard generic Isotretionin 20 mg mastercard with free fedex overnight side effects of Aceon online canadian pharmacy generic Ashwagandha united states best price Hannover Premarin without prescription medications Buy Proscar fedex where to purchase generic Lipitor online without a prescription purchase Eriacta without a rx online do you need prescription for Cetirizine sr mastercard buy Nexium without rx where to buy generic Augmentin online without a rx buy 2 mg Requip fast delivery sales of Benazepril pills canadian pharmacy order buy discount Blopress now online Order VPXL in Australia get Accutane Arlington Finpecia mastercard prescription fedex cheap order rx Cymbalta purchase Allegra online no membership overnight shipping lowest price Cefpodoxime Proxetil now online purchaseCipro 500 mg mastercard money purchase best price Vpxl Overland Park low price Accutane no prior prescription buy Nolvadex 10 mg mastercard online overseas purchase Aldactone without rx needed OHNE REZEPT ACCUTANE PURCHASE ACCUTANE 40 mg IN UTAH VPXL without prescription shipped overnight express buy cheap uk Citalopram sample packs Rhode Island purchase Prozac no visa without prescription ordering Cordarone without a script Prograf overnight no consult Zocor delivered overnight buy nolvadex 20 mg visa order Zyprexa cheap overnight purchase online Prilosec without prescription order Elavil usa cod mail order Citalopram order online with e check best Coreg online pill cheapest Prednisone available online order Geodon overnight delivery Altace on line buy VPXL discount online online purchase Mevacor where to buy generic Fosamax online without a prescription Finasteride online consultant online purchase Amitriptyline Iodide online uk New York Buy generic finasteride 1 mg mastercard purchase Lipitor over the counter cod overnight buy Monoket without a rx overnight shipping how to buy Lotensin online without rx where to buy generic Avodart online without a rx buy Nizoral online overseas canadian generic Dutasteride sale uk buy VPXL cheap without prescription order Zocor order amex where can i purchase Buspar no rx purchase Prinivil paypal without prescription cheapest price for generic Abilify mastercard buy Isotretinoin master card Inderal buy fedex cheapest place to buy Cleocin gel no prescription cod France buy online Fluticasone Casodex online canadian pharmacy online purchase Lotrisone to purchase Requip mastercard Casodex from canadian pharmacies canadian drugs generic Brand Sildenafil in canada with no prescription order Antabuse for cash on delivery natural Deltasone online without perscription Aristocort non rx fedex overnight free cheap Aceon sales no perscription generic Coreg online no rx comprar Сelexa without a prescription canada where to buy generic Coreg online without a rx buy VPXL medicine priority mail purchase Zanaflex over the counter cod overnight Canadian pharmacy prescription necesito comprar Cleocin gel side effects get VPXL jcb fedex in Illinois Bath buy actos 15mg fast delivery purchase Pamelor free consultation buy Vermox without rx needed buy Prilosec amex online without prescription order rx free Lamictal brand Cetirizine at lower price order Requip mastercard in Montgomery purchase Noroxin money purchase where to buy Brand Sildenafil in canada San Buenaventura non prescription Ashwagandha united states best price purchasing Prinivil without a script overnight Aricept c.o.d what is the price of Сelexa online no prescription overnight buy Cephalexin without a prescription online Pravachol shipped cash on no prescription Prevacid cod delivery no prescriptions needed for Accupril Loxitane no prior script Maxaquin without prescription medications buying online Brand Sildenafil online discount low price Coumadin with out perscription order Clozapine pricing how to order Clarinex online without a rx buy Proventil amex online without prescription buy generic aristocort online canada compare price Alberta Buy accutane 10 mg order cheapest online Vermox Relafen online without prescription how do you get Сipro kaufen deutschland Sioux Falls Proscar prices discount generic Accutane online no rx Arizona order Accutane 10 mg mastercard no visa Escitalopram fedex cheapest no prescription needed Coumadin New South Wales canadian generic Citalopram mastercard how can i order Compazine usa order Denmark buy Abilify online cheap buy generic Cefadroxil no prescription purchase Cephalexin online no membership how to order Finpecia online without prescription Escitalopram pharmacy best price generic aristocort St. Paul purchase Kamagra without rx to ship overnight Buy discount accutane on line free Lasix 100 mg mastercard free Zyloprim Buy Cheap ACCUTANE PURCHASE ACCUTANE 40 mg IN Usa/Uk Arimidex rezept buy no perscription Cordarone where can i purchase Accutane 40 mg no rx pharmacy canada Benazepril overnight no prescription Amarillo what is generic Citalopram in usa inexpensive Casodex no prescription Fosamax without prescription shipped overnight express Ponstel online order saturday delivery Buy accutane on line amex Zantac purchased online without prescription Accutane mastercard teenagers discount generic Decadron Chandler cheap generic india Cetirizine online canadian pharmacy generic Coumadin online from canada Tasmania fedex Amoxil without priscription order Diovan online next day delivery get Cefadroxil generic best price Simi Valley buy cheapest Clozapine generic name buy cheap Clomipramine sale uk Hungary purchase Naprosyn cod overnight delivery buy discount Prometrium online buy generic Cephalexin no prescription canadian generic Benazepril with out perscription order rx free Lasix 100 mg mastercard cheap generic india Cleocin gel at canada pharmacies Buy online accutane Buy Proscar online 5 mg with mastercard what is the price of Deltasone Orange compare generic Arava generic name REMANUFACTURED ACCUTANE PURCHASE ACCUTANE 40 mg IN Usa/Uk purchase Rocaltrol pay pal online without prescription buy Prilosec without a rx overnight shipping purchase Aricept without prescription online Сipro pharmacy how to purchase mastercard accutane 20 mg online without prescription|buy mastercard accutane 20 mg tablets without prescription|ordering mastercard accutane 20 mg online reliable|buy mastercard accutane 20 mg|how to buy mastercard accutane 20 mg online without a rx|no prescription required mastercard accutane 20 mg|order no online rx mastercard accutane 20 mg|purchase online rx mastercard accutane 20 mg without|cheap overnight mastercard accutane 20 mg|purchase cheap discount online mastercard accutane 20 mg|mastercard accutane 20 mg non prescription fedex overnight free|mastercard accutane 20 mg without a rx|how to buy mastercard accutane 20 mg online without prescript ion|buy mastercard accutane 20 mg without a prescript ion overnight delivery|aan agcode buy mastercard accutane 20 mg|purchase mastercard accutane 20 mg tablets without rx|where to buy mastercard accutane 20 mg no rx no fees|buy master Monoket without rx overnight shipping buy cheapest Bactroban purchase online generic Tucson buy Femara pay pal without prescription VPXL sales UK buy Escitalopram amex online without rx purchase online Buspar without rx purchase Rocaltrol without prescription to ship overnight best buy Clozapine in canada with no prescription VPXL to buy uk buy generic Blopress Thornton cheapest Cefadroxil sr online uk Monoket non rx fedex overnight free buy Oxytrol without rx best pharmacy price for Clozapine pills canadian pharmacy order Greensboro half price Cephalexin is it safe Columbus where to buy 5-HTP Iodide walmart price discount canadian pharmacy Сelexa online usa cheapest Lamictal available online buy actos with paypal purchase Zyvox no scams Ordering 40 mg Accutane from Canada 1mg Arimidexmaster card Oxytrol online buy saturday delivery buy Zocor online without rx VPXL spanish Maxaquin without a perscription purchase Hydrea cod delivery non prescription Coreg at half price pharmacy purchase Dostinex cod next day delivery half price Casodex without a perscription no fedex Elizabeth purchasing Lexapro without a script cheap Anafranil fedex purchase Celebrex no visa without prescription do you need prescription for Amitriptyline without a prescription Buy accutane mastercard us buy Plavix next day delivery order Atarax for cash on delivery order VPXL without rx from us pharmacy canadian generic Casodex online no prescription overnight free Clomipramine New Jersey VPXL Buy Without a Prescription purchase Atrovent pay pal online without rx best non prescription Coreg with no prescription ORDER WITH NON PRESCRIPTION ACCUTANE PURCHASE ACCUTANE 40 mg IN KENTUCKY buy Myambutol offshore no prescription fedex where to buy nolvadex buy Serophene without low cost generic Anafranil online get prescription Louisville purchase Lioresal amex online without prescription cheap Accutane 20 mg mastercard order order Requip mastercard in New Orleans lowest price Compazine now online cheapest Vpxl prices cheapest place to buy Anafranil pricing Famvir overnight no consult pharmacy canada Amitriptyline sr low price 5 mg Proscar inexpensive Accutane Pueblo order cheapest online Seroquel purchase cheap prescription Cardizem Seroquel non prescription for next day delivery canadian drugs generic Dexamethasone no prior perscription buying Ashwagandha without a prescription cheap Cetirizine sales Eulexin overnight delivery fed ex fedex Aristocort without priscription order Synthroid no visa without rx purchase Proventil no scams Pravachol online without prescription is there a generic for Arava no prescription free delivery order Elimite usa cod non prescription Blopress united states best price overnight delivery of Cefadroxil without a prescription purchase Lamictal no visa without prescription no prescriptions needed for Motrin FORUM PHARMACY ACCUTANE PURCHASE ACCUTANE 40 mg IN BRISBANE buy discount Dutasteride united states best price West Virginia buy Lisinopril 10mg with amex how do you get Avodart with no prescription Quebec purchase Cardizem without rx to ship overnight Prednisone with overnight fedex uk order Proscar how to get Accutane at lower price Nashville Lamictal online consultant Prozac buy fedex looking for buy Deltasone online from canada Malta buy Adalat amex online without prescription ordering Remeron over the counter buy Amaryl amex online order Brahmi online with overnight delivery purchase online rx Prandin without Cephalexin tablets canada order Aciphex without prescription to ship overnight low cost generic Dutasteride for sale no prescription buy Brafix without a rx overnight delivery purchase cheap Atarax cod free fedex buy generic Abilify no prescription order Nolvadex 20 mg order amex where can i buy Accupril without a rx when will generic Dexamethasone without prescription price cheap generic india Ashwagandha no prior perscription Honolulub VPXL online overnight delivery cod purchase Cardizem over the counter cod overnight overnight Cardizem c.o.d buy rx Benemid without buy cheap generic Bactroban headquarters comprar Coumadin generic best price buy online Clomipramine sample packs Brasilia free fedex delivery Elavil buy generic aristocort online with virtual check Pittsburgh canadian drugs generic Cefadroxil online from canada Des Moines buy Isotretinoin 5mg fast delivery online generic Casodex capsules price comparison Indiana pharmacy canada Coumadin no prescription required Durham low cost generic Coumadin online usa Billing where to purchase Clozaril cheap no prescription cheap Crestor by money order want to buy Accutane mastercard buying Relafen over the counter canadian generic Cleocin gel West Covina accutane 40 mg non prescription buy Risperdal amex online without rx best place to buy Deltasone order online with e check discount Clozaril low price Corpus Christi purchase Endep overnight delivery discount canadian pharmacy Decadron generic name Chilliwack Crestor online consultant order Isotretionin 20 mg mastercard without a rx overnight shipping what is the price of Dexamethasone sample packs Mauricie buy VPXL where Lexapro without rx overnight shipping order cheap overnight Atarax where can i buy Aceon pricing Buy abilify without prescription, abilify no prescription buy Oxytrol no scams online purchase Zelnorm order cheap overnight Aceon how to purchase Mevacor online without a prescription Naprosyn with free fedex overnight where do i get Anafranil where to buy no prescription Citalopram price comparison best buy Amitriptyline walmart price purchase Abilify without a prescription buy canadian 5-HTP sale uk buy nolvadex online from canada what is generic aristocort online without perscription purchaseCipro 750 mg mastercard money purchase purchase Atarax cod next day delivery purchase Motrin online without script buy Seroquel amex online Accutane 40 mg visa no prescription order|order no online rx Accutane 40 mg visa|buy Accutane 40 mg visa no prescription cheap|Accutane 40 mg visa non prescription) buy online Fluticasone Cleocin gel online canadian pharmacy i want to buy Amaryl without a perscription Prandin shipped cash on get Compazine generic best price Simi Valley buy Deltasone online without rx purchase Elavil cod overnight delivery Proscar tablets Capoten free consultation fedex overnight delivery buy online Arava without a perscription no fedex no prescriptions needed for Buspar Escitalopram online no rx overnight where can i purchase Zanaflex online cheap generc Dexamethasone low prices in usa Wyoming Buy Proscar online 5 mg with mastercard cheapest price for Abilify cheapest usa Glendale purchase Crestor no visa online without prescription canadian cheap Avodart Corpus Christi free Amitriptyline kaufen ohne rezept Wyoming purchase Cytotec cod next day delivery BUY ACCUTANE PURCHASE ACCUTANE 40 mg IN CONNECTICUT american pharmacies for generic Clozapine no prescription overnight Norvasc on line no prescription Compazine online canadian pharmacy Arlington price for Decadron online pharmacy no prescription Femara with fedex brand Cefadroxil Huntsville HOW TO BUY ACCUTANE PURCHASE ACCUTANE 40 mg IN WASHINGTON cheapest Brand Sildenafil headquarters South Dakota over the counter Bactroban with no prescription Chilliwack purchase Zyloprim no visa online without prescription buy cheap generic Сelexa kaufen ohne rezept Wales buy Diovan without a rx overnight shipping purchase Eulexin without prescription needed Dexamethasone pills buy Aldactone online overseas purchase Accupril cod delivery buy cheap fedex Elavil buy Dostinex no visa online without prescription purchase Loxitane free consultation free Motrin buy Avodart online without perscription purchase VPXL prescription online want to buy Proscar in malaysia where can i purchase Propecia online where can i purchase Endep no rx order generic Abilify no prescription needed buying Clarinex online without rx purchase no perscription Apcalis sx no rx cod Elavil Buy accutane with a visa Accutane 30 mg overnight fedex cheap order rx Ponstel buy canadian Casodex online usa Savannah purchasing Accutane 40 mg without a script where to purchase generic Mobic online without a rx buy online Lamictal without rx inexpensive Cleocin gel in canada with no prescription Mecklenburg-Vorpommern buy canadian Abilify online no perscription Clarksville order Plendil free next day airPlendil on line where can i buy Ashwagandha Croatia purchase Ansaid no visa online without prescription purchase Zocor without a rx online Accutane 40 mg visa serotonin dopamine cheap online|how to buy Accutane 40 mg visa online without a perscription|cheap purchase prescription Accutane 40 mg visa|buy cheap Accutane 40 mg visa under without rx|buy Accutane 40 mg visa without prescription|buy Accutane 40 mg visa on line no prescription|purchase Accutane 40 mg visa no visa without prescription|Accutane 40 mg visa lexapro|cheap overnight Accutane 40 mg visa|how to buy Accutane 40 mg visa online|Accutane 40 mg visa|saturday delivery Accutane 40 mg visa(isotretinoin) cod|purchase Accutane 40 mg visa without a prescription|Accutane 40 mg visa no prescript ion cod|ordering Accutane 40 mg visa online without rx|buy Accutane 40 mg visa with a visa|Accutane 40 mg visa orderd online without rx|aan agcode buy Accutane 40 mg visa|buy rx Accutane 40 mg visa|purchase Accutane 40 mg visa tablets without prescription|120 tabs Accutane 40 mg visa|order A canadian drugs generic Сelexa Flint overnight Flomax c.o.d Lynoral overnight no consult purchase Imitrex amex online without rx purchase Seroquel without prescription pay cod Zyprexa online consultant Canadian pharmacy overnight shipping safety order Elavil where to purchase generic Finasteride online without a prescription purchase Seroquel online no membership purchase Lipitor without prescription needed buy Plendil without prescription american pharmacies for generic Coumadin order online with e check Wyoming buy Keftab no visa online without prescription order Oxytrol without rx needed generic Cleocin gel online canada compare price purchase Buspar without prescription needed Intagra shipped by cash on delivery buy 750 mg Cipro mastercard Proscar next day cod fedex where can i buy Intagra online Online pharmacy in Europe cheap Clozapine fedex how to get Accutane mastercard 20mg online discount saturday delivery Arkansas purchase Copegus cod overnight delivery i want Accutane mastercard in internet no doctors Oklahoma buy canadian Brand Sildenafil online no prescription overnight Buy discount accutane mastercard online over the counter Amitriptyline Quebec order Paxil without prescription to ship overnight where can i buy Lotensin without a rx Accutane mastercard side effect liver purchase Lanoxin without prescription pay cod purchase Amaryl pay pal online without rx purchase Nizoral no visa online without prescription order cheapest online Accutane 10 mg mastercard how to buy aristocort generic name order Prometrium usa cod Cipro 250 mg mastercard fedex buy Elavil no scams get Anafranil united states best price Peoria brand Bactroban overnight no prescription get Citalopram side effects UAE buyCipro 750 mg mastercard next day delivery where to buy generic VPXL online without a rx purchase Benemid over the counter cod overnight cheap purchase Atrovent non prescription Cephalexin France low price Amitriptyline at canada pharmacies United Kingdom Aricept online overnight delivery cod how to buy Accutane 30 mg with out a perscription Buy accutane with mastercard purchase Avodart cod overnight delivery best price for generic Anafranil online from canada Santa Rosa canadian drugs generic Bactroban no prior perscription cheap generic Deltasone how it works Lafayette do you need prescription for Aceon no prescription cod Allentown free Seroquel purchase Accupril without prescription pay cod buy cheap uk Brand Sildenafil prescription online Greensboro Accutane mastercard without a prescription or doctor how to order Augmentin online without prescription buy Pravachol next day delivery free Compazine pills canadian pharmacy order the United states buy generic Benazepril online kaufen order rx free Amoxil best price for generic Compazine Spain VPXL with free fedex overnight how to get Finpecia mastercard prescription buy Pamelor without rx canadian cheap Abilify side effects no perscription generic Cephalexin online canada compare price over the counter Vpxl with no prescription Chilliwack non prescription Blopress without prescription us buying Arimidex online buy cheapest Cipro buy Xeloda without rx from us pharmacy purchase aristocort no prescription overnight delivery Niedersachsen what is the price of Brand Sildenafil sample packs Mauricie fedex Intagra without priscription order Intagra online next day delivery buy Naprosyn next day delivery buy nolvadex cheap purchase Flonase no visa online without prescription Alavert no doctor prescription purchase low price Brand Sildenafil shipping only when will generic Citalopram at lower price order Prinivil no visa without rx free Plavix order Singulair for cash on delivery fedex Femara overnight without a prescription cheap generic Сelexa no prescription overnight delivery Buy accutane online now can you still order VPXL purchase Lasix 100 mg mastercard without prescription canada cheap Fluticasone Casodex capsules price comparison Virginia canadian cheap Cefadroxil sr no prior prescription order Cephalexin cash on delivery buy Maxalt cod next day delivery buy Cipro 250 mg with mastercard Pravachol online uk best pharmacy price for aristocort Bristol purchase Lexapro without a rx online best place to buy Clozaril walmart online pharmacy non prescription cheap Brand Sildenafil Myambutol from canada order cheap overnight Oxytrol non prescription Clozapine side effects Lioresal fedex no prescription canada Cefpodoxime Proxetil sales online Hollywood Accutane mastercard day 12 purchase rx Synthroid without buy no perscription Omnicef order Keftab for cash on delivery how can i order Cefadroxil with out perscription Baton Rouge purchase no perscription Cephalexin purchase Geodon over the counter cod overnight ordering Coumadin sr price comparison Syracuse Proscar suppliers ACHETER,KAUFEN,KoPA,PURCHASE ACCUTANE PURCHASE ACCUTANE 40 mg IN HAWAII mail order 5-HTP Iodide online from canada no prescription Differin with fedex how to order Forzest online without prescription best price generic Coumadin no prescription overnight delivery San Diego american pharmacies for generic Ashwagandha online discount buy cheap Fluticasone Сipro no prescription from us pharmacy Lakewood cheap generic Clozapine without rx France Proscar without rx Zelnorm non rx fedex overnight free how do you get Casodex New South Wales order Copegus no visa without rx purchase generic Coumadin cheap no prescription purchase Proventil online without script purchase online Zantac without prescription buy Isotretinoin 10mg fast delivery cheapest place to buy Casodex online get prescription Ontario lowest price Decadron best price buy no online prescription Brand Sildenafil buy cod VPXL online saturday shipping Oxytrol with free fedex overnight canadian prescriptions Exelon Buy accutane australia order Zocor overnight delivery buy Mircette without a rx overnight shipping best price for generic Clozaril online from canada Santa Rosa order Crestor no visa sales of Anafranil available in generic form get Bactroban low price Bulgaria order Topamax online next day delivery best buy Casodex over the counter usa canada cheap Clomipramine online no prescription fast Zoloft no prior script order prescription free Lozol buy cheap fedex Claritin Omnicef without prescription shipped overnight express cheapest Zestril available online Claritin no prior script buy generic Compazine how it works inexpensive Anafranil dosage Washington purchase Mexitil without prescription order cheapest online Effexor order Altace overnight delivery Buy accutane on line half price Ashwagandha without a perscription no fedex Elizabeth does generic Cefadroxil at half price pharmacy QLD purchase online VPXL without rx Propecia pharmacy order Cardura overnight delivery buy Aldactone without rx from us pharmacy buy Requip 0.5 mg with amex buy cheap uk Сipro where to buy Vancouver cheap generic india Сipro without prescription us Rancho Cucamonga what is generic Accutane is it safe buy Prograf no visa online without rx want to buy Ashwagandha mastercard Sacramento cheapest place to buy Dutasteride without rx Sacramento low cost generic Compazine capsules price comparison buy rx Endep without order Premarin no visa buy Benemid no visa online without prescription order Femara order amex purchase online Pamelor without prescription want to buy Proscar in malaysia Order VPXL Medication buying cheap Amitriptyline purchase online generic how to order Augmentin online without a prescription canadian pharmacy generic Bactroban at lower price cheapest no prescription needed Decadron online pharmacy does generic Clomipramine mastercard cheapest Cleocin gel Arkansas free fedex delivery Aricept order Proventil without a prescription overnight shipping Aristocort cod online orders how do you get Arava without a perscription no fedex how to purchase Zyloprim online without rx purchasing Lipitor without a script looking for buy 5-HTP cheap no prescription Ireland is there a generic for Coumadin cheap no prescription Riverside HERSTELLER VON ACCUTANE PURCHASE ACCUTANE 40 mg IN KENTUCKY cheapest price for Cephalexin online from canada purchase no perscription Motrin get Cephalexin shipping Buy accutane once a day Feldene u.p.s shipping cod buy Accutane mastercard en las farmacias simi puedo comprar Cefpodoxime Proxetil canada pharmacys Egypt buy Imitrex no visa online without rx medication Availability ACCUTANE PURCHASE ACCUTANE 40 mg IN NEW JERSEY how to buy Coumadin dosage purchase online prescription Brahmi purchase Atarax online no membership where to purchase Requip mastercard buy Exelon no perscription cod comprar Clomipramine generic best price Erectalis online overnight delivery cod purchase Lasix 100 mg mastercard no prescription cheap online purchase Cefadroxil with no prescription Amitriptyline no prescription next day delivery online generic Anafranil online no prescription fast Wolverhampton Accutane 30 mg fed ex buy Coreg pay pal without prescription no prescription Citalopram price comparison Buy accutane with american express no prescription Detrol cod delivery low cost generic Сipro purchase online generic Hessen buy actos 15 mg fast delivery buy Seroquel next day delivery accutane 40 mg online purchase Cephalexin online without prescription Propecia with overnight fedex cheap Bactroban online from canada Minneapolis buy Coumadin canada pharmacys how to buy Anafranil no prior prescription Clearwater cheap order rx Risperdal purchase Elavil online with overnight delivery order cheap overnight Fosamax purchase online Maxaquin without rx comprar Abilify online get prescription Massachusetts buying Brafix online without rx purchase Apcalis sx online no membership compare generic Abilify usa order purchase Atrovent online no membership cheap Amitriptyline purchase online generic where to purchase Blopress available in generic form generic Brand Sildenafil Costa Mesa Generic 40 mg Accutane from Canada purchase Erectalis without best price on Avodart kaufen deutschland Aceon online uk Prandin overnight delivery fed ex american pharmacies for generic Dutasteride canada no prescription purchase online rx Amoxil without buy Noroxin without rx do you need prescription for Cleocin gel sr mastercard buy Zelnorm no visa without rx lowest price Casodex Los Angeles cheap generic india Cetirizine online no prescription overnight Rochester Prograf without rx medications purchase Сelexa headquarters Chandler purchase Proventil usa cod purchase online Femara without prescription order cheap aristocort over the counter usa buy VPXL cheap without prescription best buy Cephalexin without rx when will generic Alavert without prescription price Accutane mastercard without prescription cod cod sale how to order Zyrtec online without a rx cash on delivery Abilify no rx i want to buy Casodex without a perscription order Lynoral cheap overnight buy Cystone tablets without rx buy cheap online pharmacy Crestor order generic Anafranil generic best price Edmonton fedex Aldactone overnight without a rx buy Lasix mastercard cheap without prescription buy Zithromax purchase cheap Valtrex low cost generic finpecia where to buy generic Maxalt online without a prescription Maxalt cod next day delivery maxalt without a r x purchase prednisone online no membership where to buy Proscar buy line Zithromax Zithromax espana Accutane from canada order Lasix usa cod cheap Accutane without rx zithromax fedex no prescription delivered zithromax buy proscar without rx from us pharmacy order no online rx Flomax buy Accutane no prescription needed Generic Accutane online how to purchase Lasix online without rx order Lasix usa cod Lasix without prescription shipped overnight express order Lasix without a rx overnight shipping Lasix non prescription for next day delivery purchase Lasix usa cod buy Buspar with a visa buy Prednisone c o d pharmacy Proscar order finpecia overnight delivery Valtrex precio Cytotec no prescription cheap purchase Cytotec purchase online rx Lasix without purchase Lasix without purchase Lasix money purchase purchase cheap online Lasix proscar online prescription order proscar usa cod order Clomid 50 mg online Clomid pharmacy purchase cheap prescription Clomid Clomid visa Clomid online overnight delivery cod order Clomid online with overnight delivery Clomid cheap overnight fedex order Clomid overnight cheap Clomid without rx overnight shipping Clomid shipped cash on cheap order rx Cipro buy Cipro next day delivery order Cipro pharmacy Cipro without rx medications where can i buy Strattera finpecia online order purchase Cipro online no membership Cipro without prescription overnight shipping buy Cipro online cod purchase Cipro pay pal online without rx buy Cipro without a rx overnight shipping buy Accutane online consultation us Accutane cheap Lasix online no prescription overnight cheap Lasix for sale online no prescription required purchase discount Lasix no rx Lasix without prescription mexico Prednisone uk buy Strattera epharmacist buy 500 mg Valtrex Valtrex from canada order isotretinoin online cash on delivery|cheapest isotretinoin|buy isotretinoin cheap overnight) where can i order isotretinoin no prescription|cheapest isotretinoin|buy isotretinoin cheap overnight) proscar online prescription where to buy Cytotec in singapore valtrex online buy Prednisone and Prednisone order Valtrex without a rx overnight shipping buy Valtrex online cod buy Valtrex discount Orlistat wholesale Prednisone non rx fedex overnight free Buy prednisone online Arimidex by mail buy brand Arimidex online us pharmacy xenical best xenical online pill valtrex online order purchase Accutane without prescription to ship overnight cheap finpecia online where to buy Accutane no prescription no fees online us pharmacy buspar how to purchase prednisone online without rx discount Zithromax Accutane cod next day delivery buy Accutane pay pal without prescription purchase Accutane free consultation buy Accutane online overseas purchase Accutane pay pal online without rx buy cheap Zithromax line purchase cheap online Lasix buy Accutane 20 mg buy Accutane without buy cheap online pharmacy Accutane purchase Accutane no visa without prescription