Ruminations on Post Modern Programming
Saturday, September 30, 2006
  Plugins: Dynamically Loadable Classes
Both the philosophy of OOP and the virtual function mechanism of C++ make dynamic loadable classes or plugins easy. In fact, plugins are almost the ultimate proof of the power of the object oriented view of software.

The essence of polymorphism is swappable classes. One class can be used in place of another. This lets you change the details of a program, without changing the grand structure. This makes it easy to separate the problem domain, from the problem of the moment.

The problem domain changes very little. The problem of the moment can change quite often. Customer wants a new feature. Boss wants something done. If you have a box of tools that model the domain you are dealing with, then making these changes is like building something from Lego(tm) blocks. You just plug stuff together. If you don't have classes and functions appropriate to the domain you are dealing with, you are programming the same way cars were made before Henry Ford, before the assembly line, each car tediously built from scratch by master craftsmen.

For example, paying bills (the problem domain). Since Babylonia, the basic action of giving money to someone else hasn't changed in essence, even though the objects involved have changed. From barter, to gold nuggets, to horses, to daughters, to coins, to bank drafts, to credit cards to Paypal(tm). Money has represented the same thing, even though its form has changed. Your Pay() function only needs the general concept of money to function. It doesn't need to know or care about the particulars.

Plugins are classes that can be constructed at run-time instead of compiled into your program. Swappable classes can therefore be changed, without having to recompile your program. This is useful for reasons I will outline later.

Plugins are normally a real pain because each function you want to use must be "located" by symbol name before it is used. The old way to do it uses the C style functions GetProcAddress() for windows and dlsym() for Linux. You have to locate the function, get back a void* pointer and cast this pointer to the function involved, something like this:

typedef void (*TypeOfTheFunction)(int, const char*, long); // First you have to create a pointer
TheFunction* function = (TypeOfTheFunction) GetProcAddress("TheFunctionName", TheSharedLibrary);
if (function == NULL)
error;
Execute the function: TheFunction(1, “test value”, 2000);

This is tedious, error prone and inflexible. You have to write a locator function for each loaded function. You have to save that pointer for use later. All the code that calls that function must be aware it is a pointer and not a function. It's error prone because if you change a function in the library, but don't change the cast, your program will blow up. It's inflexible because you have to keep the library and your code constantly synchronized. The casts are hard coded and have to be recompiled if you change the library. Since C++ functions are garbled (decorated) you can’t even know the real function name anyway without a lot of paperwork.

However, with C++ you can do a neat little trick.

1) Define a base class, ideally, an abstract base class but not necessarily, in your program. All the functions you intend to be dynamic must be virtual functions.

2) Derive your plugin class from this base class.

3) Compile your plugin class into its own shared library (.dll for window, .so for linux) . See the example make file below on how to do this for Linux.

4) Export one function from your shared library that does a C++ new of your class object. That might be called "Create()" or something like that. This must be declared as extern “C”. The reasons are technical but the simple explanation is that the function name, unless declared extern “C” will be altered during compilation and you won’t know what the name is to look up when you use GetProcAddress() or dlsym().

5) Your class instance is created and returned to you but in the form of a base class pointer. Because the compiler knows about the base class functions, and your class has virtual versions of these, the program can use your class without having to have linked at compile time with your class. Even though the program thinks it is talking to the base class, the magic of virtual functions causes the functions in your plugin to be called. This means you don't have to manually locate all the function names and signatures in your loadable library and makes plugins via loadable libraries very easy to create.

Why would you want to do this?

1) You can change the classes your program uses by changing only a configuration file or command line option. No recompilation necessary and still type safe.

2) Users of your program can create their own plugins. Just provide them a skeleton of the abstract base class being used in your program and the header file of that abstract base class. When users create and contribute plugins it expands the glory of your original program for free.

3) You can load only those classes actually being used instead of an entire pantheon of code that only might be used.

4) This enables you to rapidly change your program's configuration so you can do comparative testing rapidly to see which plugins are better than others without recompiling. You can change major classes in your program without having to recompile.

5) Your program no longer needs massive functions full of "if" statements for each class of thing you are dealing with. For example, if you are converting text from a source format, to a destination format, the old style way of doing it would be to have a huge case statement where some output format is checked for and the proper output producer is called. This is inflexible. To add another format you have to change the “if” statements. Using plugins instead the user can specify an output plugin. Your program becomes infinitely configurable (without recompiling) in respect to output format.

6) Since your classes are not compiled in, there is no need to have a separate header and implementation file. The entire class declaration goes into the implementation file.

