Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

ionify/ionify

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿงฌ ion implemented for you, is a flexible & unobtrusive, natural-language api, for expressing actions & information via โš›๏ธŽ ion: invoked object notation. it's produced by michael ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป lee and is maintained by teamโœจionify:

~ {   log  : '๐Ÿ‘‹๐Ÿพ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป'   } <= /do transcription/
+ { "json" : "data"  } <= /json information/
& ["natural language"] <= /text information/

why

โš›๏ธŽ ion + ๐Ÿงฌ ionify enable expressing actions & information that humans & software naturally โฆ understand. they enable:

how

โš›๏ธ ion + ๐Ÿงฌ ionify are enabled by & can be implemented in, languages that support operator โš™๏ธ overloading. three we've explored & confirmed capable, are {โœจ:javascript}, ๐Ÿ_python, & java.โ˜•๏ธ.

for a detailed explanation of ion: invoked object notation, visit its ๐Ÿ“š documentation.

for applications of ion & ionify ๐Ÿคฒ๐Ÿพ enjoy ๐Ÿคฒ๐Ÿพ the following subsections:

creating a domain-specific language ... can be worthwhile if the language allows a particular type of problem or solution to be expressed more clearly than an existing language would allow - wikipedia

ionify enables creating language(s) via ions that define & map terms & phrases to actions:

~
{ re:
    { id: 'ask.say@ions.iskitz.net'
    , is: 'an ask & say domain-specific-language interaction'
    , by: ['๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ','mike๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธlee','teamโœจionify']
    , on: {201507283.2 : -7}
    , to: {202212262.2 : -8}
    , at: +3.100
    , in: 'silicon-valley.california.usa.earth'
    , do: 'webi interaction'
    , as: 'sensation'
    },

  on: ['ask','say'],

  ask :function
  ask ( action )
      { ask.with.my.answer =
        prompt (ask.with.my.prep (action.ask))
        ||''
      },

  say :function
  say ( action )
      { alert  (say.with.my.prep (action.say))
      },

  prep:function
  prep( quote )
      { return  quote.replace       (// replace
               (/\[answer\]/g)      ,// [answer]
                prep.with.my.answer )// ๐Ÿ‘ˆ๐Ÿพ with
      }
}


~ /ask.say interactions can be independent ions/

~ { say: '๐Ÿ‘‹๐Ÿพ hi!'                              }
~ { ask: "what's your name?"                   }
~ { say: "hi [answer]! i'm math e. bot ๐Ÿค“"     }
~ { ask: "[answer], what's 2 x 2?"             }
~ { say: '[answer]? really? ๐Ÿค”'                }
~ { ask: 'can i ask you another question?'     }
~ { say: 'i thought you\'d say "[answer]" ๐Ÿ˜‰'  }

a program is best thought of as a web ... of simple parts and simple relations between those parts; the programmer's task is to state those parts and those relationships, in whatever order is best for human comprehension - donald e. knuth

~
{ re:
    { id: 'frendlee@ionified.net'
    , is: 'a literate & natural-language exploration'
    , by: ['๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ','mike๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธlee','teamโœจionify']
    , on: {201712086.2 : -8}
    , to: {202212262.2 : -8}
    , in: 'silicon-valley.california.usa.earth'
    , do: 'ask.say.3@ions.iskitz.net'
    , as: 'aesop action'
    },

  do:
    [ 'say hello'
    , 'ask their name'
    , 'invite them to play'
    ],

  'say hello':
    {say: "hi! i'm frend lee!"},

  'ask their name':
    {ask: "what's your name?"},

  'invite them to play':
    {ask: 'hi [answer]! wanna play?!'}
}
~
{ re:
    { id: 'code-as-prose.demo@ionified.net'
    , is: 'code-as-prose with ionify & orion'
    , by: ['๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ','mike๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธlee','teamโœจionify']
    , on: {201903237.2 : -7       }
    , to: {578310011.1 : -8.235423}
    , at: +0.200
    , in: 'silicon-valley.california.us.earth'
    , do: 'transcription'
    , as: 'sion sensation'
    },

  on: 'say',
  say (ion)
    {
    + {log: ion.say}
    }
}

    you     = {say:'do you see all the things'}
    can     = {say:'we can do'   }
  write     = {say:'if we write' }
   code     = {say:'our code'    }
     as     = {say:'as actionable words within'}
  prose     = {say:'phrases & sentences?!๐Ÿค“'}

    via     = {say:'natural โฆ language by ๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ via'}
    ion     = {say:'โš›๏ธ invoked object notation'},
    ionify  = {say:'๐Ÿงฌ ions implemented for your'},
  orion     = {say:'โœจ object-reference ion:'},
