Is there a way to set Squeak to be dual screen?
Kindly, Rabbit
I only know the workaround, which I used in the past: do not use fullscreen, do not maximize the window, drag the window edges near the far edges of the outer displays, so the window spans the two screens (drag the window edges near the screen edges). This is no good if the displays have different DPI, of course...
Am Fr., 26. Juni 2020 um 18:35 Uhr schrieb Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org:
Is there a way to set Squeak to be dual screen?
Kindly, Rabbit
Oh yes! This works well! Good idea, thank you!
K, r
On 6/26/20 12:39 PM, Jakob Reschke wrote:
I only know the workaround, which I used in the past: do not use fullscreen, do not maximize the window, drag the window edges near the far edges of the outer displays, so the window spans the two screens (drag the window edges near the screen edges). This is no good if the displays have different DPI, of course...
Am Fr., 26. Juni 2020 um 18:35 Uhr schrieb Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org:
Is there a way to set Squeak to be dual screen?
Kindly, Rabbit
On 2020-06-26, at 9:35 AM, Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Is there a way to set Squeak to be dual screen?
The fundamentals have been there since 2004. HostWindowPlugin/DisplayHostWindow provide some breadcrumbs.
After years of people shrieking loudly (oh, so loudly) about how essential host windows and native controls are to any chance of Smalltalk having a future - nothing. Nobody found it worth the effort to take the foundation and build on it. That was over 15 years ago.
VisualWorks did the native window thing a long time ago. I've been having to use VW a bit recently (see recent email whining about the awful font stuff) and I really, really, don't like having separate host windows. I think part of the problem is that I tend to have a *lot* of windows open and it turns out that none of the current main OS (yes, I've been using Windows, Mac & various unix) handle lots of windows at all well. It's much easier to have my Squeak world nicely tied together.
One place where I could see potential for interesting experiments would be to use the nascent DisplayHostWindow stuff to do exactly this dual display thing - hell, lots of displays if you want, why not? Instead of trying to make every host window a separate Squeak window, make each a Display and then it you want to spread a couple across several physical display, go for it. Maybe hanging it all off the idea of Projects would be a good start? A Project window already gathers groups of windows after all.
And of course, I wouldn't be at all surprised to hear that someone has already done this and that I simply don't remember it...
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Adding manpower to a late software project makes it later.
Hi tim,
Thinking about what you have said. Host windows. Mmm... I don't disagree with you about the immersive environment of squeak managing the windows.
I am thinking that TruffleSqueak would make a good window manager. I think you could use Java Swing to build your host windows. Is it so? Good for production apps. Get the tree lists right and you should be good to go.
I would rather see Professional Spec widgets, that look & feel like host widgets, but managed inside Squeak. A step back from the dynamism of Morphic. With all the animation and graphics work and sound/speech, I don't see why host look & feel could not be hosted within Squeak. Of course, all OS styles should be configurable, so on Windows you could switch to Mac windows or Ubuntu look&feel. The issue is time. I wholly understand that!
Is that how a squeak display is used? I am unfamiliar. But that sounds like a window manager to me! Multiple Displays. Now this proposal of yours to use a Project for each Display, seems to interleave with my proposed ERights Vat and event loop. I was thinking whether each window event loop could feed the Vat event loop. The Vat's event loop already comes in as priority 40 or 30, so very background. Like a bubbling spring, I like to think. A Project sounds like a good boundary, to me. I believe each Project can establish its own naming environment. Is it so?
I am very interested in forming a Secure DNS, with hierarchical naming and local caching. I want to use it as an interface registry, as well, such that the ASN1 structure definitions are so shared. ASN1Modules are kinda hierarchical, but not completely. For example, I do not think I implemented any way to search up and down the tree, for a definition. I have further thoughts on auto deploying consumers for the various event structures, that may appear unexpectedly, so the engine would dyno-load the consumer package registered for that event type.
Closer to my heart, at this point are my questions and request for help in splitting off a pruned stack for an exception, to unblock the event loop yet still allow introspection of an error, or a halt. Here is what I wrote. Tim, might you be able to advise me here? *lost*
http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html
Kindly, Rabbit
On 6/26/20 12:54 PM, tim Rowledge wrote:
On 2020-06-26, at 9:35 AM, Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Is there a way to set Squeak to be dual screen?
The fundamentals have been there since 2004. HostWindowPlugin/DisplayHostWindow provide some breadcrumbs.
After years of people shrieking loudly (oh, so loudly) about how essential host windows and native controls are to any chance of Smalltalk having a future - nothing. Nobody found it worth the effort to take the foundation and build on it. That was over 15 years ago.
VisualWorks did the native window thing a long time ago. I've been having to use VW a bit recently (see recent email whining about the awful font stuff) and I really, really, don't like having separate host windows. I think part of the problem is that I tend to have a *lot* of windows open and it turns out that none of the current main OS (yes, I've been using Windows, Mac & various unix) handle lots of windows at all well. It's much easier to have my Squeak world nicely tied together.
One place where I could see potential for interesting experiments would be to use the nascent DisplayHostWindow stuff to do exactly this dual display thing - hell, lots of displays if you want, why not? Instead of trying to make every host window a separate Squeak window, make each a Display and then it you want to spread a couple across several physical display, go for it. Maybe hanging it all off the idea of Projects would be a good start? A Project window already gathers groups of windows after all.
And of course, I wouldn't be at all surprised to hear that someone has already done this and that I simply don't remember it...
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Adding manpower to a late software project makes it later.
On Fri, Jun 26, 2020 at 7:56 PM Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Hi tim,
Thinking about what you have said. Host windows. Mmm... I don't disagree with you about the immersive environment of squeak managing the windows.
I am thinking that TruffleSqueak would make a good window manager. I think you could use Java Swing to build your host windows. Is it so? Good for production apps. Get the tree lists right and you should be good to go.
Yes, that should be possible. However, it is not yet supported. The HostWindowPlugin is at [1].
You've probably seen it, but just in case: Here's a demo of our JavaToolBuilder using Swing to build workspaces, inspectors, and browsers in native windows: https://www.youtube.com/watch?v=If7xNBYA0Bk
More information at: https://medium.com/graalvm/hpi-polyglot-programming-seminar-3fd06ffa59d2
Cheers, Fabio
[1] https://github.com/hpi-swa/trufflesqueak/blob/301b58d5d5ea0e9471e0e060b2dc9e...
I would rather see Professional Spec widgets, that look & feel like host widgets, but managed inside Squeak. A step back from the dynamism of Morphic. With all the animation and graphics work and sound/speech, I don't see why host look & feel could not be hosted within Squeak. Of course, all OS styles should be configurable, so on Windows you could switch to Mac windows or Ubuntu look&feel. The issue is time. I wholly understand that!
Is that how a squeak display is used? I am unfamiliar. But that sounds like a window manager to me! Multiple Displays. Now this proposal of yours to use a Project for each Display, seems to interleave with my proposed ERights Vat and event loop. I was thinking whether each window event loop could feed the Vat event loop. The Vat's event loop already comes in as priority 40 or 30, so very background. Like a bubbling spring, I like to think. A Project sounds like a good boundary, to me. I believe each Project can establish its own naming environment. Is it so?
I am very interested in forming a Secure DNS, with hierarchical naming and local caching. I want to use it as an interface registry, as well, such that the ASN1 structure definitions are so shared. ASN1Modules are kinda hierarchical, but not completely. For example, I do not think I implemented any way to search up and down the tree, for a definition. I have further thoughts on auto deploying consumers for the various event structures, that may appear unexpectedly, so the engine would dyno-load the consumer package registered for that event type.
Closer to my heart, at this point are my questions and request for help in splitting off a pruned stack for an exception, to unblock the event loop yet still allow introspection of an error, or a halt. Here is what I wrote. Tim, might you be able to advise me here? *lost*
http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html
Kindly, Rabbit
On 6/26/20 12:54 PM, tim Rowledge wrote:
On 2020-06-26, at 9:35 AM, Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Is there a way to set Squeak to be dual screen?
The fundamentals have been there since 2004. HostWindowPlugin/DisplayHostWindow provide some breadcrumbs.
After years of people shrieking loudly (oh, so loudly) about how essential host windows and native controls are to any chance of Smalltalk having a future - nothing. Nobody found it worth the effort to take the foundation and build on it. That was over 15 years ago.
VisualWorks did the native window thing a long time ago. I've been having to use VW a bit recently (see recent email whining about the awful font stuff) and I really, really, don't like having separate host windows. I think part of the problem is that I tend to have a *lot* of windows open and it turns out that none of the current main OS (yes, I've been using Windows, Mac & various unix) handle lots of windows at all well. It's much easier to have my Squeak world nicely tied together.
One place where I could see potential for interesting experiments would be to use the nascent DisplayHostWindow stuff to do exactly this dual display thing - hell, lots of displays if you want, why not? Instead of trying to make every host window a separate Squeak window, make each a Display and then it you want to spread a couple across several physical display, go for it. Maybe hanging it all off the idea of Projects would be a good start? A Project window already gathers groups of windows after all.
And of course, I wouldn't be at all surprised to hear that someone has already done this and that I simply don't remember it...
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Adding manpower to a late software project makes it later.
On 6/26/20 2:03 PM, Fabio Niephaus wrote:
On Fri, Jun 26, 2020 at 7:56 PM Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
I am thinking that TruffleSqueak would make a good window manager. I think you could use Java Swing to build your host windows. Is it so? Good for production apps. Get the tree lists right and you should be good to go.
Yes, that should be possible. However, it is not yet supported. The HostWindowPlugin is at [1].
You've probably seen it, but just in case: Here's a demo of our JavaToolBuilder using Swing to build workspaces, inspectors, and browsers in native windows: https://www.youtube.com/watch?v=If7xNBYA0Bk More information at: https://medium.com/graalvm/hpi-polyglot-programming-seminar-3fd06ffa59d2
I would love if this and Spec were integrated such that using Spec you could use the JavaToolBuilder to build windows.
Very cool tech, no question!
Kindly, rabbit
Cheers, Fabio
[1] https://github.com/hpi-swa/trufflesqueak/blob/301b58d5d5ea0e9471e0e060b2dc9e...
I would rather see Professional Spec widgets, that look & feel like host widgets, but managed inside Squeak. A step back from the dynamism of Morphic. With all the animation and graphics work and sound/speech, I don't see why host look & feel could not be hosted within Squeak. Of course, all OS styles should be configurable, so on Windows you could switch to Mac windows or Ubuntu look&feel. The issue is time. I wholly understand that!
Is that how a squeak display is used? I am unfamiliar. But that sounds like a window manager to me! Multiple Displays. Now this proposal of yours to use a Project for each Display, seems to interleave with my proposed ERights Vat and event loop. I was thinking whether each window event loop could feed the Vat event loop. The Vat's event loop already comes in as priority 40 or 30, so very background. Like a bubbling spring, I like to think. A Project sounds like a good boundary, to me. I believe each Project can establish its own naming environment. Is it so?
I am very interested in forming a Secure DNS, with hierarchical naming and local caching. I want to use it as an interface registry, as well, such that the ASN1 structure definitions are so shared. ASN1Modules are kinda hierarchical, but not completely. For example, I do not think I implemented any way to search up and down the tree, for a definition. I have further thoughts on auto deploying consumers for the various event structures, that may appear unexpectedly, so the engine would dyno-load the consumer package registered for that event type.
Closer to my heart, at this point are my questions and request for help in splitting off a pruned stack for an exception, to unblock the event loop yet still allow introspection of an error, or a halt. Here is what I wrote. Tim, might you be able to advise me here? *lost*
http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html
Kindly, Rabbit
On 6/26/20 12:54 PM, tim Rowledge wrote:
On 2020-06-26, at 9:35 AM, Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Is there a way to set Squeak to be dual screen?
The fundamentals have been there since 2004. HostWindowPlugin/DisplayHostWindow provide some breadcrumbs.
After years of people shrieking loudly (oh, so loudly) about how essential host windows and native controls are to any chance of Smalltalk having a future - nothing. Nobody found it worth the effort to take the foundation and build on it. That was over 15 years ago.
VisualWorks did the native window thing a long time ago. I've been having to use VW a bit recently (see recent email whining about the awful font stuff) and I really, really, don't like having separate host windows. I think part of the problem is that I tend to have a *lot* of windows open and it turns out that none of the current main OS (yes, I've been using Windows, Mac & various unix) handle lots of windows at all well. It's much easier to have my Squeak world nicely tied together.
One place where I could see potential for interesting experiments would be to use the nascent DisplayHostWindow stuff to do exactly this dual display thing - hell, lots of displays if you want, why not? Instead of trying to make every host window a separate Squeak window, make each a Display and then it you want to spread a couple across several physical display, go for it. Maybe hanging it all off the idea of Projects would be a good start? A Project window already gathers groups of windows after all.
And of course, I wouldn't be at all surprised to hear that someone has already done this and that I simply don't remember it...
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Adding manpower to a late software project makes it later.
Hi tim, I wanted to comment on a couple of paragraphs. I will send separate emails, in hopes to hear your views. First, regarding a hierarchical naming/interface/consumer meta service.
On 6/26/20 1:55 PM, Robert Withers wrote:
I am very interested in forming a Secure DNS, with hierarchical naming and local caching. I want to use it as an interface registry, as well, such that the ASN1 structure definitions are so shared. ASN1Modules are kinda hierarchical, but not completely. For example, I do not think I implemented any way to search up and down the tree, for a definition. I have further thoughts on auto deploying consumers for the various event structures, that may appear unexpectedly, so the engine would dyno-load the consumer package registered for that event type.
Another bit of work I did in this area, is the Eventual Linda package(called ELinda on Cryptography or Oceanside). I added an ability to register and pattern matcher with an eventual registration, which schedules a reactor to react to an incoming event. I was trying to think how to make it hierarchical in lookup and distribution. I did not get very far but the eventual event registrations are there. I wanted to combine an interface repository with a hierarchical naming service, perhaps using ELinda for capability introduction.
K, rabbit
Hi tim, here is my exploration of stack handling.
On 6/26/20 1:55 PM, Robert Withers wrote:
Closer to my heart, at this point are my questions and request for help in splitting off a pruned stack for an exception, to unblock the event loop yet still allow introspection of an error, or a halt. Here is what I wrote. Tim, might you be able to advise me here?
lost
http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html
Not onyl do I want this, but the short stack, when Proceeded, should reschedule an eventual message on the event loop to reintroduce this short stack back into event loop land. As such, i was thinking perhaps a continuation could enable this. Liekwise, when a exception is thrown, do these steps:
- Modify the Vat to have a an active stack, a priority queue and a vat-aware continuation pool.
- Copy the stack. Does this mean create a special continuation, that is event loop aware?
- Resume the event loop by discarding the previous event handling exception.
- Prune the stack (of the continuation). above and below. Site of signaled exception.
- Open a Debugger
- On Proceed, reschedule the eventual message in the Vat's queue.
I have no idea what B looks like. Outside of my experience doing continuations and stack manipulation and pool scheduling. I need a VatSemaphore (please peruse the ResultSemaphore in PromisesRemote). I pray someone may swoop in with solutions!
Kindly, rabbit
On 6/26/20 2:37 PM, Robert Withers wrote:
On 6/26/20 1:55 PM, Robert Withers wrote:
Closer to my heart, at this point are my questions and request for help in splitting off a pruned stack for an exception, to unblock the event loop yet still allow introspection of an error, or a halt. Here is what I wrote. Tim, might you be able to advise me here?
lost
http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html
The requirements for exceptions within an event loop are:
- Copy stack - Restart eventLoop - Prune stack/Create Continuation - Open Debugger - When Proceeded, reschedule EventualMessageSend, on the Continuation, in the vat queue.
Would someone please help me here? I am a little lost. I appreciate you!
Kindly, rabbit
Not only do I want this, but the short stack, when Proceeded, should reschedule an eventual message on the event loop to reintroduce this short stack back into event loop land. As such, i was thinking perhaps a continuation could enable this. Liekwise, when a exception is thrown, do these steps:
- Modify the Vat to have a an active stack, a priority queue and a vat-aware continuation pool.
- Copy the stack. Does this mean create a special continuation, that is event loop aware?
- Resume the event loop by discarding the previous event handling exception.
- Prune the stack (of the continuation). above and below. Site of signaled exception.
- Open a Debugger
- On Proceed, reschedule the eventual message in the Vat's queue.
I have no idea what B looks like. Outside of my experience doing continuations and stack manipulation and pool scheduling. I need a VatSemaphore (please peruse the ResultSemaphore in PromisesRemote). I pray someone may swoop in with solutions!
Kindly, rabbit
Hi everyone,
Thanks to a response on the Squeak Slack channel, I was able to get most of this done by calling a pre-existing method. Please run:
Installer ss project: 'Cryptography'; install: 'PromisesLocal'.
Oh! Marcel, this is precisely what I needed, it is already done! I changed the EventualMessageSend>>#value to call this code you shared. StandardToolSet debugException: ex.I run this script to test:(1 eventual / 0) explore. 1 eventual explore.The first line results in an exception and we get a exception notifier and also an explorer on the PromisERef. The promise is resolved to an exception and it #becomes a BrokenERef.
In looking into the exception notifier and the exception browser is that the top frame is the signaler context. Perfect.
The second line validates that the event loop is unblocked. This results in a second inspector on a near value of 1.
The only remaining work is that when proceeded, the exception will reschedule the stack into the vat's queue.
Kindly, rabbit
On 7/12/20 1:38 PM, Robert Withers wrote:
On 6/26/20 2:37 PM, Robert Withers wrote:
On 6/26/20 1:55 PM, Robert Withers wrote:
Closer to my heart, at this point are my questions and request for help in splitting off a pruned stack for an exception, to unblock the event loop yet still allow introspection of an error, or a halt. Here is what I wrote. Tim, might you be able to advise me here?
lost
http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html
The requirements for exceptions within an event loop are:
- Copy stack
- Restart eventLoop
- Prune stack/Create Continuation
- Open Debugger
- When Proceeded, reschedule EventualMessageSend, on the Continuation, in the vat queue.
Would someone please help me here? I am a little lost. I appreciate you!
Kindly, rabbit
Not only do I want this, but the short stack, when Proceeded, should reschedule an eventual message on the event loop to reintroduce this short stack back into event loop land. As such, i was thinking perhaps a continuation could enable this. Liekwise, when a exception is thrown, do these steps:
- Modify the Vat to have a an active stack, a priority queue and a vat-aware continuation pool.
- Copy the stack. Does this mean create a special continuation, that is event loop aware?
- Resume the event loop by discarding the previous event handling exception.
- Prune the stack (of the continuation). above and below. Site of signaled exception.
- Open a Debugger
- On Proceed, reschedule the eventual message in the Vat's queue.
I have no idea what B looks like. Outside of my experience doing continuations and stack manipulation and pool scheduling. I need a VatSemaphore (please peruse the ResultSemaphore in PromisesRemote). I pray someone may swoop in with solutions!
Kindly, rabbit
Strange issue. I found one of the tests is failing, run from the TestRunner. RefsTest>>#testBlockClosure is failing for an unknown reason. I ran the tests from the browser menu and they all pass. There is no failure running or debugging from the Browser. Very strange.
K, r
On 7/18/20 7:50 AM, Robert Withers via Squeak-dev wrote:
Hi everyone,
Thanks to a response on the Squeak Slack channel, I was able to get most of this done by calling a pre-existing method. Please run:
Installer ss project: 'Cryptography'; install: 'PromisesLocal'.
Oh! Marcel, this is precisely what I needed, it is already done! I changed the EventualMessageSend>>#value to call this code you shared. StandardToolSet debugException: ex.I run this script to test:(1 eventual / 0) explore. 1 eventual explore.The first line results in an exception and we get a exception notifier and also an explorer on the PromisERef. The promise is resolved to an exception and it #becomes a BrokenERef.
In looking into the exception notifier and the exception browser is that the top frame is the signaler context. Perfect.
The second line validates that the event loop is unblocked. This results in a second inspector on a near value of 1.
The only remaining work is that when proceeded, the exception will reschedule the stack into the vat's queue.
Kindly, rabbit
On 7/12/20 1:38 PM, Robert Withers wrote:
On 6/26/20 2:37 PM, Robert Withers wrote:
On 6/26/20 1:55 PM, Robert Withers wrote:
Closer to my heart, at this point are my questions and request for help in splitting off a pruned stack for an exception, to unblock the event loop yet still allow introspection of an error, or a halt. Here is what I wrote. Tim, might you be able to advise me here?
lost
http://lists.squeakfoundation.org/pipermail/squeak-dev/2020-June/210452.html
The requirements for exceptions within an event loop are:
- Copy stack
- Restart eventLoop
- Prune stack/Create Continuation
- Open Debugger
- When Proceeded, reschedule EventualMessageSend, on the Continuation, in the vat queue.
Would someone please help me here? I am a little lost. I appreciate you!
Kindly, rabbit
Not only do I want this, but the short stack, when Proceeded, should reschedule an eventual message on the event loop to reintroduce this short stack back into event loop land. As such, i was thinking perhaps a continuation could enable this. Liekwise, when a exception is thrown, do these steps:
- Modify the Vat to have a an active stack, a priority queue and a vat-aware continuation pool.
- Copy the stack. Does this mean create a special continuation, that is event loop aware?
- Resume the event loop by discarding the previous event handling exception.
- Prune the stack (of the continuation). above and below. Site of signaled exception.
- Open a Debugger
- On Proceed, reschedule the eventual message in the Vat's queue.
I have no idea what B looks like. Outside of my experience doing continuations and stack manipulation and pool scheduling. I need a VatSemaphore (please peruse the ResultSemaphore in PromisesRemote). I pray someone may swoop in with solutions!
Kindly, rabbit
... and using an approach like the Eclipse SWT ?
I mean : a Smalltalk interface to an external dll ? Are external threads a problem, for modern Smalltalks ?
Bye,
Davide Grandi (maybe SWT descends from Visualage Widgets ? maybe ...)
On 26/06/2020 18:54, tim Rowledge wrote:
On 2020-06-26, at 9:35 AM, Robert Withers via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Is there a way to set Squeak to be dual screen?
The fundamentals have been there since 2004. HostWindowPlugin/DisplayHostWindow provide some breadcrumbs.
After years of people shrieking loudly (oh, so loudly) about how essential host windows and native controls are to any chance of Smalltalk having a future - nothing. Nobody found it worth the effort to take the foundation and build on it. That was over 15 years ago.
VisualWorks did the native window thing a long time ago. I've been having to use VW a bit recently (see recent email whining about the awful font stuff) and I really, really, don't like having separate host windows. I think part of the problem is that I tend to have a *lot* of windows open and it turns out that none of the current main OS (yes, I've been using Windows, Mac & various unix) handle lots of windows at all well. It's much easier to have my Squeak world nicely tied together.
One place where I could see potential for interesting experiments would be to use the nascent DisplayHostWindow stuff to do exactly this dual display thing - hell, lots of displays if you want, why not? Instead of trying to make every host window a separate Squeak window, make each a Display and then it you want to spread a couple across several physical display, go for it. Maybe hanging it all off the idea of Projects would be a good start? A Project window already gathers groups of windows after all.
And of course, I wouldn't be at all surprised to hear that someone has already done this and that I simply don't remember it...
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Adding manpower to a late software project makes it later.
squeak-dev@lists.squeakfoundation.org