7) Once the plugin is created, any number of member functions is available without having to be explicitly looked up.

8) Plugin architecture prevents programmers from corrupting the core of your application. It forces them to do whatever needs to be done within the plugin, without altering the application and risking side effects caused by changing core features of your program. It enforces thinking in terms of encapsulation and polymorphism. That mental jump has not been made by too many programmers that I have met.

The reason this works without having to look up each function separately is the fact that the virtual function tables for the base and derived classes are in the same order. Virtual function number 1 is the same named function for both classes.

Here is the template class does most of the heavy lifting. The sample code works both on Linux and Windows.
---------- cut here -------------

#ifndef PLUG_IN
#define PLUG_IN

#include "string"
#ifdef _WIN32
#include "windows.h"
#else
#include "dlfcn.h"
#endif

// Anonymous namespace is here to keep linker from making this function (ErrorString) visible
// to the rest of your program. This is to prevent collision with some other library using the
// name ErrorString()
namespace
{
std::string ErrorString()
{
#ifdef _WIN32
return ::strerror(::GetLastError());
#else
return ::dlerror();
#endif
}
}

//ABSTRACT_BASE is the class that all the plugin we be being.
template class Plugin
{
std::string shared_library_filename_;
#ifdef _WIN32
HMODULE shared_library_handle_;
#else
void* shared_library_handle_;
#endif
typedef ABSTRACT_BASE* (*CreateFunction)(void);
CreateFunction create_function_pointer_;

void load()
{
#ifdef _WIN32
shared_library_handle_ = :: LoadLibrary(std::string(shared_library_filename_ + ".dll").c_str());
#else
shared_library_handle_ = ::dlopen(std::string(shared_library_filename_ + ".so").c_str(), RTLD_LAZY|RTLD_GLOBAL);
#endif
if (shared_library_handle_ == NULL)
throw std::string(std::string("Failed to load dynamic library ") + shared_library_filename_.c_str() +
"\nReason: " + ErrorString());
}

CreateFunction getSymbolAddress(const std::string &symbol)
{
if (shared_library_handle_ == NULL)
load();
#ifdef _WIN32
void* rval = ::GetProcAddress(shared_library_handle_, symbol.c_str());
#else
void* rval = ::dlsym(shared_library_handle_, symbol.c_str());
#endif
if (!rval)
throw std::string(std::string("Failed to find symbol ") + symbol + " in dynamic library "
+ shared_library_filename_ + "\nReason: " + ErrorString());

return (CreateFunction) rval;
}
public:
Plugin(const std::string &filename)
: shared_library_filename_(filename), shared_library_handle_(NULL), create_function_pointer_(NULL)
{
}

ABSTRACT_BASE* Create()
{
if (!create_function_pointer_)
create_function_pointer_ = getSymbolAddress("Create");

return create_function_pointer_();
}

~Plugin()
{
if (shared_library_handle_){
#ifdef _WIN32
::FreeLibrary(shared_library_handle_);
#else
::dlclose(shared_library_handle_);
#endif
}

create_function_pointer_ = NULL;
shared_library_handle_ = NULL;
}
};

#endif // endif PLUG_IN
---------- cut here -------------
#Linux Makefile
PLUGIN = Plugin1.so Plugin2.so
PROGS = PluginTest
INCLUDE = -I.
CPPFLAGS = -g $(INCLUDE)
LINKFLAGS = -L/lib -L/usr/lib -Wl,-rpath,.
CXX = g++
LIBS = -lreadline -lpcre
VERSION = 1

all: $(PROGS) $(PLUGIN)

$(PROGS): % : %.o
$(CXX) $(LINKFLAGS) $^ -o $@ $(LIBS)

%.o: %.cc Plugin.h
$(CXX) $(CPPFLAGS) -fPIC -o $@ -c $<

%.so: %.o
$(CXX) -shared -Wl,-soname,$@.$(VERSION) $< -o $@.$(VERSION).0 $(LIBS)
ln -f -s $@.$(VERSION).0 $@

clean:
-rm *.so
-rm *.o
-rm $(PROGS)
-rm $(PLUGIN)
---------- cut here -------------
// Abstract base class. For simplicity's sake, only has one function.
#ifndef PLUGIN_ABSTRACT
#define PLUGIN_ABSTRACT

class PluginAbstract {
public:
virtual const char *Value() const = 0;
};

#endif // endif PLUGIN_ABSTRACT
---------- cut here -------------
#include "pluginabstract.h"

class Plugin1: public PluginAbstract {
public:
virtual const char *Value() const {
return "Plugin1";
}
};

