Skip to content

Premature optimization is the root of all evil - not only in the Agile world

October 9, 2008 by Przemysław Bielicki


Picture courtesy of gutter@flickr

I was just reading an excellent book by Josh Bloch, namely "Effective Java, Second Edition" and I was on the optimization subject when it happened. It was funny coincidence but I think it was just a sign for me to write this post.

It doesn't relate to the Agility in any way but it relates to the quality of software so it should be definitely published here. And it all started very innocently - from publishing blog post with the solution to some annoying problem.

In this post I will tell you how easily you can fall into really dangerous and ugly development problems starting optimizing your software too early. I hope you will like the story.

Start with the simplest possible solutions...

I've been reading "must-read" book for all Java developers, namely "Effective Java (2nd Edition)" by Josh Bloch and I was just reading "Optimize judiciously" chapter. In the same time I was doing some Java EE development and I encountered a problem with Struts2 file upload capabilities. I found a solution and posted it to my private blog: http://java2jee.blogspot.com/2008/09/solution-to-struts2-upload-file-err.... "This has nothing to do with the optimization", you may think - and I thought the same but it's wrong assumption.

After few days I received a comment to this post from anonymous user with an "optimized solution". The author of this post wanted to optimize this line of Java code:

  1. if (string.contains("the request was rejected because its size")) {
with this code:
  1. public static Pattern REJECTED_FILE_SIZE_PATTERN = Pattern.compile(".*reject.*size.*");
  2. ...
  3. if (REJECTED_FILE_SIZE_PATTERN.matcher(string).matches()) {

I always considered myself as a seasoned Java developer (hopefully it is still true :) but after receiving this comment I was quite worried. "Why I'm not using regular expressions to check strings? Isn't it much faster", I thought. I was even thinking: "Maybe it's time to become a manager? - my Java/technical knowledge is deteriorating..."

"But hey! I will not let it go like this" - I thought. I wrote a simple Java program to test the performance of both solutions:

  1. import java.util.regex.Pattern;
  2.  
  3. public class Test {
  4.   public static void main(String[] args) {
  5.     int count = 1000000;
  6.     Pattern p = Pattern.compile(".*reject.*size.*");
  7.     String matching = "the request was rejected because its size (1234) some other text";
  8.  
  9.     long start = System.currentTimeMillis();
  10.     for (int i = 0; i < count; i++) {
  11.       if (matching.contains("the request was rejected because its size")) {
  12.         // do nothing
  13.       }
  14.     }
  15.     System.out.printf("contains() matching: %dms%n", System.currentTimeMillis() - start);
  16.    
  17.     start = System.currentTimeMillis();
  18.     for (int i = 0; i < count; i++) {
  19.       if (p.matcher(matching).matches()) {
  20.         // do nothing
  21.       }
  22.     }
  23.     System.out.printf("matches() matching: %dms%n", System.currentTimeMillis() - start);
  24.   }
  25. }
On my machine the standard contains() solution is 50 to 80 times faster than the solution with regexp matcher. What a disastrous effect this could have when applied in the whole application! I can't even imagine.

When I took a look at the contains() method implementation I saw that it operates on the char array (i.e. underlying array that creates the String object). It is fast! And it is the simplest and the most obvious method to call in this situation. It even makes the code more readable and tangible than with the regexp matcher. I see only the advantages.

The conclusion is simple: DON'T OPTIMIZE YOUR CODE AND USE THE SIMPLEST POSSIBLE SOLUTIONS - THEY WORK!

... and stay with them

Joshua Bloch cites these guys:

More computing sins are committed in the name of efficiency (not necessarily achieving it) than for any other single reason - including blind stupidity. (William A. Wulf)

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. (Donald E. Knuth)

We follow two rules in the matter of optimization:
   Rule 1. Don't do it.
   Rule 2 (for experts only). Don't do it yet - that is, not until you have a perfecly clear and unoptimized solution.
(M.A. Jackson)

What else I can add? Actually, nothing. I just showed that each of the quotes above is true on the real example.

To rephrase Joshua Bloch: Never focus on optimizing your software. If you write good and logically structured code your software will be probably optimized by itself. Use well known, standard libraries and use the most basic features that meet your requirements - the optimization and quality will follow.

Do you have similar adventures with sub-optimal solutions? Maybe you disagree with me? I would gladly read your opinions.

About the Author: Przemysław graduated from Gdańsk University of Technology in 2004 having specialized in Distributed Information Systems. He worked in Lufthansa Systems, Intel Corporation in the past where he developed complex IT solutions in many Java-related technologies. In professional life he is a real Java expert holding couple of Sun Java certificates (Programmer, Developer, Web Developer) and Certified Scrum Master, of course.

Przemysław is a regular contributor to AgileSoftwareDevelopment.com and the author of "From Java to Java EE" blog. He now works as a Software Craftsman in an international company that is the leading Global Distribution System (GDS) and the biggest processor of travel bookings in the world. Contact Przemysław

Comments

Sub-Optimal is often easier

October 9, 2008 by Kevin Rutherford (not verified), 5 years 49 weeks ago
Comment id: 1897

I'm gonna get flamed for this, but here goes...

One example of premature optimisation that happens on many many projects is using a relational database for persistent storage. I strongly believe most applications would be better designed using flat files instead. Sticking in some SQL or some ActiveRecord is easy and comfortable, and often done very early in development. And when challenged, the defence I hear most often is one of performance.

Buck the trend -- make SQL a last resort :)

SQL can be the simpelst solution

October 9, 2008 by Artem, 5 years 49 weeks ago
Comment id: 1898

IMHO, nowadays there are so many developers with the basics of SQL hardwired into their brains, that at times, SQL is indeed the simplest option for them. Though it can be mentally difficult to optimize into a flat file solution later :)

I strongly disagree

October 9, 2008 by pbielicki, 5 years 49 weeks ago
Comment id: 1899

If you want to use flat files use HSQL DB or similar (see the performance data). I treat SQL as an interface to access the data - you can even access messages from the messaging brokers (e.g. JMS) using SQL - why not?

If you want to use flat file you will get stuck in s**t. I did it not once but last time I did it was when I was developing solution for the Sun Certified Java Developer. And I was struggling with it because I had to write my very own database mechanism - do you think it's an optimal solution? I spent 80% of development time on the database mechanism instead of developing the business logic.

Files can be optimal in specific cases - that's for sure - but it strongly depends on what you are going to deliver. It's not an optimal solution for everything, just like SQL.

Very bad example.

October 9, 2008 by brazzy (not verified), 5 years 49 weeks ago
Comment id: 1900

I really don't think the guy who suggested the regexp solution was trying to optimize for speed, but for flexibility - if the message you're looking for changes in any way, the contains() solution fails, while the regexp solution will probably still work.

Also, the performance test is completely meaningless because it compiles the pattern in every iteration, which is just dumb - the whole point of putting the pattern into a static variable is to compile it only once. I strongly suspect that without that factor, the regexp solution is exactly as fast (if not faster) than the contains() solution.

Re: Very bad example.

October 9, 2008 by pbielicki, 5 years 49 weeks ago
Comment id: 1901

If you are so smart why don't you provide any example? Did you notice that the pattern was compiled BEFORE the test? No? - so, it is compiled before the test, not in each iteration.

if the message you're looking for changes in any way, the contains() solution fails, while the regexp solution will probably still work. - blah blah blah - probably will work, probably will not. I don't care - I am the owner of the code and can change it.

I prefer "inflexible" (which is not true in fact) solution that is 80 times faster taking into account that this action will be heavily used. And the regexp solution is not more flexible in any way in this case.

maybe i'm blind or sth....

October 10, 2008 by grapkulec (not verified), 5 years 49 weeks ago
Comment id: 1904

shouldn't variable "start" be set before each loop? you have it set before "contains() matching" loop, but not before regexp loop. i pretty sure that this way you made impossible to get smaller measures for second loop. but maybe i'm blind or sth...

You are absolutely right!

October 10, 2008 by pbielicki, 5 years 49 weeks ago
Comment id: 1905

You are absolutely right! Thanks for finding this typo. BTW. it doesn't change the results :)

hmm it doesn't? i think it

October 10, 2008 by grapkulec (not verified), 5 years 49 weeks ago
Comment id: 1906

hmm it doesn't? i think it should decrease difference between results for each loop and regexp wuouldn't seem soooo slow :)

I'm bored with answering such

October 10, 2008 by pbielicki, 5 years 49 weeks ago
Comment id: 1908

I'm bored with answering such comments. Before you write something just copy-paste the code and run it! I posted the code not to discuss it but to show how it works and what are the results. If you don't believe me (you don't have to) just start this Java program - it will not cheat on you!!!

Cheers!

PS. Here are results from my machine:

  1. contains() matching: 156ms
  2. matches() matching: 8467ms

gee, i'm sorry to comment the

October 13, 2008 by grapkulec (not verified), 5 years 49 weeks ago
Comment id: 1909

gee, i'm sorry to comment the wrong way. never happen again, i promise

Loading huge amount of data in memory at startup

October 13, 2008 by Thomas Eyde (not verified), 5 years 49 weeks ago
Comment id: 1910

A customer I worked with some time ago, had this idea that loading static data at startup would be most efficient. This is an ASP.NET application, and the data are loaded as Datasets. I don't remember the actual size in MB, but we are talking about 400 000+ rows.

Their idea was probably something like RAM is fast, disk is slow, data is static, let's load it once and for all. RAM is cheap, anyway.

Problem was, due to missing abstractions and encapsulation, all code has direct access to these datasets, and looping them happened all over the place. That included nested and circular loops. The net effect was that querying were extremely slow. If they wanted an in-memory database, they should have bought one.

One page alone required 16 million field lookups. No way any web page require that amount of data.

The quick-fix? I cached the already cached data. Ironic, isn't it?

In my experience, there is no

October 14, 2008 by Anay Kamat (not verified), 5 years 49 weeks ago
Comment id: 1911

In my experience, there is no one perfect solution. As it is said, "There is no silver bullet". Determining which is the best solution depends entirely on situation.

For example, it won't be a good idea to use contains method to determine if the string has a specific pattern.

In case of data persistance, if you are using a flat file, you will need to make sure to abstract the operations on that data so that you can easily integrate it with DBMS if required.

Excellent point Anay

October 14, 2008 by pbielicki, 5 years 49 weeks ago
Comment id: 1912

Excellent point Anay - I wouldn't dare using contains() method to search for specific pattern. And there is no one perfect solution to everything. Well, there is a set of perfect or at least optimal solutions that are commonly named "common sense" or "based on experience" :) but that's another story.

Thanks for your comment.

YAGNI!

December 19, 2008 by Anonymous (not verified), 5 years 39 weeks ago
Comment id: 2137

YAGNI!

Optimization

February 9, 2009 by Anonymous (not verified), 5 years 32 weeks ago
Comment id: 2225

Sorry, I think this is a good example of a bad example. It is foolish to ever think that optimizing a simple string compare envolves moving from a simple string compare to a complicated regex. A real example of optimization is to move from the complicated regex to a simple string compare. So I am sorry that your example does not match what you are trying to say. I also disagree whole heartedly with the idea of never worring about optimization until you run into a problem. That has given us far too many problems to count. If you want to generalize, I think a better engineering practive would be to follow something like the eighty-twenty rule. Basically don't spend an hour trying to optimized code paths that are not hit 80% of the time, but please do spend that hour with code that will be hit a lot.

I would submit that Agile

May 23, 2012 by JennyH8208 (not verified), 2 years 17 weeks ago
Comment id: 22507

I would submit that Agile Atlanta is the broader group. We focus on all things Agile. including Scrum. XP. Kanban. Lean. etc. Development is a small subset with most topics revolving around project management. testing. and Agile adoption strategies. rio b and you

Thanks for the great comment.

May 23, 2012 by JennyH8209 (not verified), 2 years 17 weeks ago
Comment id: 22508

Thanks for the great comment. I like the analogy with cooks (I LOVE to cook). It could also apply to painting before you can go and paint original and innovative pieces like Picasso. you have to totally master the basics. That's the ideal scenario. numéro rio

Using the Kupu Editor

December 10, 2012 by nrg-dseing.ru (not verified), 1 year 40 weeks ago
Comment id: 24978

By WebOsPublisher

Parental Icons — Extra Texture
Reveries.com - HubMagazine.com - MarketingHub.com - ExtraTexture.com
Subscribe via RSS
An eclectic collection of marketing-related news headlines. --
Parental Icons
by --
Dads in shorts, stylish moms on hot new Web sites.
0 comments
There are no comments yet...
Kick things off by filling out the form below.
You must log in to post a comment.
Search:
Loading...
Loading...
Bookmarks
MarketingHub
Reveries.com
The Hub Magazine
Sponsors
Acosta Sales $ Marketing
Catapult Marketing
G2 USA
Henry Rak Consulting
Hoyt $ Company
IIR
Insight Out of Chaos
Integrated Marketing Services
JWT/Ogilvy Action
Landor Associates
Marketing Drive
Mars Advertising
McGuinn.com
MineTech
OnRequest Images
RPM Connect
Ryan Partnership
SolutionSet
TracyLocke
University of Tennessee
Vesta Retail Networks
Young $ Rubicam Group
Subscriptions
Subscribe to Cool News of the Day
Subscribe to The Hub Magazine
Site Menu
Log in
Entries RSS
Comments RSS
WordPress.org
Categories
Select Category
Advertising
Africa
Agencies
Analytics
Art
Asia
Automotive
Books
Celebrities
Charity
CMOs
Companies
Consumer Behavior
Consumer Electronics
Cool News
Digital
Direct Marketing
Economics
Education
Entertainment
Environment
Europe
Fashion
Financial Services
Food/Beverage
Global Marketing
Health/Beauty
Health/Fitness
Identity
India
Innovation
Insights
Kids
Litigation
Loyalty
Luxury
Marketing
Media
Men
Mexico
Middle East
Military
Movies
Multicultural
Music
New Products
News Flash
Packaged Goods
Packaging
Pharmaceuticals
Politics
Popular Culture
Promotions
Publishing
Quirky
Radio
Religion
Restaurants
Retail
Science
Shopper Marketing
Sports
Strategies
Technology
Telecom
Television
The Hub
Toys
Transportation
Travel/Leisure
Videogames
Women
Archives
Select Month December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
December 2005
November 2005
October 2005
September 2005
Reveries.com - HubMagazine.com - MarketingHub.com - ExtraTexture.com

Mostafa2

May 21, 2013 by شات بنات مصر (not verified), 1 year 17 weeks ago
Comment id: 27827

Good man And Ty

شات مصرى
دردشة مصرية
دليل مواقع
مركز تحميل الصور
منتدى
منتديات
موقع
شبكه
شبكة
منتدى بحبو
منتديات بحبو
شات
دردشة
شات مصر
نكت 2013

رسائل عتاب 2013
رسائل حب
رسائل حب 2013
رسائل رومانسية 2013
رسائل قصيرة
دهانات حوائط
ديكورات 2013
اسماء بنات
اسماء بنات 2013
غلاف فيس بوك 2013
ازياء محجبات 2013
صور بنات كول 2013
خلفيات ايباد 2013
صور حزينة 2013
صور حزينة
صور حزن
صور رومانسية 2013
صور بنات 2013
خلفيات واتس اب
توبيكات واتس اب
توبيكات
برود كسات
صور سيارات 2013
صور سيارات
صور حب
صور حب 2013
صور حب 2013
صور حب
صور حب وغرام
صور حب
رسائل 2013
رسائل
رسائل حب 2013
رسائل حب
خلفيات جالكسى
صور بنات 2013
صور بنات
خلفيات ايفون 2013
خلفيات ايفون
خلفيات ايباد 2014
خلفيات ايباد 2013
خلفيات ايباد
2013 خلفيات ايباد بنات
خلفيات ايباد بنات
صور بنات ايمو
صور ايمو 2013
صور ايمو
ازياء
ازياء 2013
ازياء 2014

نكت
نكت مصرية
نكت مساطيل
صور لالى وشيخار
صور شيخار
صور لالى
صور مسلسل لالى
صور بنات للمسن
صور بنات للياهو
صور كريم وفاطمة
صور فاطمة وكريم 2013
صور للمسن 2013
صور شباب
صور حزينة
صور حب
صور غرام
صور انجلينا جولى
صور انجلينا جولى 2013
صور غرام 2013
صور حب 2013
صور رومانسية
صور رومانسية 2013
صور
صور 2013
صور 2014
صور 2015
تردد القنوات الفضائية
تردد القنوات
تردد قناة ميلودى دراما
تردد قناة ميلودى دراما 2013
تردد قناة ميلودى دراما 2014
تردد قناة النهار
تردد قناة النهار 2013
تردد قناة المصارعة
تردد قناة المصارعة 2013
تردد قناة زى الوان
تردد قناة زى الوان 2013
تردد قناة ام بى سى 2013
تردد قناة توب موفيز 2013
تردد قناة توب موفيز
تردد قناة top movies
تردد قناة توكتوك 2013
تردد قناة توك توك
صور بنات
صور بنات 2013
صور بنات 2014
تردد قناة روتانا سينما
تردد قناة روتانا سينما 2013
تردد قناة rotana cinema
تردد قناة دريم 2
صور سيارات 2013
صور ميسى
صور مسيى 2013
صور ميسي
صور ميسي 2013
صور ميسى 2014
برامج
برامج 2013
برامج مجانا
تحميل برنامج البالتوك
تحميل برنامج داون لود مانجر
تحميل برنامج دون لود مانجير 2013
تحميل برنامج اوفيس 2013
تحميل برنامج اوفيس
تحميل برنامج الورد
تحميل برنامج الورد 2013
تحميل برنامج كاسبر سكاى
تحميل برنامج كاسبر سكاى 2013
تحميل فايرفوكس
تحميل متصفح فايرفوكس
تحميل فايرفوكس 2013
تحميل ماسنجر هوتميل
شرح عمل اميل اسكاى بى
تحميل برنامج نت فروم ورك
تحميل برنامج سكاى بى
قسم فيس بوك
تحميل برنامج تشارلز
تحميل برنامج تشارلز 2013
بوستات فيس بوك
بوستات فيس بوك 2013
صور غلاف فيس بوك
صور غلاف
صور بروفايل الفيس بوك
غلاف فيس بوك
غلاف فيس بوك 2014
كفرات فيس بوك 2015
غلاف فيس بوك 2013
صور غلاف
غلاف فيس بوك 2014
اغلفه فيس بوك
تحميل برنامج سوبرا
تحميل برنامج سوبرا 2013
شرح عمل اميل ياهو
شرح عمل اميل ياهو بالصور
تحميل برنامج لفتح اكتر من اميل ياهو
تحميل ياهو
قسم للياهو
قسم للدردشة
تحميل برنامج هايدى ايزى
تحميل برنامج الويب برو
برنامج فلود
برامج موبايل
برامج موبايل 2013
برامج جوال
برامج الاختراق
ثيمات موبايل
ثيمات موبايل 2013
خلفيات موبايل 2013
العاب موبايل
العاب جوال
العاب موبايل 2013
العاب جوال
اخر اخبار العالم
منتدى الحب والرومانسية
قسم مدونات الاعضاء
حلال مشاكل الحب
تحميل برنامج الفوتوشوب cs5
تحميل برنامج الفوتوشوب
تحميل برنامج الناشر الصحفى
تحميل برنامج الناشر الصحفى 2013
قسم الفوتوشوب
شروحات الفوتوشوب
شرح اضافة الخطوط فى الفوتوشوب
شرح عمل مخطوطه ثرى دى
مستلزمات الفوتوشوب
تحميل تدرجات فوتوشوب
تحميل تدرجات فوتوشوب 2013
تحميل خطوط 2013
تحميل خطوط عربية 2013
تحميل خطوط للفوتوشوب
تحميل فرش 2013
تحميل فرش للفوتوشوب
صور مقصوصه
صور مقصوصه 2013
تحميل استايل فوتوشوب 2013
تحميل خطوط 2014
تحميل اكشن 2013
قسم حواء
طبخ 2013
طبخ
تعلم الطبخ
ازياء
ازياء 2013
ازياء عبايات
ازياء عبايات 2013
ازياء 2014
ازياء فساتين
ازياء فساتين 2013
ازياء اليسا
ازياء فساتين 2014
ازياء فساتين 2015
ازياء بنات
ازياء بنات 2013
ازياء بنات 2014
ازياء بنات
ازياء بنات 2015
فساتين حوامل
ازياء رجال
ازياء رجال 2013
ازياء شباب
ازياء شباب 2013
ازياء رجال
ازياء محجبات
ازياء محجبات 2013
ازيا محجبات
فساتين محجبات
ازياء محجبات 2013
ازياء محجبات 2013
العناية بالجمال
تسريحات
تسريحات 2013
ميك اب
ميك اب 2013
مكياج
مكياج 2013
ديكورات
ديكورات 2013
احدث ديكورات
ديكورات غرف نوم
ديكورات غرف نوم 2013
شعر
اشعار
شعر 2013
قصائد
قصائد 2013
قصيده
قصايد
خواطر
خواطر 2013
قصائد حب 2013
قصص
قصص 2013
روايات
روايات 2013
العاب 2013
العاب
شفرات جاتا
شفرات جاتا 2013
تحميل لعبة بيس 2013
تحميل لعبة pes 2013
تحميل لعبة بيس
تحميل لعبة المصارعة
تحميل لعبة المصارعة 2013
تحميل لعبة جنرال زيرو اور
تحميل لعبة جنرال زيرو اور 2013
تحميل لعبة جاتا
تحميل لعبة جاتا 2013
تحميل لعبة جاتا شبكة
تحميل لعبة زوما
تحميل لعبة زوما 2013
تحميل لعبة سلاحف النينجا
تحميل لعبة سلاحف النينجا 2013
تحميل العاب فلاش
تحميل العاب فلاض 2013
لعبة جاتا 2013
تحميل العاب
كونكر
كونكر تهيس
كونكر 2013
كونكر تهيس 2013
شرح عمل سيرفر كونكر تهيس
اسماء جيلدات 2013
اسماء اكونتات
شرح لعبة كونكر
تحميل لعبة كونكر
سيلك رود
شحن سيلك مجانا
تحميل لعبة سيلك رود
كروس فاير
هاكات كروس فاير
اخبار الرياضة
العاب جوال 2013
نغمات موبايل
نغمات جوال
نغمات
نغمات موبايل 2013
نغمات جوال 2013
نغمات 2013
رنات
رسائل
رسائل حب
رسائل حب 2013
رسائل رومانسية
رسائل رومانسية 2013
رسائل رومانسية 2014
رسائل اسلامية
رسائل اسلامية 2013
رسائل عشاق
رسائل عشاق 2013
رسائل حزن
رسائل حزن 2013
رسائل حزينة
رسائل حزينة 2013
رسائل غرام
رسائل غرام 2013
رسائل منوعة
رسائل دعاء
رسائل دعاء 2013
مسجات
مسجات 2013
رسائل قصيرة
رسائل حب قصيرة
رسائل قصيرة 2013
رسائل جوال
رسائل موبايل
رسائل جوال 2013
خلفيات ايفون
خلفيات ايفون شبابى
خلفيات ايفون شبابى 2013
خلفيات اي فون حزينة
خلفيات ايفون حزن 2013
خلفيات ايفون 2014
iphone wallpapers Romantic
خلفيات ايفون رومانسية
خلفيات ايفون رومانسية 2013
خلفيات ايفون بنات
خلفيات ايفون بنات 2013
خلفيات اي فون بناتى
خلفيات ايفون
خلفيات اي فون
خلفيات ايفون 2013
خلفيات ايفون 2015
iphone wallpapers girls 2014
خلفيات اي فون بنات 2014
خلفيات ايفون
خلفيات ايفون بناتي
خلفيات ايفون رومانسية
خلفيات ايفون رومانسية 2013
خلفيات للايفون
خلفيات ايفون 2014
خلفيات ايفون اسلامية 2013
خلفيات ايفون حيوانات 2013
خلفيات اي فون حيوانات
خلفيات ايفون منوعة
خلفيات ايفون منوعة 2013
خلفيات بلاك بيرى
خلفيات بلاك بيرى 2013
خلفيات بلاك بيري 2013
خلفيات بلاك بيري
خلفيات بلاك بيرى 2015
خلفيات بلاك بيرى 2014
خلفيات بلاك بيرى شباب 2013
خلفيات بلاك بيرى شبابية 2013
خلفيات بلاك بيري شبابى 2013
خلفيات بلاك بيرى عشق
خلفيات بلاك بيري عشاق 2013
خلفيات بلاك بيرى منوعة
خلفيات بلاك بيرى حب
خلفيات بلاك بيرى حب 2013
خلفيات بلاك بيرى بنات
خلفيات بلاك بيرى بنات 2013
خلفيات بلاك بيرى رومانسية
خلفيات بلاك بيرى رومانسية 2013
خلفيات بلاك بيرى اطفال
خلفيات ايباد
خلفيات اي باد 2013
خلفيات ايباد اطفال
خلفيات ايباد اطفال 2013
خلفيات ايباد شباب
خلفيات ايباد شباب 2013
خلفيات ايباد 2014
خلفيات ايباد منوعة 2013
خلفيات ايباد حزن
خلفيات ايباد حزن 2013
خلفيات ايباد حزينة
خلفيات ايباد حزينة 2013
خلفيات ايباد بنات
خلفيات ايباد بنات 2013
خلفيات ايباد 2016
رمزيات ايباد
رمزيات ايباد 2013
خلفيات جالكسى
خلفيات جالكسى 2013
خلفيات جالكسى 2014
خلفيات جالكسى 2015
خلفيات جالكسى اسماء
خلفيات جالكسي
خلفيات جالكسى 2016
خلفيات جالكسى اطفال 2013
خلفيات جالكسى منوعة
خلفيات جالكسى منوعة 2013
خلفيات جالكسى بنات
خلفيات جالكسى بنات 2013
مسلسلات
مسلسلات 2013
مشاهدة الافلام اونلاين
افلام عربية
افلام عربية 2013
افلام عربى
افلام عربى 2013
افلام اجنبى
افلام اجنبى 2013
افلام اجنبية
افلام اجنبية 2013
افلام هندية
افلام هندية 2013
مسرحيات
مسرحيات 2013
افلام كرتون
افلام كرتون 2013
البومات 2013
اغانى
اغانى 2013
اغاني 2014
اغانى اجنبية
اغانى اجنبى
اغانى اجنبية 2013
اغانى اجنبى 2013
اغانى شعبى
مهرجانات
اغانى شعبى 2013
مهرجانات 2013
اغانى شعبى 2014
مهرجانات 2014
كلمات اغانى
كلمات اغانى 2013
كلمات اغانى 2014
كلمات اغنية
خريطة المنتدى
خلاصة المنتدى
Rss
ارشيف المنتدى
الارشيف

MB6-889 || CUR-008 || HH0-230

May 27, 2013 by tiger (not verified), 1 year 16 weeks ago
Comment id: 28012

Measurement is fundamental to

August 8, 2013 by damental (not verified), 1 year 6 weeks ago
Comment id: 28579

Measurement is fundamental to any engineering discipline and the planning of a software creation work is no different.
192.168.1.1
192.168.0.1
192.168.2.1

I am truly inspired by this

February 5, 2014 by Bandar Bola (not verified), 32 weeks 4 days ago
Comment id: 30963

I am truly inspired by this online journal! Extremely clear clarification of issues is given and it is open to every living soul. I have perused your post, truly you have given this extraordinary informative data about it. Agen Ibcbet

This bus adventure seem to be

February 26, 2014 by Anonymous (not verified), 29 weeks 4 days ago
Comment id: 31431

This bus adventure seem to be relevant and interesting one. I think if there is touch of adventure in the bus tour then nothing can stop the rip to be exceptional one.
http://etnisjawa.blogspot.com/2014/01/agen-texas-online-indonesia-terpercaya.html
Agen Texas Online Indonesia Terpercaya
Alfamart official partner merchandise FIFA piala dunia Brazil 2014
Cipto Junaedy

I'll highlight several

March 7, 2014 by minar (not verified), 28 weeks 2 days ago
Comment id: 31924

I'll highlight several seminar topics in the coming posts. 192.168.1.1

I'll highlight several

March 7, 2014 by minar (not verified), 28 weeks 2 days ago
Comment id: 31925

I'll highlight several seminar topics in the coming posts. 192.168.1.1

Excellent Softy maker post. I

April 17, 2014 by leesa (not verified), 22 weeks 3 days ago
Comment id: 32647

Excellent Softy maker post. I was checking continuously this Softy maker manufacturer blog and I'm impressed! How do you become this Cone ice cream machine good? It's incredible to find out someone place such Cone ice cream machine manufacturer a lot of interest towards a topic. Wow! Thank you! Wonderful post!

This article Organics bio

April 17, 2014 by leesa (not verified), 22 weeks 3 days ago
Comment id: 32649

This article Organics bio product is well thought out Patterns Manufacturer in Hyderabad and full of good chicken drinkers information. Many Thanks for taking time to bring this Wooden pallets in Andhra Pradesh together into one article.

FENER

July 7, 2014 by epoksi zemin kaplama (not verified), 10 weeks 6 days ago
Comment id: 33941

And it all started very innocently - from publishing blog post with the solution to some annoying problem.
ayakkabi
sandvic panel
seo
tabela

development

September 4, 2014 by code development services (not verified), 2 weeks 3 days ago
Comment id: 34841

For example, it won't be a good idea to use contains method to determine if the string has a specific pattern.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <b> <i> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <br> <blockquote>
  • Lines and paragraphs break automatically.
  • Web page addresses and e-mail addresses turn into links automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

More information about formatting options

By submitting this form, you accept the Mollom privacy policy.

Best of AgileSoftwareDevelopment.com