Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-11 Thread David Barbour
Ah, yes, I had forgotten about nests and birds. IIRC, they're more like
channels than promises, but channels can serve a similar purpose. So again,
the idea seems to be to leave a token indicating where something should go,
and a token indicating where it should be picked up?

Aside: I haven't explicated it here, but I believe it much better to avoid
state embedded at the surface of the UI, for a lot of reasons (like
persistence, disruption tolerance, simpler consistency properties, simpler
undo or upgrade via history edits). Avoiding state can be achieved by
makePromise if I use linear types. Negative or fractional types can do a
similar job. A fractional type can model piping a time-varying signal
through a promise.

Best,

Dave


On Tue, Sep 10, 2013 at 10:35 PM, Darius Bacon wit...@gmail.com wrote:

 On Wed, Sep 11, 2013 at 12:24 AM, David Barbour dmbarb...@gmail.com
 wrote:
  One PL concept you didn't mention is promises/futures. How might those
 be realized in a UI?

 There's precedent: ToonTalk represents promises and resolvers in its
 UI as nests and birds. (Some reasons this may miss the mark: It's been
 many years since I played with ToonTalk; IIRC the system supports
 declarative concurrency and nothing more powerful; I don't understand
 you about negative and fractional types, though it sounds interesting:
 http://www.cs.indiana.edu/~sabry/papers/rational.pdf )

 Darius


  In the type system of a PL, promises can be modeled as a pair:
 
makePromise ::  1 - (resolver * future)
 
  Or we can potentially model promises using fractional or negative types,
 as developed by Amr Sabry, which has an advantage of addressing sums in a
 symmetric manner:
 
receive ::  1 -  (1/a * a)
return :: (1/a * a) - 1
receive+ :: 0 - (-a + a)
return+ :: (-a + a) - 0
 
  But what would this look like in a UI model? My intuition is leaving
 some sort of IOU where a value is needed then going to some other location
 to provide it (perhaps after a copy and a few transforms). I suspect this
 behavior might be convenient for a user, but it potentially leaves parts of
 the UI or system in an indefinite limbo state while a promise is
 unfulfilled. Though, perhaps that could be addressed by requiring the
 promises to be fulfilled before operations will 'commit' (i.e. enforcing
 type-safe UI transactions).
 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread John Carlson
Here's a short description, if you don't want to haul through the entire
thesis:



On Mon, Sep 9, 2013 at 7:54 PM, Alan Kay alan.n...@yahoo.com wrote:

 Check out Smallstar by Dan Halbert at Xerox PARC (written up in a PARC
 bluebook)

 Cheers,

 Alan

   --
  *From:* John Carlson yottz...@gmail.com
 *To:* Fundamentals of New Computing fonc@vpri.org
 *Sent:* Monday, September 9, 2013 3:47 PM
 *Subject:* Re: [fonc] Software Crisis (was Re: Final STEP progress report
 abandoned?)

 One thing you can do is create a bunch of named widgets that work together
 with copy and paste.  As long as you can do type safety, and can
 appropriately deal with variable explosion/collapsing.  You'll probably
 want to create very small functions, which can also be stored in widgets
 (lambdas).  Widgets will show up when their scope is entered, or you could
 have an inspect mode.
 On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who tend
 to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control namespace
 entanglement? Could we make it easier to grab all the dependencies for code
 when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the results
 into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he is't
 going back in. To fix the quality of software, for example, we can't just
 ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of human
 deficiencies. If some programmers just want to cutpaste, then perhaps all
 we can do is too just make sure that what they are using is high enough
 quality. If someday they want more depth, then it should be available in
 easily digestible forms, even if few will ever travel that route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread John Carlson
mail got sent too fast...from Watch What I Do:

http://acypher.com/wwid/Chapters/05SmallStar.html


On Tue, Sep 10, 2013 at 11:36 AM, John Carlson yottz...@gmail.com wrote:

 Here's a short description, if you don't want to haul through the entire
 thesis:



 On Mon, Sep 9, 2013 at 7:54 PM, Alan Kay alan.n...@yahoo.com wrote:

 Check out Smallstar by Dan Halbert at Xerox PARC (written up in a PARC
 bluebook)

 Cheers,

 Alan

   --
  *From:* John Carlson yottz...@gmail.com
 *To:* Fundamentals of New Computing fonc@vpri.org
 *Sent:* Monday, September 9, 2013 3:47 PM
 *Subject:* Re: [fonc] Software Crisis (was Re: Final STEP progress
 report abandoned?)

 One thing you can do is create a bunch of named widgets that work
 together with copy and paste.  As long as you can do type safety, and can
 appropriately deal with variable explosion/collapsing.  You'll probably
 want to create very small functions, which can also be stored in widgets
 (lambdas).  Widgets will show up when their scope is entered, or you could
 have an inspect mode.
 On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who
 tend to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control namespace
 entanglement? Could we make it easier to grab all the dependencies for code
 when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the
 results into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he
 is't going back in. To fix the quality of software, for example, we can't
 just ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of human
 deficiencies. If some programmers just want to cutpaste, then perhaps all
 we can do is too just make sure that what they are using is high enough
 quality. If someday they want more depth, then it should be available in
 easily digestible forms, even if few will ever travel that route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc



___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread David Barbour
Thanks for this ref. It looks interesting.


On Mon, Sep 9, 2013 at 7:33 PM, K. K. Subramaniam kksubbu...@gmail.comwrote:

 On Tuesday 10 September 2013 06:24 AM, Alan Kay wrote:

 Check out Smallstar by Dan Halbert at Xerox PARC (written up in a PARC
 bluebook)


 Available online at 
 http://danhalbert.org/pbe-**html.htmhttp://danhalbert.org/pbe-html.htm

 BTW, Dan Halbert is the author of the more command in Unix.

 Regards .. Subbu

 __**_
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/**listinfo/fonchttp://vpri.org/mailman/listinfo/fonc

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread David Barbour
I think we cannot rely on 'inspection' - ability to view source and so on -
except in a very shallow way - e.g. to find capabilities directly
underlying a form. Relying on deep inspection seems to have several
problems:

1) First it would take a lot more study and knowledge to figure out the
intention of code, to distinguish the significant behavior from the
insignificant. Intentions could be easily obfuscated.

2) Since it would be difficult to embed this 'study and knowledge' into our
programs, it would become very difficult to automate composition,
transclusion, view-transforms, and programmatic manipulation of UIs. We
would rely on too much problem-specific knowledge.

3) When so much logic is embedded in the surface of the UI, it becomes easy
for widgets to become entangled with the ambient logic and state. This
makes it infeasible to extract, at a fine granularity, a few specific
signals and capabilities from one form for use in another.

4) Relying on deep inspection can violate encapsulation and security
properties. It would be difficult to move beyond a closed system into the
wider world - cross-application mashups, agents that integrate independent
services, and so on.

If I'm to unify PL with UI, I cannot assume that I have access to the code
underlying the UI. Instead, I must ensure that the UI is a good PL at the
surface layer. We can understand UIs to be programming languages, but often
they are not very good languages with respect to composition, modularity,
appropriate level of abstraction. That's the problem to solve - at the
surface layer, not (just) under-the-hood.

In such a system, copy-and-paste code could be *exactly the same* as
copy-and-paste UI, though there may be different types of values
involved. We could have blocks of code that can be composed or directly
applied to UI elements - programmatically transforming or operating on
them. The moment users are forced to 'look under the hood' and extract
specification, the ideal fails. UI and PL are separated. There are now two
distinct surface syntaxes, two distinct meanings and semantics, and a gap
between them bridged with arcane logic.

To unify PL and UI, widgets must *be* values, behaviors, signals, code.

And any looking under the hood must be formally represented as reflection
or introspection, just as it would be in a PL.

On Mon, Sep 9, 2013 at 3:47 PM, John Carlson yottz...@gmail.com wrote:

 One thing you can do is create a bunch of named widgets that work together
 with copy and paste.  As long as you can do type safety, and can
 appropriately deal with variable explosion/collapsing.  You'll probably
 want to create very small functions, which can also be stored in widgets
 (lambdas).  Widgets will show up when their scope is entered, or you could
 have an inspect mode.
 On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who
 tend to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control namespace
 entanglement? Could we make it easier to grab all the dependencies for code
 when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the
 results into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he
 is't going back in. To fix the quality of software, for example, we can't
 just ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of
 human deficiencies. If some programmers just want to cutpaste, then
 perhaps all we can do is too just make sure that what they are using is
 high enough quality. If someday they want 

Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread John Carlson
It may be helpful to view everything as an editor.  Something like SUIT
(the Simple User Interface Toolkit):
http://research.microsoft.com/en-us/um/people/rdeline/publications/uist-91.pdf
I'm thinking the web is finally getting to a point where everything is
editable again.


On Tue, Sep 10, 2013 at 12:54 PM, John Carlson yottz...@gmail.com wrote:

 To unify PL and UI:

 values: Date Calculator, String Calculator, Numeric Calculator,
 Zipper/Document Visualizer
 behavior, code:  Recorder (the container), Script,
 Branch/Table/Conditional/Recursion/Procedure/Function/Method (Unified
 Control Structure)
   Also, Exceptions (has anyone seen a UI for this?)
 signals:  Mouse, along with x,y coordinates
   Keyboard and Keystrokes
   Audio: waveform and controls
   Webcam:  video and controls
   Networking:  the extend/receive I/O operation
   System interface:  pipes, command prompt



 On Tue, Sep 10, 2013 at 12:25 PM, David Barbour dmbarb...@gmail.comwrote:

 I think we cannot rely on 'inspection' - ability to view source and so on
 - except in a very shallow way - e.g. to find capabilities directly
 underlying a form. Relying on deep inspection seems to have several
 problems:

 1) First it would take a lot more study and knowledge to figure out the
 intention of code, to distinguish the significant behavior from the
 insignificant. Intentions could be easily obfuscated.

 2) Since it would be difficult to embed this 'study and knowledge' into
 our programs, it would become very difficult to automate composition,
 transclusion, view-transforms, and programmatic manipulation of UIs. We
 would rely on too much problem-specific knowledge.

 3) When so much logic is embedded in the surface of the UI, it becomes
 easy for widgets to become entangled with the ambient logic and state. This
 makes it infeasible to extract, at a fine granularity, a few specific
 signals and capabilities from one form for use in another.

 4) Relying on deep inspection can violate encapsulation and security
 properties. It would be difficult to move beyond a closed system into the
 wider world - cross-application mashups, agents that integrate independent
 services, and so on.

 If I'm to unify PL with UI, I cannot assume that I have access to the
 code underlying the UI. Instead, I must ensure that the UI is a good PL at
 the surface layer. We can understand UIs to be programming languages, but
 often they are not very good languages with respect to composition,
 modularity, appropriate level of abstraction. That's the problem to solve -
 at the surface layer, not (just) under-the-hood.

 In such a system, copy-and-paste code could be *exactly the same* as
 copy-and-paste UI, though there may be different types of values
 involved. We could have blocks of code that can be composed or directly
 applied to UI elements - programmatically transforming or operating on
 them. The moment users are forced to 'look under the hood' and extract
 specification, the ideal fails. UI and PL are separated. There are now two
 distinct surface syntaxes, two distinct meanings and semantics, and a gap
 between them bridged with arcane logic.

 To unify PL and UI, widgets must *be* values, behaviors, signals, code.

 And any looking under the hood must be formally represented as
 reflection or introspection, just as it would be in a PL.

 On Mon, Sep 9, 2013 at 3:47 PM, John Carlson yottz...@gmail.com wrote:

 One thing you can do is create a bunch of named widgets that work
 together with copy and paste.  As long as you can do type safety, and can
 appropriately deal with variable explosion/collapsing.  You'll probably
 want to create very small functions, which can also be stored in widgets
 (lambdas).  Widgets will show up when their scope is entered, or you could
 have an inspect mode.
 On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who
 tend to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control
 namespace entanglement? Could we make it easier to grab all the
 dependencies for code when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - 

Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread John Carlson
To unify PL and UI:

values: Date Calculator, String Calculator, Numeric Calculator,
Zipper/Document Visualizer
behavior, code:  Recorder (the container), Script,
Branch/Table/Conditional/Recursion/Procedure/Function/Method (Unified
Control Structure)
  Also, Exceptions (has anyone seen a UI for this?)
signals:  Mouse, along with x,y coordinates
  Keyboard and Keystrokes
  Audio: waveform and controls
  Webcam:  video and controls
  Networking:  the extend/receive I/O operation
  System interface:  pipes, command prompt



On Tue, Sep 10, 2013 at 12:25 PM, David Barbour dmbarb...@gmail.com wrote:

 I think we cannot rely on 'inspection' - ability to view source and so on
 - except in a very shallow way - e.g. to find capabilities directly
 underlying a form. Relying on deep inspection seems to have several
 problems:

 1) First it would take a lot more study and knowledge to figure out the
 intention of code, to distinguish the significant behavior from the
 insignificant. Intentions could be easily obfuscated.

 2) Since it would be difficult to embed this 'study and knowledge' into
 our programs, it would become very difficult to automate composition,
 transclusion, view-transforms, and programmatic manipulation of UIs. We
 would rely on too much problem-specific knowledge.

 3) When so much logic is embedded in the surface of the UI, it becomes
 easy for widgets to become entangled with the ambient logic and state. This
 makes it infeasible to extract, at a fine granularity, a few specific
 signals and capabilities from one form for use in another.

 4) Relying on deep inspection can violate encapsulation and security
 properties. It would be difficult to move beyond a closed system into the
 wider world - cross-application mashups, agents that integrate independent
 services, and so on.

 If I'm to unify PL with UI, I cannot assume that I have access to the code
 underlying the UI. Instead, I must ensure that the UI is a good PL at the
 surface layer. We can understand UIs to be programming languages, but often
 they are not very good languages with respect to composition, modularity,
 appropriate level of abstraction. That's the problem to solve - at the
 surface layer, not (just) under-the-hood.

 In such a system, copy-and-paste code could be *exactly the same* as
 copy-and-paste UI, though there may be different types of values
 involved. We could have blocks of code that can be composed or directly
 applied to UI elements - programmatically transforming or operating on
 them. The moment users are forced to 'look under the hood' and extract
 specification, the ideal fails. UI and PL are separated. There are now two
 distinct surface syntaxes, two distinct meanings and semantics, and a gap
 between them bridged with arcane logic.

 To unify PL and UI, widgets must *be* values, behaviors, signals, code.

 And any looking under the hood must be formally represented as
 reflection or introspection, just as it would be in a PL.

 On Mon, Sep 9, 2013 at 3:47 PM, John Carlson yottz...@gmail.com wrote:

 One thing you can do is create a bunch of named widgets that work
 together with copy and paste.  As long as you can do type safety, and can
 appropriately deal with variable explosion/collapsing.  You'll probably
 want to create very small functions, which can also be stored in widgets
 (lambdas).  Widgets will show up when their scope is entered, or you could
 have an inspect mode.
 On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who
 tend to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control
 namespace entanglement? Could we make it easier to grab all the
 dependencies for code when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, 

Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread John Carlson
Does Minecraft have a way to compile a world (particularly redstone) to
machine code?  Is it still a challenge to go from a 3D representation to a
machine language or machine representation?  We have at several levels with
Minecraft: the machine, the JVM, Minecraft byte code, Minecraft source
code, the minecraft world, and activity within the world.  Can we reduce
this to the machine, the world, and activity?  I believe this is a STEP
goal, even blurring the lines between the world and the machine through
FPGAs, so we get down to just the machine and activity.  How much circuitry
would a Minecraft world take up?  Has anyone done calculations?  Could it
fit on a raspberry pi like machine?  This may be relevant:
http://pi.minecraft.net/ :(requires X11 apparently)

John


On Tue, Sep 10, 2013 at 12:54 PM, John Carlson yottz...@gmail.com wrote:

 To unify PL and UI:

 values: Date Calculator, String Calculator, Numeric Calculator,
 Zipper/Document Visualizer
 behavior, code:  Recorder (the container), Script,
 Branch/Table/Conditional/Recursion/Procedure/Function/Method (Unified
 Control Structure)
   Also, Exceptions (has anyone seen a UI for this?)
 signals:  Mouse, along with x,y coordinates
   Keyboard and Keystrokes
   Audio: waveform and controls
   Webcam:  video and controls
   Networking:  the extend/receive I/O operation
   System interface:  pipes, command prompt



 On Tue, Sep 10, 2013 at 12:25 PM, David Barbour dmbarb...@gmail.comwrote:

 I think we cannot rely on 'inspection' - ability to view source and so on
 - except in a very shallow way - e.g. to find capabilities directly
 underlying a form. Relying on deep inspection seems to have several
 problems:

 1) First it would take a lot more study and knowledge to figure out the
 intention of code, to distinguish the significant behavior from the
 insignificant. Intentions could be easily obfuscated.

 2) Since it would be difficult to embed this 'study and knowledge' into
 our programs, it would become very difficult to automate composition,
 transclusion, view-transforms, and programmatic manipulation of UIs. We
 would rely on too much problem-specific knowledge.

 3) When so much logic is embedded in the surface of the UI, it becomes
 easy for widgets to become entangled with the ambient logic and state. This
 makes it infeasible to extract, at a fine granularity, a few specific
 signals and capabilities from one form for use in another.

 4) Relying on deep inspection can violate encapsulation and security
 properties. It would be difficult to move beyond a closed system into the
 wider world - cross-application mashups, agents that integrate independent
 services, and so on.

 If I'm to unify PL with UI, I cannot assume that I have access to the
 code underlying the UI. Instead, I must ensure that the UI is a good PL at
 the surface layer. We can understand UIs to be programming languages, but
 often they are not very good languages with respect to composition,
 modularity, appropriate level of abstraction. That's the problem to solve -
 at the surface layer, not (just) under-the-hood.

 In such a system, copy-and-paste code could be *exactly the same* as
 copy-and-paste UI, though there may be different types of values
 involved. We could have blocks of code that can be composed or directly
 applied to UI elements - programmatically transforming or operating on
 them. The moment users are forced to 'look under the hood' and extract
 specification, the ideal fails. UI and PL are separated. There are now two
 distinct surface syntaxes, two distinct meanings and semantics, and a gap
 between them bridged with arcane logic.

 To unify PL and UI, widgets must *be* values, behaviors, signals, code.

 And any looking under the hood must be formally represented as
 reflection or introspection, just as it would be in a PL.

 On Mon, Sep 9, 2013 at 3:47 PM, John Carlson yottz...@gmail.com wrote:

 One thing you can do is create a bunch of named widgets that work
 together with copy and paste.  As long as you can do type safety, and can
 appropriately deal with variable explosion/collapsing.  You'll probably
 want to create very small functions, which can also be stored in widgets
 (lambdas).  Widgets will show up when their scope is entered, or you could
 have an inspect mode.
 On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who
 tend to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to 

Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread David Barbour
This is a good list of concept components.

I think branching should be open - I.e. modeled as a collection where only
one item is 'active' at a time. There is a clear duality between sums and
products, and interestingly a lot of the same UIs apply (i.e.
prisms/lenses, zippers for sum types). (But there can be some awkwardness
distributing sums over products.)

Recursion is an interesting case. One can model it as a closed value, or as
a fixpoint combinator. But to keep the UI/PL extensible, it might be better
to avoid closed loops (especially if they maintain state). Open loop
recursion happens easily and naturally enough if we have any shared state
resources, such as a database or tuple space... or the world itself (via
sensors and actuators).

Exceptions: in general, exceptions are not difficult to model as
choices/branches (a path of a sum type). I've usually considered this a
better way to model them. This can be combined with searching the
environment for some advice on how to handle the condition - I.e. in terms
of a dynamic scoped 'special' variable, or (in a concatenative language)
literally searching a stack or other environment model.

Keyboard/video/mouse/audio would be a good start for signals on the UI
side. I've been wondering how to get a lot of useful control signals
quickly... Maybe integrate with ROS from WillowGarage?
On Sep 10, 2013 10:54 AM, John Carlson yottz...@gmail.com wrote:

 To unify PL and UI:

 values: Date Calculator, String Calculator, Numeric Calculator,
 Zipper/Document Visualizer
 behavior, code:  Recorder (the container), Script,
 Branch/Table/Conditional/Recursion/Procedure/Function/Method (Unified
 Control Structure)
   Also, Exceptions (has anyone seen a UI for this?)
 signals:  Mouse, along with x,y coordinates
   Keyboard and Keystrokes
   Audio: waveform and controls
   Webcam:  video and controls
   Networking:  the extend/receive I/O operation
   System interface:  pipes, command prompt



 On Tue, Sep 10, 2013 at 12:25 PM, David Barbour dmbarb...@gmail.comwrote:

 I think we cannot rely on 'inspection' - ability to view source and so on
 - except in a very shallow way - e.g. to find capabilities directly
 underlying a form. Relying on deep inspection seems to have several
 problems:

 1) First it would take a lot more study and knowledge to figure out the
 intention of code, to distinguish the significant behavior from the
 insignificant. Intentions could be easily obfuscated.

 2) Since it would be difficult to embed this 'study and knowledge' into
 our programs, it would become very difficult to automate composition,
 transclusion, view-transforms, and programmatic manipulation of UIs. We
 would rely on too much problem-specific knowledge.

 3) When so much logic is embedded in the surface of the UI, it becomes
 easy for widgets to become entangled with the ambient logic and state. This
 makes it infeasible to extract, at a fine granularity, a few specific
 signals and capabilities from one form for use in another.

 4) Relying on deep inspection can violate encapsulation and security
 properties. It would be difficult to move beyond a closed system into the
 wider world - cross-application mashups, agents that integrate independent
 services, and so on.

 If I'm to unify PL with UI, I cannot assume that I have access to the
 code underlying the UI. Instead, I must ensure that the UI is a good PL at
 the surface layer. We can understand UIs to be programming languages, but
 often they are not very good languages with respect to composition,
 modularity, appropriate level of abstraction. That's the problem to solve -
 at the surface layer, not (just) under-the-hood.

 In such a system, copy-and-paste code could be *exactly the same* as
 copy-and-paste UI, though there may be different types of values
 involved. We could have blocks of code that can be composed or directly
 applied to UI elements - programmatically transforming or operating on
 them. The moment users are forced to 'look under the hood' and extract
 specification, the ideal fails. UI and PL are separated. There are now two
 distinct surface syntaxes, two distinct meanings and semantics, and a gap
 between them bridged with arcane logic.

 To unify PL and UI, widgets must *be* values, behaviors, signals, code.

 And any looking under the hood must be formally represented as
 reflection or introspection, just as it would be in a PL.

 On Mon, Sep 9, 2013 at 3:47 PM, John Carlson yottz...@gmail.com wrote:

 One thing you can do is create a bunch of named widgets that work
 together with copy and paste.  As long as you can do type safety, and can
 appropriately deal with variable explosion/collapsing.  You'll probably
 want to create very small functions, which can also be stored in widgets
 (lambdas).  Widgets will show up when their scope is entered, or you could
 have an inspect mode.
 On Sep 9, 2013 5:11 PM, David Barbour 

Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread John Carlson
If your sum/product is or/and, I tend to agree there is difficulty.  We
chose to use a normalized representation:  the same number of factors for
each term, true used liberally as a factor.  In many cases, there were
only two branches to take.  I spent a great deal of time coming up with a
table which handled repetition, mandatory, optional and floating components
in the product, but it got so difficult to be implemented and tested
especially, that I gave up and implemented 997 acknowledgements in C++.  I
think our translation analyst may have been unique among EDI/X12 analysts
for not using components designed specifically for X12 beyond the 997
acknowledge code.  Instead we used something like tab-separated values to
parse the X12...which was much less flexible...we couldn't read the
separators from X12 file--they had to be constants in the code.  However,
it might be possible that he used my fancy table, but I never heard of any
bug reports, so I doubt it.  That's where I learn the rule don't make
anything so complex you can't debug it, or automate tests for it.  This is
likely why we see much more XML than X12 these days.  If you don't know
what X12 is,  think of a mixture between s-expressions and comma separated
values.
On Sep 10, 2013 7:13 PM, David Barbour dmbarb...@gmail.com wrote:

 This is a good list of concept components.

 I think branching should be open - I.e. modeled as a collection where only
 one item is 'active' at a time. There is a clear duality between sums and
 products, and interestingly a lot of the same UIs apply (i.e.
 prisms/lenses, zippers for sum types). (But there can be some awkwardness
 distributing sums over products.)

 Recursion is an interesting case. One can model it as a closed value, or
 as a fixpoint combinator. But to keep the UI/PL extensible, it might be
 better to avoid closed loops (especially if they maintain state). Open loop
 recursion happens easily and naturally enough if we have any shared state
 resources, such as a database or tuple space... or the world itself (via
 sensors and actuators).

 Exceptions: in general, exceptions are not difficult to model as
 choices/branches (a path of a sum type). I've usually considered this a
 better way to model them. This can be combined with searching the
 environment for some advice on how to handle the condition - I.e. in terms
 of a dynamic scoped 'special' variable, or (in a concatenative language)
 literally searching a stack or other environment model.

 Keyboard/video/mouse/audio would be a good start for signals on the UI
 side. I've been wondering how to get a lot of useful control signals
 quickly... Maybe integrate with ROS from WillowGarage?
 On Sep 10, 2013 10:54 AM, John Carlson yottz...@gmail.com wrote:

 To unify PL and UI:

 values: Date Calculator, String Calculator, Numeric Calculator,
 Zipper/Document Visualizer
 behavior, code:  Recorder (the container), Script,
 Branch/Table/Conditional/Recursion/Procedure/Function/Method (Unified
 Control Structure)
   Also, Exceptions (has anyone seen a UI for this?)
 signals:  Mouse, along with x,y coordinates
   Keyboard and Keystrokes
   Audio: waveform and controls
   Webcam:  video and controls
   Networking:  the extend/receive I/O operation
   System interface:  pipes, command prompt



 On Tue, Sep 10, 2013 at 12:25 PM, David Barbour dmbarb...@gmail.comwrote:

 I think we cannot rely on 'inspection' - ability to view source and so
 on - except in a very shallow way - e.g. to find capabilities directly
 underlying a form. Relying on deep inspection seems to have several
 problems:

 1) First it would take a lot more study and knowledge to figure out the
 intention of code, to distinguish the significant behavior from the
 insignificant. Intentions could be easily obfuscated.

 2) Since it would be difficult to embed this 'study and knowledge' into
 our programs, it would become very difficult to automate composition,
 transclusion, view-transforms, and programmatic manipulation of UIs. We
 would rely on too much problem-specific knowledge.

 3) When so much logic is embedded in the surface of the UI, it becomes
 easy for widgets to become entangled with the ambient logic and state. This
 makes it infeasible to extract, at a fine granularity, a few specific
 signals and capabilities from one form for use in another.

 4) Relying on deep inspection can violate encapsulation and security
 properties. It would be difficult to move beyond a closed system into the
 wider world - cross-application mashups, agents that integrate independent
 services, and so on.

 If I'm to unify PL with UI, I cannot assume that I have access to the
 code underlying the UI. Instead, I must ensure that the UI is a good PL at
 the surface layer. We can understand UIs to be programming languages, but
 often they are not very good languages with respect to composition,
 modularity, appropriate level of 

Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread David Barbour
Yes, sum (x + y) vs. product (x * y) corresponds to 'or vs. and' or 'union
vs. struct'.

For many purposes, they are very similar: associative, commutative,
identity elements, ability to focus attention and operations on just x or
just y. We can model zippers and lenses for each, which is kind of cool.

In widget form, products are obvious (typical hbox or vbox). Sums, OTOH,
are rarely represented directly because we tend to hide the inactive
values. One might model a sum in terms of a radio-button with an associated
active form - i.e. instead of hiding the inactive values, they're marked
inactive - but still accessible for manipulations. (We could have optional
views that hide the inactive forms.)

There are differences between sums and products:

products have `copy` x - (x * x)  (adding 1 bit of info)
sums have `merge` (x + x) - x (losing 1 bit of info)

And in general we want to deal with cases like:

  factoring :: (x*y) + (x*z) - x*(y+z)
  distribution :: x * (y + z) - (x * y) + (x * z)

The problem with if/then/else statements is that they're closed to
extension: they force the merge, and any intermediate decisions, to be
syntactically local. This is inflexible. It is also, often, very
inefficient - i.e. in some cases it means we repeatedly branch our behavior
by observing the same values, rather than just keeping the same branch
available for extension.

I'm not sure what you were trying to explain with the same number of
factors for each term or what you mean by true as a factor. (My thought
is that you're using 'true' like I might have used the unit type, 1.) But I
think the main difficulties for sum vs. product regard something else
entirely: distribution, in a distributed system. An issue is that `x*(y+z)`
cannot really be distributed unless we know whether we are in y or z at the
*same place and time* as we know x. Perhaps this isn't as much a problem in
a UI, since we may be forced to move values to the same place and time to
get them into the same UI in the first place.


In other thoughts...

One PL concept you didn't mention is promises/futures. How might those be
realized in a UI?

In the type system of a PL, promises can be modeled as a pair:

  makePromise ::  1 - (resolver * future)

Or we can potentially model promises using fractional or negative types, as
developed by Amr Sabry, which has an advantage of addressing sums in a
symmetric manner:

  receive ::  1 -  (1/a * a)
  return :: (1/a * a) - 1
  receive+ :: 0 - (-a + a)
  return+ :: (-a + a) - 0

But what would this look like in a UI model? My intuition is leaving some
sort of IOU where a value is needed then going to some other location to
provide it (perhaps after a copy and a few transforms). I suspect this
behavior might be convenient for a user, but it potentially leaves parts of
the UI or system in an indefinite limbo state while a promise is
unfulfilled. Though, perhaps that could be addressed by requiring the
promises to be fulfilled before operations will 'commit' (i.e. enforcing
type-safe UI transactions).





On Tue, Sep 10, 2013 at 7:45 PM, John Carlson yottz...@gmail.com wrote:

 If your sum/product is or/and, I tend to agree there is difficulty.  We
 chose to use a normalized representation:  the same number of factors for
 each term, true used liberally as a factor.  In many cases, there were
 only two branches to take.  I spent a great deal of time coming up with a
 table which handled repetition, mandatory, optional and floating components
 in the product, but it got so difficult to be implemented and tested
 especially, that I gave up and implemented 997 acknowledgements in C++.  I
 think our translation analyst may have been unique among EDI/X12 analysts
 for not using components designed specifically for X12 beyond the 997
 acknowledge code.  Instead we used something like tab-separated values to
 parse the X12...which was much less flexible...we couldn't read the
 separators from X12 file--they had to be constants in the code.  However,
 it might be possible that he used my fancy table, but I never heard of any
 bug reports, so I doubt it.  That's where I learn the rule don't make
 anything so complex you can't debug it, or automate tests for it.  This is
 likely why we see much more XML than X12 these days.  If you don't know
 what X12 is,  think of a mixture between s-expressions and comma separated
 values.
 On Sep 10, 2013 7:13 PM, David Barbour dmbarb...@gmail.com wrote:

 This is a good list of concept components.

 I think branching should be open - I.e. modeled as a collection where
 only one item is 'active' at a time. There is a clear duality between sums
 and products, and interestingly a lot of the same UIs apply (i.e.
 prisms/lenses, zippers for sum types). (But there can be some awkwardness
 distributing sums over products.)

 Recursion is an interesting case. One can model it as a closed value, or
 as a fixpoint combinator. But to keep the UI/PL 

Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-10 Thread Darius Bacon
On Wed, Sep 11, 2013 at 12:24 AM, David Barbour dmbarb...@gmail.com wrote:
 One PL concept you didn't mention is promises/futures. How might those be 
 realized in a UI?

There's precedent: ToonTalk represents promises and resolvers in its
UI as nests and birds. (Some reasons this may miss the mark: It's been
many years since I played with ToonTalk; IIRC the system supports
declarative concurrency and nothing more powerful; I don't understand
you about negative and fractional types, though it sounds interesting:
http://www.cs.indiana.edu/~sabry/papers/rational.pdf )

Darius


 In the type system of a PL, promises can be modeled as a pair:

   makePromise ::  1 - (resolver * future)

 Or we can potentially model promises using fractional or negative types, as 
 developed by Amr Sabry, which has an advantage of addressing sums in a 
 symmetric manner:

   receive ::  1 -  (1/a * a)
   return :: (1/a * a) - 1
   receive+ :: 0 - (-a + a)
   return+ :: (-a + a) - 0

 But what would this look like in a UI model? My intuition is leaving some 
 sort of IOU where a value is needed then going to some other location to 
 provide it (perhaps after a copy and a few transforms). I suspect this 
 behavior might be convenient for a user, but it potentially leaves parts of 
 the UI or system in an indefinite limbo state while a promise is unfulfilled. 
 Though, perhaps that could be addressed by requiring the promises to be 
 fulfilled before operations will 'commit' (i.e. enforcing type-safe UI 
 transactions).
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-09 Thread Tom Novelli
Good point, Casey - it's not just software.  I see shabby service and
workmanship all around, an Industrial Crisis brought on by a preoccupation
with short-term gain... although that in itself is amplified by modern
software/communication technology.  Hopefully that will all balance out and
correct itself somewhat.

I see computers diverging into shrinkwrapped consumer devices (probably a
dead end just like old mass media) and industrial/DIY gear for serious
programming.  I'd tend to write good clean code for the latter.  That's
possible when you're writing for programmers, gamers, anyone willing to
learn something in order to use your software effectively (provided, of
course, that you're not in a fragmented landscape of rapidly iterating APIs
or hardware).

That's my optimistic scenario.  In my pessimistic scenario I do see the
kids getting dumber, because they're *only* using the internet for videos,
games, chit-chat.  They think the technology is pretty cool, but compared
to previous generations they seem less interested in understanding it.
 What if this revolution lasts long enough to destroy most of the books,
libraries, old-school factories, etc... and then collapses?  It could set
us back centuries.  (I wonder how many sci-fi stories have already used
that set-up... a couple hundred? :)

Also, let's not forget that we're still in the middle of a major economic
depression, so it's pretty difficult to predict anything based on current
trends.


On Mon, Sep 9, 2013 at 12:12 AM, Casey Ransberger
casey.obrie...@gmail.comwrote:

 I don't think cut and paste has been the source of the problems with the
 systems I've worked on (could be a symptom of one or more of the problems.)
 What I see is long-term systems built around short-term, usually
 competitive goals, by people who are competing both with one another (for
 jobs, promotions, raises, social capital, etc,) and also cooperating with
 one another to compete with other businesses at the same time. Most
 people's programming habits seem to change dramatically, for example, when
 they expect to throw something away. Most programmers dump the company
 every 2-5 years for another (higher-paying) job, so it's *all* disposable
 code in effect. It's not just the programmers either, it's the decision
 makers at C-level too, who are quite often building the company to sell
 the company.

 Maybe the kids are getting dumber, but what I see when I look around is
 smart kids being pushed to ship before the bits are ready, and not being
 *allowed* to fix low-value bugs which gradually accumulate until a system
 is deep-sixed for being painful to work on. In other words, I don't believe
 there's a software crisis or any real shortage of programming talent (I
 know plenty of great programmers who regularly go without work, often
 because they're unimpressed with the offers they're seeing.) I think it's
 not a software crisis, I think it's a *management* crisis.

 I do think new tools to make
 managers/customers/investors/partners/users/programmers less stressed out
 could make the overall experience better for all involved, and with that I
 guess I'm talking about the continuing emergence of an engineering
 discipline in software.

 But that's in-house code. OTOH, FreeBSD has usually been pretty stable for
 me; I don't have to put out its fires very much.

 Why might this be? Let's try some fun game theory!

 http://www.nature.com/ncomms/2013/130801/ncomms3193/pdf/ncomms3193.pdf


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-09 Thread David Barbour
I like Paul's idea here - form a pit of success even for people who tend
to copy-paste.

I'm very interested in unifying PL with HCI/UI such that actions like
copy-paste actually have formal meaning. If you copy a time-varying field
from a UI form, maybe you can paste it as a signal into a software agent.
Similarly with buttons becoming capabilities. (Really, if we can use a
form, it should be easy to program something to use it for us. And vice
versa.) All UI actions can be 'acts of programming', if we find the right
way to formalize it. I think the trick, then, is to turn the UI into a good
PL.

To make copy-and-paste code more robust, what can we do?

Can we make our code more adaptive? Able to introspect its environment?

Can we reduce the number of environmental dependencies? Control namespace
entanglement? Could we make it easier to grab all the dependencies for code
when we copy it?

Can we make it more provable?

And conversely, can we provide IDEs that can help the kids understand the
code they take - visualize and graph its behavior, see how it integrates
with its environment, etc? I think there's a lot we can do. Most of my
thoughts center on language design and IDE design, but there may also be
social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
also make it easy to interactively explore and understand code before using
it.


On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the results
 into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he is't
 going back in. To fix the quality of software, for example, we can't just
 ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of human
 deficiencies. If some programmers just want to cutpaste, then perhaps all
 we can do is too just make sure that what they are using is high enough
 quality. If someday they want more depth, then it should be available in
 easily digestible forms, even if few will ever travel that route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...



___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-09 Thread John Carlson
One thing you can do is create a bunch of named widgets that work together
with copy and paste.  As long as you can do type safety, and can
appropriately deal with variable explosion/collapsing.  You'll probably
want to create very small functions, which can also be stored in widgets
(lambdas).  Widgets will show up when their scope is entered, or you could
have an inspect mode.
On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who tend
 to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control namespace
 entanglement? Could we make it easier to grab all the dependencies for code
 when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the
 results into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he
 is't going back in. To fix the quality of software, for example, we can't
 just ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of human
 deficiencies. If some programmers just want to cutpaste, then perhaps all
 we can do is too just make sure that what they are using is high enough
 quality. If someday they want more depth, then it should be available in
 easily digestible forms, even if few will ever travel that route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-09 Thread John Carlson
I'd recommend looking into quartz composer on mac os x.
On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who tend
 to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control namespace
 entanglement? Could we make it easier to grab all the dependencies for code
 when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the
 results into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he
 is't going back in. To fix the quality of software, for example, we can't
 just ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of human
 deficiencies. If some programmers just want to cutpaste, then perhaps all
 we can do is too just make sure that what they are using is high enough
 quality. If someday they want more depth, then it should be available in
 easily digestible forms, even if few will ever travel that route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-09 Thread John Carlson
Also, you could have an input zipper, a flippable conversion area, an
output zipper, and a history of conversion stack.
On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who tend
 to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control namespace
 entanglement? Could we make it easier to grab all the dependencies for code
 when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the
 results into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he
 is't going back in. To fix the quality of software, for example, we can't
 just ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of human
 deficiencies. If some programmers just want to cutpaste, then perhaps all
 we can do is too just make sure that what they are using is high enough
 quality. If someday they want more depth, then it should be available in
 easily digestible forms, even if few will ever travel that route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-09 Thread John Carlson
The trick here is to make the zippers at the meta or schema level.

John
On Sep 9, 2013 6:03 PM, John Carlson yottz...@gmail.com wrote:

 Also, you could have an input zipper, a flippable conversion area, an
 output zipper, and a history of conversion stack.
 On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

 I like Paul's idea here - form a pit of success even for people who
 tend to copy-paste.

 I'm very interested in unifying PL with HCI/UI such that actions like
 copy-paste actually have formal meaning. If you copy a time-varying field
 from a UI form, maybe you can paste it as a signal into a software agent.
 Similarly with buttons becoming capabilities. (Really, if we can use a
 form, it should be easy to program something to use it for us. And vice
 versa.) All UI actions can be 'acts of programming', if we find the right
 way to formalize it. I think the trick, then, is to turn the UI into a good
 PL.

 To make copy-and-paste code more robust, what can we do?

 Can we make our code more adaptive? Able to introspect its environment?

 Can we reduce the number of environmental dependencies? Control namespace
 entanglement? Could we make it easier to grab all the dependencies for code
 when we copy it?

 Can we make it more provable?

 And conversely, can we provide IDEs that can help the kids understand
 the code they take - visualize and graph its behavior, see how it
 integrates with its environment, etc? I think there's a lot we can do. Most
 of my thoughts center on language design and IDE design, but there may also
 be social avenues - perhaps wiki-based IDEs, or Gist-like repositories that
 also make it easy to interactively explore and understand code before using
 it.


 On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


 These days, the kids do a quick google, then just copypaste the
 results into the code base, mostly unaware of what the underlying 'magic'
 instructions actually do. So example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he
 is't going back in. To fix the quality of software, for example, we can't
 just ban all cutpaste-able web pages.

 The alternate route out of the problem is to exploit these types of
 human deficiencies. If some programmers just want to cutpaste, then
 perhaps all we can do is too just make sure that what they are using is
 high enough quality. If someday they want more depth, then it should be
 available in easily digestible forms, even if few will ever travel that
 route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...



 ___
 fonc mailing list
 fonc@vpri.org
 http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-09 Thread Alan Kay
Check out Smallstar by Dan Halbert at Xerox PARC (written up in a PARC 
bluebook)

Cheers,

Alan



 From: John Carlson yottz...@gmail.com
To: Fundamentals of New Computing fonc@vpri.org 
Sent: Monday, September 9, 2013 3:47 PM
Subject: Re: [fonc] Software Crisis (was Re: Final STEP progress report 
abandoned?)
 


One thing you can do is create a bunch of named widgets that work together with 
copy and paste.  As long as you can do type safety, and can appropriately deal 
with variable explosion/collapsing.  You'll probably want to create very small 
functions, which can also be stored in widgets (lambdas).  Widgets will show up 
when their scope is entered, or you could have an inspect mode.
On Sep 9, 2013 5:11 PM, David Barbour dmbarb...@gmail.com wrote:

I like Paul's idea here - form a pit of success even for people who tend to 
copy-paste.


I'm very interested in unifying PL with HCI/UI such that actions like 
copy-paste actually have formal meaning. If you copy a time-varying field from 
a UI form, maybe you can paste it as a signal into a software agent. Similarly 
with buttons becoming capabilities. (Really, if we can use a form, it should 
be easy to program something to use it for us. And vice versa.) All UI actions 
can be 'acts of programming', if we find the right way to formalize it. I 
think the trick, then, is to turn the UI into a good PL.


To make copy-and-paste code more robust, what can we do?


Can we make our code more adaptive? Able to introspect its environment?


Can we reduce the number of environmental dependencies? Control namespace 
entanglement? Could we make it easier to grab all the dependencies for code 
when we copy it? 

Can we make it more provable?


And conversely, can we provide IDEs that can help the kids understand the 
code they take - visualize and graph its behavior, see how it integrates with 
its environment, etc? I think there's a lot we can do. Most of my thoughts 
center on language design and IDE design, but there may also be social avenues 
- perhaps wiki-based IDEs, or Gist-like repositories that also make it easy to 
interactively explore and understand code before using it.



On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:


These days, the kids do a quick google, then just copypaste the results 
into the code base, mostly unaware of what the underlying 'magic' 
instructions actually do. So example code is possibly a bad thing?

But even if that's true, we've let the genie out of the bottle and he is't 
going back in. To fix the quality of software, for example, we can't just ban 
all cutpaste-able web pages.

The alternate route out of the problem is to exploit these types of human 
deficiencies. If some programmers just want to cutpaste, then perhaps all we 
can do is too just make sure that what they are using is high enough quality. 
If someday they want more depth, then it should be available in easily 
digestible forms, even if few will ever travel that route.

If most people really don't want to think deeply about about their problems, 
then I think that the best we can do is ensure that their hasty decisions are 
based on as accurate knowledge as possible. It's far better than them just 
flipping a coin. In a sense it moves up our decision making to a higher level 
of abstraction. Some people lose the 'why' of the decision, but their 
underlying choice ultimately is superior, and the 'why' can still be found by 
doing digging into the data. In a way, isn't that what we've already done 
with micro-code, chips and assembler? Or machinery? Gradually we move up 
towards broader problems...



___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


[fonc] Software Crisis (was Re: Final STEP progress report abandoned?)

2013-09-08 Thread Casey Ransberger
I don't think cut and paste has been the source of the problems with the
systems I've worked on (could be a symptom of one or more of the problems.)
What I see is long-term systems built around short-term, usually
competitive goals, by people who are competing both with one another (for
jobs, promotions, raises, social capital, etc,) and also cooperating with
one another to compete with other businesses at the same time. Most
people's programming habits seem to change dramatically, for example, when
they expect to throw something away. Most programmers dump the company
every 2-5 years for another (higher-paying) job, so it's *all* disposable
code in effect. It's not just the programmers either, it's the decision
makers at C-level too, who are quite often building the company to sell
the company.

Maybe the kids are getting dumber, but what I see when I look around is
smart kids being pushed to ship before the bits are ready, and not being
*allowed* to fix low-value bugs which gradually accumulate until a system
is deep-sixed for being painful to work on. In other words, I don't believe
there's a software crisis or any real shortage of programming talent (I
know plenty of great programmers who regularly go without work, often
because they're unimpressed with the offers they're seeing.) I think it's
not a software crisis, I think it's a *management* crisis.

I do think new tools to make
managers/customers/investors/partners/users/programmers less stressed out
could make the overall experience better for all involved, and with that I
guess I'm talking about the continuing emergence of an engineering
discipline in software.

But that's in-house code. OTOH, FreeBSD has usually been pretty stable for
me; I don't have to put out its fires very much.

Why might this be? Let's try some fun game theory!

http://www.nature.com/ncomms/2013/130801/ncomms3193/pdf/ncomms3193.pdf


On Sun, Sep 8, 2013 at 10:33 AM, Paul Homer paul_ho...@yahoo.ca wrote:

 Hi Alan,

 Is the gift really that bad? It certainly is an interesting question.

 I'm a frequent blogger on the topic of what could probably be described as
 the ongoing 'software crisis'. We definitely build bigger systems these
 days, but the quality has likely been declining. There is great software
 out there, but the world is littered with lots of partially working code
 that causes lots of problems.

 Perhaps one could lay this on the feet of better documentation. That is,
 when I started coding it was hard to find out any information so I spent a
 lot of time just playing with the underlying pieces to really understand
 them and figure out how to use them appropriately. These days, the kids
 do a quick google, then just copypaste the results into the code base,
 mostly unaware of what the underlying 'magic' instructions actually do. So
 example code is possibly a bad thing?

 But even if that's true, we've let the genie out of the bottle and he is't
 going back in. To fix the quality of software, for example, we can't just
 ban all cutpaste-able web pages.  I definitely agree that we're terrible
 thinkers, and that for the most part as a species we are self-absorbed and
 often lazy, so I don't really expect that most programmers will have the
 same desire that I did to get down to really understanding the details.
 That type of curiosity is rare.

 The alternate route out of the problem is to exploit these types of human
 deficiencies. If some programmers just want to cutpaste, then perhaps all
 we can do is too just make sure that what they are using is high enough
 quality. If someday they want more depth, then it should be available in
 easily digestible forms, even if few will ever travel that route.

 If most people really don't want to think deeply about about their
 problems, then I think that the best we can do is ensure that their hasty
 decisions are based on as accurate knowledge as possible. It's far better
 than them just flipping a coin. In a sense it moves up our decision making
 to a higher level of abstraction. Some people lose the 'why' of the
 decision, but their underlying choice ultimately is superior, and the 'why'
 can still be found by doing digging into the data. In a way, isn't that
 what we've already done with micro-code, chips and assembler? Or machinery?
 Gradually we move up towards broader problems...


 Paul.

 Sent from my iPad

 On 2013-09-08, at 10:45 AM, Alan Kay alan.n...@yahoo.com wrote:

 Hi Paul

 When I said even scientists go against their training I was also
 pointing out really deep problems in humanity's attempts at thinking (we
 are quite terrible thinkers!).

 If we still make most decisions without realizing why, and use
 conventional thinking tools as ways to rationalize them, then
 technologists providing vastly more efficient, wide and deep, sources for
 rationalizing is the opposite of a great gift.

 Imagine a Google that also retrieves counter-examples. Or one that
 actively tries to help find chains of