I've learned. I'll share.

January 15, 2008

List Monad in Ruby and Python

Recently, I wrote about ways to add something like Haskell's do syntax to programming languages like python and ruby. The python trick used bidirectional generators and the ruby trick used callcc. I have since been notified that there is one serious problem with both of them: the bindee (the function given to bind) can only be called once. For many monads, this limitation is acceptable, but for some, it means you can't use that nice syntax.

Take the List monad, for example, in ruby:

class ListMonad < Monad
  attr_accessor :array

  def initialize(array)
    @array = array
  end

  def bind(bindee)
    ListMonad.new(concat(array.map { |val| maybeUnit(bindee.call(val)).array }))
  end

  def self.unit(val)
    self.new([val])
  end

  def to_s
    joined = array.join(', ')
    "ListMonad([#{joined}])"
  end
end

## I'm hoping this if faster than using fold (inject)
def concat(arrays)
  all = []
  for array in arrays
    all += array
  end 
  all
end

class Array
  def bind(bindee)
    ListMonad.new(self).bind(bindee)
  end

  def bindb(&block)
    ListMonad.new(self).bindb(&block)
  end
end
Ruby gives us the ability to extend Array to get a pretty sweet looking use of the monad:
list1 = with_monad ListMonad do
  x =xx    [1,2,3]
  y =xx [10,20,30]
  x + y
end

It looks great, but list1 should be ListMonad([11, 21, 31, 12, 22, 32, 13, 23, 33]), be we get ListMonad([11]) instead.

Traditional binding works fine:

list2 = [1, 2, 3].bindb do |x|
  [10, 20, 30].bindb do |y|
    x + y
  end
end

list2 is ListMonad([11, 21, 31, 12, 22, 32, 13, 23, 33]). So, we know our monad is fine, but our with_monad doesn't work.

We have the same problem in python:

class ListMonad(Monad):
    def __init__(self, vals):
        self.vals = vals

    def bind(self, bindee):
        return self.__class__(concat((self.maybeUnit(bindee(val)) for val in self.vals)))

    @classmethod
    def unit(cls, val):
        return cls([val])

    def __repr__(self):
        return "ListMonad(%s)" % self.vals

    def __iter__(self):
        return iter(self.vals)

def concat(lists):
    return [val for lst in lists
                for val in lst]

@do(ListMonad)
def with_list_monad():
    x = yield    [1, 2, 3]
    y = yield [10, 20, 30]
    mreturn(x + y)

list1 = with_list_monad()

def with_list_monad_binding():
    return \
    ListMonad([  1, 2, 3])  >> (lambda x:
    ListMonad([10, 20, 30]) >> (lambda y:
    x + y))

list2 = with_list_monad_binding()
    

Again, it looks good, but list1 is ListMonad([11, None, None, None, None]) while list2 is ListMonad([11, 21, 31, 12, 22, 32, 13, 23, 33]). The result of list1 sure is bizarre.

Luckily, I have found a solution for ruby, and a bad hack that could be construed as a solution for python if you ignore some issues.

In Ruby, the trick is to monkey with the rbind continuation so that at the end of with_monad it returns control to the point where the continuation is called. In other words, we need to store a second continuation at the point right after the first continuation is called. Confused yet? Continuations will melt your brain, and this took a little while for met get right:

def with_monad_ext(monad_class, &block)
  finishers = []

  rbind_ext = lambda do |monad|
    begin
      checked_callcc do |outer_cont|
        monad.bindb do |val|
          callcc do |inner_cont|
            finishers.push(inner_cont)
            outer_cont.call(val)
          end
        end
      end
    rescue ContinuationUnused => unused
      raise MonadEscape.new(unused.result)
    end
  end

  val = begin
    monad_class.maybeUnit(block.call(rbind_ext))
  rescue MonadEscape => escape
    escape.monad
  end

  finisher = finishers.pop()
  if finisher
    finisher.call(val)
  else
    val
  end
end

list3 = with_monad_ext ListMonad do |rbind|
  x = rbind.call    [1,2,3]
  y = rbind.call [10,20,30]
  x + y
end

Success! list3 is correctly ListMonad([11, 21, 31, 12, 22, 32, 13, 23, 33]). The only real problem is that the normal rbind won't work. We have to make a special one and give it to the block as an argument. This wouldn't be that bad, except that Ruby has this silly limitation so we have to say rbind.call rather than just rbind, which makes it less fun to type. I named it with_monad_ext because I don't think it will be needed as often as with_monad, and with_monad is more convenient.