namespace {
extern "C"
{
#ifdef _WIN32
__declspec(dllexport)
#endif
Plugin1 *Create() { return new Plugin1; }
}
}
---------- cut here -------------
#include "pluginabstract.h"

class Plugin2: public PluginAbstract {
public:2
virtual const char *Value() const {
return "Plugin2";
}
};

namespace {
extern "C"
{
#ifdef _WIN32
__declspec(dllexport)
#endif
Plugin2 *Create() { return new Plugin2; }
}
}
---------- cut here -------------
#include "plugin.h"
#include "pluginabstract.h"

#include "iostream"

int main(int argc, char *argv[])
{
try {
Plugin plugin_factory(argv[1]);

PluginAbstract *plugin = plugin_factory.Create();

std::cout << Value()
}
catch(const std::string &e) {
std::cerr << e << std::endl;
return -1;
}
return 0;
}
 
Comments:
Trains?
cheap hydrocodone
 
Relax and enjoy

Casino
viagra
tramadol
cialis
 
Tramadol, viagra

viagra
tramadol
cialis
 
Latest news. Viagra, cialis

viagra
cialis
tramadol
 
NSU - 4efer, 5210 - rulez

 
nascar ticket packages las vegas
 
Switching the shower off John quickly dried himself and Sarah off, kissing each part of her body as he dried it.
Bending he picked her up and carried her in his arms to her bedroom. Once on her bed he kissed her again;
moving down her body to her pert breasts he kissed and sucked her nipples, bringing a moan of pleasure to her lips.
As he suckled at her breasts he slid a hand down over her stomach to her waiting pussy,
running them along her Blowjob Mpegs he coated them in her juices before licking them clean. She tasted so good he had to taste her at the source;
so sliding down the bed he eased her thighs apart. Running his tongue along her babypussy closeup he lapped the juices from her cunt,
causing her to thrust her hips up towards his mouth. As he lapped from her wellspring he rubbed her clit with his 8yofucked,
her moans of pleasure increased as he stimulated her. Coating the adultbouncer crack pass of his free hand in her juices he transferred it to the rosebud of her anus,
before gently easing a finger into her tight backside.
The action of her brotherÂs tongue and arabic live sex chat shot Sarah over the edge into an explosion of an orgasm:
she cried out her pleasure as she came.
 
