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:
# pharo-users@lists.pharo.org
# 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: