Tuesday, October 2, 2007

WideFinder and Java

Update: I realized there is a stupid bug in the concurrent version that I posted. ConcurrentHashMap.putIfAbsent returns null if there was no previous value - not the new value - so I was missing one increment and the Executor seemed to be eating the NullPointerException. I've updated the code below.

Everyone seems to getting in on Tim Bray's WideFinder challenge; there is even a C++ implementation.
I think it was originally supposed to be a competition between all those new and exciting dynamic languages, but they have not be overly impressive thus far. So I've decided to post up my various attempts at a solution in Java. Here is the basic WideFinder in Java (all import statements are omitted for brevity):


public class WideFinder {
public static void main(String[] args) throws IOException {
Map<String, Integer> counts = new HashMap<String, Integer>();
Pattern p = Pattern.compile("GET /ongoing/When/\\d\\d\\dx/(\\d\\d\\d\\d/\\d\\d/\\d\\d/[^ .]+) ");
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(args[0]), "US-ASCII"));

String line = null;
while ((line = in.readLine()) != null) {
Matcher m = p.matcher(line);
if (m.find()) {
String key = m.group();
Integer currentCount = counts.get(key);
counts.put(key, (currentCount == null ? 1 : (currentCount + 1)));
}
}
in.close();

List<Entry<String, Integer>> results = new ArrayList<Map.Entry<String, Integer>>(counts.entrySet());
Collections.sort(results, new Comparator<Entry<String, Integer>>() {

public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2)
{
return o2.getValue().compareTo(o1.getValue());
}

});

for(int i = 0; i < 10; i++) {
System.out.println(results.get(i));
}
}
}



The basic version is very similar to the Ruby one, if a little more verbose. Like all of the others, it is primarily IO bound. One important thing I found, was that specifying the encoding as being ASCII made about 30% improvement in the time taken. This is because Java uses unicode strings internally, and if you read text without specifying an encoding it will use the platform default. ASCII is a good bit quicker to convert than ISO-8859-1.

For a file with 1 million entries I got the following times:

real 0m3.208s
user 0m3.460s
sys 0m0.215s

Taking the regexp out:

real 0m2.267s
user 0m2.329s
sys 0m0.210s

So we can potentially save up to 1 second, almost 1/3 of the time. My first solution was to try to keep things as close to the original as possible. For each line, instead of matching it directly, I submit a new task to an ExecutorService. To make the map safe to access from multiple threads I use a ConcurrentHashMap, with AtomicIntegers as values.


public class WideFinderConcurrent {
public static void main(String[] args) throws IOException, InterruptedException {
int threads = Integer.parseInt(args[1]);
ExecutorService executorService = Executors.newFixedThreadPool(threads);

final ConcurrentHashMap<String, AtomicInteger> counts = new ConcurrentHashMap<String, AtomicInteger>();
final Pattern p = Pattern.compile("GET /ongoing/When/\\d\\d\\dx/(\\d\\d\\d\\d/\\d\\d/\\d\\d/[^ .]+) ");

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "US-ASCII"));

String line = null;
while ((line = in.readLine()) != null) {
final String lineForTask = line;
executorService.execute(new Runnable() {
public void run() {
Matcher m = p.matcher(lineForTask);
if (m.find()) {
String key = m.group();

AtomicInteger currentCount = counts.get(key);
if (currentCount == null) {
currentCount = new AtomicInteger(0);
AtomicInteger old = counts.putIfAbsent(key, currentCount);
if (old != null) {
currentCount = old;
}
}
currentCount.incrementAndGet();
}
}
});
}

in.close();
executorService.shutdown();
executorService.awaitTermination(100000, TimeUnit.SECONDS);

List<Entry<String, AtomicInteger>> results = new ArrayList<Map.Entry<String, AtomicInteger>>(counts.entrySet());
Collections.sort(results, new Comparator<Entry<String, AtomicInteger>>() {
public int compare(Entry<String, AtomicInteger> o1, Entry<String, AtomicInteger> o2) {
int anotherVal = o1.getValue().get();
int thisVal = o2.getValue().get();
return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
}
});

for(int i = 0; i < 10; i++) {
System.out.println(results.get(i));
}
}
}


The performance for this version is pretty poor:
real 0m5.407s
user 0m11.921s
sys 0m4.023s

Most of the locking is probably uncontended but there is still significant overhead. It also is probably not a great idea to use lots and lots of AtomicIntegers. With more work being done in the tasks it might be more reasonable. The next step was to get my hands dirty with low level threading. Many bloggers will have you believe this is impossible to get right, but somehow I've managed to write a fair bit of multithreaded code with manual synchronization without causing horrible errors. For this version I just used two threads: the main thread doing the reading, and another thread doing the regexp match and map update. I didn't bother trying to parallelize the sort. The main thread will pass lines on a queue to the regexp thread. Once the file is finished a special object is put on the queue to indicate that. We then wait for the regexp thread to finish and get the map back. Obviously locking overhead will be a problem so instead of putting lines on the queue one by one batches of lines are used.


public class WideFinder2ThreadsBulk {
public static void main(String[] args) throws IOException, InterruptedException {
int batchSize = Integer.parseInt(args[1]);
Pattern p = Pattern.compile("GET /ongoing/When/\\d\\d\\dx/(\\d\\d\\d\\d/\\d\\d/\\d\\d/[^ .]+) ");

LineCounter counter = new LineCounter(p);
Thread t = new Thread(counter);
t.start();

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "US-ASCII"));

String line = null;
List<String> batch = new ArrayList<String>(batchSize);
while ((line = in.readLine()) != null) {
batch.add(line);
if (batch.size() == batchSize) {
counter.addLines(batch);
batch = new ArrayList<String>(batchSize);
}
}
counter.addLines(batch);
counter.finished();

t.join();
in.close();

List<Entry<String, Integer>> results = new ArrayList<Map.Entry<String, Integer>>(counter.getCounts().entrySet());
Collections.sort(results, new Comparator<Entry<String, Integer>>() {
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2)
{
return o2.getValue().compareTo(o1.getValue());
}
});

for(int i = 0; i < 10; i++) {
System.out.println(results.get(i));
}
}

static class LineCounter implements Runnable {
private static final List<String> FINISHED = new ArrayList<String>();
private final BlockingQueue<List<String>> queue = new ArrayBlockingQueue<List<String>>(100);
private final Pattern pattern;
private final Map<String, Integer> counts = new HashMap<String, Integer>();

LineCounter(Pattern pattern) {
this.pattern = pattern;
}

public void run() {
List<String> lines = null;
try {
while ((lines = queue.take()) != FINISHED) {
for (String line : lines) {
Matcher m = pattern.matcher(line);
if (m.find()) {
String key = m.group();
Integer currentCount = counts.get(key);
counts.put(key, (currentCount == null ? 1 : (currentCount + 1)));
}
}
}
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}

void addLines(List<String> batch) throws InterruptedException {
queue.put(batch);
}

void finished() throws InterruptedException {
queue.put(FINISHED);
}

Map<String, Integer> getCounts() {
return counts;
}
}
}



Finally we get some speedup (for batches of 500 lines):
real 0m2.597s
user 0m4.137s
sys 0m0.294s

You could generalize this for multiple threads, but it likely would not be worth the effort. Really, this whole exercise probably isn't worth the effort. In fact, I feel like we have all failed one of Steve Yegge's interview questions. A commenter on Tim Bray's blog shows that Unix command line utilities are the way to go, while we have been writing big programs, and trying to optimize file IO. Another - probably easy - way to do this would be to suck the data into your preferred DB, and run a single (simple) SQL query. But that wouldn't be fun, would it?

91 comments:

paulo said...

Friend, is this code :
AtomicInteger currentCount = counts.get(key);
if (currentCount == null) {
currentCount = counts.putIfAbsent(key, new AtomicInteger(0));
} currentCount.incrementAndGet();

not equivalent to this :
AtomicInteger currentCount = counts.putIfAbsent(key, new AtomicInteger(0);
currentCount.incrementAndGet();

only, errr, slower?

UnintentionalObjectRetention said...

It is equivalent, but it probably isn't faster.
AtomicIntegers aren't as cheap to create as regular Integers, so we probably don't want to create lots of them unnecessarily. You would expect most articles to have multiple entries in the log file, so you would be creating a lot of objects to throw away immediately. That probably isn't the best idea even for regular Integers. putIfAbsent probably holds onto a lock for ever so slightly longer than a get, so that might make a difference too.

Tim said...

Shoot me the code with the imports and I'll give it a whack on the big iron. NetBeans couldn't auto-figure-out the imports and my Java is getting rusty... tim dot bray at sun dot com

UnintentionalObjectRetention said...

I sent the code on a couple of days ago. Hopefully it hasn't been eaten or something.

Tom said...

Ehm,

why wouldnt you show the imports in your post ? It would give us instant gratification ;)

T.

Anonymous said...

