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.

147 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. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. Hi, yeah this article is actually pleasant and I have learned lot of things from
    it regarding blogging. thanks.
    카지노사이트

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

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

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

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

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

    ReplyDelete
  26. 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
  27. 토토 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
  28. 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
  29. Damn, I've been looking for information like this for a while now. Thanks! 토토

    ReplyDelete
  30. 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
  31. Wohh exactly what I was looking for, appreciate it for posting . I truly appreciate your post. Great site! 카지노

    ReplyDelete
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. "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
  38. 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
  39. 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
  40. 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
  41. Very interesting subject, appreciate it for posting.
    click me here바카라
    ( wep )

    ReplyDelete
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. We are really grateful for your blog post. You will find a lot of approaches after visiting your post. Great work 벳페어토토

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

    ReplyDelete
  54. 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
  55. I feel a lot more people need to read this, very good info!  메이저사이트

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

    ReplyDelete
  57. 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
  58. 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
  59. I am actually happy to read this website posts which
    contains plenty of helpful information, thanks for providing these kinds of statistics. 온라인카지노

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

    ReplyDelete
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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

  67. 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
  68. 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
  69. 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
  70. 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
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. 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
  77. 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
  78. 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
  79. 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
  80. 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

  81. 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
  82. 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
  83. 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
  84. 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

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

    ReplyDelete
  86. I have joined your feed and look forward to seeking more of your great post.카지노사이트

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

    ReplyDelete
  88. This blog is so nice to me. I will keep on coming here again and again. Visit my link as well.. 안전놀이터

    ReplyDelete
  89. Greetings! Very helpful advice on this article! It is the little changes that make the biggest changes. Thanks a lot for sharing! Feel free to visit my website;
    야설


    ReplyDelete
  90. Aw, this was a very good post. Taking the time and actual effort to create a good article… but what can I say… I put things off a whole lot and never seem to get nearly anything done Feel free to visit my website; 한국야동


    ReplyDelete
  91. I was very pleased to find this page. I wanted to thank you for your time due to this wonderful read!! I definitely loved every part of it and I have you bookmarked to check out new information on your blog. Feel free to visit my website; 일본야동


    ReplyDelete
  92. 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. Feel free to visit my website;
    일본야동

    ReplyDelete
  93. Great job for publishing such a beneficial web site. Your web log isn’t only useful but it is additionally really creative too. 토토 사이트

    ReplyDelete
  94. I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post. ..This post is genuinely incredible. I really like this post. It is remarkable among different posts that I ve read in a long time. You shake for this alright post. I genuinely welcome it 먹튀검증

    ReplyDelete
  95. Well I truly liked reading it. This article provided by you is very effective for good planning..The Kansas City Metro has a lot to present when it comes to blog job possibilities.Truly quite intriguing post. I was searching for this sort of data and delighted in perusing this one. Continue posting. Much obliged for sharing 먹튀검증

    ReplyDelete
  96. Really impressed! Everything is very open and very clear clarification of issues. It contains truly facts. Your website is very valuable. Thanks for sharing..Good to become visiting your weblog again, it has been months for me. Nicely this article that i've been waited for so long. I will need this post to total my assignment in the college, and it has exact same topic together with your write-up. Thanks, good share 메이저사이트

    ReplyDelete
  97. This comment has been removed by the author.

    ReplyDelete
  98. I’m very pleased to find this site. I need to to thank you for ones time due to this wonderful read!! I definitely really liked every little bit of it and i also have you saved as a favorite to check out new stuff on your site. I’m very pleased to find this site. I need to to thank you for ones time due to this wonderful read!! I definitely really liked every little bit of it and i also have you saved as a favorite to check out new stuff on your site. 먹튀신고

    ReplyDelete
  99. I read this paragraph fully about the comparison of latest and previous technologies,..it’s awesome article..Quality posts is the important to be a focus for the users to pay a quick visit the site, that’s what this web page is providing. 사설토토

    ReplyDelete
  100. Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info.  This is the perfect post. It helped me a lot. If you have time, I hope you come to my site and share your opinions. Have a nice day. For this site, you will see our record, make sure to experience this information. 먹튀연구실

    ReplyDelete
  101. The next time I read a blog, I hope that it doesnt disappoint me as much as this one. I mean, I know it was my choice to read, but I actually thought you have something interesting to say. All I hear is a bunch of whining about something that you could fix if you werent too busy looking for attention. Really nice and interesting post. I was looking for this kind of information and enjoyed reading this one. 토토패밀리

    ReplyDelete
  102. Very cool website!! Man .. Beautiful .. Superb .. I’ll bookmark this site and take the feeds also…I’m satisfied to find numerous useful information here within the article. Thanks for sharing… There is noticeably a bundle to find out about this. I assume you made sure nice factors in options also. I am all that much satisfied with the substance you have said. I needed to thank you for this extraordinary article. 토토서치

    ReplyDelete
  103. 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!...Fantastic blog! Do you have any tips and hints for aspiring writers? I’m planning to start my own website soon but I’m a little lost on everything. Would you propose starting with a free platform like WordPress or go for a paid option? There are so many options out there that I’m completely overwhelmed .. Any suggestions? Many thanks! 카지노커뮤니티

    ReplyDelete
  104. First You got a great blog .I will be interested in more similar topics. i see you got really very useful topics, i will be always checking your blog thanks. Took me time to understand all of the comments, but I seriously enjoyed the write-up. It proved being really helpful to me and Im positive to all of the commenters right here! Its constantly nice when you can not only be informed, but also entertained! I am certain you had enjoyable writing this write-up. 카지노 양방배팅

    ReplyDelete
  105. I know your expertise on this. I must say we should have an online discussion on this. Writing only comments will close the discussion straight away! And will restrict the benefits from this information. This is such a great resource that you are providing and you give it away for free. I love seeing blog that understand the value. Im glad to have found this post as its such an interesting one! I am always on the lookout for quality posts and articles so i suppose im lucky to have found this! I hope you will be adding more in the future... 토토디펜드

    ReplyDelete
  106. I’m glad to locate this say very beneficial for me, because it consists of lot of are seeking for. I constantly choose to admission the man or woman content and this case i discovered in you proclaim. thank you for sharing. I was truly thankful for the useful info on this fantastic subject along with similarly prepare for much more terrific messages. Many thanks a lot for valuing this refinement write-up with me. I am valuing it significantly! Preparing for an additional excellent article 카지노마트

    ReplyDelete
  107. 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. 출장마사지

    ReplyDelete
  108. Thankyou for this wondrous post, I am glad I observed this website on yahoo. 백링크

    ReplyDelete
  109. When your website or blog goes live for the first time, it is exciting. That is until you realize no one but you and your. 토토사이트

    ReplyDelete
  110. 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 먹튀검증

    ReplyDelete
  111. The information you have posted is very useful. The sites you have referred was good. Thanks for sharing 파워사다리

    ReplyDelete
  112.  Really impressive post. I read it whole and going to share it with my social circules. I enjoyed your article and planning to rewrite it on my own blog. 토토솔루션

    ReplyDelete
  113. It is quite beneficial, although think about the facts when it reaches this target canaan avalon asics

    ReplyDelete
  114. I just couldn’t get away from your web site before suggesting that I truly appreciated the typical information an individual give on your guests? Is likely to be yet again routinely to examine fresh articles 바카라사이트

    ReplyDelete
  115. Major thankies for the post.Really thank you! Really Great. 스마일사이트

    ReplyDelete
  116. I really like your blog. Great article. It's most evident, people should learn before they are able to 파워볼사이트

    ReplyDelete
  117. This is actually the kind of information I have been trying to find. Thank you for writing this information..Recognizes for paper such an advantageous creation, I lurched adjacent to your blog other than decode a restricted report. I need your system of engraving..Thanks for a very interesting blog. What else may I get that kind of info written in such a perfect approach? I’ve a undertaking that I am simply now operating on, and I have been at the look out for such info. 먹튀사이트

    ReplyDelete
  118. it was a wonderful chance to visit this kind of site and I am happy to know. thank you so much for giving us a chance to have this opportunity social media management packages

    ReplyDelete
  119. This is a great feature for sharing this informative message. I am impressed by the knowledge you have on this blog. It helps me in many ways. Thanks for posting this again. social media management australia

    ReplyDelete
  120. All the contents you mentioned in post is too good and can be very useful. I will keep it in mind, thanks for sharing the information keep updating, looking forward for more posts.Thanks 꽁머니홍보방

    ReplyDelete
  121. Very informative post ! There is a lot of information here that can help any business get started with a successful social networking campaign ! 메이저사이트

    ReplyDelete
  122. Took me time to read all the comments, but I really enjoyed the article. It proved to be Very helpful to me and I am sure to all the commenters here! It’s always nice when you can not only be informed, but also entertained 먹튀검증

    ReplyDelete
  123. I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!
    cbd drinks
    psychic reading online
    best hotels in dubai
    red dragon tattoos

    ReplyDelete
  124. Excellent Post. To read more articles about Assignment Help, essays, dissertations, and homework writing, visit No1AssignmentHelp.Com.

    ReplyDelete
  125. "Don't face the challenges of bankruptcy alone. Reach out to a local bankruptcy lawyer near you who can provide the expertise and support you need. With their extensive knowledge of bankruptcy laws, they can help you explore your options and develop a tailored strategy to achieve a fresh start."
    lawyer for bankruptcy near me

    ReplyDelete
  126. The most informative post.Caroline Traffic Lawyer
    The way you describing is awesome.Keep sharing more.

    ReplyDelete
  127. This is incredible, I feel really happy to have seen your webpage.

    ReplyDelete

  128. I gained much unknown information, the way you have clearly explained is really fantastic.

    ReplyDelete

  129. Thanks for sharing this marvelous post. I m very pleased to read this article.

    ReplyDelete

  130. Your blog is really nice and sound really good

    ReplyDelete
  131. Hard to ignore such an amazing article like this.

    ReplyDelete

  132. Thank you for sharing this useful article , and this design blog simple and user friendly regards.

    ReplyDelete

  133. I had a lot of fun at this Olympics, but something was missing. I hope there's an audience next time.

    ReplyDelete

  134. is still among the leading topics of our time. I appreciate your post and look forward to more.

    ReplyDelete
  135. "Valued Lessons" is an engaging, relatable book filled with wisdom from life experiences, encouraging self-reflection and personal growth. Its blend of personal anecdotes and universal truths makes it a valuable guide for readers. Cómo Divorcio en Nueva York Estado

    ReplyDelete
  136. Are you seeking legal counsel in Fairfax, Virginia for traffic infractions? Our team of skilled traffic ticket attorneys focuses on assisting clients in navigating Fairfax County's complicated traffic laws and regulations. We offer individualized and successful legal defences that are catered to your particular circumstances, whether you're facing accusations for reckless driving, speeding, or other traffic infractions. We work to minimize the effects of traffic tickets, preserve your driving record, and uphold your rights with our knowledge and commitment. Put your trust in our knowledgeable attorneys to represent you in Fairfax, Virginia, and to get the best possible result for your case.Abogado de Multas de Tráfico Fairfax VA

    ReplyDelete
  137. The DIY project involves using recycled cereal boxes as a creative and sustainable alternative. The instructions are clear and easy to follow, with step-by-step directions and visuals. The materials and tools needed are listed upfront, and customization options are mentioned. The wreath's durability and functionality are also considered. The final presentation of the wreath is described, and suggestions for display are suggested.  
    personal injury lawyer virginia beachNavigating the legal system can be daunting, but with a skilled lawyer on your side, you'll have the confidence and expertise to overcome even the most challenging obstacles. As a licensed professional, a lawyer is your trusted advocate, dedicated to protecting your rights and interests every step of the way.

    ReplyDelete
  138. The discussion revolves around Brexit's impact on British businesses, with mixed feelings. Some appreciate the opportunities, while others express concerns over trade barriers and regulatory changes. Concerns include supply chain disruptions, talent acquisition, and market access. Some embrace new trade agreements and greater autonomy. distracted driving accident lawyer alexandria Your trusted advocate with a proven track record in navigating legal challenges. Committed to securing justice and delivering results for every client, every time.

    ReplyDelete
  139. I like this post. quite informative blog. Keep blogging.. thanks

    ReplyDelete
  140. I will bookmark this blog and check here again. Keep doing your blog post

    ReplyDelete
  141. I am happy I observed this website on Google. The site is fantastic and has a lot a good points

    ReplyDelete
  142. This is a wonderful blog that I want to read it twice! Thanks ! Keep it up.

    ReplyDelete
  143. The author praises the effort put into explaining monads in Python, focusing on readable and elegant syntax. They suggest improvements, including clearer definitions, more diverse use cases, and visual aids like diagrams or flowcharts. The author appreciates the accessibility of the topic and looks forward to future expansion. Overall, the author's approach makes it a valuable resource for understanding monadic concepts.
    fairfax county hit and run Championing your rights with unwavering dedication. Let’s navigate the legal maze together and turn challenges into victories.

    ReplyDelete
  144. The game emphasizes storytelling and character development, with a narrative-driven approach that shapes a world with consequences. The game allows players to create a wide range of archetypes and balances chaos with structure, making it an excellent choice for fans of Hong Kong action cinema, spy thrillers, and wuxia epics.
    Estate Lawyer Near Me Virginia Passionate advocate fighting for justice and change. I believe in the power of every voice to create a better world—join me in making an impact!

    ReplyDelete
  145. They bring together local communities to raise awareness about sustainability and habitat restoration, ensuring the river remains a safe and vibrant resource for future generations. The association's work on water quality monitoring and policy advocacy is essential for environmental conservation. However, there is room for improvement in the visibility of their educational programs and outreach in more neighborhoods. Despite these challenges, the association plays a crucial role in safeguarding the local environment and promoting a cleaner, safer place for everyone. fairfax va pornography defense attorney The counsel, a seasoned attorney, offers expert advice in complex legal environments, focusing on detail and strategic thinking. Their meticulous approach and steadfast advocacy demonstrate dedication to achieving the best results.

    ReplyDelete

Blog Archive

Google Analytics