I've learned. I'll share.

December 31, 2007

Immutable Data in Python (Record or Named Tuple)

A valued lesson that I have learned the hard way is that mutable data can get nasty, and that it's really nice to have immutable data structures. I've been writing a lot of python recently, and after a while I realized that I was writing a lof of this:

class SomeDataStructure:
    def __init__(self, arg1, arg2):
        self.prop1 = arg1
        self.prop2 = arg2

Not only was this repetitive, but I found that little mutability bugs were cropping up on me. It's just too easy to trip over them when the default is mutability, as it is in python. In fact, immutable data structures aren't even a built-in option in python.

Finally the pain of using mutable data structures grew too large. I looked for a way and couldn't find anything, so I created my own. It supports getters, setters, inheritance, default values, altering several values at once, and I think the syntax is nice. I've been using it for everything the last few months and it's been great. It's helped with code repetition, concurrency, and serialization.

I hope you can learn from my valued lesson and not repeat my mistakes. Here's how you use it.

class Person(Record("name", "age")):
    pass

class OldPerson(Person):
    @classmethod
    def prepare(cls, name, age = None):
        return (name, age)

peter   = Person("Peter", 26)
wes     = Person("Wes", 28)
grandpa = OldPerson("Bubba")
wes2    = wes.setAge(29)
wes3    = wes.alter(name = "Grandpa", age = 57)
print peter, grandpa, wes.name, wes2.age

Here is the code. This is actually a simplified version of the original that I rewrote on my own time. I use a more comlete/complex version in the code I'm writing for my employer.

def Record(*props):
    class cls(RecordBase):
        pass

    cls.setProps(props)

    return cls

class RecordBase(tuple):
    PROPS = ()

    def __new__(cls, *values):
        if cls.prepare != RecordBase.prepare:
            values = cls.prepare(*values)
        return cls.fromValues(values)

    @classmethod
    def fromValues(cls, values):
        return tuple.__new__(cls, values)

    def __repr__(self):
        return self.__class__.__name__ + tuple.__repr__(self)

    ## overridable
    @classmethod
    def prepare(cls, *args):
        return args

    ## setting up getters and setters
    @classmethod
    def setProps(cls, props):
        for index, prop in enumerate(props):
            cls.setProp(index, prop)
        cls.PROPS = props

    @classmethod
    def setProp(cls, index, prop):
        getter_name = prop
        setter_name = "set" + prop[0].upper() + prop[1:]

        setattr(cls, getter_name, cls.makeGetter(index, prop))
        setattr(cls, setter_name, cls.makeSetter(index, prop))

    @classmethod
    def makeGetter(cls, index, prop):
        return property(fget = lambda self : self[index])

    @classmethod
    def makeSetter(cls, index, prop):
        def setter(self, value):
            values = (value if current_index == index
                            else current_value
                      for current_index, current_value
                      in enumerate(self))
            return self.fromValues(values)
        return setter

For comparison, I've seen similar ideas at http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/500261 and http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/303439 but I don't like their implementation or design as much, especially since they lack proper setters.

I've also read that future versions of Python will have NamedTuples, which is something I wish it had already.

