The Evolution of API

It is my premise that, despite its monopolistic practices, Microsoft has succeeded by winning the minds of software developers. The Windows API, OLE/COM, the Win32 API, the distributed systems architecture, ODBC, .NET – these are all examples of API provided by Microsoft that have had tremendous impact on the industry. Even as developers decry their dependence on a single vendor, even as they install Eclipse and study Ruby, they can’t deny that it’s simply easier to run Visual Studio and program in C#/.NET.

There are chinks in Microsoft armor. PHP is pretty hard to beat for simple web apps. Microsoft’s share of the mobile device business is pretty small, too, regardless of how cool the Compact Edition of .NET might be. Overall, however, I can think of no other company or technology that has as much influence over developers as Microsoft.

To more clearly demonstrate how Microsoft achieved this hegemony, I thought it might be interesting to review the history of a particular API call and to note Microsoft’s involvement with it. Any programmer that’s read Kernighan and Ritchie’s The C Programming Language, is familiar with the “Hello World” program. (Any programmer that hasn’t read this book should be ashamed of his/herself. This would be akin to an English Lit major not having read any Shakespeare.) Let’s consider how the implementation of “Hello World” (on a PC) has changed over the years.

In 1981, when the first PC became available, the BIOS provided one way of implementing the program:

.data
    Message DB "Hello World"
.ends
.code
    MOV AX,1300h       ; set function code for "Write string", don't move cursor
    XOR  BX,BX         ; write to page 0 with no character attribute
    MOV CX, 11         ; write 11 characters
    PUSH DS
    POP ES
    LEA BP, Message    ; set ES:BP to the address of the message
    INT 10h            ; do it!
.ends

If you didn’t care about screen location or video attributes, MSDOS provided a simpler way:

.data
    Message DB "Hello World"
.ends
.code
    MOV AH,9           ; set function code for "write string at cursor"
    LEA DX, Message    ; set DS:DX to the address of the message (DS is already set)
    INT 21h            ; do it!
.ends

In the early 80’s when high-level languages (other than BASIC) started arriving on the PC, you could do it like K&R:

    int main()
    {
        printf("Hello World");
    }

The arrival of Microsoft Windows in 1985 made life much more complicated. Displaying a label on a dialog box was pretty simple (you could just place it there in the dialog box editor). If you wanted to display text in your application’s client window, that meant you had to write a window procedure and process the WM_PAINT message. Processing this message typically meant deciding on a font to use, figuring out colors to use and dealing with opacity:

    void HandlePaint(HWND hwnd)
    {
        /* Get device context for window */
        HDC hdc = GetDC(hwnd);

        /* Create a font and select it, keeping the old one around */
        HFONT hf = CreateFont(...lots of args...);
        HFONT hfOld = SelectObject(hdc, hf);

        /* Get the client rectangle for the whole window */
        RECT rect;
        GetClientRect(hwnd, &rect);

        /* Draw the text at the top left of the window */
        rect.left = rect.top = 10;
        DrawText(hdc, "Hello World", 11, &rect, DT_SINGLELINE);

        /* Select the old font */
        SelectObject(hdc, hfOld);

        /* delete created resources */
        DeleteObject(hf);
    }

No wonder so many programmers had a hard time moving to Windows! And yet move they did! What were the alternatives? VisiOn was cool but it was a pig. TopView was character-mode only. OS/2 Presentation Manager was Windows run through the IBM bureaucracy filter (e.g. put Win in front of all the API and flip the Y axis top to bottom!). The Mac was equally complicated and less capable (no multitasking, no child windows).

The arrival of 32-bit programming didn’t affect “Hello World” all that much, but it did accomplish two things. First, it freed programmers from having to worry about segmentation (putting code into 64K groups that could be efficiently swapped in and out). Second, it performed better process cleanup meaning that users had to worry less about depleting system resources (as could happen, for example, if you forgot to call DeleteObject in Win16).

OLE/COM affected “Hello World” to the extent that you could now write a “Hello world” application that could be embedded in another one, saved to a single file and printed in composite form. Your code had to worry about garbage collection (maintaining proper reference counts) and implementing appropriate COM interfaces. I’ll not cover this here as I still have scars from those days. Alternatives? None. Corba was still working on PL/1 and Ada support when OLE/COM first shipped. Microsoft was willing to punt on this problem in exchange for 99% market share.