Now, back to python. The problem is harder. It's rooted in the fact that for a given iterator, itr.send() is not reentrant. But, if we could copy the iterator, that would give us a possible solution. I did a little googling and found that python isn't going to have copy.copy(itr) anytime soon because no one cares about them. Some people have made some progress, but it segfaults on my computer (64-bit Linux, in case you're wondering).

So, I came up with this terrible little hack which makes it possible to "copy" iterators:

class CopyableIterator:
    def __init__(self, generator, log = ()):
        self.generator = generator
        self.log       = list(log) #hmmm... if the logs were immutable, we wouldn't have to do this
        self.iterator  = None

    def getIterator(self):
        if self.iterator is None:
            self.iterator = self.generator()
            for value in self.log:
                self.iterator.send(value)
        return self.iterator
            
    def send(self, value):
        iterator = self.getIterator()
        self.log.append(value)
        return iterator.send(value)

    def next(self):
        return self.send(None)

    def copy(self):
        return self.__class__(self.generator, self.log)

That let's us define @do_ext:

@decorator_with_args
def do_ext(func, func_args, func_kargs, Monad):
    @handle_monadic_throws(Monad)
    def run_maybe_iterator():
        itr = func(*func_args, **func_kargs)

        if isinstance(itr, types.GeneratorType):
            @handle_monadic_throws(Monad)
            def send(itr, val):
                try:
                    # here's the real magic
                    monad = Monad.maybeNew(itr.send(val))
                    return monad.bind(lambda val : send(itr.copy(), val))
                except StopIteration:
                    return Monad.unit(None)
                
            return send(CopyableIterator(lambda : func(*func_args, **func_kargs)), None)
        else:
            #not really a generator
            if itr is None:
                return Monad.unit(None)
            else:
                return itr

    return run_maybe_iterator()

@do_ext(ListMonad)
def with_list_monad_ext():
    x = yield    [1, 2, 3]
    y = yield [10, 20, 30]
    mreturn(x + y)

list3 = with_list_monad_ext()

And list3 is ListMonad([11, 21, 31, 12, 22, 32, 13, 23]). Success again! There is a downside, though. First, all of the calculations are done for all of the combinations. This is especially bad if you do this:

@do_ext(ListMonad)
def with_list_monad_ext():
    print "foo"
    x = yield    [1, 2, 3]
    y = yield [10, 20, 30]
    mreturn(x + y)

Because now you'll print "foo" 9 times instead of 1.

So there you have it: you can do the List monad with do syntax in python and ruby, but you'll have to decide whether the trade-offs are worth it.

221 comments:

  1. Does it go up to 3 or more invocations? I'm having difficulty getting all your code together to try it myself.

    For the record, here's my ParseTree version, which now supports the arrow "operator" and is nestable:

    http://repo.or.cz/w/ruby-do-notation.git

    ReplyDelete
  2. Change is absolutely constant. Even education are adapting to the change; from traditional education now comes the online education. This latest system of learning is exciting as well as it is time and money efficient. In fact, it is now a growing trend worldwide. Many people consider this because it's easy access and has budget-friendly requirements without sacrificing quality education.http://www.thesisexample.info/

    ReplyDelete
  3. You can easily thin of good title of essay using these advice's

    ReplyDelete
  4. Hello! I just read this information and i can tell you that this article is useful. Thank you for sharing it.

    ReplyDelete
  5. These programming languages are very important for developers because through using these programming, they make different websites and software. I have also learn ruby and working on an educational project. Dissertation writing services.

    ReplyDelete
  6. Very good writings. Maybe someone know, where can I find top rated essay writing service? This post wrote good professional, which knows own work. And I need help with my essay, something like this article. Cheap Hardware Install Services in Dubai

    ReplyDelete
  7. This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me..
    machine learning certification in aurangabad

    ReplyDelete
  8. Your content is very unique and understandable useful for the readers keep update more article like this.
    data science course aurangabad

    ReplyDelete
  9. 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
  10. Very awesome!!! When I seek for this I found this website at the top of all blogs in search engine.
    data science training in malaysia

    ReplyDelete
  11. Very interesting to read this article. I would like to thank you for the efforts you had made for writing this awesome article. This article inspired me to read more. Keep it up.
    AWS Training in Hyderabad
    AWS Course in Hyderabad

    ReplyDelete
  12. Good post! Interesting content, well written. Really enjoyed the read and your breakdown of our product helped clarify some questions I was wondering about.
    Data Science Training in Hyderabad
    Data Science Course in Hyderabad

    ReplyDelete
  13. If more people that write articles really concerned themselves with writing great content like you, more readers would be interested in their writings. Thank you for caring about your content. Also visit my website: 바카라사이트

    ReplyDelete
  14. Your content is nothing short of brilliant in many ways. I think this is engaging and eye-opening material. Thank you so much for caring about your content and your readers Also visit my website: 바카라사이트

    ReplyDelete
  15. Hey, 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. Also visit my website: 바카라

    ReplyDelete
  16. 바카라사이트 If some one wants expert view on the topic of blogging
    and site-building then i recommend him/her to go to see this web site,
    Keep up the good work.


    ReplyDelete
  17. 온라인카지노 Hi there, I found your blog by the use of Google while looking for a related subject,
    your site came up, it appears good. I've bookmarked it in my google bookmarks.

    ReplyDelete
  18. 토토사이트 You present a very well-written article and with some awesome information which is very helpful, like me as reader. Thanks for sharing it and also
    please visit our great site below.

    ReplyDelete
  19. 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
  20. I’m thinking some of my readers might find a bit of this interesting. Do you mind if I post a clip from this and link back? Thanks 온라인카지노

    ReplyDelete
  21. I love it here. Reading your blogs is therapeutic. Keep sharing. I love them Are you also searching for do assignment for me? we are the best solution for you. We are best known for delivering cheap assignments to students without having to break the bank

    ReplyDelete
  22. I love it here. Keep sharing your good vibes. I love them Are you also searching for dissertation writing help? we are the best solution for you. We are best known for delivering cheap assignments to students without having to break the bank

    ReplyDelete
  23. Hey admin, Its really great content share with us, this was a very best of best article post share with us. Spending some time and actual effort to generate a good article and, You are really expert on this topic field.
    룰렛

    ReplyDelete
  24. Hi there to every one, for the reason that I am genuinely keen of reading this webpage’s post to be updated daily 카지노사이트

    ReplyDelete
  25. On Time Delivery: One of the greatest pressure of student's life is the cutoff time. At the point when taken help from the Hydraulics Assignment Help service they convey the assignment on schedule. Students don't need to stress over cutoff times. Likewise, the saved time can be utilized for learning new things that will help in scoring great freedoms. my assignment help

    ReplyDelete
  26. This article is an appealing wealth of useful informative that is interesting and well-written. I commend your hard work on this and thank you for this information. I know it very well that if anyone visits your blog, then he/she will surely revisit it again. Feel free to visit my website; 먹튀검증

    ReplyDelete
  27. Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something. I think that you can do with a few pics to drive the message home a bit, but instead of that, this is excellent blog. A great read. I’ll definitely be back. Feel free to visit my website; 토토사이트

    ReplyDelete
  28. Very useful post. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up Feel free to visit my website; 바카라사이트

    ReplyDelete
  29. Very informative message! There is so much information here that can help me thank you for sharing.
    Data Analytics Course in Lucknow

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

    ReplyDelete
  31. Mantra Maa Durga MantraMata MantraNavratri MantraMaa Sherawali MantraDurga Puja MantraMaa ... (Durga pushpanjali mantra) just like live saving medicine.

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

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

    ReplyDelete
  34. 바카라사이트
    Excellent Blog! I would like to thank you for the efforts you have made in writing this post.

    ReplyDelete
  35. The lifestyle and personality traits of a gemini cancer cusp person are magical and unique.

    ReplyDelete
  36. This post is very simple to read and appreciate without leaving any details out. Great work!
    cyber security certification malaysia

    ReplyDelete
  37. Awesome dispatch! I am indeed getting apt to over this info, is truly neighborly my buddy. Likewise fantastic blog here among many of the costly info you acquire. Reserve up the beneficial process you are doing here. 한국야동

    ReplyDelete
  38. Excellent post! We will be linking to this great content on our skull rings web site. Keep up the good writing. 일본야동

    ReplyDelete
  39. I have to thank you for the efforts you’ve put in penning this blog. I’m hoping to check out the same high-grade blog posts by you later on as well. In truth, your creative writing abilities has encouraged me to get my own blog now 일본야동

    ReplyDelete
  40. This is just the information I am finding everywhere. Thanks for your blog, I just subscribe your blog. This is a nice blog. 한국야동

    ReplyDelete
  41. The blog is informative and very useful therefore, I would like to thank you for your effort in writing this article.
    Data Analytics Course in Lucknow

    ReplyDelete
  42. Through this post, I realize that your great information in playing with all the pieces was exceptionally useful. I advise this is the primary spot where I discover issues I've been scanning for. You have a smart yet alluring method of composing.

    ReplyDelete
  43. 360DigiTMG, the top-rated organisation among the most prestigious industries around the world, is an educational destination for those looking to pursue their dreams around the globe. The company is changing careers of many people through constant improvement, 360DigiTMG provides an outstanding learning experience and distinguishes itself from the pack. 360DigiTMG is a prominent global presence by offering world-class training. Its main office is in India and subsidiaries across Malaysia, USA, East Asia, Australia, Uk, Netherlands, and the Middle East.

    ReplyDelete
  44. Погодные катаклизмы или церемониальные убийства животных за многие годы составили точное трактование обнаруженного. Важнейшие методы ворожбы родились тысячелетия тому назад до нашей эры. Гадание онлайн бесплатно, что он думает? считается самым вероятным действием просмотреть грядущее человека.

    ReplyDelete
  45. Войти на рабочее зеркало гидры hydra ru zerkalo site 2022 возможно через новейший браузер ТОR. В дополнение разрешено применять инкогнито при логине на портал ГидраРУ. Для хорошего коннекта с основным компьютером маркетплейса требуется быстрый прокси. Мультиканальная переадресация позволит авторизироваться на сайте моментально и безопасно.

    ReplyDelete
  46. Как оперативно зайти на форум Hidra с ПК гидра оригинал Ленинск

    ReplyDelete
  47. Хакеры осуществляют незаконные деяния по различным причинам. Чаще всего хакеры атакуют пользователей в целях материального интереса. В современном мире компьютерных методик управления достаточно просто стать целью хакеров. Крупнейший проект как совершить покупку на гидре Усть-Илимск – это надежный ассистент в борьбе с нападением кибер-преступников.

    ReplyDelete
  48. Не на всех сайтах необходимо предоставлять персональные данные, нужно именно найти особую платежную систему. Заполучить скрытность есть возможность исключительно на специальной платформе ссылка на гидру онион в тор Кизляр. Именно популярные платежные системы потребуют стопроцентной верификации клиентов.

    ReplyDelete
  49. Максимально простой прием персонального перевода денег – это зайти на http://metal-ua.info/wr_board/tools.php?event=profile&pname=ycajykimo. Перевести средства определенному пользователю или доверенной фирме можно различными вариантами. Сейчас существует огромнейшее число цифровых кошельков.

    ReplyDelete
  50. Hydra – лучший проект досуга гидра через тор 2022

    ReplyDelete
  51. Tutorguideinindia introduced you to the CLAT Coaching Institutes . The faculty at all institutes is well-trained and delivers real results. If you are looking to join clat coaching classes then you must visit tutorguideinindia portable to enroll your name for demo classes.

    ReplyDelete
  52. На Hydra выставлено довольно много проверенного товара, который доступен всем юзерам инете. Вот здесь hydra обход Старый Оскол выставлен максимальный перечень выставленного товара. На платформе ЮнионHYDRA очень сложно оформить продукцию обычным приемом, а оплату принимают только лишь через криптовалютные счета.

    ReplyDelete
  53. Заплатить за покупку анонимно становится очень трудно. При этом необходимо указывать, что персональные поступления применяют не только хакеры, но и обыкновенные юзеры. Согласитесь, все же ни один человек не посчитает нужным отправить серьезные деньги как налог за спасибо, проведя качественную сделку. Самой распространенным фактором для формирования персонального перевода http://taoeur.com/home.php?mod=space&uid=143175 значится работа в сети.

    ReplyDelete
  54. Маркет осуществляет свою деятельность на протяжении 6 лет, и за столь долгий отрезок времени сумел проявить себя как идеальная торговая платформа. HydraЮнион – это огромнейший маркетплейс, на каком есть возможность выкупить требуемые гаджеты по самой приемлемой стоимости. На сайте http://www.j-tune.co.uk/dev/community/profile/uwinegyg/ вы сумеете выбрать продукты на свой вкус и сумму. В настоящий момент 99 процентов определенных коммерческих операций осуществляют в интернете.

    ReplyDelete
  55. Реально ли авторизироваться на страницу большого маркетплейса HydraRU анонимно gidra зеркала Ярославль

    ReplyDelete
  56. В сети есть серьезное число увеселительных ресурсов. Онлайн развлечения и индивидуальные связи средь юзеров способствует организовывать объединения соратников по определенным направлениям. И https://forum.fulltimewin.com/viewtopic.php?f=29&t=21229 – один из преимущественно посещаемых порталов, предоставляющий постоянным клиентам широкий решение для развлечений.

    ReplyDelete
  57. Надежные файерволы – действенная охрана от внедрения хакеров в вашу интерактивную сеть. Начинать надежную оборону рабочего компьютера требуется с подбора надежного интернет-провайдера. Компании, какие предоставляют доступ к интернету, все чаще организовывают в сетевых комплексах современную оборону от кибер атак, проверенный список достаточно просмотреть на https://dark.hydraruzxpnew4afonion.com.cn.

    ReplyDelete
  58. Многие юзеры знают о форуме HydraRU, а войти на него особенно тяжело. Защищенная закупка проходит исключительно в сети даркнет. Человеку нет нужды подвергать себя опасности, осуществляя покупку у реализатора товара. Любая сделка на https hydra com 2022 гарантирует клиентам высокий показатель безопасности.

    ReplyDelete
  59. Главным направлением безопасности в Глобальной сети является протекция коммуникационного устройства гидра правильная hydparu zerkalo site 2022, с помощью которого происходит доступ в сеть интернет. Оптимально элементарный путь проникновения – это внедрение вирусов, к примеру, программы шпионы. Правонарушители могут пройти на комп пользователя и получить онлайн-доступ к конкретной информации.

    ReplyDelete
  60. Администрация форума Гидра круглосуточно поглядывает за точной реализацией всех договоров. В случае если реализатор не отправит покет, то его маркет будет немедленно ликвидирован на форуме Hydra. В целях предоставления вспомогательной защищенности разрешается воспользоваться услугами гаранта. На платформе http://www.gxzg.net/home.php?mod=space&uid=4142 создана вспомогательная структура охраны.

    ReplyDelete
  61. Схема скрытых покупок на площадке Гидра гидра зеркало 2021 2022

    ReplyDelete
  62. При применении ненатуральной смолы листы шпона не ссохнутся под действием дождя и снега или обильной влажности. Стоимость такового материала относительно низкая купить фанеру для опалубки. В результате перекрестно сопоставленных лент шпона водостойкий тип фанеры практически равен по прочности обычной древесине.

    ReplyDelete
  63. Онлайновые развлечения и индивидуальные связи средь пользователей потворствует создавать сообщества союзников по некоторым направлениям. И тор браузер гидра hydra ru zerkalo site – один из особенно популярных проектов, предлагающий постоянным юзерам громадный решение для развлечений. На просторах мировой паутины найдется серьезное множество увеселительных сайтов.

    ReplyDelete
  64. Great post, Thanks for sharing a this post filled with a lot of information. keep up the good work.
    Data Analytics Course in Indore

    ReplyDelete
  65. Влагостойкий ламинат может быть с деревянной текстурой, в качестве природного камня или керамической плитки. Особенностью ламинированного покрытия https://fanwood.by/shop/fsf-fanera/dlya-sten/ считается не только идеальное противостояние влаге, но и наличие любой цветовой гаммы. Довольно часто встречается ламинированная плоскость фанеры особой, своеобразной фактуры и рисунка.

    ReplyDelete
  66. С модернизацией технологий параллельно развивают определенные способности проходимцы, каковые работают в Мировой паутине. Интернет дает преимущества использовать невероятное количество архивов абсолютно бесплатно hydra. Посещая Глобальную паутину потребуется заранее обеспокоиться о надежности стационарного гаджета и помещенной на нём информации.

    ReplyDelete
  67. Есть немыслимое количество актуальных веб-серферов, какие в режиме реального времени предотвращают потуги атаки на персональный компьютер или умного девайса. Вычислить точку входа в сеть применяя TOR вообще не выйдет. При помощи встроенной защиты человек сможет без особых премудростей качать полезную информацию в сети интернет. Инет веб-серфер ТОР подключается http://arabhelp.org/index.php?qa=user&qa_1=amudibeqo через большое количество прокси-серверов.

    ReplyDelete
  68. На сегодняшний день есть в наличии большое количество цифровых платежных систем. Наиболее естественный метод скрытного оплаты денег – это найти информацию на http://julia4tied.de/member.php?action=profile&uid=51604. Занять средства иному пользователю или любой компании имеется возможность любыми вариантами.

    ReplyDelete
  69. Поначалу требуется выбрать надлежащий продукт в одном из магазинов UnionГИДРА. Переведя деньги человеку представят данные о месте, где требуется забрать купленный товар. По ссылке http://taoeur.com/home.php?mod=space&uid=145707 показан перечень наиболее популярных продавцов проекта.

    ReplyDelete
  70. Зачастую может попасться на глаза ламинированная поверхность фанеры уникальной, оригинальной строения и иллюстрации. Особой чертой ламинированной пленки является не исключительно первоклассное сопротивление влаге, а также присутствие индивидуальной цветовой гаммы. Водостойкий ламинат существует с деревянной фактурой http://www.silenaway.ru/index.php/forum/user/63659-isoniqaka, в виде натурального камня или керамогранитной плитки.

    ReplyDelete
  71. Собрав интересующую информацию о владельце ПК, злоумышленники станут использовать показатели для личных целей. На смартфоне человека, чаще всего, находится важнейшая финансовая информация, каковая и есть целью злоумышленников. Особенную опасность демонстрируют трояны для новых телефонов. Практически всегда пытаются найти материалы о кредитных картах пользователя, или же логины от всякого рода соцсетей http://dp4.minzdravrso.ru/about/forum/user/241948/.

    ReplyDelete
  72. Бывает целый ряд видов ФСФ плиты https://bbs.dragontooth.cn/home.php?mod=space&uid=45958, любая из них отличается специальными свойствами. Конкретные виды полученной фанеры как правило противодействуют влаге, дождю и снегу, а полотна остаются исходно прочными. Основная область применения - утепление кровли, помещений и времянок, складов внешняя облицовка стен сооружений.

    ReplyDelete
  73. Для внутрикомнатных действий употреблять ФСФ фанеру запрещено - могут присутствовать ядовитые субстанции при конкретных ситуациях. Водоустойчивый вид практически не впитывает влагу, а по окончании просушки не пропадает. Наиболее часто смоляно фенолформальдегидную фанеру http://chinatksrubber.com/space-uid-248480.html используют как внешний аппретурный материал. Фанерный лист ФСФ - это влагоупорный класс фанеры, получивший обширное распространение в строительной сфере.

    ReplyDelete
  74. This is a topic wgich is close tto my heart...
    Cheers! Exactly where are your contact details though? This is mine 먹튀검증

    ReplyDelete
  75. Используйте услуги виртуального проекта «Гидра», или зеркалом сайта, если главная страница перегружена. Отправляйте необходимые суммы в нужном направлении без дополнительных затрат, в то же время не открывая свои данные. Благодаря онлайн-магазину дайте ссылку на гидру каждый человек сможет осуществить закрытую транзакцию.

    ReplyDelete
  76. Отправляйте денежные средства в требуемом направлении без лишних процентов, вместе с тем не публикуя собственные данные. За счет интернет-магазина hydra market каждый клиент сможет сделать неидентифицируемую сделку. Воспользуйтесь услугой виртуального портала «Гидра», либо зеркалом сайта, если основной портал перегружен.

    ReplyDelete
  77. Анонимности в мировой паутине давненько не существует в том понимании, как ранее, допустим, 15 лет назад. Верификация посетителей гидра сайт зеркало в глобальной сети потребуется для предотвращения надзорными органами противоправных махинаций. Махинаторы смогут выполнять преступные операции с денежками юзеров.

    ReplyDelete
  78. Максимально полезные рекомендации для охраны персонального компа скидки на гидре

    ReplyDelete
  79. Во время кибер атаки юзер даже не разгадает, что на рабочем компе поставлен посторонний софт. Основным заданием кибер-мошенников оказывается интернет-атака домашнего компа. Применяйте сайт gidra com Боровск для регистрации на центральный сайт Hydra. Открыть доступ к банковским картам клиента для хорошего кибер-мошенника не сложно.

    ReplyDelete
  80. Перспективный онлайн проект по проведению отдыха в инете – Hydra hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid гидра сайт

    ReplyDelete
  81. Возможно ли правильно подготовить анонимную покупку в мировой паутине hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid гидра сайт зеркало

    ReplyDelete
  82. Защита данных теперь считается собственным направлением для защиты нормальной деятельности в интернете. Исключительно высокий уровень осведомленности обеспечивает пользователю защиту персональных данных. К примеру, актуальная ссылка на гидру Лобня располагает конкретными инструкциями, затем чтоб не стать целью преступников в интернете.

    ReplyDelete
  83. Различные пользователи считают, что получить сто процентную защиту в Мировой сети невозможно, вот только это является серьезным заблуждением. Настоящее программное обеспечение gidra com 2022 обеспечивает адекватную протекцию от преступников. ТОР – наилучший веб-обозреватель, который стоит применять для серфинга в инете.

    ReplyDelete
  84. Кто угодно сможет зайти на развлекательный проект или страницу развлекательного веб-сайта http://rostov-loyals.com/index.php?subaction=userinfo&user=ytinyxemy. Отбирайте интересующий метод игр в мировой сети на какой угодно манер. В итоге усовершенствования ИТ методик в интернет-сети есть громадное количество интерактивных порталов.

    ReplyDelete
  85. Влагонепроницаемая фанера ламинированная сетка отлична от влагостойкой тем, что она пропитана специальным составом смолы. В основном для создания фанеры водостойкой применяют комплексные скрепляющие вещества. Благодаря особым чертам плита из фанеры зачастую востребована в кораблестроении, кроме этого при изготовлении вагонов и т.д. .

    ReplyDelete
  86. Актуальные сборки антивирусных паков в рекордные сроки просмотрят домашний ПК и избавят от программ шпионов. Надежный антивир можно загрузить на сайте http://josephblog.free.fr/index.php?file=Members&op=detail&autor=ixojibe. Защита от вирусов, установленная на домашнем компе юзера, действительно не помешает.

    ReplyDelete
  87. большое число пользователей сталкиваются с проблемой персонального платежа средств. Принять персональный платеж в интернете не так уж и просто, тем не менее, вполне осуществимо. Работа на удаленке, к примеру, фриланс, многочисленные работодателиПрисутствует большое число страниц, которые дают шанс переводить средства полностью без отслеживания http://bioapteka.kz/index.php?subaction=userinfo&user=yqotimy.

    ReplyDelete
  88. Зеркала для вхождения на сайт Gidra непрерывно меняются. Огромнейший сортамент веществ hydra гидра официальная ссылка совершенно поражает воображение. Покупателям сайта представлены сотни оптовиков с разнообразными веществами. Делайте лишь анонимные виды оплаты товара. Для верификации на на сайте HydraЮнион можно использовать дополнительную ссылку главной страницы Gidra.

    ReplyDelete
  89. Следует сказать, что большое количество гиков находят специализированные онлайн проекты. Обычно пользователи в онлайн-сети играют в многопользовательские игры. На странице http://www.dachamania.ru/photo_gallrey/profile.php?uid=15822 клиенты увидят немыслимое число развлечений, в том числе самый большой форум для общения между единомышленниками вирт общества.

    ReplyDelete
  90. I have never seen such blogs ever before that have complete things with all the details I want. So kindly update this ever for us.
    full stack web development course in malaysia

    ReplyDelete
  91. На странице http://ukies.ca/index.php?subaction=userinfo&user=onykygix вы сумеете подобрать вещи на индивидуальный вкус и бюджет. Магазин осуществляет свою деятельность уже более 5 лет, и за такой отрезок времени смог проявить себя в качестве выдающейся торговой платформы. В наши дни 90 процентов всех коммерческих договоров осуществляют в интернет-сети. ЮнионHYDRA – это современный маркетплейс, где есть возможность выкупить необходимые продукты по максимально приемлемой цене.

    ReplyDelete
  92. Существует большое число ссылок, через которые потребитель может зайти на http://blog.edavoda24.ru/index.php?subaction=userinfo&user=oseripu. Актуальный реестр зеркалок имеется возможность беспроблемно посмотреть в глобальной сети. Как залогиниться на сайт Gidra с персонального компьютера? Для новых пользователей бывает проблематично зайти на торговый маркетплейс Гидра.

    ReplyDelete
  93. Вон тут http://bbs.beidouauto.com/space-uid-5148428.html указан действенный каталог продаваемого товара. На форуме ГидраРУ тяжело приобрести вещи обычным вариантом, а оплата принимается только через виртуальные кошельки. На Гидра РУ представлено особенно много фирменного товара, доступного всем посетителям интернет-сети.

    ReplyDelete
  94. Максимально актуальные Указания для защиты рабочего компа http://seafishzone.com/home.php?mod=space&uid=868260

    ReplyDelete
  95. Существует множество возможностей защитить собственный компьютер от кибернетической атаки. Множество советов, какие юзеры найдут на страницах hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid ссылка на гидру onion, максимально практичны. Как спасти себя от нападения кибер-преступников, реально посмотреть несколько грамотных советов. Обратитесь к форуму, в котором можно прочитать практичные наставления профессионалов.

    ReplyDelete
  96. Стартовать непробиваемую охрану домашнего компьютера необходимо с подбора подходящего хост-провайдера. Встроенные файерволы – лучшая охрана от внедрения хакеров в домашнюю интерактивную сеть. Компании, которые предоставляют услуги интернета, как правило реализовывают в собственных комплексах актуальную защиту от кибернетических атак, подробный список возможно увидеть на сайт гидры hydra Новокузнецк.

    ReplyDelete
  97. В следствии работы онлайн-магазина http://www.liuyuchen110.com/member/index.php?uid=yzyhefyw&action=viewarchives&aid=3848 хоть кто может осуществить неидентифицируемую коммерческую операцию. Воспользуйтесь сервисом виртуального портала «Гидра», а также сайтом-зеркалом, если основной ресурс недоступен. Переводите деньги в нужном направлении без ненужных трат, вместе с тем не открывая паспортные данные.

    ReplyDelete
  98. Злоумышленники смогут выполнять преступные действия с суммами юзеров. Авторизация юзеров гидра сайт zerkalo onion 2022 com в интернете требуется для предупреждения органами правопорядка преступлений. Анонимности в интернете уже давно нет в том виде, как было, как пример, десятилетие тому назад.

    ReplyDelete
  99. ЮнионHYDRA значится наиболее большим сайтом, реализующий вещи специфического назначения. Сотни поставщиков и приемлемая стоимость – вот основные положительные моменты, почему заказчики скупляются в Гидра РУ. Крутой маркет http://ttjg.ca/member/index.php?uid=atyfak расположен в скрытой сфере мировой паутины.

    ReplyDelete
  100. Битки – это самостоятельная платежная система, гарантирующая наибольшую анонимность юзеру. В наличии целый ряд типов криптографических систем для выкупа услуг в сети интернет. Сейчас максимально подходящий порядок отовариться инкогнито в интернете – это воспользоваться криптовалютами. В основном на гидра онион официальная ссылка переводят этериум или биткоин.

    ReplyDelete
  101. Помимо защиты при покупке клиенты слишком часто стараются закрыть паспортные данные. Выгодные для покупателей покупки в сети интернет являются приоритетом для всякого интернет-магазина. Современная платформа hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid гидра официальный сайт ссылка предоставляет возможность получить нужный товар как можно быстрее.

    ReplyDelete
  102. С расширением интернет-технологий параллельно оттачивают свои знания злодеи, что орудуют в интернете. Мировая паутина допускает возможность охватить немыслимое количество данных полностью бесплатно гидра онион сайт hydra9webe Беломорск. Войдя в интернет нужно предварительно озаботиться о надежности стационарного девайса и помещенной на нём информации.

    ReplyDelete
  103. Злоумышленники смогут попасть на девайс пользователя и получить доступ к всей информации. Самый легкий путь хака – это закачка вредоносных программ, в частности, вирусы. Основным направлением кибербезопасности оказывается защита сетевого оборудования http://www.violinstudy.net/home.php?mod=space&uid=1318406&do=profile, при помощи которого осуществляется доступ в интернет.

    ReplyDelete
  104. На телефоне пользователя, чаще всего, содержится необходимая финансовая информация, являющаяся целью злодеев. Самую большую опасность демонстрируют программы для последних смартфонов. Обычно заполучают инфу о карточных счетах пользователя, а так же емейлы от всевозможных банков https://zerkalo-ssilka.c-hydra.com. Собрав важную информацию о юзере, злоумышленники будут использовать материалы для собственных целей.

    ReplyDelete
  105. Как работать с порталом Gidra hydra сегодня 2022

    ReplyDelete
  106. TOR – проверенный браузер, который нужно использовать для просмотра данных в интернете. Нынешнее ПО актуальные зеркала гидры 2022 устанавливает надежную протекцию от киберпреступников. Большое количество людей считают, что гарантировать сто процентную защиту в инете слишком тяжело, однако это является существенным заблуждением.

    ReplyDelete
  107. Используйте именно официальный сайт гидра ссылка онион Иланский для доступа на центральный портал Hydra. В результате атаки мошенников пользователь вообще не догадается, что на его компьютере находится посторонний человек. Заполучить доступ к финансовым картам человека для хорошего кибер-преступника проще простого. Первым заданием кибер-мошенников есть атака домашнего компьютера.

    ReplyDelete
  108. В результате совершенствования ИТ технологий в мировой паутине создано немыслимое количество развлекательных порталов. Всякий посетитель имеет возможность войти на игровой проект или портал развлекательного веб-сайта гидра на русском языке. Подбирайте интересующий способ отдыха в интернет-сети на свой манер.

    ReplyDelete
  109. Безопасные закупки продукции – каким образом работать с порталом ГидраUnion в сети даркнет гидра онион Болотное

    ReplyDelete
  110. Каким образом работать с форумом ГидраUnion http://shufazitie.com/home.php?mod=space&uid=187256

    ReplyDelete
  111. Интернет-магазин Гидра гарантирует любому пользователю высокую степень безопасности при осуществлении любой операции. Достаточно зарегистрироваться на странице ГидраРУ, а ваши данные направится для хранения в засекреченном виде на виртуальном компьютере. За счет площадки https://www.newsgongyi.com/home.php?mod=space&username=efycom&do=profile юзеры обретут наивысшую степень безопасности.

    ReplyDelete
  112. Вон тут hydraclubbioknikokex7njhwuahc2l67lfiz7z36md2jvopda7nchid гидра ссылка на сайт зеркало находится максимальный список выставленного товара. На HydraЮнион находится более чем много популярного товара, доступного всем покупателям интернет-сети. На сайте Hydra RU очень трудно приобрести покупку нормальным способом, а оплату принимают лишь только через виртуальные кошельки.

    ReplyDelete
  113. При оформлении электронного кошелька элементарно получить обычный статус без оформления документов. Виртуальные кошельки, большей частью, являются анонимным способом выкупа вещей в интернете. Не помешает учитывать, что при транзакции денег с цифрового кошелька, хозяин онлайн-магазина аналоги гидры не будет записать личные данные посетителя.

    ReplyDelete
  114. Для работы требуются водители с индивидуальным минигрузовым автомобилем. Посетив страницу компании по ссылке грузоперевозки недорого, всякий пользователь сумеет рассмотреть список оказываемых работ.

    ReplyDelete
  115. Your blogs are great.Are you also searching for Nursing term paper help? we are the best solution for you. We are best known for delivering great term paper services :+1-(951)-468-9855

    ReplyDelete
  116. На сайте фирмы можно без труда отобрать подходящую себе картину, в частности, золотой постер. Какие угодно предметы постеров, и даже полноразмерная и яркая печать сделают ваше помещение особенным. Компания ДасАрт считается лучшим в городе реализатором репродукций подлинных портретов и плакатов для дизайна жилья.

    ReplyDelete
  117. Дети постарше могут развивать развивающие навыки. Подростки все время станут занимать новенькую постройку. Комплекс http://www.reginaicsrl.it/index.php?option=com_k2&view=itemlist способен целиком обеспечить первостепенные интересы малышей в развлечениях. На игровой площадке расставят все стандартные элементы – горки, качели, канаты.

    ReplyDelete
  118. Маленькая кухня позволит девочке самостоятельно выполнять каждодневные процессы родителей, что они видят. Выдумки на тему приготовления блюд очень легко осуществить при помощи миниатюрной кухни Dream Toys. В игрушечном наборе для кухни находятся все нужные для игр части. Великолепный вариант игровая кухня понравится девочкам разных возрастных групп.

    ReplyDelete
  119. A very good blog post. Very well written and your points are well expressed. Thanks for sharing
    free auchi poly past questions pdfvisit Best Rated Educational Update Portal in the World; Examination and Academic Guide, High Paying Jobs & Scholarship  Website.

    ReplyDelete
  120. Informative Blog. Thanks for writing

    ReplyDelete
  121. Голицына Екатерина 32 лучших фото cojo.ru

    ReplyDelete
  122. Порода кинг чарльз спаниель лучшие картинки https://cojo.ru/zhivotnye/poroda-king-charlz-spaniel-45-foto/

    ReplyDelete
  123. Цвет марсала краска для волос профессиональная галерея https://cojo.ru/pricheski-i-strizhki/tsvet-marsala-kraska-dlya-volos-professionalnaya-39-foto/

    ReplyDelete
  124. Смешные картинки и открытки С Днем Рождения Лолита милые картинки https://cojo.ru/kartinki/smeshnye-kartinki-i-otkrytki-s-dnem-rozhdeniya-lolita-29-foto/

    ReplyDelete
  125. Рисунки рыси для срисовки в хорошем качестве https://cojo.ru/kartinki/risunki-rysi-dlya-srisovki-32-foto/

    ReplyDelete
  126. Пожелание и красивые цветы к юбилею подборка https://cojo.ru/pozdravleniya/pozhelanie-i-krasivye-tsvety-k-yubileyu-22-foto/

    ReplyDelete
  127. Авангард прически милые картинки https://cojo.ru/pricheski-i-strizhki/avangard-pricheski-55-foto/

    ReplyDelete
  128. Малыши с мамами смотреть фото https://cojo.ru/deti/malyshi-s-mamami-52-foto/

    ReplyDelete
  129. Abstract Live Wallpapers WallpapersHigh.com UHD for free https://wallpapershigh.com/abstract-live

    ReplyDelete
  130. Badass Military Wallpapers WallpapersHigh.com Full HD for free https://wallpapershigh.com/badass-military

    ReplyDelete
  131. Anthropologie Peel And Stick Wallpapers wallpapershigh.com full hd absolutely free https://wallpapershigh.com/anthropologie-peel-and-stick

    ReplyDelete
  132. A Esthetic Wallpapers WallpapersHigh.com Fullhd 100% free https://wallpapershigh.com/a-esthetic

    ReplyDelete
  133. Altezza Wallpapers wallpapershigh.com high definition fast and free https://wallpapershigh.com/altezza

    ReplyDelete
  134. Alec Monopoly Wallpapers wallpapershigh.com FULL HD 100% free https://wallpapershigh.com/alec-monopoly

    ReplyDelete
  135. High Resolution Thor Wallpapers WallpapersHigh.com UHD 100% free https://wallpapershigh.com/high-resolution-thor-wallpapers

    ReplyDelete
  136. Ktm 1290 Wallpapers https://wallpapershigh.com https://wallpapershigh.com/ktm-1290

    ReplyDelete
  137. Bhagwati Mata Wallpapers Wallpapershigh.com https://wallpapershigh.com/bhagwati-mata

    ReplyDelete
  138. Покрытые пленкой экземпляры обладают большей износостойкостью, чем их подобия без вспомогательного покрытия. Зачастую для производства фанеры могут взять два-три типов материала разных видов древесины, но попадается и чисто березовая фанера. Влагонепроницаемую фанеру https://fanwood.by/shop/dsp-dvp-i-mdf/ применяют для декорированной покрытия мебели, при проведении дизайнерских ремонтных работ, для строительства кузовов грузовиков. Покрытие из ламината по факту не вбирает пар, в итоге её довольно часто устанавливают в зданиях с повышенной влажностью, например, кухня.

    ReplyDelete
  139. Brahmani Maa Wallpapers https://wallpapershigh.com https://wallpapershigh.com/brahmani-maa

    ReplyDelete
  140. Обработанная с одной или нескольких сторон ламинированной пленкой, фанера имеет возможность наиболее полно противостоять дождю. ДВП https://fanwood.by/v-klimovichakh/shop/dsp-dvp-i-mdf является без преувеличения распространенным отделочным сырьем в сфере строительства. Присутствует значительное число типов качественной фанеры, одной из которых считается ламинированная ФОФ.

    ReplyDelete
  141. Влагоупорная дсп https://fanwood.by/shop/fsf-fanera/dlinoy-1250-mm отличается от влагостойкой тем, что она обработана характерным составом смолы. Благодаря свойствам плита из фанеры широко востребована в кораблестроении, а также при производстве вагонов и так далее. В основном с целью приготовления фанеры влагопрочной используют комплексные связующие вещества.

    ReplyDelete
  142. Топовая сейчас защита от грязи и воды по технологии IP68 УДАЛИТЬ. IT-гигант Apple всегда славилась особенным интересным и качественной комплектацией. Здесь https://www.iport.ru/products/productID120192/ доступен в 5 различных цветах, комплектован прочнейшим вариацией стекла Керамик Шелд. Прочный моноблок может сократить риск деформации при падении.

    ReplyDelete
  143. Текущая модификация телефона http://yasumi.kz/index.php?subaction=userinfo&user=agolyjevu содержит множество нужных исправлений. Дополнения сделали новейший умное устройство выгоднее, чем предшествующие комплектации. Современные разработки, интегрированные в смартфон, помогут заглянуть в ближайшее будущее. С решающим изготовлением четырнадцатого Айфона IT-гигант Эпл внедрила много передовых настроек.

    ReplyDelete
  144. I like your blog. You blog contain important information that help to python developers. Python Certification Course in Lucknow is the best place to gain knowledge.

    ReplyDelete
  145. Число фильмов видео-кинотеатра «Кино Навигатор» ежедневно пополняется, поэтому на портале все время можно отыскать искомое http://nedv-revda.ru/index.php?subaction=userinfo&user=discreetpreview и иные новинки. Кинотетар KinoNavigator является самым лучшим на просторах сети интернет. Сериалы с небольшим хронометражем или большой кинофильм – это все доступно для просмотра без рекламы.

    ReplyDelete
  146. В сети интернет выложено громадное число кино-новинок в отличном разрешении. За счет интернета каждый человек в состоянии просматривать видео фильмы где есть девочка-подросток в купальнике https://kinonavigator.ru/catalog/films/t_devoczkapodrostok_v_kupalnike целиком без оплаты. Множество онлайн-кинотеатров публикуют реально качественные видео. Свежие фильмы на русском языке быстро увлекут вас на несколько часов.

    ReplyDelete
  147. Основы действия пневмогидравлического узла реле давления для гидроаккумулятора

    ReplyDelete
  148. Most valuable article really i congrats to this blog writer any one want legal support for you kindly visit our page thanks. Appomattox Reckless Driving

    ReplyDelete
  149. Рисунки снежная королева смотреть фото https://cojo.ru/kartinki/risunki-snezhnaya-koroleva-26-foto/

    ReplyDelete
  150. Прически на свадьбу для гостей 2023 (43 фото) - лучшие фото идеи с названиями в хорошем качестве https://fotoslava.ru/pricheski-na-svadbu-dlya-gostey-2023

    ReplyDelete
  151. Волосы в хвосте (49 фото) https://byry.ru/volosy-v-hvoste/

    ReplyDelete
  152. Самые смешные рисунки милые картинки https://fotoslava.ru/samye-smeshnye-risunki

    ReplyDelete
  153. Ниша для телевизора и камина (48 фото) фотографии https://fotoslava.ru/nisha-dlya-televizora-i-kamina-48-foto

    ReplyDelete
  154. Укладка на удлиненное каре (52 фото) - лучшие фото идеи с названиями милые картинки https://fotoslava.ru/ukladka-na-udlinennoe-kare

    ReplyDelete
  155. Тамарикс в ландшафтном дизайне (48 фото) картинки https://fotoslava.ru/tamariks-v-landshaftnom-dizajne-48-foto

    ReplyDelete
  156. Motivational Study Wallpapers high resolution 100% free https://wallpapershigh.com/motivational-study

    ReplyDelete
  157. Shreyas Iyer Wallpapers high resolution absolutely free https://wallpapershigh.com/shreyas-iyer

    ReplyDelete
  158. Yungblud Aesthetic Wallpapers fullhd for free https://wallpapershigh.com/yungblud-aesthetic

    ReplyDelete
  159. Neon Eagle Wallpapers FULL HD fast and free https://wallpapershigh.com/neon-eagle

    ReplyDelete
  160. Cole And Son Feather Fan Wallpapers Full Hd for free https://wallpapershigh.com/cole-and-son-feather-fan

    ReplyDelete
  161. Nba Youngboy Cartoon Wallpapers High Quality absolutely free https://wallpapershigh.com/nba-youngboy-cartoon

    ReplyDelete
  162. Bane Ml Wallpapers FULLHD absolutely free https://wallpapershigh.com/bane-ml

    ReplyDelete
  163. What a fabulous post this has been. It contains wonderful and helpful posts. Abogado DUI VA

    ReplyDelete

Blog Archive

Google Analytics