Oleg Andreev



Software designer with focus on user experience and security.

You may start with my selection of articles on Bitcoin.

Переводы некоторых статей на русский.



Product architect at Chain.

Author of Gitbox version control app.

Author of CoreBitcoin, a Bitcoin toolkit for Objective-C.

Author of BTCRuby, a Bitcoin toolkit for Ruby.

Former lead dev of FunGolf GPS, the best golfer's personal assistant.



I am happy to give you an interview or provide you with a consultation.
I am very interested in innovative ways to secure property and personal interactions: all the way from cryptography to user interfaces. I am not interested in trading, mining or building exchanges.

This blog enlightens people thanks to your generous donations: 1TipsuQ7CSqfQsjA9KU5jarSB1AnrVLLo

Io namespaces

Io namespaces are created using regular objects. However, there’s no such thing as “lexical context” In Io, so the Foo will not be able to access Bar in the following example:
MyApp := Object clone do(
  Foo := Object clone do(
    bar := method(Bar)  # Bar is not accessible from here!
  )
  Bar := Object clone do(
    foo := method(Foo)  # Foo is not accessible from here!
  )
)
How can we improve that? First, lets define MyApp with Module clone rather than Object clone:
MyApp := Object Module clone do(
  Foo := Object clone do(
    bar := method(Bar)
  )
  Bar := Object clone do(
    foo := method(Foo)
  )
)
All we need now is to have all inner objects to have MyApp in the list of prototypes. Therefore, lets override Object slot to refer to MyApp rather than the standard Object:
Module := Object clone do(
  Object := method(self)
)
See Module.io on GitHub.