Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
####### # # E-scripts on pharo. # # Note 1: use the eev command (defined in eev.el) and the # ee alias (in my .zshrc) to execute parts of this file. # Executing this file as a whole makes no sense. # An introduction to eev can be found here: # # (find-eev-quick-intro) # http://angg.twu.net/eev-intros/find-eev-quick-intro.html # # Note 2: be VERY careful and make sure you understand what # you're doing. # # Note 3: If you use a shell other than zsh things like |& # and the for loops may not work. # # Note 4: I always run as root. # # Note 5: some parts are too old and don't work anymore. Some # never worked. # # Note 6: the definitions for the find-xxxfile commands are on my # .emacs. # # Note 7: if you see a strange command check my .zshrc -- it may # be defined there as a function or an alias. # # Note 8: the sections without dates are always older than the # sections with dates. # # This file is at <http://angg.twu.net/e/pharo.e> # or at <http://angg.twu.net/e/pharo.e.html>. # See also <http://angg.twu.net/emacs.html>, # <http://angg.twu.net/.emacs[.html]>, # <http://angg.twu.net/.zshrc[.html]>, # <http://angg.twu.net/escripts.html>, # and <http://angg.twu.net/>. # ####### # «.mailing-lists» (to "mailing-lists") # «.books» (to "books") # «.pharo-by-example» (to "pharo-by-example") # «.running-tmp» (to "running-tmp") # «.running-PHARO» (to "running-PHARO") # «.pharochipdesigner» (to "pharochipdesigner") # «.emacs-pharo-bridge» (to "emacs-pharo-bridge") # «.shampoo» (to "shampoo") # «.neoconsole» (to "neoconsole") # «.dragging-objects» (to "dragging-objects") # «.mooc» (to "mooc") # «.bloc-1.0» (to "bloc-1.0") # «.mooc-videos» (to "mooc-videos") # https://pharo.org/ # https://pharo.org/download # https://pharo.org/features.html # https://pharo.org/documentation.html # https://pharo.org/community.html # https://books.pharo.org/ # https://github.com/pharo-project/pharo ##### # # mailing-lists # 2021dec07 # ##### # «mailing-lists» (to ".mailing-lists") # pharo-users: # [email protected] # https://lists.pharo.org/empathy/list/pharo-users.lists.pharo.org # Keyboard shortcuts: # https://lists.pharo.org/empathy/thread/J4HNR2TPCKZJQILOHWBYAQLZTQZEQFX7 # pharo-vm: # https://lists.pharo.org/list/pharo-vm.lists.pharo.org ##### # # books # 2022mar04 # ##### # «books» (to ".books") # http://books.pharo.org/ http://files.pharo.org/books-pdfs/spec/2017-01-23-SpecBooklet.pdf # (find-psne-article-links "http://files.pharo.org/books-pdfs/spec/2017-01-23-SpecBooklet.pdf" "specbook") ##### # # pharo-by-example # 2023jan21 # ##### # «pharo-by-example» (to ".pharo-by-example") # (find-books "__comp/__comp.el" "pharo-by-example") # (find-es "squeak" "squeak-by-example") ;; https://github.com/SquareBracketAssociates/PharoByExample80 ;; https://github.com/SquareBracketAssociates/PharoByExample80/releases/download/continuous/PBE8-wip.pdf ;; https://github.com/SquareBracketAssociates/PharoByExample9 ;; https://github.com/SquareBracketAssociates/PharoByExample9/releases/download/latest/PBE9-wip.pdf # (find-psne-article-links "https://github.com/SquareBracketAssociates/PharoByExample9/releases/download/latest/PBE9-wip.pdf" "pharobyex") ##### # # Running Pharo on /tmp/ # 2021jul18 # ##### # «running-tmp» (to ".running-tmp") * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd /tmp/ wget -O- https://get.pharo.org/64 | bash ./pharo Pharo.image eval "42 factorial" Downloading the latest 80 Image: http://files.pharo.org/get-files/80/pharo64.zip Pharo.image Downloading the latest pharoVM: http://files.pharo.org/get-files/80/pharo64-linux-stable.zip pharo-vm/pharo Creating starter scripts pharo and pharo-ui # pthread_setschedparam failed: Operation not permitted # This VM uses a separate heartbeat thread to update its internal clock # and handle events. For best operation, this thread should run at a # higher priority, however the VM was unable to change the priority. The # effect is that heavily loaded systems may experience some latency # issues. If this occurs, please create the appropriate configuration # file in /etc/security/limits.d/ as shown below: # # cat <<END | sudo tee /etc/security/limits.d/pharo.conf # * hard rtprio 2 # * soft rtprio 2 # END # # and report to the pharo mailing list whether this improves behaviour. # # You will need to log out and log back in for the limits to take effect. # For more information please see # https://github.com/OpenSmalltalk/opensmalltalk-vm/releases/tag/r3732#linux # 1405006117752879898543142606244511569936384000000000 ./pharo-ui ##### # # running-PHARO # 2021jul26 # ##### # «running-PHARO» (to ".running-PHARO") * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) mkdir ~/PHARO/ cd ~/PHARO/ wget -O- https://get.pharo.org/64 | bash ./pharo Pharo.image eval "42 factorial" * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd ~/PHARO/ ./pharo-ui ##### # # pharochipdesigner # 2022mar14 # ##### # «pharochipdesigner» (to ".pharochipdesigner") https://github.com/pavel-krivanek/PharoChipDesigner ##### # # emacs-pharo-bridge # 2021dec08 # ##### # «emacs-pharo-bridge» (to ".emacs-pharo-bridge") # https://mail.google.com/mail/u/0/#sent/KtbxLvgssVQDSjgLplnlWTnFSGrpPRgcCL # https://lists.pharo.org/empathy/thread/4EZE6NMDT7MUEPQ53QBZQKV3VJC2HBI2 # (find-es "tcl" "2021-emacs-tcl-bridge") An Emacs <-> Pharo bridge (unidirectional at first) Hi list, I'm looking for help on doing something VERY un-smalltalkish with Pharo... let me explain. I am working on several variants of this way of controlling external programs with Emacs: http://angg.twu.net/LATEX/2021emacsconf.pdf The slides - link above - are the best way to understand how it works, but there's mode info here: http://angg.twu.net/emacsconf2021.html The method above only works with programs that have REPLs that can be run in terminals, but I have some variants of it that let me send commands - single-line or multi-line - to external programs that only have GUIs. In one of these variant the external program listens to the signals SIGUSR1s and SIGUSR2s, and initially what it does when it receives these signals is: on SIGUSR1: print the contents of the file /tmp/bridge-data on SIGUSR2: eval the contents of the file /tmp/bridge-data The action of SIGUSR2 can be used to redefine the action fo SIGUSR1. There is a demo for Tcl here: http://angg.twu.net/IMAGES/2021-emacs-tcl-bridge.png http://angg.twu.net/e/tcl.e.html#2021-emacs-tcl-bridge How can I implement something similar in Pharo? I mean, how do I make it react to SIGUSR1s by printing - in any sense - the contents of /tmp/bridge-data, and react to SIGUSR2s by eval-ing the contents of /tmp/bridge-data? Thanks in advance! =) Eduardo Ochs http://angg.twu.net/#eev https://github.com/badetitou/vscode-pharo ##### # # shampoo # 2021dec08 # ##### # «shampoo» (to ".shampoo") # https://github.com/dmatveev/shampoo-emacs # https://revival.sh/shampoo/ ##### # # neoconsole # 2021dec08 # ##### # «neoconsole» (to ".neoconsole") # https://github.com/svenvc/NeoConsole # (find-git-links "https://github.com/svenvc/NeoConsole" "neoconsole") # (code-c-d "neoconsole" "~/usrc/NeoConsole/") # (find-neoconsolefile "") # (find-neoconsolefile "README.md") # (find-neoconsolefile "README.md" "load NeoConsole using Metacello") ##### # # dragging-objects # 2022mar02 # ##### # «dragging-objects» (to ".dragging-objects") # (find-es "tcl" "dragABC") % (find-ssr-links "2022dragABC" "2022dragABC" "{hash}") % (code-eevvideo "2022dragABC" "2022dragABC" "{hash}") % (code-eevlinksvideo "2022dragABC" "2022dragABC" "{hash}") % (find-2022dragABCvideo "0:00") % (find-2022dragABCvideo "0:15") https://mail.google.com/mail/u/0/#sent/QgrcJHrnsbplttDSwvDTbqfJGhggBSmCDTB Subj: Dragging objects with restrictions Hi people, I am a beginner with SmallTalks. At the moment I understand the basics about the language but very little about the graphical interface... Can you recommend me docs and tutorials on how to do something like this in Pharo? http://angg.twu.net/eev-videos/2022dragABC.mp4 The link above is to a video that is 20 seconds long. In the first 15 seconds (suggestion: ignore them!) I use weird Emacs tricks to draw three objects in a Tcl/Tk canvas - the letters A, B, and C - and to bind "mousebutton1 motion" to different actions in each of them... ...and in the last 5 seconds of the video I draw the letters A, B and C with the mouse to show what are these actions. In short: the letter A moves freely, the letter B moves in the same horizontal line as A, and when I drag C around it moves B horizontally to force B to be in the same horizontal line as C. Thanks in advance! =) Eduardo Ochs http://angg.twu.net/#eev ##### # # mooc # 2022may29 # ##### # «mooc» (to ".mooc") # https://mooc.pharo.org/ # https://github.com/SquareBracketAssociates/UpdatedPharoByExample # (find-git-links "https://github.com/SquareBracketAssociates/UpdatedPharoByExample" "upbe") # (code-c-d "upbe" "~/usrc/UpdatedPharoByExample/") # (find-upbefile "") # (find-upbefile "README.md") # (find-upbefile "UpdatedPharoByExample.tex") * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd ~/usrc/UpdatedPharoByExample/ git clean -dfx git reset --hard rm -v support ln -s _support support lualatex UpdatedPharoByExample.tex # (find-upbegrep "grep --color=auto -nrH --null -e gitdate *") # (find-upbegrep "grep --color=auto -nrH --null -e lualatex *") # (find-upbefile "_support/latex/common.tex" "Since we use lualatex") # (find-upbefile "_support/latex/sbabook/") # (find-upbefile "_support/latex/sbabook/README.markdown") # https://ci.inria.fr/pharo-contribution/job/UpdatedPharoByExample/lastSuccessfulBuild/artifact/book-result/PharoTour/PharoTour.pdf ;; https://github.com/SquareBracketAssociates/PharoByExample80/releases/download/continuous/PBE8-wip.pdf (code-pdf-page "pbe8" "$S/https/github.com/SquareBracketAssociates/PharoByExample80/releases/download/continuous/PBE8-wip.pdf") (code-pdf-text "pbe8" "$S/https/github.com/SquareBracketAssociates/PharoByExample80/releases/download/continuous/PBE8-wip.pdf") ;; (find-pbe8page) ;; (find-pbe8text) ;; (find-pbe8page (+ 16 35) "3 Developing a simple counter") ;; (find-pbe8page (+ 16 35) "3.1 Our use case") ;; (find-pbe8page (+ 16 36) "3.2 Create your own class") ;; (find-pbe8page (+ 16 36) "3.3 Create a package and class") ;; (find-pbe8page (+ 16 39) "3.4 Define protocols and methods") ;; (find-pbe8page (+ 16 39) "3.5 Create a method") ;; (find-pbe8page (+ 16 41) "3.6 Adding a setter method") ;; (find-pbe8page (+ 16 41) "3.7 Define a Test Class") ;; (find-pbe8page (+ 16 42) "3.8 Saving your code on git with Iceberg") ;; (find-pbe8page (+ 16 46) "3.9 Adding more messages") ;; (find-pbe8page (+ 16 46) "3.10 Instance initialization method") ;; (find-pbe8page (+ 16 47) "3.11 Define an initialize method") ;; (find-pbe8page (+ 16 48) "3.12 Define a new instance creation method") ;; (find-pbe8page (+ 16 49) "3.13 Better object description") ;; (find-pbe8page (+ 16 49) "3.14 Saving your code on a remote server") ;; (find-pbe8page (+ 16 52) "3.15 Conclusion") ;; (find-pbe8page (+ 16 53) "4 A first application") ;; (find-pbe8page (+ 16 54) "4.1 The Lights Out game") ;; (find-pbe8page (+ 16 54) "4.2 Creating a new Package") ;; (find-pbe8page (+ 16 55) "4.3 Defining the class LOCell") ;; (find-pbe8page (+ 16 55) "4.4 Creating a new class") ;; (find-pbe8page (+ 16 56) "4.5 About comments") ;; (find-pbe8page (+ 16 57) "4.6 Adding methods to a class") ;; (find-pbe8page (+ 16 59) "4.7 Inspecting an object") ;; (find-pbe8page (+ 16 61) "4.8 Defining the class LOGame") ;; (find-pbe8page (+ 16 62) "4.9 Initializing our game") ;; (find-pbe8page (+ 16 62) "4.10 Taking advantage of the debugger") ;; (find-pbe8page (+ 16 65) "4.11 Studying the initialize method") ;; (find-pbe8page (+ 16 66) "4.12 Organizing methods into protocols") ;; (find-pbe8page (+ 16 67) "4.13 A typographic convention") ;; (find-pbe8page (+ 16 67) "4.14 Finishing the game") ;; (find-pbe8page (+ 16 69) "4.15 Final LOCell methods") ;; (find-pbe8page (+ 16 69) "4.16 Using the debugger") ;; (find-pbe8page (+ 16 72) "4.17 In case everything fails") ;; (find-pbe8page (+ 16 72) "4.18 Saving and sharing Pharo code") ;; (find-pbe8page (+ 16 72) "4.19 Iceberg: Pharo and Git") ;; (find-pbe8page (+ 16 74) "4.20 Saving code in a file") ;; (find-pbe8page (+ 16 76) "4.21 About Setter/Getter convention") ;; (find-pbe8page (+ 16 76) "4.22 On categories vs. packages") ;; (find-pbe8page (+ 16 77) "4.23 Chapter summary") http://books.pharo.org/booklet-WithStyle/pdf/2020-01-19-WithStyle.pdf (code-pdf-page "pws" "$S/http/books.pharo.org/booklet-WithStyle/pdf/2020-01-19-WithStyle.pdf") (code-pdf-text "pws" "$S/http/books.pharo.org/booklet-WithStyle/pdf/2020-01-19-WithStyle.pdf") ;; (find-pwspage) ;; (find-pwstext) ##### # # bloc-1.0 # 2022oct26 # ##### # «bloc-1.0» (to ".bloc-1.0") # https://mail.google.com/mail/u/0/#inbox/FMfcgzGqRGdFpmPFtpTbdmBtdHKZmLrL # https://rmod-files.lille.inria.fr/Videos/2022-ESUG/Day2/2f-esug-v3.mp4 * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd /tmp/ wget https://rmod-files.lille.inria.fr/Videos/2022-ESUG/Day2/2f-esug-v3.mp4 ;; (find-video "/tmp/2f-esug-v3.mp4") (code-video "blocvideo" "/tmp/2f-esug-v3.mp4") ;; (find-blocvideo) ;; (find-blocvideo "0:00") ##### # # mooc-videos # 2023mar18 # ##### # «mooc-videos» (to ".mooc-videos") # https://mooc.pharo.org/#download # (find-wgetrecursive-links "https://rmod-pharo-mooc.lille.inria.fr/MOOC/PharoMOOC-Videos/EN/") # (find-fline "/tmp/wget-recursive/rmod-pharo-mooc.lille.inria.fr/MOOC/PharoMOOC-Videos/EN/") # https://rmod-pharo-mooc.lille.inria.fr/MOOC/PharoMOOC-Videos/EN/ # https://github.com/pharo-ai/awesome-pharo-ml # (find-git-links "https://github.com/pharo-ai/awesome-pharo-ml" "awesomepharoml") # ^ just links # https://github.com/ObjectProfile/Roassal2 # (find-git-links "https://github.com/ObjectProfile/Roassal2" "roassal2") # (code-c-d "roassal2" "~/usrc/Roassal2/") # (find-roassal2file "") # https://github.com/jmari/JupyterTalk # (find-git-links "https://github.com/jmari/JupyterTalk" "jupytertalk") # (code-c-d "jupytertalk" "~/usrc/JupyterTalk/") # (find-jupytertalkfile "") # https://github.com/PolyMathOrg/PolyMath # (find-git-links "https://github.com/PolyMathOrg/PolyMath" "polymath") # (code-c-d "polymath" "~/usrc/PolyMath/") # (find-polymathfile "") https://github.com/PolyMathOrg/PolyMath/wiki/Existing-Math-packages-in-Smalltalk https://gtoolkit.com/?fbclid=IwAR0rRsbY7GYUO_ihnm0QhRmK-H4GeQZWJj9SeskOzCiMxGutqEUYYRTggUs https://vimeo.com/293060446 The Roassal Visualization Engine https://thepharo.dev/2020/11/17/how-to-play-sound-in-pharo/ https://github.com/khinsen/leibniz-pharo/ https://science-in-the-digital-era.khinsen.net/#Leibniz http://books.pharo.org https://github.com/SquareBracketAssociates/UpdatedPharoByExample https://richardeng.medium.com/why-learning-smalltalk-can-never-be-a-waste-of-time-a45038b18427 http://www.agilevisualization.com/ http://agilevisualization.com/AgileVisualization/EpidemiologicalModels/0301-EpidemiologicalModels.html But yeah, you can ask any object in Smalltalk what it understands AND (more crucially) you can implement a method in the error/stack trace, resume execution wow So the system is really live, objects are always communicating, everything's extensible Even the windows in something like Squeak can be redefined I saw that! Amazing! Like, the GUI itself Ah, cool Pharo hides this a little, tries to look more "normal" https://github.com/ErikOnBike/TinyBootstrap https://wiki.squeak.org/squeak/3917 Shell version of Pharo 5 https://github.com/ba-st/Launchpad/blob/release-candidate/docs/tutorial/Hello-world.md # Local Variables: # coding: utf-8-unix # End: