Rules || “Rulers” in WPF – Power of Recursion

Recursion always been a power full tool of solving the most complicated problems in a very elegant manner, but at the price of space (as it is based on stack). The problems we solve with recursion are usually involve divide and conquer, trees traversal / graphs traversal etc. Today we’ll discuss about binary divide and conquer and you’ll see how trivial it is to draw a “Ruler” in WPF with the help of recursion technique.

Now the question is, what exactly is the “Recursion”? Here is one definition for it :–

        If you still don't get it, see – "Recursion:"  
(It seems non terminating, actually it does terminate, when the reader “gets it”

In Recursion, we look for patterns, and if we find one, we subdivide it to find similar sub-patterns and so on and that is very much analogous to “Divide and Conquer”. In our case, we will be using “Binary Divide and Conquer (BCD)”, where we divide the problem domain in two halves, each half further is divided into two halves and so on. This technique is used in many problem domains like, binary trees algorithms, like binary search or binary tree traversals, etc, etc.

As an example We’ll be building a Ruler application, xpRuler, in WPF and here are some simple requirements for it.

  1. Window should be border-less, style-less
  2. We can drag the window with the help of the mouse.
  3. Draw the ruler in either direction, i.e. Left, Top, Right and Bottom.
  4. With double click you can change its direction from Horizontal to Vertical positioning.

Here is how it looks like pictorially :-

ruler( Figure – 1 )

This shows both horizontal and vertical positions when you double click them, the positions changes to horizontal or vice versa.

First two requirements can be achieved very easily using XAML and some code behind:-


If you look at the above highlighted area, we need to setup three properties, AllowsTransparency should be True, WindowStyle should be none and Background should be transparent.

One more thing and that we’ll do under the MouseLeftButtonDown event handler:

        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            // Allows a window to be dragged by a mouse with its left button down over an
            // exposed area of the window's client area. Needed for auto dragging of the window.

That’s all for making the window’s look and feel, border-less and you can drag the window by clicking in any where in the client-area and move it around. All said, now lets move on to the Recursion algorithm for the drawing of the rulers and here is the code for it.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Windows;
   6:  using System.Windows.Controls;
   7:  using System.Windows.Data;
   8:  using System.Windows.Documents;
   9:  using System.Windows.Input;
  10:  using System.Windows.Media;
  11:  using System.Windows.Media.Imaging;
  12:  using System.Windows.Navigation;
  13:  using System.Windows.Shapes;
  14:  using System.Threading;
  16:  namespace Shams.Wpf.Ruler
  17:  {
  18:      /// <summary>
  19:      /// Interaction logic for MainWindow.xaml
  20:      /// </summary>
  21:      public partial class MainWindow : Window
  22:      {
  23:          public MainWindow()
  24:          {
  25:              InitializeComponent();
  26:          }
  28:          bool IsHorizontal = true; // initially shall be drawn in horizontal position
  29:          private void TicksCanvas_Loaded(object sender, RoutedEventArgs e)
  30:          {
  31:              // draw the ruler level 8 => (2^level - 1) = 255 <= are the total elements of the balanced tree.
  32:              // (both sides of the ruler multiply by 2 =>(2)*(2^level - 1) == 2 * 255 = 510 elements.
  33:              DrawRuler(sender as Canvas, 8);
  35:              // negate the current horizontal state
  36:              IsHorizontal = !IsHorizontal;
  37:          }
  39:          private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  40:          {
  41:              //
  42:              // Allows a window to be dragged by a mouse with its left button down over an
  43:              // exposed area of the window's client area. Needed for auto dragging of the window.
  44:              //
  45:              this.DragMove();
  47:              // If double clicked.
  48:              if (e.ClickCount > 1)
  49:              {
  50:                  // get the actual width and height
  51:                  double width = this.Width;
  52:                  double height = this.Height;
  54:                  // reverse them
  55:                  this.Height = width;
  56:                  this.Width = height;
  58:                  // Refresh the canvas
  59:                  this.TicksCanvas.Children.Clear();
  61:                  // draw the ruler
  62:                  DrawRuler(this.TicksCanvas, 8);
  64:                  // negate the current horizontal state
  65:                  IsHorizontal = !IsHorizontal;
  66:              }
  67:          }
  69:          void DrawRuler(Canvas canvas, int level)
  70:          {
  71:              if (IsHorizontal)
  72:              {
  73:                  // draw the top one.
  74:                  DrawRuler(this.TicksCanvas,
  75:                      0,
  76:                      0,
  77:                      this.TicksCanvas.ActualWidth,
  78:                      level,
  79:                      true,
  80:                      true,
  81:                      0);
  83:                   // draw the bottom one.
  84:                  DrawRuler(this.TicksCanvas,
  85:                      this.TicksCanvas.ActualHeight,
  86:                      0,
  87:                      this.TicksCanvas.ActualWidth,
  88:                      level,
  89:                      true,
  90:                      false,
  91:                      0);
  92:              }
  93:              else // Vertical
  94:              {
  95:                  // draw the left one.
  96:                  DrawRuler(this.TicksCanvas, 
  97:                      0, 
  98:                      0, 
  99:                      this.TicksCanvas.ActualHeight, 
 100:                      level, 
 101:                      false, 
 102:                      false,
 103:                      0);
 105:                  // draw the right one.
 106:                  DrawRuler(this.TicksCanvas, 
 107:                      this.TicksCanvas.ActualWidth, 
 108:                      0, 
 109:                      this.TicksCanvas.ActualHeight, 
 110:                      level, 
 111:                      false, 
 112:                      true,
 113:                      0);
 114:              }
 115:          }
 117:          /// <summary>
 118:          /// The main recursive algorithm, divide-n-conquer
 119:          /// </summary>
 120:          /// <param name="canvas"></param>
 121:          /// <param name="start"></param>
 122:          /// <param name="left"></param>
 123:          /// <param name="right"></param>
 124:          /// <param name="level"></param>
 125:          /// <param name="isHorizontal"></param>
 126:          /// <param name="isInvert"></param>
 127:          /// <param name="label"></param>
 128:          void DrawRuler(Canvas canvas,
 129:              double start,
 130:              double left,
 131:              double right,
 132:              int level,
 133:              bool isHorizontal,
 134:              bool isInvert,
 135:              double label)
 136:          {
 137:              // when level reaches 0, stack unwinding starts...
 138:              if (level > 0)
 139:              {
 140:                  double mid = ((left + right) / 2);
 142:                  // recursive - devide and conquer algorithm                
 143:                  // draw left to the ruler
 144:                  DrawRuler(canvas,
 145:                      start,
 146:                      left,
 147:                      mid,
 148:                      level - 1,
 149:                      isHorizontal,
 150:                      isInvert,
 151:                      label+1);
 153:                  // draw right to the ruler
 154:                  DrawRuler(canvas,
 155:                      start,
 156:                      mid,
 157:                      right,
 158:                      level - 1,
 159:                      isHorizontal,
 160:                      isInvert,
 161:                      label+1);
 163:                  #region Drawing functionality
 165:                  Line gridline = new Line();
 166:                  gridline.Stroke = Brushes.Black;
 167:                  gridline.StrokeThickness = 1.0;
 169:                  int ifactor = isInvert ? -1 : +1;
 170:                  if (isHorizontal)
 171:                  {
 172:                      gridline.X1 = mid;
 173:                      gridline.Y1 = start;
 174:                      gridline.X2 = mid;
 176:                      gridline.Y2 = (start - ifactor * (level * 5));
 177:                  }
 178:                  else // vertical
 179:                  {
 180:                      gridline.X1 = start;
 181:                      gridline.Y1 = mid;
 182:                      gridline.X2 = (start + ifactor * (level * 5));
 183:                      gridline.Y2 = mid;
 184:                  }
 185:                  //System.Diagnostics.Debug.Write(level + " ");
 187:                  // finally add to the canvas
 188:                  canvas.Children.Add(gridline);
 190:                  #endregion
 192:              }
 193:          }
 195:          private double GetLabel(double level)
 196:          {
 197:              return Math.Pow(2,level) - 1;
 198:          }
 200:          private void MenuItemExit_Click(object sender, RoutedEventArgs e)
 201:          {
 202:              this.Close();
 203:          }
 205:          private void MenuItemAbout_Click(object sender, RoutedEventArgs e)
 206:          {
 207:              MessageWindow messageWindow = new MessageWindow();
 208:              messageWindow.Title = "About xpRuler Ver.1.1a";
 209:              messageWindow.Message = "Developed by shams mukhtar (";
 210:              messageWindow.ShowDialog();
 211:          }
 212:      }
 213:  }

All the magic is done in the method @ lines 128-193

void DrawRuler(Canvas canvas,
            double start,
            double left,
            double right,
            int level,
            bool isHorizontal,
            bool isInvert,
            double label);

The algorithm is analogous to Postorder binary tree traversal, where we visit the left and right sub-trees first and then visit the node itself. In the Method above, left and right indicates the width of the ruler, that's what we divide in each recursive call while the start param. is the start for vertical or start of horizontal location and level indicates the depth for each half. IsHorizontal is an indicator for horizontal/vertical positions and isInvert is used to mirror the start location of the ticks and label is not used (TBD).

Exercise: To the scale (inches / centimeters) plotting of the ruler, along with the proper labeling.
(Hint: Use label argument in the DrawRuler method and (2^level - 1) formula)

So, that's all for now folks. I’ll be looking forward to your feedbacks/comments, enjoy :)

Download File - Ruler Project

If you enjoyed reading this blog, leave your valuable feedback and consider subscribing to the RSS feed. You can also subscribe to it by email. Also, you can follow me on Twitter. Thank you!

Comments (14) -

cho thue ban ghe ngoai troi
12/7/2017 11:03:59 PM #

What i don't realize is in reality how you're now not really a lot more neatly-appreciated than you might be now. You're very intelligent. You realize therefore significantly relating to this topic, made me in my opinion consider it from so many numerous angles. Its like women and men are not involved unless it's one thing to do with Girl gaga! Your personal stuffs nice. All the time care for it up!

he thong trong rau sach
12/7/2017 11:24:30 PM #

I  the efforts you have put in this, appreciate it for all the great articles.

thiet bi su kien
12/8/2017 12:16:29 AM #

Very nice post and right to the point. I am not sure if this is truly the best place to ask but do you guys have any ideea where to employ some professional writers? Thx Smile

Get 100 000 Instagram Followers Free
12/8/2017 12:28:42 AM #

Link exchange is nothing else however it is only placing the other person's weblog link on your page at proper place and other person will also do same for you.

ho chi minh escort
12/8/2017 1:23:18 AM #

I have to show my appreciation for your kind-heartedness for individuals who really need guidance on this particular concern. Your real commitment to passing the solution all over had become exceptionally invaluable and have in every case permitted others just like me to realize their aims. Your own warm and helpful report can mean a whole lot a person like me and a whole lot more to my mates. Many thanks; from everyone of us.

son san
12/8/2017 1:23:43 AM #

Simply wanna input that you have a very nice site, I  the pattern it really stands out.

trong rau thuy canh
12/8/2017 1:36:28 AM #

I regard something genuinely special in this site.

thiet ke ho ca koi
12/8/2017 1:48:30 AM #

What i don't realize is in truth how you are not really much more smartly-favored than you might be now. You're very intelligent. You know thus significantly with regards to this topic, produced me in my view imagine it from numerous varied angles. Its like women and men aren't fascinated except it's something to accomplish with Girl gaga! Your individual stuffs excellent. Always care for it up!

trong thuy canh hcm
12/8/2017 1:51:36 AM #

Great info and right to the point. I don't know if this is actually the best place to ask but do you guys have any ideea where to employ some professional writers? Thank you Smile

12/8/2017 3:16:07 AM #

Hello it's me, I am also visiting this site regularly, this site is in fact pleasant and the viewers are genuinely sharing fastidious thoughts.  My weblog ::  Berry -

APUS Student Login
12/8/2017 3:48:37 AM #

Hey great post! I hope it's ok that I shared this on my Twitter, if not, no issues just tell me and I'll remove it. Either way keep up the good work.  Here is my website -  APUS Student Login -

thi cong ho ca koi gia re
12/8/2017 4:23:52 AM #

Good post. I learn something new and challenging on sites I stumbleupon everyday. It's always exciting to read through articles from other writers and practice a little something from their websites.

payday loan online
12/8/2017 5:22:09 AM #

no credit check loans  quick cash loans -  payday loan direct lender  payday loans for bad credit -

French Music
12/8/2017 6:02:01 AM #

Hey great post. I hope it's alright that I shared it on my Twitter, if not, no worries just tell me and I'll remove it. Regardless keep up the good work.  Check out my homepage:  French Music -

12/8/2017 6:29:54 AM #

I would like to thank you for the efforts you've put in writing this blog. I am hoping to check out the same high-grade content from you in the future as well. In truth, your creative writing abilities has inspired me to get my very own website now ;)

ho chi minh escort service
12/8/2017 6:56:18 AM #

Thanks for the auspicious writeup. It in fact used to be a leisure account it. Glance complex to more delivered agreeable from you! By the way, how could we keep up a correspondence?

trong cay thuy canh
12/8/2017 7:30:14 AM #

But wanna remark that you have a very decent site, I  the pattern it really stands out.

thi cong ho ca koi san thuong
12/8/2017 7:49:58 AM #

I regard something really special in this website.

thue ban ghe nhua
12/8/2017 8:34:25 AM #

Hello there I am so glad I found your website, I really found you by error, while I was researching on Bing for something else, Anyhow I am here now and would just like to say thanks for a incredible post and a all round exciting blog (I also love the theme/design), I don't have time to read through it all at the moment but I have book-marked it and also added in your RSS feeds, so when I have time I will be back to read more, Please do keep up the superb work.

colored lenses online
12/8/2017 10:09:19 AM #

Hey, you used to write excellent, but the last several posts have been kinda boring? I miss your super writings. Past several posts are just a bit out of track! come on!

son pu
12/8/2017 12:55:35 PM #

Thank you for the auspicious writeup. It if truth be told was once a enjoyment account it. Look advanced to far delivered agreeable from you! However, how could we be in contact?

Percent Of Change Calculator
12/8/2017 1:38:22 PM #

Hey great post. I hope it's ok that I shared this on my Facebook, if not, no issues just let me know and I'll delete it. Regardless keep up the good work.  Also visit my web page ...  Percent Of Change Calculator -

advokat olav sylte
12/8/2017 1:53:33 PM #

Wonderful blog! I found it while searching on Yahoo News. Do you have any tips on how to get listed in Yahoo News? I've been trying for a while but I never seem to get there! Appreciate it

12/8/2017 3:48:12 PM #

Hello I am so thrilled I found your website, I really found you by mistake, while I was browsing on Digg for something else, Regardless I am here now and would just like to say thanks a lot for a tremendous post and a all round exciting blog (I also love the theme/design), I don’t have time to look over it all at the minute but I have bookmarked it and also added in your RSS feeds, so when I have time I will be back to read more, Please do keep up the great work.

Saks Credit Card
12/8/2017 5:04:55 PM #

Hey great post! I hope it's ok that I shared this on my FB, if not, no worries just let me know and I'll remove it. Either way keep up the great work.  Feel free to visit my webpage  Saks Credit Card -

ho ca koi
12/8/2017 5:49:17 PM #

Having read this I thought it was rather informative. I appreciate you taking the time and energy to put this information together. I once again find myself personally spending way too much time both reading and commenting. But so what, it was still worthwhile!

San Joaquin Delta College
12/8/2017 7:10:48 PM #

Hey great post! I hope it's ok that I shared this on my FB, if not, no issues just tell me and I'll remove it. Regardless keep up the great work.  my web page  San Joaquin Delta College -

hydromax hercules water pump
12/8/2017 8:11:13 PM #

Peculiar article, just what I was looking for.

son san epoxy
12/8/2017 9:03:16 PM #

Good post and straight to the point. I am not sure if this is really the best place to ask but do you people have any ideea where to hire some professional writers? Thx Smile

Staples Printable Coupon
12/8/2017 9:03:16 PM #

Hey great post. I hope it's ok that I shared this on my Twitter, if not, no issues just tell me and I'll delete it. Regardless keep up the great work.  My website -  Staples Printable Coupon -
12/8/2017 10:43:22 PM #

I know this web site presents quality dependent articles or reviews and extra data, is there any other website which gives these stuff in quality?  Here is my web-site: -

Fast Followers Gain Instagram
12/9/2017 12:10:06 AM #

Undeniably believe that that you said. Your favorite reason appeared to be at the web the easiest thing to be aware of. I say to you, I definitely get irked whilst folks consider worries that they plainly don't recognise about. You controlled to hit the nail upon the highest and also defined out the whole thing with no need side effect , folks could take a signal. Will probably be back to get more. Thanks

VigRX Plus Questions
12/9/2017 12:19:10 AM #

I could not refrain from commenting. Perfectly written!

Pretty section of content. I simply stumbled upon your weblog and in accession capital to claim that I acquire actually loved account your weblog posts. Anyway I'll be subscribing in your augment or even I fulfillment you get admission to consistently quickly.  My site ...  what is the very best garcinia cambogia pills -

celebrity scandals This week
12/10/2017 3:04:23 AM #

According to celebrity news outlets including OK!  my webpage ::  celebrity scandals This week -

migrate joomla site to new host
12/10/2017 6:59:42 PM #

managed vps with cpanel  wordpress host multiple domains -  best dedicated server in singapore  shared-server mode vs dedicated server mode -  vps with windows 7  uk vps cheapest -  dedicated ip hosting  business class wordpress hosting -  free wordpress  migrate joomla site to new host -  hosting  windows 7 rdp vps -  free reseller hosting cpanel  wordpress host multiple domains -  game server hosting sites  web hosting services near me -  best photo hosting for photographers  seattle dedicated server hosting -  web hosting $5 per year  linux shared hosting plans -  virtual private hosting windows  dedicated sql server -  web hosting with wordpress  web hosting providers in pakistan -  dedicated root server hosting  ruby on rails hosting providers -  shared ssl hosting  ssd vps hosting india -  instant vps hosting  cheap good vps -  wordpress without hosting  web hosting articles -  best vps hosting deals  30 day trial dedicated server -  best wordpress blog hosting sites  web hosting for joomla -  web hosting rankings  30 day trial dedicated server -  website hosting vs vps  web hosting philippines wordpress -  difference between shared dedicated vps hosting  best hosting sites for photography -  most reliable dedicated server hosting  best dedicated servers canada -  canadian dedicated server  web hosting server cost -  free vps linux lifetime  best wordpress hosting service -  windows vps uk  best cheap reseller hosting -  best wordpress hosting sites  web hosting with ssl included -

web hosting canada best
12/10/2017 9:22:47 PM #

best windows vps hosting providers  dedicated server multi site wordpress -  rent cheap vps server  virtual dedicated server (vds) -  web hosting services london  web hosting offers -  windows 7 vps hosting  vps hosting custom os -  best affordable dedicated servers  web hosting dedicated ip -  reseller unlimited hosting  vps server windows usa -  vps windows 16gb  best hosting for wordpress multisite -  website hosting charges  cpanel vps vs dedicated license -  wordpress hosting fees  reseller hosting with whmcs -  web hosting space charges  website and email hosting services -  website hosting and email  move wordpress to new domain -  email domain hosting nz  web hosting services -  web hosting for students uk  top 10 dedicated server hosting -  web mail bell hosting  free custom wordpress hosting -   web hosting canada best -  hosting pricing  best dedicated servers in india -  dedicated server mumbai  rent dedicated server canada -  web hosting linux server  cheap managed vps germany -  dedicated server root access  best host for wordpress site -  web hosting help  advantages and disadvantages of dedicated server -  website hosting space  dedicated server hosting ip -  cheap vps linux europe  web hosting america -  website hosting forum uk  web hosting for musicians -  dedicated server reseller  vps hosting xen -  open source vps management control panel  best wordpress hosting usa -  cheap dedicated server 1gbps  web hosting photo gallery -

12/10/2017 9:59:27 PM #

Hello, i think that i saw you visited my web site so i came to “return the favor”.I'm trying to find things to enhance my website!I suppose its ok to use a few of your ideas!!

reseller hosting cheap unlimited
12/10/2017 10:00:58 PM #

windows vps in europe  managed wordpress hosting germany -  cheap uk dedicated hosting  virtual dedicated hosting -  dedicated server instant setup  move wordpress blog to hosting -  web hosting discount codes  best prices vps -  web designing and hosting services  best vps server usa -  website hosting cost in india  web hosting boise idaho -  best managed dedicated hosting  vps europe cheap -  buy vps hosting  magento dedicated server specs -  unlimited  reseller hosting cheap unlimited -  hosting cpanel whm  web hosting server location india -  dedicated hosting solutions  vps linux server uk -  dedicated server for hosting business  website hosting providers in india -  web hosting kelowna bc  web hosting argentina virtual -  free host for wordpress site  hosting with dedicated ip -  compare vps and shared hosting  best windows vps reseller -  fully managed wordpress hosting  uk domain hosting wordpress -  best wordpress hosting services  vps or shared hosting -  website hosting provider search  cheapest dedicated gaming servers -  domain and hosting packages  virtual private server hosting -  france dedicated server hosting  super cheap vps -  free hosting joomla site  web hosting subdomains -  web email hosting australia  cpanel dedicated server license -  cheap dedicated server uk  migrate wordpress site to new host -  website and email hosting malaysia  whm vps file manager -  website design and hosting costs  premium dedicated servers -  website hosting australia wordpress  free online virtual private server -

dedicated server ssd usa
12/10/2017 10:03:07 PM #

cheapest reseller hosting india  australia vps hosting cheap -  window reseller hosting  dedicated server provider uk -  cheap dedicated server germany  web hosting providers canada -  dedicated server sweden  vps server windows xp -  dedicated file server vs nas  cheapest kvm vps europe -  web hosting in pakistan hosting uk  xen virtual server hosting -  managed vps europe  best windows virtual server hosting -  best dedicated server provider in india  best vps hosting sweden -  wordpress  dedicated server ssd usa -  server hosting  dedicated server hosting forum -  web hosting by the month  web services hosting java -  website domain and hosting india  cheap windows vps service -  dedicated hosting service  what is the best dedicated hosting server -  web hosting articles and news  web hosting in australia review -  low cost vps server  unlimited hosting reseller -  website hosting uk cost  ssd shared hosting india -  dubai dedicated server  sweden dedicated server -  web host in nigeria  dedicated server vs virtual machine -  website hosting forum uk  web hosting directory -  moving my wordpress site to a new host  web hosts in bangalore -  web developer portfolio hosting  windows vps remote desktop access -  semi dedicated server vs vps  website hosting services in kenya -  best reseller hosting uk  vps windows 10 -  web hosting database support  vps window -  unlimited reseller hosting whmcs  cheap german vps -  web host australia small business  vps windows discount -

sydney wedding photographer
12/10/2017 10:11:58 PM #

You really make it seem so easy with your presentation but I find this matter to be actually something which I think I would never understand. It seems too complex and very broad for me. I'm looking forward for your next post, I'll try to get the hang of it!

cheap vps with cpanel
12/10/2017 10:17:50 PM #

reseller hosting vs shared hosting  offshore windows vps cheap -  move wordpress blog to another host  cpanel vps servers -  best reseller hosting in india  cheap managed vps -  unmetered vps hosting  vps hosting custom os -  web hosting 100 uptime guarantee  web hosting ranking -  quad core dedicated server  where to host wordpress blog -   cheap vps with cpanel -  australian vps  how to transfer wordpress site to a new host -  fastcgi shared hosting  move wp site to new host -  dedicated server windows 7  cheap game server hosting australia -  web hosting and maintenance  websites host -  dedicated servers defined  web hosting storage space -  web hosting for small business canada  free wordpress domain and hosting -  buy windows vps uk  dedicated server hosting chicago -  web hosting 000 members  windows 2008 vps hosting -  xeon dedicated servers  free hosting with ftp account -  web hosting forum indonesia  free reseller account hosting -  website hosting details  moving wordpress to new hosting -  web hosting cincinnati  cheap online store hosting -  shared hosting provider  best shared hosting service -  web hosting review uk  reseller hosting white label support -  website hosting reseller business  best wordpress hosting site -  what is linux reseller hosting  free hosting for wordpress -  custom dedicated server  web hosting for small business australia -  what is vps hosting  web hosting domain jakarta -  web hosting database access  best linux vps hosting -

vat tu thuy canh
12/11/2017 12:50:09 AM #

With havin so much content do you ever run into any issues of plagorism or copyright violation? My site has a lot of unique content I've either created myself or outsourced but it seems a lot of it is popping it up all over the internet without my permission. Do you know any methods to help prevent content from being ripped off? I'd truly appreciate it.

12/11/2017 5:40:10 AM #

Wow! After all I got a weblog from where I can in fact obtain helpful facts concerning my study and knowledge.

bathmate in stores
12/11/2017 9:08:41 AM #

Magnificent beat ! I wish to apprentice even as you amend your web site, how can i subscribe for a weblog website? The account aided me a appropriate deal. I were tiny bit acquainted of this your broadcast provided brilliant transparent idea

casino online
12/12/2017 9:02:22 AM #

best online casino  free casino slot games no download no registration -  free casino slot games no download no registration  best online casino -

free casino slot games
12/13/2017 12:51:30 PM #

online casino usa  casino slot games -  free casino slot games  casino free games -

the full report
12/13/2017 4:10:05 PM #

This is really interesting, You are a very skilled blogger. I've joined your feed and look forward to seeking more of your fantastic post. Also, I've shared your web site in my social networks!
12/14/2017 1:31:55 AM #

Com tempo você ganhará mas fôlego e também resistência.

thi cong ho ca koi
12/14/2017 8:32:24 PM #

Good post. I learn something totally new and challenging on websites I stumbleupon everyday. It's always useful to read through articles from other authors and use a little something from their web sites.

xem thêm
12/15/2017 3:58:12 AM #

I think this is one of the most vital info for me. And i'm satisfied studying your article. But wanna statement on few common things, The site taste is great, the articles is actually great : D. Just right process, cheers

cho thue ban ghe hoi cho
12/15/2017 9:52:52 AM #

Thanks for the good writeup. It actually was once a entertainment account it. Glance advanced to far introduced agreeable from you! By the way, how could we be in contact?
12/15/2017 8:39:27 PM #

I would like to get across my respect for your kind-heartedness giving support to all those that require help with this important concern. Your real dedication to getting the message all through ended up being unbelievably advantageous and have consistently enabled people much like me to realize their desired goals. Your entire important guide implies this much a person like me and additionally to my colleagues. Regards; from all of us.

Stealing towels from hotel
12/16/2017 9:06:52 AM #

I think that what you posted made a lot of sense. But, consider this, what if you added a little information? I mean, I don't wish to tell you how to run your blog, but suppose you added a headline that makes people want more? I mean GeeksCafe.NET | Rules || “Rulers” in WPF – Power of Recursion is a little plain. You might glance at Yahoo's home page and note how they create post headlines to get people to click. You might add a related video or a pic or two to get people excited about what you've got to say. In my opinion, it could make your posts a little livelier.  My website;  Stealing towels from hotel -

Add comment