As the final installment, let’s consider “Hello World” in the .NET era. First of all, Winforms programs are very often forms-oriented these days; you might very well choose to implement the program by simply creating a form and dragging a label there in Visual Studio. A Webforms program would do it the same way. If you do need to write a Winforms program that fully handles its client area, you’d write an event handler for a form’s Paint event:

    void Paint(object sender, PaintEventArgs e)
    {
        // get the Graphics object from the event arguments
        Graphics g = e.Graphics;

        // draw our string
        g.DrawString("Hello World", new Font("Arial", 10),
                         Brushes.Black, new Point(10, 10));
    }

If you compare this to the previous version, you can see a lot of similaries. The Graphics object is the equivant of the Windows device context. You still have to create a font. The difference is that C#/.NET has some “syntactic sugar” that makes life easier, for example, simplified arguments when creating fonts and the ability to create objects in-line. Additionally, C#/.NET perform automatic garbage collection so you don’t have to worry about deleting any created objects.

“Hello World” is an extremely simple example that demonstrates how APIs have changed over the course of 27 years. I chose it because, even this simple example, demonstrates how Microsoft has affected developers lives (both positively and negatively). There are better examples (OLE/COM and ODBC/ADO/LinQ) that demonstrate Microsoft’s contributions to the industry but none that can be so easily summarized in an already too long blog!