153 comments:

  1. Isn't a bit of a shame to have to declare a new class for each optional parameters ?

    I would love to have something like the Erlang record.

    -record(person, {name, age, title='Sir'}).

    Then I can create, update or read records using pattern matching.

    Can I get something close in Python ?

    Thanks for your help.

    ReplyDelete
  2. You don't have to declare a new record for optional values. I could have put the prepare method on the original Person record. I just wanted to show optional values and inheritance at the same time. They can be done separately.

    Tuples is the closest thing that you can get to pattern matching in python, and since these records are tuples, you at least get this:


    def reversed_name((name, age)):
    return reversed(name)

    assert reversed_name(Person("peter", 26)) == "retep"

    I'm sorry about the formatting. Does anyone know how to put code in comments in a decent way?

    ReplyDelete
  3. Why not subclass tuple directly? You could make it only accept a fixed number of values and add get/set methods for the named fields corresponding to the indices in the underlying tuple.

    pierre r: You could create a method-less class in Python to get the same sort of behavior. That would basically give you a C-style struct.

    ReplyDelete
  4. Nice piece of code! In your examples there is a reference to a missing alter method, here is a simple implementation following your code's logic:

    def alter(self, **values):
    new_values = \
    (values[key] if values.has_key(key) else self[index]
    for index,key in enumerate(self.PROPS))
    return self.fromValues(new_values)

    ReplyDelete
  5. omg, for which reason you do this?

    why not just
    class Person(object):
    __immutable = ('age', )
    age = None
    name = None

    def __setattr__(self, name, value):
    if name in self.__immutable:
    raise Exception('%s is immutable of %r' % (name, self))
    super(Person, self).__setattr__(name, value)

    or something like that. Much less overheat in setters/getters, coz you create separate function for EACH property.

    ReplyDelete
  6. I prefer just using a simple struct.

    class Struct:
    def __init__(self, **entries): self.__dict__.update(entries)

    >>> me = Struct(name='Homer Simpson', age=40)
    >>> me.age
    40
    >>> me.name = 'Max Power'
    >>> vars(me)
    {'age': 40, 'name': 'Max Power'}

    Though I am biased against getter/setter methods and am convinced they are evil and definitely un-pythonic. But that's another story...

    ReplyDelete
  7. We will discuss here about valued lessons and spend our lives in a good manner. If we adopt good strategy, we will enjoy our life. So, learn a good lesson about life and enjoy a successful life. Coursework writing services.

    ReplyDelete
  8. Anyone can attempt writing on your behalf, however, the question is would you pay someone to do it for you without checking their credibility? Our firm has established itself as the most trustworthy assignment help firm in Australia and globally. Join these thousands of students and achieve high distinction in each and every one of your college tasks. This is the main reason why most students search for online assignment help over the internet and choose only the most proficient and trusted academic writing experts. So, if you are searching for quality assignment help usa you can find it right here from the local experts.

    ReplyDelete
  9. Learning python language is not a piece of cake but your selected lesson can make this intimidating task a lit bit easy. Your suggested lesson is effective to create immutable data structures. Thanks for this valuable information. Assignment Writing Service

    ReplyDelete
  10. Excellent Blog! I would like to thank for the efforts you have made in writing this post. Assignment Paraphrasing Services Uk

    ReplyDelete
  11. I always like your article because you have provide every time informative post. Thanks! G.I Joe Cobra Commander Costume

    ReplyDelete
  12. Our advanced and patent shopify app developer software system is excellent for Microsoft Dynamics

    ReplyDelete
  13. We offer Next Gen SIEM and bespoke ids/ips Services that comes with built-in support for most national and international compliance standards

    ReplyDelete
  14. freelance time tracking software to help you to save your precious time

    ReplyDelete
  15. I was very happy to find this site. I really enjoyed reading this article today and think it might be one of the best articles I have read so far. I wanted to thank you for this excellent reading !! I really enjoy every part and have bookmarked you to see the new things you post. Well done for this excellent article. Please keep this work of the same quality.
    Data Science Course in Bangalore

    ReplyDelete
  16. Wow, happy to see this awesome post. I hope this think help any newbie for their awesome work and by the way thanks for share this awesomeness, i thought this was a pretty interesting read when it comes to this topic. Thank you..
    Artificial Intelligence Course

    ReplyDelete
  17. Excellent Blog! I would like to thank you for the efforts you have made in writing this post. Gained lots of knowledge.
    Data Analytics Course

    ReplyDelete
  18. What an incredible message this is. Truly one of the best posts I have ever seen in my life. Wow, keep it up.
    AI Courses in Bangalore

    ReplyDelete
  19. Awesome article. I enjoyed reading your articles. this can be really a good scan for me. wanting forward to reading new articles. maintain the nice work!
    Data Science Courses in Bangalore

    ReplyDelete
  20. I am sure it will help many people. Keep up the good work. It's very compelling and I enjoyed browsing the entire blog.
    Business Analytics Course in Bangalore

    ReplyDelete
  21. Hello there! Nice article!!! But anyways here’s one of the trusted online baccarat site we can offer you so many promo and event everyday!! 한국야동닷컴

    ReplyDelete
  22. This is very interesting, You're a very skilled blogger.
    I've joined your feed and look forward to seeking more of your great post. Also, I have shared your web site in my social networks!
    중국야동넷

    ReplyDelete
  23. Great web site you have got here.. It’s hard to find quality writing like yours these days. I really appreciate individuals like you! Take care!! 파워볼 하는법

    ReplyDelete
  24. Good write-up, I am normal visitor of one抯 web site, maintain up the nice operate, and It is going to be a regular visitor for a lengthy time. 온라인경마

    ReplyDelete
  25. Great job for publishing such a beneficial web site
    바카라사이트

    ReplyDelete
  26. I do agree with all of the ideas you’ve presented in your post.
    카지노사이트

    ReplyDelete
  27. Hard to ignore such an amazing article like this. You really amazed me with your writing talent. Thank you for sharing again.
    토토

    ReplyDelete
  28. This is really helpful post and very informative there is no doubt about it.
    바카라사이트

    ReplyDelete
  29. I need to thank you for this very good read and i have bookmarked to check out new things from your post. Thank you very much for sharing such a useful article and will definitely saved and revisit your site.
    Data Science Course

    ReplyDelete
  30. Your site is truly cool and this is an extraordinary moving article and If it's not too much trouble share more like that. Thank You..
    Digital Marketing Course in Hyderabad

    ReplyDelete
  31. Thank a lot. You have done excellent job. I enjoyed your blog . Nice efforts
    Data Science Certification in Hyderabad

    ReplyDelete
  32. These type of articles keeps the users interest in the website. I found this one pretty fascinating and it should go into my collection. I am Impressed. Please keep going to write more content… 토토

    ReplyDelete
  33. Before Commenting, I wanna say thank you for providing this great information. I feel too good to read it this awesome blog. Keep sharing this type of content. 경마사이트

    ReplyDelete
  34. We have read your blog. It was really informative and we have collected much knowledge that has assisted me a lot. People can also visit our website… 온라인카지노

    ReplyDelete
  35. I was very interested in the article. it’s quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one. 토토

    ReplyDelete
  36. Here we provide technical HELP for 123.com.setup, driver download, wireless setup, USB setup, and solutions for your HP printer related issues.

    ReplyDelete
  37. Nice blog! Really thank you for your knowledge of the phyton language and other symbols. If to be honest with me I did not strong at converting symbols and writing on phyton language and how to convert a picture in such a way that it would be transformed into a scheme or for example diagram or graph and it is quite complicated for me to write on such language, but I should do it because have such academic course at the university, so use freshessay writing agency as landing help.

    ReplyDelete
  38. Thanks for sharing this informative content.,
    Leanpitch provides online training in Scrum Master Certification during this lockdown period everyone can use it wisely.
    Join Leanpitch 2 Days CSM Certification Workshop in different cities.

    Scrum master certification online

    CSM certification online

    CSM online

    CSM online certification

    CSM online training

    CSM training online

    Scrum master training online

    ReplyDelete
  39. I bookmarked your website because this site contains valuable information. I am very satisfied with the quality and the presentation of the articles. Thank you so much for saving great things. I am very grateful for this site.

    Data Science Training in Bangalore

    ReplyDelete
  40. I have voiced some of the posts on your website now, and I really like your blogging style. I added it to my list of favorite blogging sites and will be back soon ...

    Digital Marketing Training in Bangalore

    ReplyDelete
  41. I found Habit to be a transparent site, a social hub that is a conglomerate of buyers and sellers willing to offer digital advice online at a decent cost.

    Artificial Intelligence Training in Bangalore

    ReplyDelete
  42. Truly incredible blog found to be very impressive due to which the learners who go through it will try to explore themselves with the content to develop the skills to an extreme level. Eventually, thanking the blogger to come up with such phenomenal content. Hope you arrive with similar content in the future as well.

    Machine Learning Course in Bangalore

    ReplyDelete
  43. I feel very grateful that I read this. It is very helpful and very informative and I really learned a lot from it.
    Best Data Science courses in Hyderabad

    ReplyDelete
  44. Hi, yeah this article is actually pleasant and I have learned lot of things from
    it regarding blogging. thanks.
    카지노사이트

    ReplyDelete
  45. I will recommend your website to everyone. You have a very good gloss. Write more high-quality articles. I support you. 카지노사이트

    ReplyDelete
  46. We are truly thankful for your blog entry. You will discover a ton of approaches subsequent to visiting your post. Incredible work 에볼루션카지노

    ReplyDelete
  47. 파워볼 Super interesting discussion. Thank you for the great comments.

    ReplyDelete
  48. This is what i call , great article website that i have read . hope i can do same as this 경마사이트

    ReplyDelete
  49. This is a great post and enjoy the look of your blog very much. Thanks for sharing. 릴게임

    ReplyDelete
  50. Very appreciated post. Thank you for sharing this post with us. 토토사이트

    ReplyDelete
  51. Thank you so much for giving everyone such a splendid opportunity to discover important secrets from this site.
    It is always very sweet and full of fun for me personally and my office colleagues to
    visit your blog minimum thrice in a week to see the fresh guidance you will have.
    And definitely, I'm so always amazed for the fabulous creative
    ideas served by you. Some two points in this posting are absolutely the most effective we've had.

    Visit my site :: 안마

    ReplyDelete
  52. 카지노 I am really thankful to you for sharing such useful info.
    Hope you are sharing the same in future.
    thanks

    ReplyDelete
  53. 카지노사이트 I was able to find good information from your content.

    ReplyDelete
  54. Your style is really unique in comparison to other people I have read stuff from. Many thanks for posting when you have the opportunity, Guess I’ll just bookmark this web site.| v스포츠토토

    ReplyDelete
  55. 토토 Aw, this was a very nice post. Taking a few minutes and actual effort to make
    a very good article… but what can I say… I put things off a whole lot and don’t
    manage to get nearly anything done.

    ReplyDelete
  56. That is a really good tip especially to those fresh to the blogosphere.
    부산오피

    ReplyDelete
  57. If you are going for most excellent contents like me, simply go to see
    this site every day for the reason that it presents quality contents, thanks

    Please Visit My homepage ➤ 안마

    (freaky)

    ReplyDelete
  58. Remarkable! Its in fact amazing post,Really looking forward to read more.바카라사이트

    ReplyDelete
  59. Your information was very useful. I m very pleased to read this article.온라인바둑이

    ReplyDelete
  60. I do trust all of the ideas you have introduced on your post. They’re very convincing and can definitely work. Nonetheless, the posts are too brief for newbies. Could you please extend them a bit from subsequent time? Thank you for the post.
    카지노사이트

    ReplyDelete
  61. Great to become visiting your weblog once more, it has been a very long time for me. Pleasantly this article i've been sat tight fosuch a long time. I will require this post to add up to my task in the school, and it has identical subject along with your review. Much appreciated, great offer. data science course in nagpur

    ReplyDelete
  62. Damn, I've been looking for information like this for a while now. Thanks! 토토

    ReplyDelete
  63. You made some good points there. I did a Google search about the topic and found most people will believe your blog. 파워볼게임

    ReplyDelete
  64. Youre so right. Im there with you. Your weblog is definitely worth a read if anyone comes throughout it. Im lucky I did because now Ive received a whole new view of this. 온라인카지노

    ReplyDelete
  65. Wohh exactly what I was looking for, appreciate it for posting . I truly appreciate your post. Great site! 카지노

    ReplyDelete
  66. Extremely overall quite fascinating post. I was searching for this sort of data and delighted in perusing this one. Continue posting. A debt of gratitude is in order for sharing. data analytics course in delhi

    ReplyDelete
  67. I have recently started a web site, the information you offer on this web site has helped me tremendously. Thanks for all of your time & work. 토토

    ReplyDelete
  68. I like what you guys are usually up too. This kind of clever work and coverage! Keep up the very good works guys I’ve incorporated you guys to blogroll.
    온라인바카라

    ReplyDelete


  69. Hey friend, it is very well written article, thank you for the valuable and useful information you provide in this post. Keep up the good work! FYI, please check these depression, stress and anxiety related articles:
    Essay on Neeraj Chopra , The Alchemist book review

    ReplyDelete
  70. you actually make it look so easy together with your performance but i find this remember to be absolutely some thing which i assume i would in no way realize. It seems too complicated and extremely large for me. I’m searching forward on your next publish, i’ll try to get the cling of it! That is one of these super useful resource that you are offering and you provide it away totally free. I like seeing blog that apprehend the cost. Im glad to have located this publish as its such an interesting one! I'm continually looking for great posts and articles so i suppose im lucky to have discovered this! I am hoping you'll be adding extra inside the future. Greetings, there’s no question that your internet website ought to possibly be having browser compatibility problems. On every occasion i take a look at your weblog in safari, it seems first-class but while opening in internet explorer, it’s were given a few overlapping troubles. I simply desired to offer you a brief heads up! Apart from that, high-quality web site! 토토사이트

    ReplyDelete
  71. I as well believe thence , perfectly pent post! Youre so cool! I dont suppose Ive read something such as this before. So nice to seek out somebody by incorporating authentic ideas on this subject. realy i appreciate you for starting this up. this excellent website are some things that’s needed online, somebody after a little bit originality. helpful work for bringing something new to the web! You really should take part in a tournament for starters of the best blogs on-line. I am going to recommend this great site! Nice post! This is a very nice blog that I will definitively come back to more times this year! Thanks for informative post. 메이저놀이터

    ReplyDelete
  72. Howdy! This is kind of off topic but I need some advice from an established blog. Is it very difficult to set up your own blog? I’m not very techincal but I can figure things out pretty fast. I’m thinking about setting up my own but I’m not sure where to begin. Do you have any ideas or suggestions? Appreciate it . nice info thanks This is nice and awesome thanks for share us.Fantastic Blog…I will definitly share your blog with other people.Thank . I just couldn't leave your website before telling you that I truly enjoyed the top quality info you present to your visitors? Will be back again frequently to check up on new posts. 토토사이트조회

    ReplyDelete
  73. his is an awesome motivating article. I am practically satisfied with your great work. You put truly extremely supportive data. Keep it up. Continue blogging. Hoping to perusing your next post . Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work. Youre so cool! I dont suppose Ive learn anything like this before. So good to find someone with some unique thoughts on this subject. realy thank you for beginning this up. this website is one thing that’s wanted on the web, someone with a bit originality. helpful job for bringing one thing new to the web! 토토사이트

    ReplyDelete
  74. "Very nice post. I just stumbled upon your blog and wished to say that I have truly enjoyed surfing around your blog posts. In any case I’ll be subscribing to your feed and I hope you write again soon! Good day! I simply wish to give a huge thumbs up for the great data you’ve got here on this post. I will probably be coming again to your weblog for more soon. it's extremely cool blog. Connecting is exceptionally valuable thing.you have truly made a difference .
    Excellent information providing by your Article thank you for taking the time to share with us such a nice article." 메이저사이트

    ReplyDelete
  75. Very nice blog and articles. I am really very happy to visit your blog. Now I am found which I actually want. I check your blog everyday and try to learn something from your blog. Thank you and waiting for your new post . This post is good enough to make somebody understand this amazing thing, and I’m sure everyone will appreciate this interesting things. Extremely decent blog and articles. I am really extremely glad to visit your blog. Presently I am discovered which I really need. I check your blog regular and attempt to take in something from your blog. Much obliged to you and sitting tight for your new post. 엔트리파워볼

    ReplyDelete
  76. I simply couldn’t go away your website before suggesting that I actually enjoyed the standard information an individual provide on your visitors? Is gonna be back frequently in order to inspect new posts. I found your blog via Google while searching for first aid for a heart attack and your post looks very interesting for me. This is my first visit to your blog! We are a team of volunteers and starting a new project in a community in the same niche. Great post however , I was wanting to know if you could write a litte more on this subject? I’d be very thankful if you could elaborate a little bit further. Bless you! 먹튀검증

    ReplyDelete
  77. "I am always searching online for articles that can help me. There is obviously a lot to know about this. I think you made some good points in Features also. Keep working, great job! Its a great pleasure reading your post.Its full of information I am looking for and I love to post a comment that ""The content of your post is awesome"" Great work.
    Very cool! I really like the content, good information and good news like this. Bringing up books . I genuinely like you're making style, inconceivable information, thankyou for posting . Thank you for sharing this amazing piece of content. You are doing a great job, thanks for it." 먹튀폴리스주소

    ReplyDelete
  78. It is excellent to look that some people nevertheless recognize how to write a quality post.! Hi there there, you've got finished an fantastic task. I’ll absolutely digg it and for my part suggest to my buddies. I’m assured they’ll be benefited from this internet site. This could be amazing plus meanful. This can be interesting website online. Main is as a substitute on hand detail. You can have significantly made it less complicated for many folks who appear to take a look at site and deliver those oldsters usefull records and statistics. that is my first time i go to here. I discovered so many enticing stuff in your blog, specifically its conversation. From the big loads of remarks in your articles, i surmise i'm through all account no longer the simplest one having all the endeavor here! 사설토토

    ReplyDelete
  79. You really have fantastic stories. Cheers for sharing with us your blog. I would really like to thank you for the efforts you’ve installed penning this internet web page. I'm hoping the equal excessive-grade site post from you in the imminent additionally. Simply your innovative writing competencies has stimulated me to get my own weblog now. Actually the running a blog is spreading its wings fast. Your write up is a excellent instance of it. Exquisite submit! I'm virtually on the point of across this records, is very beneficial my friend. I really like evaluation desires which understand the price of passing at the notable strong asset futile out of pocket. I virtually worshiped inspecting your posting. Grateful to you! Commonplace visits recorded right here are the most honest method to fee your power, that's the motive why i'm keeping off to the website everyday, hunting down new, fascinating records. Many, bless your heart! I discovered your this publish whilst taking a gander at for some associated facts on blog search... It's a not all that horrendous publish.. 먹튀검증

    ReplyDelete
  80. Thanks for writing such amazing content. Your ideas help me every time I read it to work easily and calmly. I like to spend my free time reading your Blogs and learning new things from it. I want to appreciate your work. Good Job. Your writing includes a creative idea that is useful for me as a reader. Your information is amazing and original and attracts readers who love reading such articles like that. You can impress a person with your writing skills. We want to read your more blogs with some more creativity. Your content that you have posted here is fantastic that will not confuse the person but surely impress and attract the readers. 먹튀검증

    ReplyDelete
  81. Very interesting subject, appreciate it for posting.
    click me here바카라
    ( wep )

    ReplyDelete
  82. You uploaded a wonderful write-up. I was extremely touched after I saw your writing, as well as I actually suched as the tale of what I was seeking due to the fact that it included whatever. I'm so interested concerning exactly how you considered this info as well as just how you located it. Take a look at my writing as well as let me understand. 바카라사이트

    ReplyDelete
  83. I'm an extremely fortunate guy today. After seeing your writing, I saw such excellent info as well as my expertise increased also better. I assume I will certainly have the ability to invest a delighted day in your Deokbook. I wish you have a pleased day also. I will certainly constantly sustain you. 바카라사이트

    ReplyDelete
  84. I am always searching online for articles that can help me. There is obviously a lot to know about this. I think you made some good points in Features also. Keep working, great job
    고스톱사이트

    ReplyDelete
  85. You there, this is really good post here. Thanks for taking the time to post such valuable information. Quality content is what always gets the visitors coming.
    스포츠토토

    ReplyDelete
  86. Wow! Such an amazing and helpful post this is. I really really love it. It's so good and so awesome. I am just amazed. I hope that you continue to do your work like this in the future also.
    일본야동

    ReplyDelete
  87. Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include.
    토토사이트

    ReplyDelete
  88. Wonderful illustrated information. I thank you about that. No doubt it will be very useful for my future projects. Would like to see some other posts on the same subject! Feel free to visit my website; 온라인카지노

    ReplyDelete
  89. Wow, incredible blog format! How lengthy have you been blogging for? you make running a blog glance easy. The full glance of your site is fantastic, as smartly the content material. Feel free to visit my website; 온라인카지노

    ReplyDelete
  90. I love your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone to do it for you? Plz reply as I'm looking to create my own blog and would like to find out where u got this from. thanks a lot. Feel free to visit my website; 바카라사이트

    ReplyDelete
  91. Fantastic post! Please keep sharing. I know of a roofing company if you are looking for Game Please get in touch! Thanks, have a good day. Feel free to visit my website; 온라인카지노

    ReplyDelete
  92. I have read your blog it is very helpful for me. I want to say thanks to you. I have bookmark your site for future updates.
    온라인슬롯

    >wep<

    ReplyDelete
  93. I feel very grateful that I read this. It is very helpful and very informative and I really learned a lot from it.
    Data Analytics Course

    ReplyDelete
  94. What an incredible message this is. Truly one of the best posts I have ever seen in my life. Wow, keep it up.
    AI Courses in Bangalore

    ReplyDelete
  95. I am sure it will help many people. Keep up the good work. It's very compelling and I enjoyed browsing the entire blog.
    Business Analytics Course in Bangalore

    ReplyDelete
  96. I am really enjoying reading your well written articles. I am looking forward to reading new articles. Keep up the good work.
    Data Science Courses in Bangalore

    ReplyDelete
  97. I enjoy each of the perform that you have placed into this. I’m sure that you will be making a really useful place. I has been additionally pleased. Good perform! 인천오피

    ReplyDelete
  98. We are really grateful for your blog post. You will find a lot of approaches after visiting your post. Great work 벳페어토토

    ReplyDelete
  99. I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post. 넷마블가입코드

    ReplyDelete
  100. Interesting topic for a blog. I have been searching the Internet for fun and came upon your website. Fabulous post. Thanks a ton for sharing your knowledge! It is great to see that some people still put in an effort into managing their websites. I'll be sure to check back again real soon. 토토사이트

    ReplyDelete
  101. I feel a lot more people need to read this, very good info!  메이저사이트

    ReplyDelete
  102. Even in this condition, you are looking so cute and beautiful. Always keep that smile on your face. It indicates your confidence. I think that doggie is your best friend. He looks smart. Share your emotions with others you love. It will be a great relief for you.
    고스톱

    ReplyDelete
  103. This was a very motivational post. I wish you all the luck. Get well soon my dear. God is with you. Happy to know that you are getting better day by day and feeling happy. Stay blessed..!!
    스포츠토토

    ReplyDelete
  104. As I website possessor I believe the content matter here is rattling great , appreciate it for your hard work. You should keep it up forever! Best of luck.
    한국야동

    ReplyDelete
  105. Undeniably believe that which you stated. Your favorite reason appeared to be on the net the simplest thing to be aware of. I say to you, I certainly get annoyed while people consider worries that they plainly do not know about. You managed to hit the nail upon the top as well as defined out the whole thing without having side effect , people can take a signal. Will likely be back to get more. Thanks
    토토사이트

    ReplyDelete
  106. Your blog provided us with valuable information to work with. Each & every tips of your post are awesome. Thanks a lot for sharing. Keep blogging
    일본경마

    magosucowep

    ReplyDelete
  107. There is a problem along with your web site in internet explorer, could check this? IE still is the marketplace leader and a big portion of other folks will leave out your wonderful writing because of this problem. 파워볼게임

    ReplyDelete
  108. Having read this I thought it was really informative. I appreciate you spending some time and effort to put this content together. 파워볼 하는법

    ReplyDelete
  109. Wonderful article, thanks for putting this together! This is obviously one great post. Thanks for the valuable information and insights you have so provided here. 인터넷경마


    ReplyDelete
  110. Much obliged for each other useful site. The spot else might just I understand that sort of data written in such a perfect means?
    I have an endeavor that I"m a few seconds ago working on, and I have been watchful for such data. 스포츠토토


    ReplyDelete
  111. I am actually happy to read this website posts which
    contains plenty of helpful information, thanks for providing these kinds of statistics. 온라인카지노

    ReplyDelete
  112. Fairly certain he will have a good read. Thank you for sharing! 바카라사이트

    ReplyDelete
  113. Hi there, after reading this remarkable paragraph i am too happy to share my experience here with friends. 카지노사이트

    ReplyDelete
  114. Great post. I was checking continuously this blog and I am impressed!
    Extremely helpful info particularly the last part :) I care for such info
    a lot. I was seeking this particular information for
    a long time. Thank you and good luck. 국내경마

    ReplyDelete
  115. Hey there! I’m at work browsing your blog from my new iphone! Just wanted to say I love reading your blog and look forward to all your posts! Carry on the outstanding work 토토커뮤니티

    ReplyDelete
  116. Wow! Thank you! I continuously needed to write on my site something like that. Can I include a part of your post to my site?
    토토사이트

    ReplyDelete
  117. I feel strongly that love and read more on this topic. If possible, such as gain knowledge, would you mind updating your blog with additional information? It is very useful for me . Awesome blog. I enjoyed reading your articles. This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work . I am so thrilled I found your blog, I am here now and could just like to say thank for a tremendous post and all round interesting website. Please do keep up the great work. I cannot be without visiting your blog again and again. 먹튀검증커뮤니티

    ReplyDelete
  118. his is an awesome motivating article. I am practically satisfied with your great work. You put truly extremely supportive data. Keep it up. Continue blogging. Hoping to perusing your next post . Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work. Youre so cool! I dont suppose Ive learn anything like this before. So good to find someone with some unique thoughts on this subject. realy thank you for beginning this up. this website is one thing that’s wanted on the web, someone with a bit originality. helpful job for bringing one thing new to the web! 먹튀검증

    ReplyDelete
  119. Decent read, I just passed this onto a companion who was doing a little research on that. Also, he really got me lunch since I discovered it for him grin So let me reword that: Thank you for some other enlightening online journal. What other place could I get that kind of data written in a particularly ideal methods? I have a mission that I'm seconds ago dealing with, and I have been at the post for such data . Eminently composed article, if just all bloggers offered a similar substance as you, the web would be an obviously better spot. It's exceptionally instructive and you are clearly entirely proficient around here. You have made me fully aware of differing sees on this subject with fascinating and strong substance. 사설먹튀검증

    ReplyDelete
  120. Ideal to meet you. Your post was truly noteworthy. It's a sudden thought. It's anything but an incredible upgrade to me.How did you concocted this virtuoso thought? Your composing capacity is astounding. Like me, you might be keen on my composition. In the event that you need to see my article .. This is very intriguing substance! I have totally had a great time examining your concentrations and have arrived at the resolution that you are directly about a heavy bit of them. 메이저안전놀이터

    ReplyDelete
  121. Incredible data, a debt of gratitude is in order for imparting this astounding website to us. Much obliged for sharing this blog entry . The experience was undeniably bewildering. In case solitary I have the chance. A debt of gratitude is in order for imparting this instructive post to us, Keep sharing it later on . This is an excellent post I seen thanks to share it. It is really what I wanted to see hope in future you will continue for sharing such a excellent post. Thank a lot. You have done excellent job. I enjoyed your blog. 먹튀폴리스

    ReplyDelete

  122. i do do not forget all of the standards you’ve introduced on your post. They’re very convincing and will absolutely paintings. Despite the fact that, the posts are too short for starters. Could you please extend them a bit from next time?











    Thanks for the submit. Very thrilling blog. Alot of blogs i see nowadays do not truly provide some thing that i am interested in, however i'm most definately interested in this one. Just concept that i'd put up and let you realize. Thanks for sharing with us, i conceive this internet site definitely sticks out. Outstanding submit, you've got talked about some notable factors , i likewise assume this s a totally exceptional internet site. I'm able to set up my new concept from this put up. It offers extensive records. Thanks for this precious information for all,.. That is this type of terrific aid which you are providing and also you supply it away free of charge. I love seeing blog that apprehend the fee of providing a first-class useful resource for free. If you dont mind proceed with this outstanding paintings and that i count on a greater amount of your impressive blog entries. Youre so cool! I dont think ive read something which include this earlier than. So first-rate to get any individual by means of authentic ideas in this concern. Realy thank you for starting this up. This terrific web page is a thing this is wished on line, a person with a bit of originality." 메이저사이트

    ReplyDelete
  123. Awesome article, it was exceptionally helpful! I simply began in this and I'm becoming more acquainted with it better! Cheers, keep doing awesome! Its really a great and useful piece of information. I¡¦m satisfied that you shared this useful info with us. Please keep us up to date like this. Thank you for sharing. I simply would like to give an enormous thumbs up for the great info you have got here on this post. I might be coming again to your weblog for extra soon. Nice post. I discover something very complicated on various blogs everyday. Most commonly it is stimulating you just read content off their writers and employ something from their website. I’d opt to apply certain while using content on my small weblog whether you do not mind. 먹튀검증

    ReplyDelete
  124. Ordinary visits indexed right here are the perfect technique to appreciate your strength, that's why why i am going to the website normal, looking for new, exciting info. Many, thank you without difficulty, the article is certainly the high-quality subject matter in this registry related trouble. I healthy in with your conclusions and will eagerly sit up for your next updates i’m inspired, i have to say. Absolutely not often can i come upon a weblog that’s each educative and interesting, and in reality, you have hit the nail on the head. Your idea is great; the difficulty is something that too little people are talking intelligently approximately. 사설토토

    ReplyDelete
  125. very interesting post. This is my first time visit here. I found so many interesting stuff in your blog especially its discussion.. thanks for the post! This is an excellent post I seen thanks to share it. It is really what I wanted to see hope in future you will continue for sharing such a excellent post. I wanted to thank you for this excellent read!! I definitely loved every little bit of it. I have you bookmarked your site to check out the new stuff you post. Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work. 먹튀검증센터

    ReplyDelete
  126. Please do keep up the great work. I can not be without journeying your blog time and again. It's certainly excellent and meanful. It's sincerely cool weblog. Linking is very beneficial thing. You've got surely helped lots of folks that visit weblog and provide them usefull information. This may be the right blog for every person who is wants to be acquainted with this subject matter. You recognize lots its practically not smooth to argue along (not that i simply might need…haha). You definitely put the modern-day spin with a topic thats been discussing for many years. Outstanding stuff, just first-rate! Advantageous web page, wherein did u give you the facts in this posting? I am pleased i discovered it though, sick be checking back soon to discover what extra posts you encompass. Interesting put up. 토토사이트

    ReplyDelete
  127. Many thank you selecting the appropriate to go about this in turn, personally i think genuinely measurements along side truly revel in getting to know a touch more about the concept market. Assuming feasible, when you consider that understand mastery, on this planet could you intellect adding to ones personal running a blog website by means of manner of extra statistics? This is very useful for us. Fantastic statistics! I as of past due went over your blog and had been perusing along. I figured i would leave my first remark. I do not apprehend what to state excluding that i have. 하이머니

    ReplyDelete
  128. Many thanks picking the correct to go about this in turn, Personally i think really measurements along with really enjoy researching a little more about the idea market. Assuming feasible, since realise mastery, on earth would you intellect adding to ones own blogging site by way of additional information? This is very useful for us. Incredible data! I as of late went over your blog and have been perusing along. I figured I would leave my first remark. I don't recognize what to state with the exception of that I have. 안전지대

    ReplyDelete
  129. That is additionally a superb post which i really experience analyzing. It isn't always normal that i have the possibility to see something like this .this is a extraordinary inspiring article. I'm pretty tons pleased with your accurate paintings. You put in reality very beneficial information. Preserve it up. Hold blogging. Trying to studying your subsequent submit. You have got crushed yourself this time, and i respect you and hopping for a few extra informative posts in future. Thank you for sharing first-rate information to us. As soon as i notion about such things as: why such records is without spending a dime here? Because while you write a book then as a minimum on promoting a book you get a percentage. Thank you and right success on informing humans more about it . 사설토토

    ReplyDelete
  130. I'll bookmark your blog and take the feeds additionally… i'm happy to find out such huge numbers of treasured information here in the put up. We need training session more techniques in such manner. A debt of gratitude is so as for sharing. Fantastic weblog! I must need to thank for the undertakings you have got made in growing this publish. I am believing a comparable pleasant work from you in a while moreover. I predicted to thank you for this locations! Thankful for sharing. Exceptional destinations! I sincerely experience genuinely reading all your weblogs. Virtually desired to inform you which you have humans like me who respect your paintings. Genuinely a first-rate post. Hats off to you! The information which you have supplied may be very beneficial. I need you to thank in your season of this amazing examine!!! I definately recognize every and each piece of it and that i have you ever bookmarked to look at new stuff of your blog an unquestionable requirement read blog! 먹튀대피소

    ReplyDelete
  131. I used to be checking constantly this weblog and that i’m inspired! Extremely beneficial data particularly the last component i care for such data loads. I was looking for this certain info for a long term. Thank you and desirable good fortune.Thanks for all your precious hard paintings on this website. Betty is happy to take part inside the research and it's far in reality obvious why. I research the entirety about the energetic way it presents profitable factors on this weblog and it additionally improves the contribution of others in this concept, so my princess isn't any doubt beginning to study many stuff. Revel in the rest of the year. You did a brilliant job. Amazing .. Stunning .. 토토서치

    ReplyDelete
  132. I'm intrigued, I should say. Really once in a while do I experience a blog that is both educative and engaging, and point of fact, you have hit the nail to the head. Your idea is remarkable; the issue is something that too little individuals are talking cleverly about. My business is enchanted that I ran over this in my search out something identifying with this. This is truly animating, You're a genuinely fit blogger. I've joined with your feed moreover expect perusing your incredible reviews. Besides, We've imparted your page to our long range informal communication destinations. I'm extremely delighted in for this blog. It's an instructive theme. It help me particularly to take care of certain issues. Its chance are so phenomenal and working style so rapid. I figure it very well might be help every one of you. Much appreciated. 온카맨

    ReplyDelete
  133. i found your this put up at the same time as trying to find some related statistics on blog search... Its a terrific put up.. Preserve posting and replace the statistics . It turned into a tremendous danger to visit this type of website online and i am happy to recognize. Thank you so much for giving us a risk to have this opportunity . I discovered your this publish while searching for some related records on blog search... Its a very good put up.. Hold posting and replace the records 카지노

    ReplyDelete
  134. Do you need the help with journal manuscript proposal writing Phd Assistance guarantees your publication manuscript ready output

    ReplyDelete
  135. Normally i don’t read post on blogs, but i desire to mention that this write-up very pressured me to try and accomplish that! Your writing fashion has been amazed me. Thank you, very satisfactory put up. Super guide! Chatting approximately how precious the whole digesting. I hope to analyze from manner greater away from you. I recognize you’ve remarkable look and moreover view. I manifest to be very a good deal contented the usage of information. Amazing goods from you, guy. I’ve unde rstand your stuff preceding to and you’re just extraordinarily fantastic. I simply like what you have received here, actually like what you're announcing and the manner in that you say it. You're making it interesting and you still cope with to preserve it sensible. I can't wait to examine a great deal more from you. That is truely a exceptional web website. my brother advised i may also like this weblog. He changed into definitely proper. This post definitely made my day. You cann’t trust just how a lot time i had spent for this information! Thank you! I examine a number of stuff and i discovered that the manner of writing to clearifing that precisely need to say became excellent so i am impressed and ilike to come back again in future.. 카지노세상

    ReplyDelete
  136. Good website! I really love how it is easy on my eyes it is. I’m wondering how I might be notified whenever a new post has been made. I have subscribed to your RSS feed which may do the trick? Have a great day! Feel free to visit my website;


    야설

    ReplyDelete

  137. Nice to be visiting your blog again. it has been months for me. Well this article that i’ve been waited for so long. I need this article to complete my assignment in the college. and it has same topic with your article. Thanks. great share ! Feel free to visit my website;

    일본야동


    ReplyDelete
  138. Thanks For Sharing Such An Interesting Article, It Is Really Worthy To Read. I Have Subscribed To You And From Now On I'll Check Your Profile Daily For Interesting Stuffs. Feel free to visit my website; 국산야동


    ReplyDelete
  139. I must thank you for the efforts you’ve put in writing this blog. I am hoping to view the same high-grade blog posts from you later on as well. In fact, your creative writing abilities has inspired me to get my very own blog now ?? Thank you for the auspicious writeup. Feel free to visit my website; 일본야동



    ReplyDelete
  140. I am really amazed at the ideal approach to viewing your subject. Where do you collect this information? I want to write great writing like you do. Feel free to visit my website; Feel free to visit my website;

    한국야동

    ReplyDelete
  141. Learn how to write a PhD Dissertation introduction chapter with clear, simple guidance and we will show you how to impress your examiner and common mistake to avoid We help you in writing introduction chapter of your PhD Dissertation such as background, introduction, statement of problem, objective and many more

    ReplyDelete

  142. Hello there! Quick question that’s completely off topic.
    Do you know how to make your site mobile friendly? My website looks weird when viewing from my iphone.
    I’m trying to find a template or plugin that might
    be able to resolve this issue. If you have any recommendations, please share.
    Thank you!

    website:스포츠토토

    ReplyDelete
  143. It's really great! It's my first time writing such a good message.
    But I'd like to introduce a web page for you.
    If you want to use it safely, here it is.토토

    ReplyDelete
  144. Hello, everyone. I prepared a safe and useful web page.
    I think it'd be nice if we could do it together. Thank you.토토

    ReplyDelete
  145. It's scientific. It would be great if we can meet again here.토토

    ReplyDelete

  146. Thank you for the useful information. I know a really good park.
    I think it'd be great if we could meet together.토토

    ReplyDelete
  147. It's a really good blog. It's an honor to meet you.토토

    ReplyDelete
  148. Provides multiple learning environment of International standard with holistic system of education at an affordable cost for the successful life of young generation.
    안전놀이터

    ReplyDelete
  149. A good blog always contains new and exciting information and as I read it I felt that this blog really has all of these qualities that make a blog. artificial intelligence course in lucknow

    ReplyDelete
  150. I really enjoyed this article and it turned out to be really helpful for me and it's always nice to be able to not only be informed, but also entertained!
    Digital Marketing Training in Hyderabad

    ReplyDelete

Blog Archive

Google Analytics