captions    = {say:'๐Ÿ“ code-as-prose terminology ions!๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป'}

 'with' , ion + ionify & orion, you -can-
  write & code -as- prose -via- captions-

              ['^ ฺ ^']

visit ๐Ÿ˜Ž anemojii to experience another exploration of literate programming.

a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality - wikipedia

~
{ re:
    { id: 'an.ionified.module@doma.in'
    , is: 'modeling an ionified module'
    , by: ['๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ','mike๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธlee','teamโœจionify']
    , on: {200709.2    : -4     }
    , to: {202212251.2 : -8.2337}
    , do: 'on.storie@ionify'
    , as: 'sion action'
    },

  do: function
  something ()
    {
    + something.with.my.ai
    },

  ai: /hi! ๐Ÿค“/
}

a programming paradigm in which the flow of the program is determined by events such as user actions ..., sensor outputs, or messages from other programs or threads - wikipedia

~
{ re:
    { by: ['๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ','mike๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธlee','teamโœจionify']
    , on: {200709.2    : -4     }
    , to: {202212251.2 : -8.2224}
    , do: 'on.storie@ionify transcription'
    , as: 'sensation'
    },

  on:'event',
  do(  ion  )
    { /log 'it happened!' via the event ion!//
      {log: ion.event} & /stop sensing event//
      { on:'event', no:this.do}
    }
}

~ /this event ion could be in a separate file!/
~ {event: 'it happened!'} <= /invokes an event/

ionify uses javascript's prototypal โš˜ inheritance & operation โš™๏ธ overloading to enable observing objects without direct references. this enables observing json & other anonymous & named objects:

~
{ re:
    { by: ['๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ','mike๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธlee','teamโœจionify']
    , on: {200709.2    : -4     }
    , to: {202212236.2 : -8.1202}
    , do: 'on.storie@ionify transcription'
    , as: 'sensation'
    },

  on:'hi',
  hi( ion)
    { /this method is called for each ion//
      /with a 'hi' property & value which//
      /it transcribes via the log action://

      {log: ion.hi}

      ^
      /logs "i'm an ion!" 1st//
      /logs "i'm a json!" 2nd/
    }
}

~ / each ion can be in a local or remote file /

~ { hi : "i'm an ion!"}  <=  /invoke an object/
~ {"hi": "i'm a json!"}  <=  /invoke some json/

๐Ÿฆ lions: literal ions, i.e. ~/ / + [ ] & { }, eliminate name collisions, by encapsulating their identifiers.

ionify enables individually observing & inspecting, multiple identically identified lions. this capability enables lions to simultaneously coexist, within the same execution context, without overriding all, or parts, of each other:

~
{ re:
    { by: ['๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ ื™ื”ื•ื” ๐Ÿคฒ๐Ÿพ','mike๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธlee','teamโœจionify']
    , on: {200709.2    : -4     }
    , to: {578310022.2 : -8.0007}
    , do: 'on.storie@ionify transcription'
    , as: 'sensation'
    },

  on:'my.ion@doma.in',
  do( ion )
    { ion.re.by ['a.๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธ.developer.created']

      &&  /this method is called for each ion with//
          /an id matching 'my.ion@doma.in', but it//
          /confirms the ion developer before      //
          /describing what the ion is or does:    //

          /log 'identifying the intended module ๐ŸŽ‰'//
          {log: ion.re.is} & /stop sensing this id//
          { on: ion.re.id, no: this.do }
    }
}

~ /these ions can be together or in separate files/

~
{ re:
    { id: 'my.ion@doma.in'
    , by: 'a.๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธ.developer.producing'
    , on: -2.20091205708
    , to: -1.578309296080333
    , in: 'silicon-valley.california.usa.earth'
    , is: "sharing the intended module's id"
    }
}

~
{ re:
    { id: 'my.ion@doma.in'
    , by: 'a.๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธ.developer.created'
    , in: 'georgetown.guyana.south-america.earth'
    , is: 'identifying the intended module ๐ŸŽ‰'
    }
}

~
{ re:
    { id: 'my.ion@doma.in'
    , by: 'a.๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธ.developer.discovering'
    , on: -2.20070904
    , to: -2.20091205705
    , in: 'queens-county.new-york.usa.earth'
    , is: "also sharing the intended module's id"
    }
}

๐Ÿ™‡๐Ÿพโ€โ™‚๏ธ through * ื™ื”ื•ื” * impossible -is- nothing || ๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป๐Ÿ‡บ๐Ÿ‡ธ mike lee & team ๐Ÿคฒ๐Ÿพ

Morty Proxy This is a proxified and sanitized view of the page, visit original site.