207 Responses to “The Evolution of API”

  1. I simply want to mention I am very new to blogging and certainly enjoyed you’re blog. Likely I’m going to bookmark your site . You surely come with great posts. Thanks a lot for revealing your web-site.

  2. Earl Cieslik says:

    This is especially crucial in those who

  3. StephenPaply says:

    how much viagra should i take the first time? viagra without a doctor prescription online doctor prescription for viagra

  4. Jamesdaymn says:

    goodrx viagra viagra generic for viagra

  5. KevinInigh says:

    cialis lowest price 20mg cialis for sale the cost of cialis

  6. DanielEmind says:

    viagra over the counter viagra viagra cheap

  7. DanielEmind says:

    viagra pill buy cheap viagra can you buy viagra over the counter

  8. WallyLes says:

    injectable ed drugs erectile dysfunction pills drugs causing ed

  9. WallyLes says:

    ed meds online without doctor prescription comfortis for dogs without vet prescription cheap medications

  10. WallyLes says:

    cheap pills online medication drugs natural remedies for ed problems

  11. WallyLes says:

    buy canadian drugs drugs for ed prescription drugs online

  12. Stevenslilk says:

    viagra 100mg buy viagra how to get viagra

  13. Stevenslilk says:

    viagra prices buy ed pills online canadian online pharmacy viagra

  14. Stevenslilk says:

    when will viagra be generic buy ed pills online canadian online pharmacy viagra

  15. I love your blog page. I’m touched. Thank anyone.

  16. Stevenslilk says:

    canadian pharmacy viagra cheap viagra viagra online

  17. Stevenslilk says:

    viagra coupons buy viagra viagra from india

  18. DanielEnank says:

    ed solutions ED Pills Without Doctor Prescription compare ed drugs

  19. DanielEnank says:

    ed meds online without doctor prescription natural remedies for ed problems supplements for ed

  20. DanielEnank says:

    anti fungal pills without prescription generic ed pills buying ed pills online

  21. DanielEnank says:

    soma therapy ed cheap ed pills tadalafil without a doctor’s prescription

  22. DanielEnank says:

    male dysfunction cheap ed pills buy ed drugs online

  23. DanielEnank says:

    herbal remedies for ed cheap ed pills natural treatment for ed

  24. At this amount, you can premiere as a author. I am just so touched. Now i am cheerful to meet you. Thank you.

  25. DanielEnank says:

    drugs prices generic ed pills over the counter ed remedies

  26. NathanHok says:

    cialis samples request buy tadalafil $200 cialis coupon

  27. Williamphish says:

    best ed solution prescription drugs ed medicine

  28. Williamphish says:

    treatment for erectile dysfunction best online canadian pharmacy ed medications comparison

  29. Williamphish says:

    cure for ed prescription drugs best non prescription ed pills

  30. Wow, the articles are so sexy. How may We write like anyone? My partner and i want the similar writing skills as you.

  31. I was so fascinated by your blog. Thank a person so much.

  32. 죠스출장 says:

    You’re consequently amazing. Oh my Lord. Jesus bless you.

  33. You’re consequently amazing. Oh my Jesus. The almighty bless you.

  34. I was so pleased because of your blog. Thank you so much.

  35. Regards to you, I learned something new. Say thanks to a person so much. My partner and i glimpse forward to nearby.

  36. Regards to you, We mastered something new. Appreciate anyone so much. My partner and i seem forward to working with you.

  37. RobertKic says:

    buy generic drugs from india buy generic drugs online from india

  38. RobertKic says:

    sildenafil online cheapest sildenafil

  39. RobertKic says:

    sildenafil online sildenafil without doctor prescription

  40. Your fantastic is great as in the event it had been written by means of a writer. Let me take a look at your blog typically. Appreciate it always.

  41. RobertKic says:

    personal loans with no credit check payday loans online fast deposit

  42. RobertKic says:

    buy tadalafil tadalafil pharmacy

  43. RobertKic says:

    buy tadalafil tadalafil

  44. RobertKic says:

    tadalafil pharmacy buy cheap tadalafil

  45. RobertKic says:

    tadalafil canada buy cheap tadalafil

  46. Regards to you, I actually realized something new. Say thanks to an individual so much. My spouse and i search forward to nearby.

  47. RobertKic says:

    canadian pharmacy buy generic drugs from canada medications

  48. I used to be able to find good information from your blog posts.

  49. I was able to find good advice from your content.

  50. The next time I read a blog, I hope that it doesn’t fail me as much as this particular one. After all, I know it was my choice to read, but I truly thought you’d have something helpful to talk about. All I hear is a bunch of complaining about something you could fix if you weren’t too busy searching for attention.

  51. RobertPrina says:

    buy sildenafil online cheapest sildenafil

  52. 출장안마 says:

    I was very pleased to discover this page. I want to to thank you for ones time due to this fantastic read!! I definitely enjoyed every little bit of it and I have you bookmarked to see new things on your web site.

  53. CalebNaf says:

    payday loans online fast deposit personal loans for bad credit

  54. JoshuaAsype says:

    cheap sildenafil https://sildgeneric100.com/ cheap sildenafil

  55. StephenFed says:

    viagra generic buy viagra generic how to get viagra without a doctor

  56. Pretty! This was an extremely wonderful article. Many thanks for supplying this info.

  57. RobinAmara says:

    levitra without a doctor prescription canadian pharmacy viagra ed drug comparison

  58. RobinAmara says:

    natural ed treatment canadian drug stores amoxicillin without a doctor’s prescription

  59. RobinAmara says:

    canada price on cialis the cost of cialis cialis and interaction with ibutinib

  60. RobinAmara says:

    vacuum pumps for ed best online canadian pharmacy treating ed

  61. RobinAmara says:

    is there a generic for viagra buy viagra non prescription viagra

  62. RobinAmara says:

    where to get viagra viagra walmart viagra

  63. RobinAmara says:

    tadalafil without a doctor’s prescription online pharmacy canada cheap pills online

  64. RobinAmara says:

    how can i order prescription drugs without a doctor buy Prednisone online medication

  65. RobinAmara says:

    causes of ed Amoxil ed drugs online

  66. RobinAmara says:

    natural ed medications buy Cipro online canadian pharmacy

  67. RobinAmara says:

    mens ed pills canadian drug stores ed pills online pharmacy

  68. RobinAmara says:

    viagra walgreens viagra pill viagra viagra pill

  69. Good day! I just want to offer you a big thumbs up for your excellent information you’ve got here on this post. I will be coming back to your web site for more soon.

  70. RobinAmara says:

    best male enhancement pills canada pharmacy online hims ed pills

  71. 구미출장 says:

    Hi, I do believe this is a great blog. I stumbledupon it 😉 I will come back yet again since I saved as a favorite it. Money and freedom is the greatest way to change, may you be rich and continue to guide other people.

  72. RobinAmara says:

    pain meds online without doctor prescription online pharmacy canada over the counter erectile dysfunction pills

  73. RobinAmara says:

    erectial dysfunction Amoxil what is the best ed pill

  74. RobinAmara says:

    viagra cost per pill viagra walmart viagra prices

  75. RobinAmara says:

    100mg viagra buy viagra viagra canada

  76. RobinAmara says:

    where to buy viagra online viagra cheapest viagra online

  77. TravisLes says:

    erectial dysfunction: cheapest ed pills best treatment for ed

  78. 일산요정 says:

    Aw, this was an exceptionally good post. Taking a few minutes and actual effort to produce a superb article횜 but what can I say횜 I put things off a whole lot and never seem to get nearly anything done.

  79. TravisLes says:

    can ed be reversed: canadian pharmacy online pet meds without vet prescription

  80. TravisLes says:

    ed pills that work: buy cheap prescription drugs online ed pills that work

  81. TravisLes says:

    best male enhancement: online ed pills best medicine for ed

  82. When I originally commented I seem to have clicked on the -Notify me when new comments are added- checkbox and from now on each time a comment is added I receive four emails with the same comment. Perhaps there is an easy method you can remove me from that service? Appreciate it!

  83. gepeamusa says:

    Baclofen Acheter En Canada AbignKignene where to buy cialis online forum foessEmeds Cialis Authentique Prix

  84. Larryorelt says:

    viagra for sale cheap viagra 100mg how much is viagra

  85. Larryorelt says:

    erectile dysfunction medications canadian pharmacy cialis real viagra without a doctor prescription usa

  86. Larryorelt says:

    cvs viagra otc viagra viagra amazon

  87. Larryorelt says:

    the cost of cialis cialis 5mg coupon cialis headaches afterwards

  88. Larryorelt says:

    zithromax capsules australia zithromax buy zithromax 500 mg lowest price pharmacy online

  89. Larryorelt says:

    viagra cheap viagra online canadian pharmacy where to buy viagra

  90. Larryorelt says:

    buy zithromax no prescription zithromax 600 mg tablets buy generic zithromax online

  91. asd says:

    An impressive share! I have just forwarded this onto a coworker who was doing a little homework on this. And he actually bought me lunch due to the fact that I stumbled upon it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanks for spending time to talk about this topic here on your internet site.

  92. Larryorelt says:

    muse for ed canadian pharmacies online cheap pills online

  93. Larryorelt says:

    purchase zithromax z-pak zithromax 500mg price in india zithromax online paypal

  94. Larryorelt says:

    real viagra without a doctor prescription canadian pharmacies shipping to usa online canadian pharmacy

  95. Larryorelt says:

    zithromax prescription zithromax without prescription zithromax order online uk

  96. Robertunlow says:

    walmart viagra order viagra generic online pharmacy viagra
    how to get viagra without a doctor

  97. Robertunlow says:

    viagra from canada viagra without doctor prescription online viagra prescription
    viagra prescription

  98. Robertunlow says:

    viagra coupon generic pills viagra cheap
    viagra price

  99. Robertunlow says:

    where to get viagra viagra for sale buy generic 100mg viagra online
    can you buy viagra over the counter

  100. Next time I read a blog, Hopefully it does not disappoint me just as much as this one. I mean, I know it was my choice to read through, however I genuinely believed you’d have something useful to talk about. All I hear is a bunch of whining about something you could fix if you weren’t too busy searching for attention.

  101. I’d like to thank you for the efforts you have put in writing this website. I really hope to view the same high-grade content from you later on as well. In fact, your creative writing abilities has motivated me to get my very own website now 😉

  102. DavidTek says:

    canadian online pharmacy generic Aciclovir cheap Valtrex

  103. DavidTek says:

    best canadian pharmacy online buy Plaquenil Zovirax

  104. DavidTek says:

    ed pills cheap buy Valtrex online generic Zovirax

  105. DavidTek says:

    ed dysfunction cheap Zovirax Aciclovir

  106. DavidTek says:

    the best ed drug certified canadian online pharmacies canadian pharmacy

  107. DavidTek says:

    male ed cheap Plaquenil generic Aciclovir

  108. DavidTek says:

    mexican pharmacy without prescription buy Zovirax buy Aciclovir

  109. DavidTek says:

    male erection canadian healthcare pharmacy pharmacy in canada ontario

  110. DavidTek says:

    medication for ed Zovirax buy antiviral drugs

  111. DavidTek says:

    cheapest ed pills canadian pharmacy viagra online pharmacies without an rx

  112. DavidTek says:

    viagra without doctor prescription cheap Aciclovir Aciclovir

  113. DavidTek says:

    buy Amoxil cheap Amoxil pet meds without vet prescription

  114. DavidTek says:

    best online pharmacy ed meds online without doctor prescription ed meds rx

  115. DavidTek says:

    treatment of ed best erectile dysfunction pill ed meds online

  116. Josephmog says:

    over the counter ed remedies lipitor generic india lipitor for sale

  117. Josephmog says:

    ed cures that actually work canada drug pharmacy canadian pharmacy

  118. Josephmog says:

    natural herbs for ed lipitor buy lipitor online

  119. Josephmog says:

    canadian viagra how to get viagra buy viagra online

  120. Josephmog says:

    cheap erectile dysfunction fda approved canadian online pharmacies online pharmacy canada

  121. Josephmog says:

    normal dose cialis tadalafil does cialis lower blood pressure

  122. 출장안마 says:

    This is a topic which is near to my heart… Cheers! Exactly where are your contact details though?

  123. Josephmog says:

    do i have ed fda approved canadian online pharmacies fda approved canadian online pharmacies

  124. Hi! I could have sworn Iíve visited this blog before but after going through some of the posts I realized itís new to me. Nonetheless, Iím definitely delighted I found it and Iíll be bookmarking it and checking back frequently!

  125. Josephmog says:

    ed causes and treatment natural pills for ed pain meds without written prescription

  126. Josephmog says:

    new ed drugs atorvastatin lipitor lipitor generic

  127. Josephmog says:

    best male enhancement pills muse ed drug ed and diabetes

  128. Josephmog says:

    best ed medicine canada drug pharmacy canadian online pharmacies

  129. Josephmog says:

    legal to buy prescription drugs without prescription vitamins for ed buy prescription drugs without doctor

  130. Thank you so much regarding making us know what My spouse and i didn’t know. I anticipate working with you.

  131. Everything is very open with a clear explanation of the challenges. It was definitely informative. Your site is useful. Thank you for sharing!

  132. Kennethcut says:

    how much does viagra cost https://cheapvgr100.online/ xxrhqgfm

  133. Kennethcut says:

    roman viagra https://cheapvgr100.com/ xaxdirfe

  134. Kennethcut says:

    viagra prescription https://cheapvgr100.online/ pspgqgyv

  135. Whoa. Master. You’re a new genius. Give thanks you.

  136. Kennethcut says:

    ztpogvwj is there a generic for viagra viagra from india

  137. 출장안마 says:

    Hey, usually are you too great? Your current writing widens my expertise. Appreciate you.

  138. Warrenreesy says:

    cost for valtrex valtrex 500mg price canada generic acyclovir

  139. Warrenreesy says:

    amoxicillin 500mg zithromax over the counter canada where to buy bactrim

  140. Warrenreesy says:

    alesse generic brand canada where can i buy shatavari in usa pilex usa

  141. Warrenreesy says:

    yasmin ocp yasmin 415 yasmin pharmacy singapore

  142. Warrenreesy says:

    acyclovir 200 mg capsule generic acyclovir price of acyclovir

  143. Warrenreesy says:

    order zyrtec benadryl 50 mg tablet zyrtec d 24 hour

  144. Warrenreesy says:

    otc zyrtec 10mg allegra 160 mg zyrtec tablets price in india

  145. Warrenreesy says:

    prophylactic antibiotic best antibiotic for diverticulitis attack where can you buy amoxicillin over the counter

  146. Warrenreesy says:

    allegra 100 mg tablet where to get benadryl uk 600 mg benadryl

  147. Warrenreesy says:

    buy amoxicillin 500mg online doxycycline generic doxycycline order online

  148. Warrenreesy says:

    5mg zyrtec without a prescription allegra buy online uk generic brand for zyrtec

  149. Warrenreesy says:

    buy levlen online yasmin pill uk buy clomid online

  150. Warrenreesy says:

    pilex online serophene without prescription generic for clomid

  151. Warrenreesy says:

    cheap acyclovir online can you buy zovirax over the counter zovirax 200

  152. Hi there! I could have sworn Iíve been to this blog before but after looking at some of the articles I realized itís new to me. Nonetheless, Iím certainly delighted I stumbled upon it and Iíll be book-marking it and checking back frequently!

  153. I love reading an article that will make men and women think. Also, thank you for allowing for me to comment!

  154. Your style is really unique compared to other people I’ve read stuff from. Many thanks for posting when you’ve got the opportunity, Guess I’ll just bookmark this web site.

  155. 성남출장 says:

    The very next time I read a blog, I hope that it won’t disappoint me just as much as this one. After all, I know it was my choice to read through, nonetheless I genuinely thought you would probably have something interesting to say. All I hear is a bunch of whining about something that you could fix if you were not too busy seeking attention.

  156. Edwardjet says:

    olwokdoc purchasing cialis on the internet http://cialisirt.online/ coffee with cialis

  157. Edwardjet says:

    lhhseoyg 30 day cialis trial offer http://cialisirt.com/ how does cialis work

  158. Edwardjet says:

    nqixlouv viagra price comparison http://viagrastm.com/ where can i buy viagra

  159. Edwardjet says:

    rtpzvbsa buying viagra online http://viagrastm.online/ over the counter viagra

  160. Edwardjet says:

    ytgcsexu cialis dosage 40 mg dangerous http://cialisirt.com/ cost of cialis

  161. Edwardjet says:

    lcxiiyzw buy viagra http://viagrastm.online/ roman viagra

  162. I blog quite often and I genuinely thank you for your information. This great article has truly peaked my interest. I’m going to book mark your blog and keep checking for new details about once a week. I opted in for your RSS feed as well.

  163. Itís hard to find educated people for this topic, but you seem like you know what youíre talking about! Thanks

  164. Good day! I could have sworn Iíve been to this website before but after going through a few of the articles I realized itís new to me. Anyways, Iím certainly pleased I stumbled upon it and Iíll be book-marking it and checking back often!

  165. Howdy! This post could not be written any better! Looking through this article reminds me of my previous roommate! He always kept talking about this. I’ll forward this article to him. Pretty sure he’ll have a good read. I appreciate you for sharing!

  166. I챠m impressed, I must say. Rarely do I encounter a blog that챠s both equally educative and engaging, and without a doubt, you’ve hit the nail on the head. The problem is an issue that not enough people are speaking intelligently about. I am very happy that I stumbled across this in my search for something relating to this.

  167. 제주출장 says:

    I would like to thank you for the efforts you have put in penning this website. I am hoping to see the same high-grade blog posts by you in the future as well. In truth, your creative writing abilities has inspired me to get my very own site now 😉

  168. JasonCapse says:

    online medication https://canadianpharmacyvikky.com pet antibiotics without vet prescription

  169. JasonCapse says:

    natural drugs for ed https://canadianpharmacyvikky.com prescription without a doctor’s prescription

  170. JasonCapse says:

    cure for ed https://canadianpharmacyvikky.com buy prescription drugs from india

  171. JasonCapse says:

    canadian online drugstore https://canadianpharmacyvikky.com pain meds online without doctor prescription

  172. This is a great tip particularly to those fresh to the blogosphere. Simple but very accurate informationÖ Appreciate your sharing this one. A must read article!

  173. I’m very pleased to find this page. I wanted to thank you for ones time just for this wonderful read!! I definitely enjoyed every little bit of it and i also have you bookmarked to look at new information on your blog.

  174. An outstanding share! I have just forwarded this onto a friend who has been doing a little homework on this. And he actually ordered me breakfast simply because I found it for him… lol. So let me reword this…. Thank YOU for the meal!! But yeah, thanx for spending time to talk about this topic here on your blog.

  175. cbd for dogs says:

    I wanted to put you the tiny remark to be able to thank you over again on your pretty suggestions you have provided on this page. It was really strangely open-handed with you to make unhampered precisely what many people would’ve offered for sale for an ebook to get some money for themselves, particularly now that you might have tried it in case you desired. These strategies in addition served to be the good way to know that some people have the identical interest really like my personal own to learn much more when considering this matter. I believe there are several more pleasant sessions in the future for many who read through your site.

  176. I used to be able to find good information from your content.

  177. I am commenting to let you know of the fantastic encounter my cousin’s daughter experienced reading your site. She even learned many issues, not to mention what it’s like to have a wonderful giving mindset to have many people quite simply grasp chosen grueling subject areas. You really exceeded our expectations. Many thanks for giving the informative, healthy, educational and as well as easy thoughts on the topic to Jane.

  178. My husband and i ended up being comfortable Albert could carry out his analysis because of the ideas he acquired from your site. It’s not at all simplistic just to be giving for free hints that men and women have been making money from. And we all do know we have the website owner to be grateful to because of that. Most of the explanations you’ve made, the easy site menu, the friendships you can assist to engender – it’s everything exceptional, and it’s assisting our son and our family do think that content is cool, and that is extremely important. Many thanks for all the pieces!

  179. 광주출장 says:

    Saved as a favorite, I really like your website!

  180. My wife and i have been really more than happy when Louis managed to finish off his researching using the precious recommendations he made through your web site. It is now and again perplexing to simply find yourself making a gift of strategies which often some other people may have been trying to sell. Therefore we realize we need the writer to give thanks to for this. The specific illustrations you made, the straightforward web site navigation, the relationships you will help to instill – it is most remarkable, and it is leading our son in addition to us reason why this subject is interesting, which is seriously pressing. Thanks for the whole lot!

  181. You ought to be a part of a contest for one of the highest quality sites on the web. I’m going to recommend this site!

  182. PhillipOdodo says:

    can ed be cured
    https://canadarx24.com/
    ed men

  183. PhillipOdodo says:

    vacuum pump for ed
    https://canadarx24.com/
    ed treatments that really work

  184. PhillipOdodo says:

    ed treatments that really work
    https://canadarx24.com/
    ed medications list

  185. PhillipOdodo says:

    male erection
    https://canadarx24.com/
    canada ed drugs

  186. 출장안마 says:

    Very nice article. I certainly love this site. Thanks!

  187. 출장안마 says:

    This is the perfect web site for anybody who wants to understand this topic. You know a whole lot its almost tough to argue with you (not that I really would want to횜HaHa). You certainly put a brand new spin on a topic that’s been written about for ages. Excellent stuff, just excellent!

  188. JamesLap says:

    ed meds online without prescription or membership azgiepws levitra for sale best online canadian pharmacy

  189. JamesLap says:

    viagra price jnuamebe buy viagra generic cheap viagra online

  190. JamesCLADA says:

    kopr canadian viagra http://dietkannur.org kluo ivek

  191. JamesCLADA says:

    lchb cvs viagra http://dietkannur.org ydqa gtza

  192. Lesterexciz says:

    normal dose cialis jgdyiebc http://tadedmedz.com/ cialis discount card

  193. Iím amazed, I must say. Rarely do I encounter a blog thatís both educative and engaging, and without a doubt, you have hit the nail on the head. The problem is something which too few men and women are speaking intelligently about. I am very happy I stumbled across this in my search for something relating to this.

  194. Davidgox says:

    buy viagra very cheap buy medication without an rx

  195. 먹튀검증 says:

    Very good information. Lucky me I recently found your blog by accident (stumbleupon). I have saved as a favorite for later!

  196. Your style is so unique in comparison to other people I have read stuff from. Thank you for posting when you’ve got the opportunity, Guess I’ll just bookmark this web site.

  197. It챠s nearly impossible to find knowledgeable people on this subject, but you sound like you know what you챠re talking about! Thanks

  198. 대구출장 says:

    An interesting discussion is worth comment. I do believe that you need to publish more about this subject, it might not be a taboo subject but usually people don’t speak about these issues. To the next! Many thanks!!

  199. 부산출장 says:

    Howdy! I simply would like to give you a huge thumbs up for your excellent information you have got right here on this post. I’ll be returning to your web site for more soon.

  200. 먹튀검증 says:

    There’s certainly a lot to learn about this subject. I like all of the points you made.

  201. Hi, I do believe this is an excellent web site. I stumbledupon it 😉 I may revisit yet again since i have saved as a favorite it. Money and freedom is the greatest way to change, may you be rich and continue to guide other people.

  202. I’m excited to discover this page. I need to to thank you for your time just for this fantastic read!! I definitely appreciated every bit of it and I have you bookmarked to look at new stuff in your web site.

  203. GeraldOravy says:

    http://tadalafilfast20.com tadalafil 100mg

  204. GeraldOravy says:

    http://tadalafilfast20.com order sildenafil

Leave a Reply