<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div dir="ltr"><span></span></div><div dir="ltr"><meta http-equiv="content-type" content="text/html; charset=utf-8"><div dir="ltr"></div><div dir="ltr">Hi Marcel,</div><div dir="ltr"><br></div><div dir="ltr">That current benchmark makes a big difference in my decision!  Thank you for re-running it.  <span style="background-color: rgba(255, 255, 255, 0);">From your numbers, it’s easy to understand why I was having performance problems before I switched to Announcements (from Object events, I think; it’s been a long time).</span>  I have objects with a large number of dependencies among them, and most times a user changes something, a long cascade of other changes (frequently including changes in dependencies) follows.  Therefore, performance and debuggability are my two most-important selection criteria.  It’s faintly amusing/embarrassing that past-me never benchmarked a typical ratio (for my models) of registering for updates to receiving updates.  I’ll take Signals out for a test drive and see what I think.</div><div dir="ltr"><br></div><div dir="ltr">Also, I apologize for misspelling your name in my post below.  I try to get names right but slipped up this time.</div><div dir="ltr"><br></div><div dir="ltr">— Bren</div><div dir="ltr"><br>On Jun 4, 2019, at 2:54 AM, Marcel Taeumel <<a href="mailto:marcel.taeumel@hpi.de">marcel.taeumel@hpi.de</a>> wrote:<br><br></div><blockquote type="cite"><div dir="ltr"><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
                                        
                                        
                                            
                                        
                                        
                                        Hi Brenda,<div><br></div><div>I just ran that benchmark again in Squeak Trunk using a recent VM.</div><div><br></div><div>Signals: 22 ms / 2 ms</div><div>Object dependents: 2389 ms / 0 ms</div><div>Object events: 4282 ms / 5 ms</div><div>Announcements: 46 ms / 0 ms</div><div><br></div><div>Best,</div><div>Marcel</div><div class="mb_sig"></div>
                                        
                                        <blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 04.06.2019 02:06:24 schrieb Brenda Larcom <<a href="mailto:asparagi@hhhh.org">asparagi@hhhh.org</a>>:</p><div style="font-family:Arial,Helvetica,sans-serif"><p><span style="background-color: rgba(255, 255, 255, 0);">I am reviving some old code that relied heavily on Lukas Renggli's implementation of Announcements (many thanks to Lukas). Announcements still loads in Squeak 5.2, but it is marked as no longer maintained on Lukas' site and I cannot find a repository for it anywhere else, which makes me nervous.</span></p><p><span style="background-color: rgba(255, 255, 255, 0);">Since I am reworking my code, now is the time for me to switch if I'm going to. I searched for alternatives in the Squeak release, in SqueakMap, on the Squeak wiki, and via DuckDuckGo using these search terms:</span></p><ul><li><span style="background-color: rgba(255, 255, 255, 0);">Observer</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Dependent (& variations)</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Publish-Subscribe (& variations)</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Callback</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Event Dispatch</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Self-Addressed Stamped Envelope (& variations)</span></li></ul><p><span style="background-color: rgba(255, 255, 255, 0);">I have identified the following generalized options in this space:</span></p><ul><li><span style="background-color: rgba(255, 255, 255, 0);">Object dependencies (update, changed) - in stock image</span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://wiki.squeak.org/squeak/1214">Object events</a> (when:send:to:, trigger:) - in stock image</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://wiki.squeak.org/squeak/AnnouncementsFramework">Renditions of VisualWorks' Announcements</a> (events are objects)</span></span><ul><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="https://source.lukas-renggli.ch/announcements/">by Lukas Renggli</a> based on Colin Putney's code from OmniBrowser & Vassili Bykov's blog post - not in SqueakMap; loads in 5.2 & passes its tests; as of 2009, Pharo intended to standardize on this implementation, and they have some (extended) Announcements framework in their stock image now</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://www.squeaksource.com/AXAnnouncements/">AXAnnouncements</a> by Levente Uzonyi and Kósi Balázs - not in SqueakMap; loads in 5.2 & has one warning about a deprecated message in its tests; ported from VW, so maybe there are Cincom copyright issues</span></span></li></ul></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="https://www.hpi.uni-potsdam.de/hirschfeld/trac/SqueakCommunityProjects/wiki/signals">Signals</a> (callbacks with constraints for usability) by Marcus Taeumel - in <a href="http://map.squeak.org/package/9d91de11-d317-4d83-b7d4-2cb87a591d43">SqueakMap</a> on the Web, but not in the catalog seen by SqueakMap Package Loader in 5.2; loads in 5.2 & fails one test</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/Bindings.html">Bindings</a> by Tobias Pape (this link doesn't work on Chrome on OS X Mojave; looks like maybe a two-way registration for mutual change updates) - not on SqueakMap; loads in 5.2 but fails its tests</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://files.squeak.org/goodies/VSEvents.txt">Visual Smalltalk Events</a> by Tim Jones (looks like a precursor to or alternative implementation of the Object events that are now in the default image) - <a href="http://files.squeak.org/goodies/VSEvents.7Augu1259am.cs">in Goodies</a> rather than SqueakMap; does not load in 5.2</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://lists.squeakfoundation.org/pipermail/seaside/2008-April/017540.html">Wandering Announcements</a> by Keith Hodges (an extension to Lukas' Announcements that looks around nearby parts of a model to locate an object to handle an announcement) - not on SqueakMap; couldn't locate code</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://wiki.squeak.org/squeak/687">PostOffice</a> by Peter Smet (looks like an alternative implementation of the Object events that are now in the default image) - not on SqueakMap; couldn't locate code</span></span></li></ul><p><span style="background-color: rgba(255, 255, 255, 0);">And for completeness, I also found other packages that implement [parts of] this pattern, but are specific to a particular domain that doesn't help me:</span></p><ul><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="https://wiki.squeak.org/squeak/118">Morphic event handling</a>, for handling user interface events</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="https://wiki.squeak.org/squeak/5646">OmniBrowser</a> (now deprecated), for internal OmniBrowser events,</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://wiki.squeak.org/squeak/63">MQTT client</a>, for subscribing to updates published by IoT devices</span></span></li><li><span style="color: #000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><a href="http://wiki.squeak.org/squeak/1767">MVC</a>, for user interfaces</span></span></li></ul><p><span style="background-color: rgba(255, 255, 255, 0);">I have questions:</span></p><ul><li><span style="background-color: rgba(255, 255, 255, 0);">Are these all the generalized options for the Observer pattern and the relatives I listed as search terms?</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Is there anywhere else I should look?</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Did I describe each option correctly?</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Does anyone know of a public URL for any of the options whose source or documentation I couldn't find?</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Are any of these options, to anyone's knowledge, being actively maintained?</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">Is the Squeak community planning to standardize on any of the generalized options?</span></li><li><span style="background-color: rgba(255, 255, 255, 0);">In the absence of additional information, I am leaning towards sticking with Lukas' Announcements, because of the performance comparison chart on the <a href="https://www.hpi.uni-potsdam.de/hirschfeld/trac/SqueakCommunityProjects/wiki/signals">Signals</a> page (which I am assuming is approximately applicable to Lukas' Announcements as well as AXAnnouncements) and Pharo's standardization decision. Is there any reason that is not on the Signals comparision chart for me to prefer some other package?</span></li></ul><p><span style="background-color: rgba(255, 255, 255, 0);">Before you ask, yes, I would definitely like to help the next person by updating the Squeak wiki so that it is easier to find and pick from these alternatives, creating a SqueakMap entry and ConfigurationOf for at least the one I choose, et cetera. I'll post a [DOCS] thread with my specific proposed wiki changes after I get feedback on the accuracy of the data above.</span></p><p><span style="background-color: rgba(255, 255, 255, 0);">Thank you for reading, and for any assistance you can provide!</span></p><p><span style="background-color: rgba(255, 255, 255, 0);">-- </span><span style="background-color: rgba(255, 255, 255, 0);">Bren</span></p><div><br></div><div dir="ltr"></div></div></blockquote></div></div></blockquote><blockquote type="cite"><div dir="ltr"><span></span><br></div></blockquote></div></body></html>