by Yuriy Tymchuk (firstname.lastname@example.org) at October 21, 2020 03:06 PM
by Yuriy Tymchuk (email@example.com) at October 21, 2020 03:06 PM
To create our telegram bot in Pharo, the first thing we need to do is to create a new object that inherits from Bottlegram. This object must define at least these three methods:
The tool allows creating bots using two methods:
Github link: https://github.com/pablo1n7/bottlegram
If you use Telegram, do you test an echo bot in https://t.me/echo_pharo_bot
by Stéphane Ducasse at October 12, 2020 03:00 PM
There is a new release of P3, the modern, lean and mean PostgreSQL client for Pharo.
Version 1.3 contains the following changes:
– Add object logging, see the P3LogEvent hierarchy
– Added P3ConnectionPool with tests
– Better management of prepared statements
– Add support for Chronology objects Time, Date and DateAndTime to be used directly as binding arguments for formatted/prepared statements, with tests
– Added basic support for array based parameter binding, see P3ValuesArray and #printValuesArrayOn:
– Better documentation and fallback for session/connection timezone and character encoder/decoder
– Reimplementation of P3Error adding unique codes and #isLocal as opposed to PostreSQL server generated messages; signalling now happens with instances created by class side accessors
– Bring back P3Client>>#queryEncoding as an alias for P3Client>>#serverEncoding as compatibility support for PharoDatabaseAccessor
– Add P3DatabaseDriver>>#connectSSL:
– Various cleanups and internal improvements
The quality of open source software is determined by it being alive, supported and maintained.
The first way to help is to simply use P3 in your projects and report back about your successes and the issues that you encounter. You can ask questions on the Pharo mailing lists.
I want to thank all contributors and users for their help and feedback: you make a real difference.
Since the end of last year, I have been using P3 in a real commercial production context, processing 10.000s of inserts a day and successfully supporting a web application for consulting the data.
by Stéphane Ducasse at October 11, 2020 02:59 PM
I am using https://github.com/JanBliznicenko/eleven for one of my projects.
It is also a full framework, yet much simplier than Seaside and stateless
and I believe only the HTML building functionality can be used indpendently.
htmlObject := HtmlBody
with: ‘Pharo website’;
String streamContents: [:stream | htmlObject renderFor: nil on: stream]
The nil I am passing in the last line is there in place of an ELRequest
entity and is not needed for simple HTML tags without custom components. You
might check it out. Be aware that my former colleague created it for our
specific project and I have never used it in any other place, so I just HOPE
it would work like I imagine. It is also not documented or tested at all.
by Stéphane Ducasse at October 11, 2020 02:55 PM
Not communicating does not mean that we are not working In fact we got busy. And we will start to have weekly log of activities.
Improvement to make the prior huge improvement on parsing of syntactically wrong
code much more usable:
Several fixes to the parser and syntax feedback #7411
First class Variables / Compiler cleanup
Lots of work has been done to unify all meta objects describing Variables into one hierarchy (see Variable and subclasses). This in turn enables many
cleanups and simplification on the level of the name analysis of the Compiler and the API that the debugger uses to read Variables. Nearly finished, but some smaller steps remain:
(all Variable objects should know the scope where they are from)
Name Analysis: Lookup Slots In Class #7403
(this was a bad side effect of a refactoring needed to be able to move
the call of #doSemanticAnalysis into the Compiler)
Fluid Class Definitions
This is ongoing work to have a better class definiton for what is now called
“slot enabeled class defintion” (the one where one can use First Class Variables and where the Layout class is shown explicitly)
A try to simplify how the workspace binding is found when debugging.
Leads to many problems, will be reverted.
Added a closeAllDebugger method to trait TDebugger class, that users … #7328
(just a first step, not yet solved)
Exposing signalContext in Exception #7417
The compiler and the VM has support to make literals read-only. As the ability
to change literals without the code reflecting it has lead to ugly bugs in the
past, turning this on looks like a good idea:
Background failures log in CI #7337
Ongoing work. All code is merged, but now we need to still see that we
can create classes like that with the bootrap
Cleaning integer division #7436
Fixed #7420. Added transformation rules to some non-transforming deprecations
that were identified as automatable in the Deprewriter paper #7427
by Stéphane Ducasse at October 09, 2020 09:23 AM
by Yuriy Tymchuk (firstname.lastname@example.org) at October 05, 2020 05:39 PM
by Yuriy Tymchuk (email@example.com) at September 17, 2020 06:04 AM
This is cool…
After I booted TinyCore Linux on my 10-year-old netbook, I decided to
see if it could run Pharo…
– TinyCore Linux “CorePlus”, 32-bit, version 11.1.
– Booted from a YUMI multiboot thumbdrive.
– Installed ‘curl’, ‘bash’, Firefox (to access ‘pharo.org‘ site for download
– Acer D255 “AspireONE” netbook (Sept, 2010).
– 2 GB RAM (single DIMM).
– 250 GB SSD (not being used; TinyCore running 100% in RAM).
by Stéphane Ducasse at September 08, 2020 10:30 AM
Rust has been selected as the Most Loved programming language at StackOverflow Developer Survey for five consecutive years! No other language commands so much respect.
And for good reasons. Rust is greatly lauded for:
These strengths are Smalltalk’s weaknesses, but Smalltalk’s strengths are also Rust’s weaknesses:
(While multi-core concurrency is possible in Smalltalk, as demonstrated by the RoarVM, unfortunately this is an experimental project that has lain fallow for a decade.)
Both programming languages are very useful in their respective domains, but neither can be used universally for all applications. The nice thing, however, is that these languages are perfectly complementary. Between them, there isn’t anything you can’t do.
If you need critical, real-time performance, Rust is your ticket, although programming is considerably more complicated. For just about everything else, Smalltalk is tickety-boo: web, desktop, mobile, data science, machine learning, Internet of Things, robotics, virtual reality, enterprise business computing, and so on. And it’s much easier, too.
It’s worth noting that in 2017, StackOverflow’s survey voted Smalltalk as the second Most Loved language after Rust. Why it disappeared from all subsequent surveys is anybody’s guess.
by smalltalkrenaissance at September 07, 2020 11:38 PM
I wanted to let you know that I ported the Crypto-Nacl library from SmalltalkHub to GitHub here: https://github.com/objectguild/Crypto-Nacl
The original author is Tony Garnock-Jones, with contributions from Hernán Morales Durand. See the README for more details.
Libsodium has evolved a lot over time, which means that there is plenty of additional functionality that can be unlocked through this library. I don’t have a need for it at the moment, but that might change in the near future. My interest is in using the cryptographic features to enhance security of business applications.
Oh, and thanks to the Buenos Aires Smalltalk team (https://github.com/ba-st/) for inspiration on using GitHub Actions with smalltalkCI
Jonathan van Alteren
Founding Member | Object Guild B.V.
Sustainable Software for Purpose-Driven Organizations
by Stéphane Ducasse at August 31, 2020 12:28 PM
Due to the confinement in the pandemic, our forms of telepresence become
more important and many suddenly got even more immersed into an
Oligopoly cyberspace (Zoom, Google, Facebook, Twitter, Apple, Amazon,
Microsoft, etc) with opaque algorithms that under extractive logic
commodify our privacy and communications, try to condition our attention
and habits, as well as to shape our current and future behavior. But
this is not the only way to inhabit cyberspace.
From the Grafoscopio community, we would like to invite you to a
series of workshops that we are doing to make visible other ways of
populating and building the web, aligned with the movements of
IndieWeb[1a], from what we have called “pocket infrastructures”. You can
find more information about these topics in  and in particular about
the workshops in  (in Spanish).
The second workshop will be tomorrow, Saturday, Aug. 29 from 3:15 PM to
7:15PM CO (GMT – 5) — I will try to share the other workshops earlier,
but the site in  will be the consolidated memory of them, for those
who want to join us asynchronously.
We will see how IndieWeb sites help us to untangle and reweave that
other web and how this help us to reconnect in this stranger times.
Rethinking the infrastructure is also to rethink the ways in which it
enables and makes visible (or not) certain ways of being and acting.
Infrastructures are embodied discourses. So thank you in advance for
joining us in rethinking this in practice.
Of course, Pharo is behind scenes, as usual, powering this experience.
But with these IndieWeb workshops I think we have found a sweet spot
that puts coding in front with a practical introduction and motivation
beyond the kind of boring “Hello World”. Following a “local first”
approach, documentation will be in Spanish, but source code and
interactive documentation will be in English to bridge our worlds :-),
See you on cyberspace,
by Stéphane Ducasse at August 29, 2020 05:47 AM
Since May, SmalltalkHub is in read-only mode, allowing people to get back their data and move it to another forge if needed.We had several unexpected downtimes with the deprecated version of Smalltalkub (different software stack due to server migration).
To enhance the user experience, we put the static version of Smalltalkhub « SmalltalkHub archive » on-line as the official http://smalltalkhub.com service. It was already announced that it will be done in November but we decided to do it earlier because it improves the current state:
– faster and reliable downloads from smalltalkhub.com (mcz files are no longer stored in a Mongo DB but served as static files)
– Smalltalkhub archive still allows to list projects, search for a project, see packages, contributors, commits
– the deprecated version of smalltalkhub is still on-line until November at http://deprecated.smalltalkhub.com/.
So you have the best of the 2 versions.
Regards,The Pharo consortium team.
by Stéphane Ducasse at August 27, 2020 02:42 PM
Tuesday I will give a master class to 90 attendees. This master class is organized by Inria Chile and the Inria Academy.
I will do many interactive sessions but the slides to back-up and explain some sessions are available at http://rmod-pharo-mooc.lille.inria.fr/MasterClass/
by Stéphane Ducasse at August 23, 2020 01:04 PM
This is a case study of The James Robertson Memorial Programming Competition, which was created to promote the Smalltalk programming language. This is a case study by example, showing what was done and how it was done.
Advertising the competition at CBC.ca proved ineffective and costly. The click-through rate was infinitestimally small. Otherwise, we relied heavily on YouTube and social media.
Several promo videos were created:
Two websites were created, one for advertising the competition and the other for operating the competition (team registrations and team submissions). The advertising website has been archived. This website was based on WordPress.com. The domain name, jrmpc.ca, was purchased from Google Domains.
The advertising website is also archived live at jrmpc.wordpress.com.
The operational website has also been archived. In the home page, Internet Archive has a problem with the embedded YouTube link, but the unplayable video is the same as the first one shown above in the YouTube Videos section (Mission: Impossible-themed).
The operational website was hosted at OVH (VPS SSD 1 running Ubuntu 16.04 LTS). The web application was written in Pharo in conjunction with the Teapot framework. The domain name, teams.jrmpc.ca, was configured at Google Domains, and the PositiveSSL certificate was purchased from Namecheap.
High schools across Canada were contacted by email, as well as snail mail. Attempts to contact various school boards were unproductive.
The T-shirts were sent to all the participating teams; they were a big hit with everyone. About 100 shirts were made available for a public giveaway at the awards ceremony at Ryerson.
If budget allows, I think Smalltalk-styled coffee mugs would be a very nice giveaway.
The open source software for the JRMPC Organiser is now available, thanks to the great effort by Ben Coman who developed it.
The trophies for First, Second, and Third Prizes all came from Innovative Imprints in Pickering, Ontario.
The awards ceremony was scheduled for Saturday, April 18, 2020 on the campus of Ryerson University. However, due to COVID-19, a virtual ceremony was conducted instead. Here was the result:
Since this is the first edition of JRMPC, there were bound to be some teething pains. We learned several important lessons:
Despite it all, we are pleased at the outcome.
The competition was a smashing success. Thirty teams registered from across Canada. Videos were created for each of the five rounds. I’ll just show the first and last of them here to avoid repetitiveness:
Hopefully, the information here can help you with your own programming competition.
by smalltalkrenaissance at August 22, 2020 08:53 AM
I wrote this https://thepharo.dev/2020/08/11/transcript-the-misunderstood-global/because I thought that I had to :).
See Chapter 8 for a longer version is available at https://github.com/SquareBracketAssociates/Booklet-PharoWithStyle/releases/download/continuous/WithStyleBook-wip.pdf
Feedback and PRs are welcome.
S (full of positive energy)
by Stéphane Ducasse at August 11, 2020 09:06 PM
Alan Kay, one of the co-creators of Smalltalk, has said that he’d like to see Smalltalk evolve beyond what it is today. He believes that Smalltalk is stagnating and failing to advance the software industry. While I agree with him in principle, I also take a more pragmatic position. I believe that we cannot wait for this mythical new programming language and that we must use whatever we have available today because the software industry is in crisis. The demand for more and better software created in a timely manner is continually increasing and it’s causing considerable stress for programmers and users alike.
At the moment, there is only one programming language that has any hope of meeting this demand. I do not posit this lightly nor frivolously. Here are the key reasons why Smalltalk is perfectly suited to this mission…
A programming language ideally should command respect, and there’s no better way to do this than by demonstrating a wonderful record of achievements. History matters.
Smalltalk pioneered the language virtual machine and JIT compilation. It created the world’s first modern IDE. It introduced the MVC architectural pattern. It pioneered TDD (test-driven development) and XP (extreme programming). It made live coding easily accessible. It pioneered the development of object-oriented databases. It created the world’s first refactoring browser. It was instrumental in developing GUI and WYSIWYG.
It influenced the design of Objective-C, Ruby, Java, PHP, Perl, Python, Groovy, Scala, Dart, and other languages.
It popularized object-oriented programming starting with the now-iconic cover of BYTE magazine.
Smalltalk has been used in the enterprise for more than three decades. In the 1990s, it achieved the second highest object-oriented market share in the world after C++. IBM even chose Smalltalk as the centrepiece of their VisualAge enterprise initiative.
Today, there are three major Smalltalk vendors with thousands of enterprise users around the globe: Cincom, Instantiations, and GemTalk Systems. Many of these enterprise users are big names in the financial industry, manufacturing sector, shipping, utilities, etc., for example, JP Morgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Siemens, and COSCO.
It’s even simpler and easier than Python! The syntax is as simple as you can imagine. It fits on a post card!
Smalltalk has developed an extensive ecosystem. In the web space, you have the Seaside and Teapot web frameworks, and Amber and PharoJS for front-end development. In data science and machine learning, you have the PolyMath library, Roassal data visualization, and language bindings for TensorFlow and Keras. For Internet of Things, you have the PharoThings platform. For robotics, you have the PhaROS platform. Smalltalk is great for virtual reality!
Smalltalk’s remarkable live coding capability plays a critical role here. Only two other significant languages support live coding: Forth and Lisp. But Smalltalk makes its very easily accessible.
Thanks to its pure object-oriented model which views the Smalltalk environment as a sort of “software internet,” applications can grow in a manner resembling the Internet. It has also been likened to biological systems of cells.
Any new programming language, no matter how superior to Smalltalk, would lack history, a track record, an ecosystem, a user base, and mindshare. Marketing the language would face an uphill battle and growing the language’s mindshare would take a considerable amount of time.
Meanwhile, we wait and we wait and we continue fighting a backlog of software that demands to be written.
There are newer languages that compete with Smalltalk, such as Dart, Go, Julia, Kotlin, Rust, Scala, Swift, TypeScript. Some are very large and complex (Kotlin, Rust, Scala, Swift, TypeScript). Some are used in narrow domains (Julia, Rust, Swift, TypeScript). None are as simple and easy as Smalltalk. None are as productive and scalable. None support live coding. None are as elegant.
So, really, the best choice we have today is Smalltalk. It comes in various flavours to meet various needs:
Is there really a need for a successor?
by smalltalkrenaissance at August 10, 2020 12:50 PM
Grafoscopio  has been ported to Pharo8.x and Git. Source code and
documentation[3a] repositories reflect the change (at some point I
hope both could be integrated in Fossil, but meanwhile community hosted
Gitea and Fossil are working pretty fine).
For the Grafoscopio 2.x series I hope to update several other things
including migration to Spec2 and improved usability.
ps: We are experiencing some issues with our Gitea instance today. That
should be solved soon or I hope to provide a non-oligopolistic
alternative in the future.
by Stéphane Ducasse at August 05, 2020 09:02 AM
http://static.smalltalkhub.com/ sooner than planned.
by Stéphane Ducasse at August 02, 2020 04:57 PM
by Stéphane Ducasse at August 02, 2020 04:53 PM
I’ve updated the Docker image for pharo.cog.spur.minheadless VM
built on Alpine Linux. This version is built on Alpine Linux 3.12.
This version removes the following plugins. I’m still thinking about some
of the others, especially the GUI-related ones. The idea is of course to
have the smallest possible set of plugins. Comments welcome.
The output Docker image contains the Pharo VM only and is not runnable by
itself. It is intended to be used as a base to build your own Docker image
containing your application-specific Pharo image.
I’ll be building a similar Docker image for Pharo’s fork of the VM.
by Stéphane Ducasse at August 02, 2020 04:18 PM
I've updated the Docker image for
built on Alpine Linux.
This version is built on Alpine Linux 3.12.
This version removes the following plugins. I'm still thinking about some of the others, especially the GUI-related ones. The idea is of course to have the smallest possible set of plugins. Comments welcome.
The output Docker image contains the Pharo VM only and is not runnable by itself. It is intended to be used as a base to build your own Docker image containing your application-specific Pharo image.
I'll be building a similar Docker image for Pharo's fork of the VM.
by Pierce Ng at July 12, 2020 05:49 PM
Please give generously: Smalltalk Programming Competitions.
Here’s the trailer for JRMPC 2021:
by smalltalkrenaissance at July 11, 2020 02:35 PM
Article is here: https://www.linkedin.com/pulse/relive-part-xerox-parcs-history-smalltalk-80-raspberry-michael-engel/
and code is available on GitHub: https://github.com/michaelengel/crosstalk
by Torsten (firstname.lastname@example.org) at July 10, 2020 12:35 PM
by Torsten (email@example.com) at July 08, 2020 12:54 PM
Dan Banay released (on the day of the 80th anniversary of Alan Kay) a fully functional Smalltalk-80 VM capable of running the original ST-80 images as distributed by Xerox Parc in 1979 and 1980. Really nice, especially when you check the code which is available on
by Torsten (firstname.lastname@example.org) at July 08, 2020 12:53 PM
Latest Pharo 9alpha image includes an AthensCairoPDFSurface and an AthensCairoSVGSurface class which you can use to easily create a PDF or SVG from an Athens Graphic Canvas in Pharo
Just click on the picture:
by Torsten (email@example.com) at July 08, 2020 12:49 PM
Compendium for Pharo is now able to show a list per repository and a list of repos per author for the GitHub projects.
Also it shows the old Catalog entries - so finding project and code should be fairly easy now ...
Code is on https://github.com/astares/Pharo-Compendium
by Torsten (firstname.lastname@example.org) at July 08, 2020 12:46 PM
Pandemics were explained and visualized by Alan back in 1998 using Squeak Smalltalk and particle simulation in Morphic in this video:
And the BouncingAtomsMorph still works in recent Squeak Smalltalk just in case you want to show it to your kids ...
by Torsten (email@example.com) at July 08, 2020 12:42 PM
I tried repl.it with a simple script to download and run Pharo headless and also Pharo UI Works nicely - within the top right part of the browser window one can even see and use the Pharo window.
Clickable but X-Windows emulation does not seem to show the full window (try clicking on "full screen mode" in the welcome window to adjust this).
Try this https://repl.it/@astares/Run-Pharo-9#main.sh
Just consider to create an own account on repl.it and use the following code in a main.sh:
echo * Download and run Pharo
if [ -d build ]; then rm -Rf build; fi
wget -O- https://get.pharo.org/64/90+vm | bash
by Torsten (firstname.lastname@example.org) at July 08, 2020 12:36 PM