[url=http://lolitabbsworld.com/teen.shtml]teen[/url]
[url=http://lolitabbsworld.com/pictures.shtml]pictures[/url]
[url=http://lolitabbsworld.com/magic.shtml]magic[/url]
[url=http://lolitabbsworld.com/lolits_porno.shtml]lolits porno[/url]
[url=http://lolitabbsworld.com/Free_Lolita_Pix.shtml]Free Lolita Pix[/url]
[url=http://lolitabbsworld.com/lolitabbs/lolita_bbs_video.shtml]lolita bbs video[/url]
[url=http://lolitabbsworld.com/lolitabbs/best_lolita_bbs.shtml]best lolita bbs[/url]
[url=http://lolitabbsworld.comlolitabbs/zeps_lolita_bbs.shtml]zeps lolita bbs[/url]
[url=http://lolitabbsworld.com/lolitapics/xxx_lolita_pics.shtml]xxx lolita pics[/url]
[url=http://lolitabbsworld.com/lolitapics/sun_lolita_pics.shtml]sun lolita pics[/url]
[url=http://lolitabbsworld.com/lolitapics/pedo_lolita_pics.shtml]pedo lolita pics[/url]
[url=http://lolitabbsworld.com/lolitasex/underage_lolita_sex_pics.shtml]underage lolita sex pics[/url]
[url=http://lolitabbsworld.com/lolitasex/tgp_lolita_sex.shtml]tgp lolita sex[/url]
[url=http://lolitabbsworld.com/lolitasex/prelolita_sex.shtml]prelolita sex[/url]
[url=http://lolitabbsworld.com/lolitasex/lolita_sex_pictures.shtml]lolita sex pictures[/url]
[url=http://lolitabbsworld.com/lolitatgp/wow_lolita_tgp.shtml]wow lolita tgp[/url]
[url=http://lolitabbsworld.com/lolitatgp/russian_lolita_tgp_links.shtml]russian lolita tgp links[/url]
[url=http://lolitabbsworld.com/lolitatgp/lolita_tgp_site.shtml]lolita tgp site[/url]
[url=http://lolitabbsworld.com/lolitatgp/lolita_tgp_free.shtml]lolita tgp free[/url]
[url=http://lolitabbsworld.com/lolitatgp/best_lolita_tgp.shtml]best lolita tgp[/url]
[url=http://lolitabbsworld.com/lolitatgp/art_lolita_tgp.shtml]art lolita tgp[/url]
 
[url=http://free2hosting.info/vacation-deals/index7.html] vacation deals India[/url]
 
[i][b]BUY CHEAP SUPER VIAGRA ONLINE AND SAVE 70 % OF MONEY...[/b][/i]
[url=http://www.drugsmarket.medsjoy.biz]BUY LOW-COST VIAGRA ONLINE[/url]
[url=http://www.creditcardforums.kokoom.com]APPLY YOUR CREDIT CARD and SAVE 70 %[/url]
 
My sister and I love each other, but we fight constantly. We're always saying something rude about one other's hair, clothes, whatever, it doesn't matter, we quarrel. It's getting to the point were [url=http://neednewlolita.com/free_celebrity_sex_clip.shtml]free celebrity sex clip[/url] will put in ear plugs if he's home with us for too long.
The other night, we thought Daddy might turn us over on his knee like he did when we were younger. We were in the bathroom, standing side by side. I looked over and up at my sister; I hated the fact that she was taller than me. She stands five foot seven inches tall, and I a mere five foot even. I think I also resented the fact that she was older than me. We're two years apart, she's 21 and I'm 19. We both have red hair, blue eyes, and freckles, some people have mistaken us for twins, but we're a year apart. Our bodies are different, she doesn't have much in the way of boobs, 36A, is all her cup size is, and I tease her about it all the time. Me, my boobs are a 36D. She doesn't have much in the way of hips either, very narrow she is, and I tell her she looks like a boy, which pisses her off. I got the better body entirely, I have a very shapely figure, and no one could ever mistake me for a boy. I was telling her that she needed to change her outfit, or buy clothes that fit her better. All her clothes drape o
ff of her like potato sacks; she was yelling at me, telling me that I dressed like a slut and I should be more conservative, when [url=http://neednewlolita.com/free_childporn_gallery.shtml]free childporn gallery[/url] burst through the door.
"That's enough! I want to hear no more from either one of you! You are driving me insane! You two are too old for this!"
My sister's first reaction is to get defensive and I let her go first.
"Dad, she started it!"
I looked up at Daddy sheepishly.
"No I didn't Daddy. I was just being honest. I can't help it if she can't stand to hear some criticism."
Daddy looked down at me. He knew what I was doing, but he always sided with me.
"You aren't dressed very well at all, [url=http://neednewlolita.com/free_cross_stitch_patterns.shtml]free cross stitch patterns[/url]."
"You always side with her!"
She turned and gave me a mean look and I stuck my tongue out at her.
"Jessica! That's enough from you too."
I put my eyes down and nodded my head.
"Sorry Daddy I won't do it again."
My sister humphed my way and I moved past her. I stood on my tiptoes and kissed Daddy's cheek. "Sorry to make you angry Daddy."
He patted me on the head and smiled down.
"It's okay Darling. I just wish you two girls would get along."
"I'll try real hard Daddy."
I gave him another kiss, and as I got back behind him I stuck my tongue out at my sister again.
"Daddy! Look! Look what she's doing!"
Daddy didn't turn around.
"That's enough [url=http://neednewlolita.com/free_digimon_hentai_pic.shtml]free digimon hentai pic[/url]! Get on out of here and go to bed!"
The bickering continued of course, until there was a break when Eliza was out with her boyfriend. I was in my room, reading and listen to music, actually enjoying the fact that she wasn't at home. I really hated fighting with her, but I couldn't ever stop myself from doing it. I heard the front door close and Eliza run up the stairs. I also heard Daddy yelling.
"Eliza, is everything alright?"
"Fine, Daddy, everything's fine!"
From the tone of her voice I knew she was okay. So, I went back to reading. I only got a few lines into the book when my door burst open and in came Eliza looking all flushed and fluttered.
"What's wrong? What happened?"
I fought with my sister a lot but I felt protective over her as well.
"Nothing. Well, okay something happened, but it wasn't wrong."
"What? You lost me somewhere in there."
"Oh Jess, it was fuckin' great!"
My eyes widened, my sister doesn't speak like that.
"Okay, what was it? C'mon you gotta tell me!"
"I did it."
I watched Eliza go to the door, check the hall, and then close the door completely.
"You did what?"
"You know!"
"No, I don't. What did you do?"
"Don't make me mad! Not tonight!"
"I'm not trying to make you mad; I don't know what the hell it is you're talking about."
"I had sex."
"Oh, that it?"
"What do you mean, is that it?"
"Well, by the way you came in here I thought maybe you'd had the shit fucked outta ya or something. Just having sex isn't anything special."
"You've had sex before?"
 
[b]LOW-COST CIALIS[/b]
[url=http://www.superviagraforum.kokoom.com/cilis.html]BUY CHEAP CIALIS & LOW-COST VIAGRA ONLINE...[/url]
[b]BUY LOW-COST VIAGRA ! HALF-PRICE CIALIS ! CHEAP LEVITRA ![/b]
[url=http://www.medicforums.kokoom.com/buy-viagra-on-line.html]BUY LOW-COST VIAGRA.HALF-PRICE CIALIS ONLINE[/url]
[b]ACNE MEDICINE ONLINE[/b]
[url=http://www.acneforum.kokoom.com/cheap-accutane.html]cheap accutane[/url]
[b]WHAT IS ANTHELMINTICS[/b]
[url=http://www.albenzaforum.kokoom.com/what-is-albendazole?.html]What is albendazole?[/url]
[b]ANTIBACTERIAL MEDICINE & CARE[/b]
[url=http://www.bacterialforum.kokoom.com/by-amoxil.htm
l]by amoxil[/url]
[b]AMPICILLIN ONLINE[/b]
[url=http://www.ampizilinforum.kokoom.com/ampcillin.html]ORDER AMPICILLIN [/url]
[b]BUY CHEAP BACTRIM[/b]
[url=http://www.antibacterialforum.kokoom.com/buy-bactrim--without-prescription.html]buy bactrim without prescription[/url]
[b]NEW DRUGS & PILLS… SUPER-VIAGRA…[/b]
[url=http://www.superviagraforum.kokoom.com/cialis.html] CHEAP CIALIS ONLINE[/url]
[b]BUY CIPRO ONLINE[/b]

[url=http://www.ciproforums.kokoom.com/cipro-low-cost.html]cipro low-cost[/url]
[b]BUY CHEAP DIFLUCAN ONLINE[/b]
[url=http://www.antifungalforum.kokoom.com/online-diflucan.html]online diflucan[/url]
[i][b]BUY CHEAP SUPER VIAGRA ONLINE AND SAVE 70 % OF MONEY...[/b][/i]
[url=http://www.newviagraforum.medsjoy.biz]ORDER HALF-PRICE CIALIS VIAGRA LEVITRA[/url]
[url=http://www.creditcardforums.kokoom.com]VISA MASTER CARD[/url]
 
hi people,this is a simple test
sorry [url="http://cfzlmsjmni-video.blogspot.com//"]sex video[/url]
hhh
 
[url=http://free-porn-sites.hostithere.org/]Amazing Hardcore Pornstar Action With Hot Blonde Anna Nova[/url]
[url=http://6dws-adult-sites.blogspot.com/]Brunette Teen Pornstar Catalina In Peeing And Sucking Action[/url]
[url=http://0wdy-adult-sites.blogspot.com/]Tits and ass in sexy pink[/url]
[url=http://4yqp-adult-sites.blogspot.com/]American Blonde Babe With Perky Tits Poses Naked After[/url]
[url=http://0wdy-adult-sites.blogspot.com/]Busty Pornstar Angel Dark Stripping And Toying Her Snatch[/url]

[url=http://3dms-adult-sites.blogspot.com/2007/03/teenboatcom.html]teenboat.com[/url]
[url=http://0esy-adult-sites.blogspot.com/2007/03/3piccom.html]3pic.com[/url]
[url=http://5wdo-adult-sites.blogspot.com/2007/03/pictureheavencom.html]pictureheaven.com[/url]
[url=http://4yqp-adult-sites.blogspot.com/2007/03/panty-asscom.html]panty-ass.com[/url]
[url=http://7shg-adult-sites.blogspot.com/2007/03/phunorg.html]phun.org[/url]
[url=http://4udf-adult-sites.blogspot.com/2007/03/fuckkcom.html]fuckk.com[/url]
[url=http://7hgu-adult-sites.blogspot.com/2007/03/duckyporncom.html]duckyporn.com[/url]
[url=http://0wdy-adult-sites.blogspot.com/2007/03/galleries4freecom.html]galleries4free.com[/url]
[url=http://3dms-adult-sites.blogspot.com/2007/03/sexmaxxcom.html]sexmaxx.com[/url]
[url=http://2apd-adult-sites.blogspot.com/2007/03/maturedailynet.html]maturedaily.net[/url]
 
Clothes and style for women
[URL=http://teamsugar.com/user/sexshoes/blog/194874]sedu short hairstyles[/URL]


http://teamsugar.com/user/sexshoes/blog/194874
 
[url=http://lu-porn-video-download.blogspot.com/]Nasty Blonde Amateur Gets A Full Fist In Her Pussy[/url]
[url=http://teenager-porn.futureblog.org/]Black Boots Amateur[/url]
[url=http://best-porn.futureblog.org/]Doctor Gives His Horny Patient A Gyno And Anal Examination[/url]
[url=http://bi-xxx-video-download.blogspot.com/]Asian Pornstar Gets Black Gangbang[/url]
[url=http://bi-xxx-video-download.blogspot.com/]Adorable brunette in sexy lingerie[/url]
[url=http://fresh-sex.futureblog.org/]Adorable Shemale In Feather Outfit Shows Her Big Round Ass[/url]
[url=http://teenager-sex.futureblog.org/]Eva Angelina Busty Manager Steeling Money[/url]

[url=http://qo-video-porn-gratis-download.blogspot.com/2007/03/video-de-porn-gratis.html]video de porn gratis[/url]
[url=http://ju-free-porn-video-download.blogspot.com/2007/03/free-porn-video-download.html]free porn video download[/url]
[url=http://no-free-sex-video-download.blogspot.com/2007/03/free-lesbian-sex-video.html]free lesbian sex video[/url]
[url=http://ze-sex-video-download.blogspot.com/2007/03/free-full-length-sex-video.html]free full length sex video[/url]
[url=http://bi-britney-spears-video-download.blogspot.com/2007/03/video-porn-de-britney-spears.html]video porn de britney spears[/url]
[url=http://ni-gay-video-download.blogspot.com/2007/03/anime-gay-video.html]anime gay video[/url]
[url=http://do-hot-video-download.blogspot.com/2007/03/free-hot-porn-video.html]free hot porn video[/url]
 
[url=http://co-video-de-sexo-gratis-download.blogspot.com/]Angelina Crow Fucked Hard[/url]
[url=http://hu-spring-break-girl-video-download.blogspot.com/]Tight round ass of sexy kari[/url]
[url=http://ku-nude-video-download.blogspot.com/]Amateur Mature Showing Pussy[/url]
[url=http://lo-home-sex-video-download.blogspot.com/]Lustful Latina Eating A Juicy Cock And Banging Hard Anally[/url]
[url=http://adult-sites-review.beaffaired.com/]Amazing 3some Action With Two Girls And A Well Hung Stud[/url]
[url=http://teen-porn-stars.beaffaired.com/]Beautiful Celebrity Angelina Jolie In Sexy Hot Lesbian[/url]
[url=http://ci-video-pornograficos-download.blogspot.com/]Amateur Amber Is Horny[/url]

[url=http://adult-sites-review.beaffaired.com/richards-realm.com.html]richards-realm.com[/url]
[url=http://ge-free-lesbian-video-download.blogspot.com/2007/03/free-lesbian-sex-video-download.html]free lesbian sex video download[/url]
[url=http://adult-sites-review.beaffaired.com/teentiger.com.html]teentiger.com[/url]
[url=http://adult-sites-review.beaffaired.com/pandamovies.com.html]pandamovies.com[/url]
[url=http://ri-hardcore-video-download.blogspot.com/2007/03/free-hardcore-anal-video.html]free hardcore anal video[/url]
[url=http://adult-sites-review.beaffaired.com/groovybus.com.html]groovybus.com[/url]
[url=http://adult-sites-review.beaffaired.com/tinyeve.net.html]tinyeve.net[/url]
 
[url=http://amateur-porn.hereandnow0.com/]Hot Babe Eve Angel In The Shower Showing Off Her Pussy[/url]
[url=http://jzllteva-teensite.blogspot.com/]Horny Asian Schoolgirl Fingered And Masturbated[/url]
[url=http://pjryskur-teensite.blogspot.com/]Tgirl And Guy In Oral Action[/url]
[url=http://hguldxxe-teensite.blogspot.com/]Sexy Horny Moms In Action[/url]
[url=http://fzdlcfzh-teensite.blogspot.com/]Excited Adorable Lesbian Teenies Making Love With Huge Red Dildo[/url]
[url=http://pjryskur-teensite.blogspot.com/]Two Pussy Hungry Babes In Lesbian Action[/url]
[url=http://amateur-porn.hereandnow0.com/]Great Ebony Hardcore Action With Truly Hot Pornstar Shari[/url]

[url=http://smnvapnd-teensite.blogspot.com/2007/03/teenboat.html]teenboat[/url]
[url=http://fzdlcfzh-teensite.blogspot.com/2007/03/chat-single-teen.html]chat single teen[/url]
[url=http://vtrxzzwj-teensite.blogspot.com/2007/03/pink-world.html]pink world[/url]
[url=http://smnvapnd-teensite.blogspot.com/2007/03/pic-sex-teen.html]pic sex teen[/url]
[url=http://xbyzkngo-teensite.blogspot.com/2007/03/bbs-teen.html]bbs teen[/url]
[url=http://hguldxxe-teensite.blogspot.com/2007/03/moms-teaching-teen.html]moms teaching teen[/url]
[url=http://smnvapnd-teensite.blogspot.com/2007/03/teenboat.html]teenboat[/url]
[url=http://bbndsxtg-teensite.blogspot.com/2007/03/free-teen-porn.html]free teen porn[/url]
[url=http://bbndsxtg-teensite.blogspot.com/2007/03/blow-job-teen.html]blow job teen[/url]
[url=http://smnvapnd-teensite.blogspot.com/2007/03/chat-rom-teen.html]chat rom teen[/url]
[url=http://onuzmvau-teensite.blogspot.com/2007/03/butt-teen.html]butt teen[/url]
[url=http://onuzmvau-teensite.blogspot.com/2007/03/pregnancy-teen.html]pregnancy teen[/url]
[url=http://smnvapnd-teensite.blogspot.com/2007/03/free-sex-teen-video.html]free sex teen video[/url]
[url=http://smnvapnd-teensite.blogspot.com/2007/03/bedding-teen.html]bedding teen[/url]
[url=http://xbyzkngo-teensite.blogspot.com/2007/03/angel-teen.html]angel teen[/url]
 
[url=http://qlfhatck-p-stars.blogspot.com/]Blonde lovely lizzy outside[/url]
[url=http://ovtciofj-p-stars.blogspot.com/]Sweet Adorable Teen Hardcore Fucking Boned And Gets Messy Facial[/url]
[url=http://jylqyxeg-p-stars.blogspot.com/]Redhead Gets Her Anal Fucking[/url]
[url=http://ozetnwto-p-stars.blogspot.com/]Asian Teen Pornstar Sabrine Maui Blowjob And Analsex Fucking[/url]
[url=http://uvlzgxig-p-stars.blogspot.com/]Redhead Bride Deep Anal Fucked[/url]
[url=http://xdqgyjux-p-stars.blogspot.com/]American Bisexual Orgy[/url]
[url=http://pbctybpc-p-stars.blogspot.com/]Gorgeous Blonde Model In Hot Watersports Action[/url]

[url=http://ozetnwto-p-stars.blogspot.com/2007/03/evelyn-lin.html]Evelyn Lin[/url]
[url=http://xdqgyjux-p-stars.blogspot.com/2007/03/angela-stone.html]Angela Stone[/url]
[url=http://ovtciofj-p-stars.blogspot.com/2007/03/anita-blond.html]Anita Blond[/url]
[url=http://egawztzy-p-stars.blogspot.com/2007/03/eve-lawrence.html]Eve Lawrence[/url]
[url=http://yvyhhncb-p-stars.blogspot.com/2007/03/tyler-faith.html]Tyler Faith[/url]
[url=http://xdqgyjux-p-stars.blogspot.com/2007/03/alicia-angel.html]Alicia Angel[/url]
[url=http://fsktsrmf-p-stars.blogspot.com/2007/03/samantha-ryan.html]Samantha Ryan[/url]
[url=http://qlfhatck-p-stars.blogspot.com/2007/03/gauge.html]Gauge [/url]
[url=http://tulywwsd-p-stars.blogspot.com/2007/03/kelly-tyler.html]Kelly Tyler[/url]
[url=http://uvlzgxig-p-stars.blogspot.com/2007/03/kathy-anderson.html]Kathy Anderson[/url]
[url=http://jylqyxeg-p-stars.blogspot.com/2007/03/sophie-dee.html]Sophie Dee[/url]
[url=http://xdqgyjux-p-stars.blogspot.com/2007/03/katie-ray.html]Katie Ray[/url]
[url=http://egawztzy-p-stars.blogspot.com/2007/03/jill-kelly.html]Jill Kelly[/url]
[url=http://yvyhhncb-p-stars.blogspot.com/2007/03/alexa-may.html]Alexa May[/url]
[url=http://xdqgyjux-p-stars.blogspot.com/2007/03/alicia-angel.html]Alicia Angel[/url]
 
[url=http://zuj-atkmodels-com.blogspot.com/]Gorgeous Asian Fat Girl Rammed Hard[/url]
[url=http://wuq-celebrityscandal-com.blogspot.com/]Angelina Swallows Cum[/url]
[url=http://jop-bravogirls-com.blogspot.com/]Busty Black Amateur Eaten By Girlfriend[/url]
[url=http://cev-18to19-com.blogspot.com/]Adorable Babe Getting Pussy Drilled[/url]
[url=http://vuf-finalteens-com.blogspot.com/]All American Slut[/url]
[url=http://jiw-africanvagina-com.blogspot.com/]Two Shemale Friends In Steamy Hardcore Action[/url]
[url=http://pip-toons-fuck-com.blogspot.com/]Busty Babe Asian Pornstar Bamboo Blowjob And Analsex Cumshot[/url]
[url=http://pun-cliphunter-com.blogspot.com/]Latina Wants Americans[/url]
[url=http://rug-30moms-com.blogspot.com/]Chubby Ebony Babe Gets Fucked And An Internal Anal Cumshot[/url]
[url=http://wic-barefootmaniacs-com.blogspot.com/]Blonde Busty Mature Mom Discovers Anal[/url]

[url=http://fiw-drbizzaro-com.blogspot.com/]drbizzaro.com[/url] [url=http://sof-alexmovies-com.blogspot.com/]alexmovies[/url] [url=http://veh-8thstreetlatinas-com.blogspot.com/]8thstreetlatinas.com[/url] [url=http://vik-adult-list-com.blogspot.com/]adult-list.com[/url] [url=http://bit-dixiecuties-com.blogspot.com/]dixiecuties[/url] [url=http://pil-camelclips-com.blogspot.com/]camelclips[/url] [url=http://zod-123clips-com.blogspot.com/]123clips[/url] [url=http://lep-brandibelle-com.blogspot.com/]brandibelle.com[/url] [url=http://pec-busstopwhores-com.blogspot.com/]busstopwhores[/url] [url=http://hec-88by88-com.blogspot.com/]88by88[/url] [url=http://pov-fattythumbs-com.blogspot.com/]fattythumbs[/url] [url=http://xug-blboys-com.blogspot.com/]blboys.com[/url] [url=http://vip-coedcherry-com.blogspot.com/]coedcherry[/url] [url
=http://bof-bootycollection-com.blogspot.com/]bootycollection.com[/url] [url=http://fiw-drbizzaro-com.blogspot.com/]drbizzaro[/url] [url=http://neg-badassteens-com.blogspot.com/]badassteens[/url] [url=http://tih-gallview-com.blogspot.com/]gallview.com[/url] [url=http://kil-duckyporn-com.blogspot.com/]duckyporn.com[/url] [url=http://kof-famouspornstars-com.blogspot.com/]famouspornstars[/url] [url=http://tuv-freehugemovies-com.blogspot.com/]freehugemovies[/url]
 
Let me introduce yo you men's health mix'es from "ED Selected"!
New project: [url=http://www.nursing-online.net/Trial-Packs.htm]Trial packs[/url] from Nursing-Online and EDSelected ( http://www.nursing-online.net/ )
VIAGRA CIALIS LEVITRA all tabs in one pack for an extreamly low-trial prices!

Hurry up! Special offer may stop any moment!

Feel free to write me - mailto:trialpacks@yahoo.co.uk
 
Hi, Nice stuff. I found a cool news widget for our blogs at www.widgetmate.com. Now I can show the latest news on my blog. Worked like a breeze.
 
It is definitely easier to find out informative tidbits on the erectile dysfunction drug Viagra by inserting the keyword “Viagra” in the Google search tool bar. You can also log into theResources section of the website http://www.buy-viagra-with-us.com, and obtain comprehensive Viagra information.
 
Hi!
You may probably be very interested to know how one can make real money on investments.
There is no initial capital needed.
You may begin to get income with a sum that usually is spent
on daily food, that's 20-100 dollars.
I have been participating in one project for several years,
and I'm ready to share my secrets at my blog.

Please visit my pages and send me private message to get the info.

P.S. I earn 1000-2000 per day now.

http://theinvestblog.com [url=http://theinvestblog.com]Online Investment Blog[/url]
 
Post a Comment



<< Home
Programming design, tips, pitfalls and stories from the front lines of software developmnet.

Name:
Location: Lake Arrowhead, California
ARCHIVES
September 2006 /


Powered by Blogger