I found this site using [url=http://google.com]google.com[/url] And i want to thank you for your work. You have done really very good site. Great work, great site! Thank you!

Sorry for offtopic

Anonymous said...

Who knows where to download XRumer 5.0 Palladium?
Help, please. All recommend this program to effectively advertise on the Internet, this is the best program!

Anonymous said...

Online Casino Games tyuueooru
http://stonewalljacksoncarnival.org/ - No Download Casino
Therefore, the more the online casino, the more the casino options and offers as well.
[url=http://stonewalljacksoncarnival.org/]Virtual Casino[/url]
Therefore, the more the online casino, the more the casino options and offers as well.
Casino Money
You can enjoy online casino simply by getting connected to the Internet.

Anonymous said...

[url=http://forums.alphaplus.ca/archive/post.php]Cheapest priced Cialis[/url]

Anonymous said...

Takings Our Risqu‚ Prices at www.Pharmashack.com, The Unequalled [b][url=http://www.pharmashack.com]Online Chemist's workshop [/url][/b] To [url=http://www.pharmashack.com]Buy Viagra[/url] Online ! You Can also Espy Honoured Deals When You [url=http://www.pharmashack.com/en/item/cialis.html]Buy Cialis[/url] and When You You [url=http://www.pharmashack.com/en/item/levitra.html]Buy Levitra[/url] Online. We Also Comrades a Tickety-boo Generic [url=http://www.pharmashack.com/en/item/phentermine.html]Phentermine[/url] Recompense the benefit of Your Nutriment ! We Talk over away Swap splotch [url=http://www.pharmashack.com/en/item/viagra.html]Viagra[/url] and Also [url=http://www.pharmashack.com/en/item/generic_viagra.html]Generic Viagra[/url] !

Anonymous said...

dating timeline [url=http://loveepicentre.com/]dating questions[/url] zelda dating sim http://loveepicentre.com/ singles events in boston

Anonymous said...

It isn't hard at all to start making money online in the underground world of [URL=http://www.www.blackhatmoneymaker.com]blackhat seo tools[/URL], You are far from alone if you have no clue about blackhat marketing. Blackhat marketing uses little-known or not-so-known ways to generate an income online.

Anonymous said...

depression feeling lack of motivation [url=http://usadrugstoretoday.com/products/inderal.htm]inderal[/url] cold smoke rib roast first http://usadrugstoretoday.com/products/minocin.htm how long does it take for blood pressure medicine to work http://usadrugstoretoday.com/products/ed-strips.htm
how to reschedule diabetic pets insulin doses [url=http://usadrugstoretoday.com/products/trimox.htm]trimox[/url] reasons for vaginal itching [url=http://usadrugstoretoday.com/products/kamagra-oral-jelly.htm]mens health link lees summit[/url]

Anonymous said...

Hello,

Do you guys watch movies in theater or on internet? I use to rent DVD movies from [b]Redbox.com[/b]. Recently I discovered that we can watch all new movies on internet on day, they are released. So why should I spend money on renting movies??? So, can you guys please tell me where I can [url=http://www.watchhotmoviesfree.com]watch latest movie 30 Minutes or Less 2010[/url] for free?? I have searched [url=http://www.watchhotmoviesfree.com]Youtube.com[/url], [url=http://www.watchhotmoviesfree.com]Dailymotion.com[/url], [url=http://www.watchhotmoviesfree.com]Megavideo.com[/url] but, Could not find a good working link. If you know any working link please share it with me.


Thanks

Anonymous said...

http://poow.in/ginseng/bonsai-ficus-ginseng-care
[url=http://poow.in/gaba/gaba-side-effects]waldorf astoria pharmacy[/url] drug white crosses [url=http://poow.in/labetalol/labetalol-broncotis]labetalol broncotis[/url]
online pharmacy prices http://poow.in/zyban/zyban-150-mg-glaxo-wellcome
[url=http://poow.in/xanax/what-are-the-difference-between-yellow-and-white-xanax]camp bethel drug detox program north carolina[/url] vinnie betony beaver county times drug bust articles [url=http://poow.in/melatonin/melatonin-during-pregnancy]melatonin during pregnancy[/url]
noupoort drug rehab centre http://poow.in/risperidone/technetiun-labeled-risperidone
[url=http://poow.in/levodopa/subdermal-implants-levodopa]virginia pharmacy license[/url] douglas pharmacy [url=http://poow.in/geodon/geodon-patient-assistance-program]geodon patient assistance program[/url] alzheimer drug [url=http://poow.in/levaquin/levaquin-psychosis]levaquin psychosis[/url]

Anonymous said...

clothes storage bins http://topcitystyle.com/xxl-funky-size8.html faux chanel earrings [url=http://topcitystyle.com/etro-milano-dress-shirts-brand36.html]wholesale fashion accessories australia[/url] tod fashion designer
http://topcitystyle.com/-casual-shirts-roberto-cavalli-category71.html scub clog shoes [url=http://topcitystyle.com/armani-jeans-cut-pants-brand8.html]designer plus sizes[/url]

Anonymous said...

kidney stones lemon [url=http://usadrugstoretoday.com/products/dulcolax.htm]dulcolax[/url] cliapan drug http://usadrugstoretoday.com/products/celexa.htm
attention deficit disorder meditation [url=http://usadrugstoretoday.com/products/amaryl.htm]amaryl[/url] non prescription contact lens order contacts online [url=http://usadrugstoretoday.com/products/alpha-lipoic-acid.htm ]underage smoking in singapore [/url] down syndrome and heart defect
valentine key to my heart keychains [url=http://usadrugstoretoday.com/products/aldactone.htm]aldactone[/url] high protein blood disorder http://usadrugstoretoday.com/products/indinavir.htm
health net orange plan [url=http://usadrugstoretoday.com/products/lopid.htm]lopid[/url] nj dental hygienist school [url=http://usadrugstoretoday.com/products/tretinoin-cream-0-05-.htm ]lsu medical center south [/url] diabetes check feet

Anonymous said...

that are the side effect of medicine after a thyroid is removed [url=http://usadrugstoretoday.com/products/viagra-plus.htm]viagra plus[/url] canadian mental health statistics http://usadrugstoretoday.com/products/pulmicort.htm
philippine herbal medicine [url=http://usadrugstoretoday.com/products/levitra-professional.htm]levitra professional[/url] smoke hole caverns [url=http://usadrugstoretoday.com/products/eulexin.htm ]ezorb calcium supplements [/url] what is a normal blood count
nitroglycerin pills [url=http://usadrugstoretoday.com/products/avandia.htm]avandia[/url] articles on low immune systems in the elderly http://usadrugstoretoday.com/catalogue/1.htm
how to duct tape your breast for strapless dress [url=http://usadrugstoretoday.com/products/risperdal.htm]risperdal[/url] alphabetical drug list prescription [url=http://usadrugstoretoday.com/products/plavix.htm ]rising cost of prescription drugs [/url] raliegh north soccer shoot out

Anonymous said...

trimaran designer http://www.thefashionhouse.us/28-stretch-jeans-size18.html polish horseshoes [url=http://www.thefashionhouse.us/46-versace-size4.html]mens wide shoes[/url] outlet athletic shoes
http://www.thefashionhouse.us/grey-black-men-color238.html designer inspired handbags [url=http://www.thefashionhouse.us/?action=products&product_id=1823]chanel pearls from the oc[/url]

Anonymous said...

medicine hat online menu [url=http://usadrugstoretoday.com/products/flagyl-er.htm]flagyl er[/url] how many people diet each year http://usadrugstoretoday.com/products/diovan.htm
how many days rest for muscle growth [url=http://usadrugstoretoday.com/products/calcium-carbonate.htm]calcium carbonate[/url] hoosier heart farm [url=http://usadrugstoretoday.com/products/lisinopril.htm ]physical fitness enhancement [/url] history of herpes zoster
adult drug treatment programs [url=http://usadrugstoretoday.com/index.php?lng=it&cv=eu]No prescription online pharmacy[/url] neck symptoms cancer head lump pain health throat include sore http://usadrugstoretoday.com/products/female-viagra.htm
medical empath [url=http://usadrugstoretoday.com/products/flagyl-er.htm]flagyl er[/url] childrens riddles about health [url=http://usadrugstoretoday.com/products/medrol.htm ]benedryl dosage infants [/url] medical errors dealing with arthritis

Dean said...

greetings to all.
I would first like to thank the writers of this blog by sharing information, a few years ago I read a book called guanacaste costa rica in this book deal with questions like this one.

Anonymous said...

Amiable post and this post helped me alot in my college assignement. Say thank you you as your information.

niz said...

Hello .. firstly I would like to send greetings to all readers. After this, I recognize the content so interesting about this article. For me personally I liked all the information. I would like to know of cases like this more often. In my personal experience I might mention a book called Generic Viagra in this book that I mentioned have very interesting topics, and also you have much to do with the main theme of this article.

Anonymous said...

Yoou! present
[url=http://tube.hqporn.us/][img]http://pics.hqtube.com/gallery/pink_eye_2_sc4_3.jpg[/img][/url] [url=http://granny.hqporn.us/][img]http://pics.hqtube.com/gallery/white_panty_chronicles_19_sc2_2.jpg[/img][/url] [url=http://granny.hqporn.us/][img]http://pics.hqtube.com/gallery/naughty_little_nymphs_2_sc2_1.jpg[/img][/url] [url=http://tube.hqporn.us/][img]http://pics.hqtube.com/gallery/handjobs_17_sc2_3.jpg[/img][/url]
Absolute Pornstars Brief Review: [url=http://shemale.hqporn.us/]chica porn [/url] , free bleach porn [url=http://granny.hqporn.us/]lil lexy porn videos [/url] or porn samples [url=http://join.hqtube.com/track/qx4DABkR/]jenna jameson porn star [/url] , hard core gay porn [url=http://squirts.hqporn.us/]neat porn movies [/url] or elderly porn [url=http://milf.hqporn.us/]women of porn [/url] , tinkerbell porn [url=http://tube.hqporn.us/]hamster video porn [/url] and youtube porn [url=http://tube.hqporn.us/]pregant porn [/url] or muscle free gay porn [url=http://squirts.hqporn.us/]vietnamese porn [/url] , High definition video porn site starring the most gorgeous pornstars in the hardcore action. [url=http://www.radionhb.com/chat//viewtopic.php?p=166339#166339]medical porn [/url] . The problem with Absolute Pornstars is that they don’t have very much content. There are 44 DVDs they’ve gotten the licenses to or added or however they do it. That means you’re looking at roughly 175 scenes to download, which means that a whole bunch of the pornstars here have no videos at all. The picture galleries aren’t exclusive and neither are the videos. That all adds up to them charging too much money for a membership. $39.95 is a stretch for membership to a fairly small site. [url=http://miwan.com.tw/bbs//viewtopic.php?p=56884#56884]porn limewire [/url] . F Sweet Undressing Teen new [url=http://forex.usdfy.com/bbs//viewtopic.php?p=392153#392153]usenet porn [/url] . Teen lady engulfs a very big black sword with her mouth and twat. [url=http://www.stlmusiclive.com/viewtopic.php?f=51&t=35244&p=290329#p290329]tottaly spies porn [/url] . 13 pics of Amateurs : watch payton gobble and fuck this young guys cock [url=http://www.matadorespr.net/foro/index.php?showtopic=33530&st=0&gopid=51991&#entry51991]777 porn [/url] , Category: FREE > Straight > Porn Stars [url=http://lesbian.hqporn.us/]kim porn [/url] , japanese porn in japan [url=http://squirts.hqporn.us/]free full porn videos [/url] or porn with mom and dad [url=http://squirts.hqporn.us/]cellphone porn [/url] , voyager porn [url=http://milf.hqporn.us/]porn petite girls [/url] or porn for adults [url=http://squirts.hqporn.us/]free porn babes [/url] , croc porn reviews [url=http://japan.hqporn.us/]lesbian porn pictures [/url] and male porn [url=http://shemale.hqporn.us/]watch porn free [/url] or porn movie downloads [url=http://squirts.hqporn.us/]australian porn stars [/url] , A site featuring bi-sexual MMF action [url=http://www.envaccord.com/modules.php?name=Forums&file=viewtopic&p=1508233#1508233]clasic porn [/url] . Category: FREE > Straight > Interracial [url=http://www.soldatfan.laa.pl/viewtopic.php?p=150882#150882]vintage 80 s porn [/url] . 13 pics of Housewifes : slutty wife in mesh lingerie gets naughty [url=http://www.coachhosting.de/bvv/opinio_commutare/viewtopic.php?p=301409#301409]pocahontas porn [/url] . Japanese harlot gets gang-shagged and takes immense cumload all over face. [url=http://www.cetafi.net/modules.php?name=Forums&file=viewtopic&p=15281&sid=13a727da1ee0975f68ccea58b0751a00#15281]free porn anal [/url] . 16 pics of Lesbians : sexy big tit lesbian cougar seduces blondie teen for fucking [url=http://www.stlmusiclive.com/viewtopic.php?f=51&t=35209&p=290360#p290360]gay porn pictures [/url] , everything.....

Anonymous said...

Any thoughts on this i found on my blog guys? What do you guys think is it very good information to put on a website?

[quote]Are you suffering from toothache for ones last couple of days? Well, if the answer is in the affirmative then it is advisable to fix an appointment inside your dentist in worcester. Finding a very good dentist is also quite a employment but if you stay anywhere around Worcester, Worcester dentist with excellent skills and techniques is also very easily found.

Apart from toothache there are lots of diseases that require dental care. Gingivitis is really a disease in which the gums turn into inflamed and effects in redness and bleeding. One more disease that requirements dentistry is Peroidontitis. In this disease plaque bacterium penetrates in between the gums and the teeth.

Therefore anaerobic bacteria establish themselves under the receding gums. Other diseases that need dental attendance are Xerostomia, Halitosis and Canker sores.[/quote]

They also left a link on there that looks like [url=http://eldon8ortiz.insanejournal.com/281.html]Worcester Dentist[/url]

penis enlargement pills said...

Erectile Dysfunction FAQ's

Impotence, or penile erectile dysfunction, in men is not as rare as one would think it is.
In fact, one out of ten men around the world is affected by this condition. It is not exclusive to old men either. Impotence is caused not just by physical factors,
but mental factors as well.
Exercising on a regular basis and eating healthy food will increase your ability to sustain prolonged physical effort and we all know that sex is effort.
Smoking, frequently drinking large quantities of alcohol, taking recreational drugs and lack of exercising will sap your stamina and also slow down the flow of blood.
Penis exercises can be used for maintaining fitness, preventing or controlling premature ejaculation and increasing the length and girth of the penis.
by penis enlargement pills you can overcome these problems and not only that you can also enlarge, extend also to strengthen your penis and premature ejaculation will not exist anymore for you.
visit http://www.factspenisenlargement.com for more info.

Anonymous said...

[url=http://viagrapilss.pillsfm.com]discount generic viagra[/url] the drugs used to treat impotency, may be associated with an increased risk of optic nerve damage in men with a history of heart attack or high blood pressure, suggests a small study in the British Journal of Ophthalmology.

Anonymous said...

[url=http://trig.com/stratterareviews/biography]strattera side effects weight loss
[/url]

Anonymous said...

small terra cotta flower pots beverly hochstedt florist
bolton ontario florist fresh flowers on wedding cakes florists in beaufort sc homes in flower mound tx
how to make a flower pen

male said...

For men who want bigger, harder, longer-lasting erections, there's now VigRX Plus™, a fresh twist on the already popular VigRX™, but designed to further enhance men's sexual functioning with the addition of three exciting new ingredients: Damiana, Tribulus, and Bioperin. Doctor endorsed and rated #1 for results by clients of penis enlargement consumers. rated two penis pills is vimax. if you find about male enhancement this products is the best and proven to work, there products have money-back guarantee in effectiveness and result.

Anonymous said...

здорово!
зарубежные партнерки - 3426

Anonymous said...

http://46thstpaintshop.com/forex/sitemap.html teen titens porn xxx teen sex porn ann angel hardcore

Anonymous said...

new discounted hp 94 inkjet cartridges
http://life.menstyle.it/community/lowclockmota
http://feabikussi1989.blog132.fc2.com/
http://gggizzzzmo.blogspirit.com/
http://asdqwdefwef.splinder.com/

Anonymous said...

http://www.nonstopi.pro.vg/

Anonymous said...

НИУ-ИБИС - создание, продвижение, аренда и поддержка сайтов. http://niu-ibis.ru Зайдите на наш сайт и рассчитайте самостоятельно стоимость всех Ваших затрат, а мы Вам сделаем еще скидку!!!

Anonymous said...

Brand Name Handbags for Less, [url=http://allbrandhandbags.com/deals/Brighton+Handbag/]Brighton Handbag[/url], [url=http://allbrandhandbags.com/deals/Donald+J+Pliner+Handbag/]Donald J Pliner Handbag[/url], [url=http://allbrandhandbags.com/deals/Fossil+Handbag/]Fossil Handbag[/url], [url=http://allbrandhandbags.com/deals/Kenneth+Cole+Handbag/]Kenneth Cole Handbag[/url], [url=http://allbrandhandbags.com/deals/Osgoode+marley+Handbag/]Osgoode marley Handbag[/url], [url=http://allbrandhandbags.com/deals/Tignanello+Handbags/]Tignanello Handbags[/url].

kiara said...

Costa Rica Tours
Tours Costa Rica

Anonymous said...

Download Audio Books, iPod And Digital Audio Books Talking Books [url=http://free-audiobook-download.com/]Free Audiobook Downloads[/url].

- Eclipse: The Twilight Saga Book 3 (unabridged) As Seattle is ravaged by a string of mysterious killings and a malicious vampire continues her quest for revenge, Bella once again finds herself surrounded by danger

- A Wizard Alone: Young Wizard Series Book 6 (unabridged) Best-selling author Diane Duane has created a book full of magical mystery, suspense, and humor

- New Moon: The Twilight Saga Book 2 (unabridged) When the Cullens, including her beloved Edward, leave Forks rather than risk revealing that they are vampires, it is almost too much for 18-year-old Bella to bear

- Sterling Point Books: George Washington: Frontier Colonel (unabridged) Sterling North, author of the award-winning children's classic Rascal, tells the tale of the Father of Our Country and how he became one of the greatest leaders of all time

- Case Of The Deadly Sell-out This episode of the Adventures of Nero Wolfe first aired on January 5, 1951

Anonymous said...

[b]Clavamox (Amoxicillin/Clavulanate)[/b]
[b]Drug Uses[/b]

Clavamox is approved for treatment of the following canine infections:
Skin and soft-tissue infections such as wounds, abscesses, cellulitis, and superficial/juvenile and deep

pyoderma due to susceptible strains of the following organisms: lactamase-producing Staphylococcus aureus,

non-lactamase-producing Staphylococcus aureus, Staphylococcus spp., Streptococcus spp. and E. coli.
Periodontal infections due to susceptible strains of both aerobic and anaerobic bacteria.

Anonymous said...

Отправить SMS

Anonymous said...

[url=http://infobooksonline.com/shop/College+Textbooks/]College Textbooks[/url]. Algorithm Design, Biology Books, Design Books, Financial Accounting, Mathematics Books, Microeconomics, Psychology Books.

Anonymous said...

Brand Name Handbags for Less, [url=http://bargain-designer-handbags.com/deals/Alexander+McQueen+Handbag/]Alexander McQueen Handbag[/url], [url=http://bargain-designer-handbags.com/deals/Coogi+Handbag/]Coogi Handbag[/url], [url=http://bargain-designer-handbags.com/deals/Guess+Handbag/]Guess Handbag[/url], [url=http://bargain-designer-handbags.com/deals/Jimmy+Choo+Handbag/]Jimmy Choo Handbag[/url], [url=http://bargain-designer-handbags.com/shop/Lulu+Guinness+Handbag/]Lulu Guinness Handbag[/url], [url=http://bargain-designer-handbags.com/shop/Stuart+Weitzman+Handbag/]Stuart Weitzman Handbag[/url] Brand Name Handbags for Less J United Boston Style White Tote Handbag Bag Purse T394 michael kors handbags Choose Black Leather Juicy Couture Satchel Handbag , kathy van zeeland handbags Vb Womens Clutch Tote Shoulder Bag Handbag michael kors handbags Vb Womens Clutch Tote Shoulder Bag Handbag , Authentic Chanel Black Leather Bowler Handbag Chanel Black Quilted Leather Large Handbag Authentic Chanel Bag Handbag Tote Authentic Patent Rare , Designer Style Black And White Hand Bag Brand Women Designer Leather Tote Hobo Shoulder Handbag Purse H Pink Designer Shoulder Large Buckle Purse Handbag , Guess Faux Snake Satchel Handbag Purse Green.

pedro velasquez said...

In my Finding Things chapter of Beautiful Code,dominical costa rica tours the first complete program is a little Ruby script that reads the ongoing Apache logfile and figures out which articles have been fetched the most. It’s a classic example of the culture, born in Awk, perfected in Perl, of getting useful work done by combining regular expressions and hash tables. I want to figure out how to write an equivalent program that runs fast on modern CPUs with low clock rates but many cores; this is the Wide Finder project.
http://www.dominicalcostaricatours.com

Anonymous said...

Hey just becoming a member, glad to be in! I look ahead to partcipating and have study a good deal so far, so hello!

I've been concerned in some other forums and have uncovered this site to have substantially greater subject material, so it helps make sense to last but not least publish!

BTW where is the option to change the time zone for my account? It's kind of weird having the time like 5 hours off lol

Oda Ivey said...

Super-Duper site! I am loving it!! Will come back again - taking you feeds also, Thanks.

Vincenzo Aggarwal said...

ohh�nice post but really?/? :P

Vincenzo Aggarwal said...

ohh�nice post but really?/? :P

Besa Lighting 943182 Series 943 Graphite Wall Sconce said...

Hi. I read a few of your other posts and wanted to know if you would be interested in exchanging blogroll links?

Charles David Platform Sandal said...

Please, can you PM me and tell me few more thinks about this, I am really fan of your blog...

Charles David Platform Sandal said...

Please, can you PM me and tell me few more thinks about this, I am really fan of your blog...

Calvin Klein Ladies Minimal Watch said...

As a Newbie, I am always searching online for articles that can help me. Thank you

Canterbury Of New Zealand Ian L S Striped Rugby Jersey Natural said...

Of course, what a great site and informative posts, I will add backlink - bookmark this site? Regards, Reader.

cachcach kids Dress said...

Interesting article. Were did you got all the information from... :)

Josh said...

Vimax is reliable stuff to accomplish your sexual dysfunction. It has been proven by many men to augment virility and genital.

jelish said...

The Louboutin Shoes Sale is planned using the ladies. offered the fact that pumps was born, the ladies lifestyle turn into colorful. The christian Louboutin 2011 Pumps
will be the god's masterwork. Who invited the Christian Louboutin Wedges ? Seldom people knew, but I think each and every and every lady will be grateful for him. between the countless pumps,the Christian Louboutin Shoes
could be probably the most exceptional ones. The stylish pattern, the delicate design all mold the ladies perfect leg profile. Flowers inside the spring of 2011 creeping, up from frizzy hair to outfits hold on to footwear, have experienced a brilliant up. on this type of the glamor, spring and summer time flowers now here. Romance is really a woman's mood, exquisite flowers just appropriate of expression within our gestures, the woman, how can we not adore the romantic temperament to make certain which they distributed the flowers do? 2011 flowers bloom will get satisfaction from numerous poses! The Christian Louboutin New Sandalsalso can adds the hright in the ladies, it hold shock toward short lady. especially the red-colored lone in the louboutin heels, beauty and sexy, different ladies are crazy. The red-colored sole, andChristian Louboutin Mensis a very distinctive design, its design reflects its style. You put on it, that means you have its style.the earliest attribute in the Sale Louboutin stroe.

jelish said...

The Christian Louboutin Heels can help you become sexy and elegant. christian louboutin 2011 sandals are regarded since the symbolic representation of attractive and elegant.christian louboutin wedgesIt is especially suitable for the women who wear the christian louboutin evening shoes at the first time. These christian louboutin pumps combine top quality, reasonable price and fashional design, which is your best choice Artist who promoted his collection of luxury women's footwear in earlier 90s. No 1 can disregard the existence in the style world, World-famous red-colored soles and christian louboutin peep toe are shaped features. However, you can by no means overlook the beautiful. You do not even need to go inside environment, as well as your slim, gorgeous and graceful legs may be effortlessly discovered in people's eyes.!Welcome to our christian louboutin store.

Fashionable life said...

We are dedicated to delivering the most recent and greatest high quality Christian Louboutin Heels along with other artist at Christian louboutin outlet. stroe. With this broad variety of Christian louboutin thong sandals and Christian louboutin pumps sale we are positive that you simply will possibly be in a location to come across some attractive substantial
Christian Louboutin Peep Toes for all individuals unique occasions. Christian Louboutin Heels 2011 now gets the ladies' favorite. unique design, elegant and noble style,this Christian louboutin discount shoes will possibly be your 1st choice.

best organic seo services said...

Thanks a lot for sharing this amazing knowledge with us. This site is fantastic. I always find great knowledge from it.

buy vicodin online said...

This is good site to spent time on .I just stumbled upon your informative blog and wanted to say that I have really enjoyed reading your very well written blog posts. I will be your frequent visitor, that's for sure.

buy codeine online said...

This is such a helpful reading material for me, I’ve learned a lot of new things. Thanks for the great post!

buy xanax online said...

Interesting read!!! Your website is fantastic with informative content which i like to add to my favorites.

buy ritalin online said...

Really such a valuable post.
I appreciate your article.
Thanks for posting!

buy online vicodin es said...

Very significant article for us ,I think the representation of this article is actually superb one. This is my first visit to your site

the best seo company said...

I'm still learning from you, but I'm trying to achieve my goals. I certainly enjoy reading all that is posted on your blog.Keep the information coming. I loved it!

cost effective advertising said...

Hi buddy, your blog's design is simple and clean and i like it. Your blog posts are superb. Please keep them coming. Greets!!!

limo service in EAST Brunswick said...

I really liked your article.

Frank said...

Hey,
Loving your blog, awesome tips on blog you have here. I
would just like to ask you some questions privately, mindweb hosting in pakistan,samsung mobile prices in pakistan,nokia mobile prices in pakistan,VLC Player Free Download

medicine forum said...

Very significant article for us ,I think the representation of this article is actually superb one. This is my first visit to your site

Adam said...

Really i appreciate the effort you made to share the knowledge.The topic here i found was really effective to the topic which i was researching for a long time
buy percocet online

buy watson said...

Information like what you described here is going to be quite useful to me. I will post a link to this post on my site. I am sure my members will find that helpful.

Play Rummy said...

Thank you for sharing this kind of important information. and especially for sharing your own experience with these.

Hotel In Anaheim said...

Nice job. hope to be back soon and see more stuff. A special thanks for the straight answer.

Adim said...

Absolutely fantastic topic! Great blog. Thanks for taking the time and writing this.
Ready-Made Animals Logo

Marion Zacarias said...

This is a good blog for anyone who wants to know about this topic.It tells good things about living happily and falling in love. Thanks for sharing such a nice blog to everyone. Legal highs

price per head service said...

This is really satisfied by the nice services in this blog that to really providing the wonderful info is visible in this blog

Plavix said...

hi,
Java. Perusing the blogs of the Java and Scala programmers, it appears that the common complain is .. regular expressions. So the hunt was on for a good regular expression library. Joni, a port of the Ruby Oniguruma regex library to the JVM used by the JRuby project, appears ideal: low-level and supposedly very fast. Until one hits the total lack of documentation. So that’s off the table. Ended up using dk.brics.automaton, which appears to perform well enough, even when parsing Unicode strings.

penisbiggersize said...

I just added this post as a favorite.
because it is very interesting and provide insight to readers ..
thanks

Penis Enlargement Pills
Vimax Pills
Vimax Extender

call center voip solutions said...

Hilariously cool. I have been looking for sites like this for a long time. Thank you my friend.

Anonymous said...

[url=http://freewebs.com/awctxstate/apps/profile/101794715/][IMG]http://maximalblog.net/AZIPICS/2012-05-07_00169.jpg[/IMG][/url]

[url=http://freewebs.com/sitiafm/apps/profile/101795055/]Buy azithromycin in australia[/url]

cheap zithromax and purchase generic zithromax online

[url=http://freewebs.com/carworksauto/apps/profile/101737854/]Can i order azithromycin[/url]

Zithromax (azithromycin) is known as a component all around the classification of drugs called macrolide anti-biotics. Zithromax fights bacteria contained in the childs body.
Zithromax can feel dealing with diverse unique variations of difficulties a result of bacteria, like for example inhaling problems, epidermis disease, head difficulties, and venereal illness.
Zithromax is also utilized for uses not promoted in script drugs guide.

Anonymous said...

[url=http://remroom.ru]дизайн квартир 3d[/url] Улучшение и отделка помещений, квартир или дач – это насущная сейчас проблема большинства людей, решившихся, наконец, отремонтировать свой дом. Мало того, что ремонт – это занятие трудоемкое и напряженное, еще и найти достойную организацию, занимающуюся улучшением квартир или дач сегодня практически невозможно. Дело в том, что все меньше и меньше в России осталось фирм, делающих свою работу хорошо, эффективно и недорого. [url=http://remroom.ru]дизайн квартир программа 3d[/url]
Однако наша организация является приятным исключением из этого неприятного правила. Мы вот уже много лет занимается улучшением офисов, комнат, домов и еще ни разу нам не поступало от наших клиентов ни неприятных отзывов, ни каких-либо жалоб. [url=http://remroom.ru]ремонт 1 комнатной квартиры[/url] Богатый опыт наших специалистов, а также высокий профессионализм всех без исключения наших сотрудников, поможет сделать хорошо, качественно и – главное - доступно как косметический, так и капитальный ремонт. [url=http://remroom.ru]дизайн квартир панельных[/url] Современное оборудование, новые технологии планировки и дизайна, а также индивидуальный подход к каждому клиенту и гибкая система скидок сделали нашу фирму самой успешной на сегодня организацией, оказывающей услуги реставрации и отделке помещений, квартир или домов. [url=http://remroom.ru]дизайн квартир бесплатно[/url]
[url=http://remroom.ru]ремонт квартир[/url] [url=http://remroom.ru]ремонт квартиры[/url]

Anonymous said...

http://13dfgsdfg57.com/

Anonymous said...

Вкусненькое [url=http://sexatam.net.ua/tags/%EE%ED%EB%E0%E9%ED/]онлайн[/url] [url=http://sexatam.net.ua/tags/%E4%F0%EE%F7%F3/] дрочу[/url]
Извините, но посмотрите как мальчики целуют [url=http://modelyak.net.ua/tags/%E2%EB%E0%E6%ED%F3%FE/]влажную[/url] [url=http://modelyak.net.ua/tags/%EF%E8%F1%E5%F7%EA%F3/]писечку[/url]

Anonymous said...

Cialis is a widely recognised erectile dysfunction treatment that has become even more successful than Viagra.
Cialis generic contains tadalafil, which is an extremely effective and long-lasting impotent cure. Unlike other ed dysfunction treatments, [url=http://1cialis20mg.com/]cialis tablest online[/url]
starts working very quickly and has longer-lasting benefits. A single cialis dosage promotes healthy, comfortable and controllable erections for many hours.
Over 8 million men worldwide have used [url=http://1cialis20mg.com/]buy cialis 20mg online[/url]
. It’s been widely clinically tested, and is proven to have only minor – if any – side effects. For people suffering from erectile dysfunction, impotence is now a thing of the past with cialis.

Cialis ® 20mg film-coated tablets

The active substance is [url=http://1cialis20mg.com/]cialis[/url]
. Each tablets of Cialis ® contains 20mg of tadalafil. The other ingredients are:
Tablet Core: lactose monohydrate, croscarmellose sodium, hydroxyproplycellulose, microcrystalline cellulose, sodium laurilsulfate, magnesium stearate.
Film-Coat: lactose monohydrate, hypromellose, triacetin, titanium dioxide (E171), iron oxide yellow (E172), talc.

WHAT CIALIS IS AND WHAT IS IT USED FOR:

Cialis ® comes as yellow film-coated tablets. They are in the shape of almonds and have "C 20" marked on one side. These tablets are available in blister packs containing 2, 4 or 8 tablets.
Cialis ® is a treatment for men with erectile dysfunction. This is when a man cannot get, or keep a hard, erect penis suitable for sexual activity.
Cialis ® belongs to a group of medicines called phosphodiesterase type 5 inhibitors. Following sexual stimulation [url=http://1cialis20mg.com/]buy cialis 20mg[/url]
works by helping the blood vessels in your penis to relax, allowing the flow of blood into your penis. The result of this is improved erectile function. Cialis ® will not help you if you do not have erectile dysfunction. It is important to note that Cialis ® does not work if there is no sexual stimulation. You and your partner will need to engage in foreplay, just as you would if you were not taking a medicine for erectile dysfunction.

Anonymous said...

top [url=http://www.c-online-casino.co.uk/]uk casinos online[/url] brake the latest [url=http://www.realcazinoz.com/]realcazinoz.com[/url] free no set aside reward at the best [url=http://www.baywatchcasino.com/]baywatch casino
[/url].

Anonymous said...

top [url=http://www.xgambling.org/]online casinos[/url] coincide the latest [url=http://www.realcazinoz.com/]casino[/url] autonomous no store bonus at the leading [url=http://www.baywatchcasino.com/]baywatchcasino.com
[/url].

ali khan said...

Wow, this article end is unexpected, and in reason, let me much surprised and aftertaste. Many see this article I think is a good thing, can make their own thinking have been develop.taxis in w2 | minicab to airport | airport drop w2

ali khan said...

Well, very good content, let me feel very surprised. Surprise life would have so good things, more to my surprise I would see such a good content. Well, I will pay more attention to, and I want to more surprise.cabs in w2 | cab w2 | w2 taxis

ali khan said...

I love it,Excellent article.I am decide to put this into use one of these days.Thank you for sharing this.To Your Success!mirza maqbool | Maqbool mirza

Bridal lehenga said...

Good – I should definitely say I'm impressed with your blog. I had no trouble navigating through all the tabs as well as related info. The site ended up being truly simple to access

long frocks said...

You described it very beautiful. your writing style grabbed my intentions,would love to read more about it… 

shalwar kameez said...

Thanks for sharing such a fastidious opinion, paragraph is fastidious, thats why i have read it entirely