Planet Squeak

blogs about Squeak, Pharo, Croquet and family
planet squeak - planet squeak es - planet squeak jp - planet croquet - planet squeak code - planet smalltalk

February 16, 2019

PharoWeekly

[Ann] new version of Pharo with Style

I updated Pharo with Style.

https://github.com/SquareBracketAssociates/Booklet-PharoWithStyle

Stef

by Stéphane Ducasse at February 16, 2019 10:48 AM

February 15, 2019

Torsten Bergmann

Continuous delivery with GT Releaser

new article on GT Releaser tool.

by Torsten (noreply@blogger.com) at February 15, 2019 01:45 PM

February 14, 2019

Torsten Bergmann

Future of Coding about Moldable Development

Interview of Tudor Girba in a podcast on "Future of Coding"

   https://futureofcoding.org/episodes/036

by Torsten (noreply@blogger.com) at February 14, 2019 11:13 AM

February 13, 2019

Historical - Bert Freudenberg

Emulating Smalltalk-76

If you got as excited as me about Dan Ingalls' live Smalltalk-76 demo on an actual 1970's Xerox Alto, you may have wanted to try it yourself. This is actually possible, and here is how:

First, you need an emulator for the Alto computer. Ken Shiriff posted a nice piece on how to run ContrAlto on Windows. It is written in C# and I got it to work on my Mac using Mono. So here's a step-by-step:

  1. Install Mono from http://www.mono-project.com/download/
  2. Download ContrAlto-mono.zip from https://github.com/livingcomputermuseum/ContrAlto/releases
  3. Download this Smalltalk-76 disk image: http://www.bitsavers.org/bits/Xerox/Alto/disk_images/chm/xmsmall.zip
  4. Unzip both ContrAlto-mono.zip and xmsmall.zip in the same folder.
  5. In a terminal, change to the ContrAlto directory and run mono Contralto.exe. This opens the Alto screen in a new window, and the emulator control in the terminal. 
  6. (if you get an error about a missing SDL library at this point, install that via homebrew using brew install sdl2)
  7. At the emulator's ">" prompt, type load disk 0 xmsmall.dsk and then start:
    $ mono Contralto.exe
    ContrAlto v1.2.2.0 (c) 2015-2017 Living Computers: Museum+Labs.
    Bug reports to joshd@livingcomputers.org

    You are at the ContrAlto console.  Type 'show commands' to see
    a list of possible commands, and hit Tab to see possible command completions.
    >load disk 0 xmsmall.dsk
    Drive 0 loaded.
    >start                  
    Alto started.

    >
  8. In the Alto screen window, type resume xmsmall.boot to start up Smalltalk-76:
      
  9. And now you should see Smalltalk-76 running!
  10. There is no explicit "save" option. The OOZE object swapping system continuously writes objects to the disk. Use "quit" from the main menu to flush all objects back to disk.
Note that you will need a 3 button mouse to properly interact with the system. On my MacBook, I installed MagicPrefs to emulate a third mouse button. After installing, in MagicPref's "MacBook Trackpad" section, for "Three Finger Click" choose "Middle Click".

You will also need some keyboard shortcuts to access the special characters in Smalltalk-76:
ctrl A             ≤ (less or equal)
ctrl B             bold
ctrl C             user interrupt
ctrl F             ≡ (identical)
ctrl G             ◦ (index operator)
ctrl I             italic
ctrl N             ≠ (not equal)
ctrl O             ↪ (quote)
ctrl Q             ⇑ (return)
ctrl R             ≥ (greater or equal)
ctrl S             's (eval operator)
ctrl T             ┗  (prompt)
ctrl U             ¬ (unary minus)
ctrl X             clear emphasis
ctrl /             ⇒ (if then)
ctrl =             ≡ (identical)
ctrl shift =       ≠ (not equal)
ctrl \             ≠ (not equal)
ctrl ]             ⌾ (create point)
ctrl [             ◦ (index operator)
ctrl :             ⦂ (open colon)
ctrl '             ↪ (literal quote)
ctrl <             ≤ (less or equal)
ctrl >             ≥ (greater or equal)
shift -            ¬ (unary minus)
cursor down        doit (in dialog view)
To learn Smalltalk-76, the User Manual is a good starting point:
http://xeroxalto.computerhistory.org/Filene/Smalltalk-76/.document.press!1.pdf

Have fun!

by Bert (noreply@blogger.com) at February 13, 2019 08:30 PM

Torsten Bergmann

v2.1.0 Material Design Lite for Seaside

New version v2.1.0 is available now. Check it here.

by Torsten (noreply@blogger.com) at February 13, 2019 02:42 PM

Glamorous Toolkit v0.5.1

is out now - and it is based on latest Pharo 7.

by Torsten (noreply@blogger.com) at February 13, 2019 02:40 PM

Reactive data bindings framework for Pharo

A small Vue.js-inspired reactive data bindings framework for Pharo.

by Torsten (noreply@blogger.com) at February 13, 2019 02:38 PM

Registration for Pharo Days 2019 open

Just check this page if you want to participate.

by Torsten (noreply@blogger.com) at February 13, 2019 02:28 PM

New (bugfix) release of PetitParser v2.1.2

is available here.

by Torsten (noreply@blogger.com) at February 13, 2019 02:27 PM

Marvin

Marvin - a Prototype system based on Self for Pharo from Pavel.

by Torsten (noreply@blogger.com) at February 13, 2019 02:24 PM

P3 V1.2 - PostgreSQL client for Pharo

A new release 1.2 of P3, the modern, lean and mean PostgreSQL client for Pharo.

by Torsten (noreply@blogger.com) at February 13, 2019 02:19 PM

ObservableSlots for Pharo

A language extension for Pharo to have slots that announce changes. This is useful expecially in UI projects.

   https://github.com/guillep/ObservableSlots

by Torsten (noreply@blogger.com) at February 13, 2019 02:15 PM

The computational notebook of the future

This screencast shows an idea of how computational notebooks should work in the future. For pointers to the technologies being used, see the accompanying blog post

by Torsten (noreply@blogger.com) at February 13, 2019 02:13 PM

PharoWeekly

[Ann] new release of P3 (postgreSQL)

Hi,

There is a new release of P3, the modern, lean and mean PostgreSQL client for Pharo.

https://github.com/svenvc/P3

Version 1.2 contains the following changes:

- P3PreparedStatement is now joined by a polymorphic P3FormattedStatement working client side on text strings
- P3PreparedStatement & P3FormattedStatement now share the same double dispatch mechanism to process argument binding
- Added convenience methods #listDatabases #listSchemas & #listTablesInSchema: to P3Client
- Added convenience methods #firstColumnData & #firstFieldOfFirstRecord to P3Result
- Added dynamic ENUM support via #loadEnums in P3Client
- Add support for the 7 geometric types POINT, CIRCLE, LINE, LSEG, POLYGON & PATH with corresponding objects P3Point, P3Circle, P3Line, P3LineSegment, P3Polygon & P3Path
- Add support for the INTERVAL type with P3Interval object
- Added P3Client>>#serverVersion accessor
- Add support for BIT & VARBIT types with P3FixedBitString & P3BitString objects
- Add TIMETZ support
- Organised P3 package with tags
- More & better documentation & unit tests

https://github.com/svenvc/P3/releases/tag/v1.2

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.

Enjoy,

Sven

by Stéphane Ducasse at February 13, 2019 12:15 PM

New how to contribute…

You can get an impact on Pharo

http://pharo.org/contribute-report-bug

http://pharo.org/contribute-propose-fix

The Pharo team

by Stéphane Ducasse at February 13, 2019 12:10 PM

February 11, 2019

PharoWeekly

Pharo Days 2019 is now open!

Dear all,

I am pleased to announce that registration for Pharo Days 2019 is now open!

Pharo days is a gathering of the Pharo community to exchange, discuss and code with your online colleagues. 
Join us to share your experiences and help to make a better Pharo!

To register, please proceed to the Pharo Days 2019 web page: https://pharo.org/2019PharoDays <https://pharo.org/2019PharoDays>, or go directly to the association event: https://association.pharo.org/event-3255426 <https://association.pharo.org/event-3255426>.
(Yes, the schedule is still to be defined, stay tuned).

If there are any questions or problems, I am happy to answer them.

Esteban

Ps: I’m sorry for multiple posts ;)

by Stéphane Ducasse at February 11, 2019 06:06 PM

February 08, 2019

PharoWeekly

Pharo 80 Roadmap

Hi list, 

We started Pharo 8.0 development and we wanted to share (and discuss, if needed) what is our current Roadmap for Pharo 8.0.
As you can see, Windows is getting some love, and also UI.
Anyway, here it is: 

Image
===
1) Missing parts for headless VM to work (explained a bit later)
2) We need to improve Epicea speed. And in general, source access speed. We want to remove the old changes file (since Epicea already does that works and a lot more).
3) Improve Refactors
4) Improve Calypso
5) Introduce Spec2 (our re-work on this framework).
	- We also want to migrate our tools to it (Inspector, Debugger, Spotter and Calypso are the remaining parts). We will see how much of this migration can be done.

VM/Low-level side
===
1) headless vm
We want to have a real headless VM and make it our default VM.
To it, most of the work vm-side is already made by Ronie, but there are missing parts: 
- a build on windows
- image side capabilities: we use SDL2 to start the world, and it mostly works... but not completely.

One cool thing of this is that we will -finally- be able to clean the event handling, which is ugly (and works bad).

2) Windows several missing/non working parts: 
- file primitives are slow. This is because they rely in old APIs and we need to put them in "state of the art".
- libgit2 does not processes long paths. We workarounded the problem with tonel, but at a point we need to take care about this. Real problem with this is we need to contribute the solution to libgit2, but this is also good Open Source policy (contributing back).
- OSSubprocess in windows. We believe we need to extend OSSubprocess (our solution to communicate with system) to windows. And we believe is possible ;)

3) ThreadedFFI. 
It is already too much time since we have this in agenda. Is time to make it real.

4) memory policies. 
Tweaking the VM to enhance its memory usage is possible, but hard. We want to adopt an scheme of "memory policies" that will allow users to pick what they need.

Process
===
1) We will add multiple source directories to Iceberg. This is needed to allow us to put all Pharo sub-projects into an unique project without breaking modularisations.

Others
===
1) Launcher
	- Launcher us getting a new UI
	- Tests
	- It needs to be more solid (in part, that's the reason why we want OSSubprocess in windows).
2) Cargo
	- We need to revisit cargo (a new dependency manager) and at a point decide if it will fly or not :)

Nice to have (most probably not this version, but in our TODO) :
- embedded VM
- event driven VM
- what happens if we split VM into main thread and vm thread?

by Stéphane Ducasse at February 08, 2019 07:07 AM

February 03, 2019

Pierce Ng

Building OpenSmalltalk VM for Pharo on Win 7

I had the occasion to reinstall Windows 7 on my laptop and took the chance to set it up with the latest development tools. The objective was to build OpenSmalltalk for Pharo and Dolphin Smalltalk on the machine.

Install Visual Studio 2017 Community Edition

This is primarily for building Dolphin Smalltalk. The command line tools come in handy when building SQLite.

I chose to install most VS2017 options and it weighed in at a whopping 50GB of disk space.

Install Cygwin

I installed the 64-bit edition. The following packages are required to build 32-bit OpenSmalltalk.

iconv.dll

Jumping ahead a bit, as part of the build process, the OpenSmalltalk build system attempts to copy /usr/i686-w64-mingw32/sys-root/mingw/bin/iconv.dll. On my Cygwin installation, there is no such file, but there does exist /usr/bin/cygiconv-2.dll. To make things simple, I copied /usr/bin/cygiconv-2.dll over to where OpenSmalltalk expects to find it. Looking around the web, I believe cygiconv-2.dll is the correct file.

Build OpenSmalltalk

Start a Cygwin terminal. Clone the OpenSmalltalk VM repo and build the VM.

$ mkdir -p /cygdrive/c/Users/Pierce/source/repos/opensmalltalk
$ cd /cygdrive/c/Users/Pierce/source/repos/opensmalltalk
$ git clone https://github.com/opensmalltalk/opensmalltalk-vm.git
...
Checking out files: 100% (10541/10541), done.
$ cd opensmalltalk-vm/build.win32x86/pharo.cog.spur
$ ../../scripts/updateSCCSVersions
$ ./mvm -f
<humongous amount of output, much fan noise and heat dissipation from laptop>
$ ls build/vm
btext.o           Pharo.def           sqNamedPrims.o          sqWin32PluginSupport.o
cogit.o           Pharo.exe           sqPath.o            sqWin32Prefs.o
etext.o           Pharo.exe.manifest          sqTextEncoding.o        sqWin32Service.o
FileAttributesPlugin.dll  Pharo.exp           sqTicker.o          sqWin32SpurAlloc.o
FT2Plugin.dll         Pharo.lib           SqueakSSL.dll       sqWin32Stubs.o
gcc3x-cointerp.o      Pharo.map           sqVirtualMachine.o      sqWin32Threads.o
iconv.dll         Pharo.res           sqWin32Alloc.o          sqWin32Time.o
libcairo-2.dll        PharoConsole.exe        sqWin32Backtrace.o      sqWin32Utils.o
libeay32.dll          PharoConsole.exe.manifest   sqWin32DirectInput.o    sqWin32VMProfile.o
libfreetype.dll       PharoConsole.map        sqWin32Directory.o      sqWin32Window.o
libgcc_s_sjlj-1.dll   PharoConsoleUnstripped.exe  sqWin32DnsInfo.o        ssleay32.dll
libgit2.dll       PharoUnstripped.exe         sqWin32Exports.o        SurfacePlugin.dll
libpixman-1-0.dll     resource.o              sqWin32ExternalPrims.o  version.o
libpng16-16.dll       SDL2.dll            sqWin32GUID.o       zlib1.dll
libssh2-1.dll         sqExternalSemaphores.o      sqWin32Heartbeat.o
libwinpthread-1.dll   sqHeapMap.o             sqWin32Main.o

Now open a cmd.exe window and copy the VM files out.

C:\> mkdir c:\pkg\pharo6vm32
C:\> copy c:\Users\Pierce\source\repos\opensmalltalk\opensmalltalk-vm\build.win32x86\pharo.cog.spur\build\vm\*.dll c:\pkg\pharo6vm32
C:\> copy c:\Users\Pierce\source\repos\opensmalltalk\opensmalltalk-vm\build.win32x86\pharo.cog.spur\build\vm\*.exe c:\pkg\pharo6vm32
C:\>dir /d c:\pkg\pharo6vm32
 Volume in drive C has no label.
 Volume Serial Number is FCE0-E161

 Directory of c:\pkg\pharo6vm32

[.]                          libssh2-1.dll
[..]                         libwinpthread-1.dll
FileAttributesPlugin.dll     Pharo.exe
FT2Plugin.dll                PharoConsole.exe
iconv.dll                    PharoConsoleUnstripped.exe
libcairo-2.dll               PharoUnstripped.exe
libeay32.dll                 SDL2.dll
libfreetype.dll              SqueakSSL.dll
libgcc_s_sjlj-1.dll          ssleay32.dll
libgit2.dll                  SurfacePlugin.dll
libpixman-1-0.dll            zlib1.dll
libpng16-16.dll
              21 File(s)     47,771,093 bytes
               2 Dir(s)  29,938,479,104 bytes free

Build SQLite DLL

Download and unpack the SQLite source amalgamation. The how to compile SQLite page states to use the following MSVC command:

cl sqlite3.c -link -dll -out:sqlite3.dll

While this produces a DLL, said DLL doesn't actually export any symbol and is thus useless for FFI. This blog post by Mario Guggenberger provides the magic incantation:

cl sqlite3.c -DSQLITE_API=__declspec(dllexport) -link -dll -out:sqlite3.dll

To get to the 32-bit MSVC command line tools, click through the following: Windows Menu, All Programs, Visual Studio 2017, Visual Studio Tools, VC, x86 Native Tools Command Prompt. This launches a cmd.exe shell with the appropriate tools set up.

Build sqlite3.dll and copy it to c:\pkg\pharo6vm32.

Test with Pharo 7

Download the Pharo 7 32-bit image zip. Unpack and make a copy - I named the image file wintesting. Double click on c:\pkg\pharo6vm32\Pharo.exe and choose wintesting.image to start.

In Pharo, open Catalog Browser. Select and install GlorpSQLite. It fails. Run below Metacello snippet, which is what is executed when loading GlorpSQLite from Catalog Browser.

Metacello new
  baseline: 'GlorpSQLite';
  repository: 'github://PierceNg/glorp-sqlite3:pharo7';
  load

Fails with message "The handle is in the wrong state for the requested operation".

IceGenericError

There is a related Iceberg issue on GH. The suggestion is to use a newer version of libgit2.

Build newer libgit2

The current version of libgit2 used is 0.25.1, according to opensmalltalk-vm/third-party/libgit2.spec.

libgit2_spec_download_url:=https://github.com/libgit2/libgit2/archive/v0.25.1.tar.gz
libgit2_spec_archive_name:=libgit2-v0.25.1.tar.gz
libgit2_spec_unpack_dir_name:=libgit2-0.25.1
libgit2_spec_product_name_macOS:=libgit2.0.25.1.dylib
libgit2_spec_product_name_linux:=libgit2.so.0.25.1
libgit2_spec_product_name_windows:=libgit2.dll
libgit2_spec_symlinks_macOS:=libgit2*.dylib
libgit2_spec_symlinks_linux:=libgit2.so*
#libgit2_spec_download_url:=https://github.com/libgit2/libgit2/archive/v0.23.0.tar.gz
#libgit2_spec_archive_name:=libgit2-v0.23.0.tar.gz
#libgit2_spec_unpack_dir_name:=libgit2-0.23.0
#libgit2_spec_product_name_macOS:=libgit2.0.23.0.dylib
#libgit2_spec_product_name_linux:=libgit2.so.0.23.0
#libgit2_spec_product_name_windows:=libgit2.dll
#libgit2_spec_symlinks_macOS:=libgit2*.dylib
#libgit2_spec_symlinks_linux:=libgit2.so*

According to libgit2 GH repo, the newest versions are 0.27.8 and 0.26.8.

I first tried 0.27.8 but building failed. I then tried 0.26.8 and this time it built successfully. This is what libgit2.spec looks like now:

libgit2_spec_download_url:=https://github.com/libgit2/libgit2/archive/v0.26.8.tar.gz
libgit2_spec_archive_name:=libgit2-v0.26.8.tar.gz
libgit2_spec_unpack_dir_name:=libgit2-0.26.8
libgit2_spec_product_name_macOS:=libgit2.0.26.8.dylib
libgit2_spec_product_name_linux:=libgit2.so.0.26.8
libgit2_spec_product_name_windows:=libgit2.dll
libgit2_spec_symlinks_macOS:=libgit2*.dylib
libgit2_spec_symlinks_linux:=libgit2.so*

To build the newer version of libgit2 and the rest of the VM, re-run ./mvm -f in build.win32x86\pharo.cog.spur. When done, copy the .exe and .dll files into c:\pkg\pharo6vm32.

2nd Test

Start Pharo again and repeat steps described above in section Test with Pharo 7. This time Catalog Browser loads GlorpSQLite successfully.

GlorpSQLite on Pharo 7 on Windows 7

Open Test Runner and run Glorp tests. All tests pass.

GlorpSQLite3 on Pharo 7 on Windows 7

by Pierce Ng at February 03, 2019 06:20 PM

PharoWeekly

[Ann] Pharo launcher 1.6

Hi all,

Pharo Launcher 1.6 has just been released! It is available from http://pharo.org/download.

This new version introduces two major changes:
the list of template sources is now externalized as a Ston file. Pharo Launcher will check regularly (at startup and each day) if there are changes between your local source of templates and the one hosted in Pharo file server. If so, Pharo Launcher will propose you to update your template sources. It is a way to automatically get new official sources or to keep stable, dev versions up to date.
a small UI is now available to manage VMs of PharoLauncher (update, remove, list).
Also, this is the first release done with all sources coming from GitHub (https://github.com/pharo-project/pharo-launcher).

Big thanks to all contributors, including issue reports.

Here is the changelog:
Pharo Launcher v1.6 <https://github.com/pharo-project/pharo-launcher/releases/tag/1.6>
New features:

#283 <https://github.com/pharo-project/pharo-launcher/issues/283> Template sources should be editable without modifying PL code
#172 <https://github.com/pharo-project/pharo-launcher/issues/172> Provide a way to update / remove VMs
#131 <https://github.com/pharo-project/pharo-launcher/issues/131> Display date for "Last Modified" on the form of "X day/month/year ago"
Improvements:

#295 <https://github.com/pharo-project/pharo-launcher/issues/295> Pharo 7 marked as (development version)
#290 <https://github.com/pharo-project/pharo-launcher/issues/290> Add "latest" to indicate dynamic version development versions for Pharo 7.0
#299 <https://github.com/pharo-project/pharo-launcher/issues/299> About hot (more recently used) coloring schema
#287 <https://github.com/pharo-project/pharo-launcher/issues/287> Launch button is enabled despite no Current image being selected (or present)
#274 <https://github.com/pharo-project/pharo-launcher/issues/274> Copy and Rename command should not add a "-01"
Bug fixes:

#293 <https://github.com/pharo-project/pharo-launcher/issues/293> zipfile from 85bebb7 <https://github.com/pharo-project/pharo-launcher/commit/85bebb7dc75e7e78fac0f2cb02fde3ec384edbf0> has no source file
#291 <https://github.com/pharo-project/pharo-launcher/issues/291> FileDoesNotExist error at Launcher startup
#286 <https://github.com/pharo-project/pharo-launcher/issues/286> Buttons (Import > Launch an image...) are cut off in Windows 10
#281 <https://github.com/pharo-project/pharo-launcher/issues/281> Pharo Launcher does not go beyond Pharo 7 #1384 image

Regards,
The Pharo team.

by Stéphane Ducasse at February 03, 2019 09:34 AM

January 30, 2019

PharoWeekly

[ANN] Pharo open documentation

Hi everyone!

With some other members of the community we are proud to announce a new effort on Pharo documentation: https://github.com/pharo-open-documentation/awesome-pharo

We launched an organization pharo-open-documentation which is a
user-maintained documentation related to Pharo environment, language,
and libraries.

Currently it has three main projects:
– pharo-wiki : Wiki related to the Pharo programming language and environment.
– awesome-pharo : A collection of awesome Pharo libraries, tools,
frameworks and software.
– awesome-pharo-ml : List of projects, books, booklets, papers, and
applications related to machine learning, AI, data science in Pharo.

Contributions are welcomed!

If you own a cool project in Pharo others could use in their own
projects, send us a PR to awesome-pharo!
If you have knowledge on Pharo or projects of Pharo, we would be glad
if you could contribute to the pharo-wiki! Don’t forget to read the
contribution guidelines. 😉

We opened a Twitter to announce new entries on the pharo-wiki.

https://twitter.com/PharoOpen

Have a nice day!

by Stéphane Ducasse at January 30, 2019 07:22 PM

January 26, 2019

Pierce Ng

Updated README for PasswordCrypt

I gave myself a 1Q2019 target to write proper READMEs for my Github repos. First up is PasswordCrypt. I reproduce the README here.

PasswordCrypt

PasswordCrypt is a library for Pharo Smalltalk to handle passwords salted and hashed by SHA-256/SHA-512. Its primary components are PCPasswordCrypt, PCAuthenticator and PCBasicAuthenticator.

PCPasswordCrypt

At its core, PCPasswordCrypt provides the following class-side messages:

An example:

PCPasswordCrypt sha256crypt: 'secret' withSalt: 'andPepperToo'
"'$5$andPepperToo$5p0MWgRMT6l6EA6dYDlFhuQKi.tfCXNd35T99HxbsTD'"

The result is a string in modular crypt format (MFC). $5 on the left of the string indicates that the hashing algorithm is SHA-256. For SHA-512, the indicator is $6.

On the instance side, PCPasswordCrypt generates the salt randomly if one is not supplied:

PCPasswordCrypt new sha256crypt: 'secret'
"'$5$5bUAI5i2$iIdIXcQGhZfNF0HQFG592Ut1I6UtuO/smBPJkKBrRzC'"

PCAuthenticator

PCAuthenticator builds on PCPasswordCrypt to provide username/password management. PCAuthenticator operates as a singleton object to persist its data in the Pharo image across restarts.

Example usage:

| appName auth newUser userToValidate |

appName := 'myApp'.

"Initialize the authenticator for my application."
auth := PCAuthenticator uniqueInstance.
auth initializeDatabaseFor: appName.

"Add a user."
newUser := PCUserCredential
  appname: appName;
  username: 'testuser';
  password: 'secret';
  yourself.
auth insertUserCredential: newUser.

"Create another user object and validate its password."
userToValidate := PCUserCredential
  appname: appName;
  username: 'testuser';
  password: 'secret';
  yourself.
auth validateUserCredential: userToValidate
"If the passwords match, userToValidate is returned; otherwise, nil is returned."

PCAuthenticatorUI is a simple Spec-based user interface to upsert new usernames/passwords into PCAuthenticator. I wrote it because I simply abhor code snippets containing clear-text passwords, except for demonstration as above. To run PCAuthenticatorUI:

PCAuthenticatorUI new openWithSpec

PCBasicAuthenticator

PCBasicAuthenticator subclasses ZnBasicAuthenticator, the HTTP basic authentication handler in ZincHTTPComponents. It uses PCAuthenticator so that

Installation

To install the Pharo code:

Metacello new
  baseline: 'PasswordCrypt';
  repository: 'github://PierceNg/PasswordCrypt/src-st';
  load.

PCPasswordCrypt is an FFI to the C library libshacrypt, built from the source files shacrypt256.c and shacrypt512.c in the directory src-c. To build the C library:

% cd src-c
% make

The generated shared library is libshacrypt.so on Linux and libshacrypt.dylib on OSX/macOS. It must be placed where the Pharo VM can find it at run time. My practice is to place the shared library file together with the Pharo VM's plugins. On macOS, suppose Pharo is installed in /Users/pierce/Pharo.app, then libshacrypt.dylib goes into /Users/pierce/Pharo.app/Contents/MacOS/Plugins/.

Possible Future Work

References

Licenses

by Pierce Ng at January 26, 2019 09:38 AM

January 23, 2019

Torsten Bergmann

TravisCI and Smalltalk

SmalltalkCI was integrated with Travis. To set up continuous integration for your Smalltalk project, you need a .travis.yml and a .ston configuration file for SmalltalkCI. It is easy to setup and works great in many Squeak and Pharo projects already. Read the docu for more.

by Torsten (noreply@blogger.com) at January 23, 2019 07:46 AM

January 22, 2019

PharoWeekly

[Ann] Pharo 7.0 released!

Dear World and dynamic language lovers: 

The time has come for Pharo 7.0!

Pharo is a pure object-oriented programming language and a powerful environment, focused on simplicity and immediate feedback.

This is our most significant release yet. Here are the key highlights of this release:

	• Pharo is now provided in 64-bit version in Linux and OSX and brings even better performance and stability. The 64-bit version is now recommended for Linux and Mac, and is provided as technical preview for Windows.
	• Pharo comes with a new version of the PharoLauncher (https://pharo.org/download): THE tool to manage your distributions (access to regular versions, jenkins builds, and older versions). 
	• Pharo build has a fully new build process that supports its full bootstrap from sources. This will enable the production to specific (micro) images. 
	• Iceberg, the git client for Pharo has been significantly improved, and is the default CMS.
	• Calypso, the angular stone of PharoThings, is the new system Pharo browser. It replaces Nautilus and brings better remote working and more advanced browsing capabilities. 
	• IoT is now an important part of Pharo. Installing PharoThings (https://github.com/pharo-iot/PharoThings) provides an impressive amount of tools to develop applications in small devices.
	• The unified foreign function interface (UnifiedFFI) for interfacing with the outside world is significantly improved to work properly on Windows 64-bit. 

Pharo 70’s new infrastructure and process set the stage for a new generation of version. 
The visibility of GitHub combined with the powerful tools that have been validated with more than one year of beta testing is massively pay off.

These are just the more prominent highlights, but the details are just as important. 

We have closed a massive amount of issues: 2142 issues! (A comprehensive changelog can be found at: https://github.com/pharo-project/pharo-changelogs/blob/master/Pharo70ChangeLogs.md).

While the technical improvements are significant, still the most impressive fact is that the new code that got in the main Pharo 7.0 image was contributed by more than 75 people.

Pharo is more than code. It is an exciting project involving energetic people. We thank all the contributors of this release:

Gabriel Omar Cotelli, Gustavo Santos, Marcus Denker, Torsten Bergmann, Esteban Lorenzano, Bernardo Ezequiel Contreras, Guille Polito, Pablo Tesone, Yoan Geran, Stéphane Ducasse, Cyril Ferlicot, Vincent Blondeau, Denis Kudriashov, Julien Delplanque, Tim Mackinnon, Max Leske, Andrew P. Black, Tomohiro Oda, Clément Béra, Ben Coman, Eric Gade, Yuriy Tymchuk, Nicolas Cellier, Biyalou-Sama Asbath, Myroslava, Sean DeNigris, Juraj Kubelka, Noury Bouraqadi, Holger Freyther, Geoff Reedy, Norbert Hartl, Paul DeBruicker, Alain Plantec, Martín Dias, Peter Uhnak, Tomohiro Oda, Benoît Verhaeghe, Santiago Bragagnolo, Wouter van Zuilen, Bernhard Pieber, Damien Pollet, Geoff Hill, Hans-Martin Mosner, Ronie Salgado, Philippe Back, Aliaksei Syrel, Dayne Guerra, Rafael Luque, Serge Stinckwich, Vincent Aranega, Hernán Morales Durand, Petr Fischer, Rajula Vineet Reddy, Alexandre Bergel, Esteban A. Maringolo, Jan Blizničenko, Johan Brichau, Luc Fabresse, Quentin Ducasse, Sébastien Roccaserra, Stephan Eggermont, Sven Van Caekenberghe, Takano Mitsuhiro, Pavel Krivanek, Allex Oliveira, Christophe Demarey, Lionel Akue, Nicolai Hess, Martin McClure, Alistair Grant, Pierre Tsapliayev, Milton Mamani, Matteo Marra, Thomas Dupriez, Asbathou Biyalou-Sama.
(If you contributed with Pharo 7.0 development in any way and we missed your name, please send us a mail and we will add you).

Enjoy!
The Pharo Team

Try Pharo: http://pharo.org/download
Learn Pharo: http://pharo.org/documentation

by Stéphane Ducasse at January 22, 2019 09:30 PM

Torsten Bergmann

Pharo 7.0 released

Smalltalk systems influenced computing like no other technology in the world. You will find many of its ideas in all modern software systems ranging from graphical user interfaces up to mobile devices.

With Pharo-Project we continue with this tradition to provide an inspiring lively object-oriented system but also move Smalltalks ideas to the next level.

Today is the day we release Pharo 7.0 into the wild and again as a free open source gift to the world.

This is yet another major step towards a brighter future for dynamic development approaches. Pharo 7.0 was realized by a worldwide community of 75 people - taking us over one year of distributed development.

Pharo advanced on many sides. Now we can fully bootstrap into a custom image - including Slots, Metalinks and other meta facilities. New books and tutorials were written about it, it is used in web development, IoT and other. It's already a business driver for several companies worldwide with a growing number of users.

2142 issues solved in general - 762 commits done from my side (astares) alone. Mostly trivial stuff but each still important to cleanup and form a well structured core. Dont know if I could be proud to have climbed to the top in github contribution statistics in this release - personally I will remember the PR's primary as 762 times fighting with the CI infrastructure ;)

Pharo 8 work already started now ... so come in - the water is just fine. Step by step it goes...

by Torsten (noreply@blogger.com) at January 22, 2019 08:18 PM

January 20, 2019

PharoWeekly

[ANN] SETT (Store Export to Tonel Tools) for Pharo6.1

GemTalkSystems is pleased to announce SETT (Store Export to Tonel 
Tools)[1]. SETT is open source project with an MIT license.

SETT (Store Export to Tonel Tools) is a set of tools to export Smalltalk 
code from Store and
write into the Tonel file format managed using Git.

SETT is:

  * a Pharo 6.1 application, that
  * connects to a Postgres Database
  * containing source code history in VisualWorks Store format; and
  * writes to a Git repository
  * in Tonel format
  * maintaining all version history, source code and SCM metadata.

SETT was developed last year to support one of our commercial customers 
in their conversion From Store to Rowan[2]. Rowan artifacts are produced 
as part of the output of SETT, but the Rowan artifacts can be ignored. 
The important bit is that SETT converts from Store to Tonel and 
maintains version history in git.

Please see the project ReadMe[3] and Wiki[4] for additional details.

Dale

[1] https://github.com/GemTalk/SETT
[2] https://github.com/GemTalk/Rowan
[3] https://github.com/GemTalk/SETT#overview
[4] https://github.com/GemTalk/SETT/wiki

by Stéphane Ducasse at January 20, 2019 03:53 PM

January 18, 2019

PharoWeekly

[ Save The Date ] Pharo Days 2019: Thursday April 4 & Friday April 5 @ Lille, FR

Dear members of the Pharo community,

We are happy to announce that we will be organising Pharo Days this year, in Lille, France. This will be a two day event: Thursday April 4 & Friday April 5. The main venue will be the Amphitheatre of INRIA Lille – Nord Europe.

Each day will consist of a number of short 20 to 30 minutes tech talks in the morning, with a more free format in the afternoon: general hacking space, pair programming, demos, side meetings, tutorials, coding sprints, Q&A’s, shows us your projects – real life human interaction. Of course, there will be social events as well.

Please join us to make this another successful edition, after Annecy (FR) 2011, Lille 2012, Bern (CH) & Lille 2013, Lille 2015, Namur (BE) 2016 and Lille 2017.

Mark your calendars, we will provide more details when they become available.

The Pharo Board, Association & Consortium

http://pharo.org
http://association.pharo.org
http://consortium.pharo.org

by Stéphane Ducasse at January 18, 2019 03:29 PM

January 15, 2019

Pierce Ng

OSSubprocess 64-bit macOS Mojave

OSSubprocess works on macOS Mojave with 64-bit Pharo.

Load it the usual way:

Metacello new
  baseline: 'OSSubprocess';
  repository: 'github://pharo-contributions/OSSubprocess:master/repository';
  load. 

Run the tests. If Pharo was started like how applications are usually started on the Mac, by double-clicking the Pharo.app icon, Test Runner will report 40+ test errors.

Run Pharo the Unix way on the command line: ~/MyApps/Pharo.app/Contents/MacOS/Pharo mypharo7.image. Now all 114 tests pass. All 7 stress tests pass too. Tested with Pharo 7.0 pre-release image.

by Pierce Ng at January 15, 2019 10:06 PM

PharoWeekly

Rewriting 900 methods in a couple of lines

I got 900 methods that I wanted to rewrite so I hacked the ParseRewriter to do it for me 🙂
| rewriter node method testsels |
testsels := ReTest selectors select: [ :e | e beginsWith: ‘test’ ].
testsels
    do: [ :s | rewriter := RBParseTreeRewriter new.
                   rewriter
                        replace: ‘self shouldnt: [re compile] raise: Error’
                        with: ‘self compileIsOK’.
                   method := ReTest compiledMethodAt: s.
                   node := method parseTree.
                   (rewriter executeTree: node)
                   ifTrue: [
                       method origin
                           compile: node formattedCode
                           classified: method protocol ]]
Stef

by Stéphane Ducasse at January 15, 2019 08:19 PM

January 13, 2019

PharoWeekly

[ann] Smallapack in Pharo6

Hi,
I announce the availability of Smallapack in Pharo6.

The ConfigurationOfSmallapack is in
http://www.squeaksource.com/MetacelloRepository and there is a copy in metarepo for Pharo 3/4/5/6.

Currently, the ported version uses a derivative of OpalCompiler patched to handle method with 16+ arguments.
External function calls have not been converted yet to UnifiedFFI, but the patched compiler rather has hook to compile legacy FFI.
Though I did not install the hook to call FFI with more than 15 arguments, so there is at least 1 unit test failing (but not crashing).

I have auto-re-generated all the source code for using UnifiedFFI formats, so the dependency on legacy FFI is not a necessity (apart for simplifying cross dialect maintenance).

But I want to review the generated code method by method rather than filing it in blindly (the wrapper functions are also generated, and I might loose comments or improvments if I'm careless). Unfortunately, the state of diff tools in Pharo6, be it thru MC or worse than all, thru legacy change lists, does not enable such a large scale review, so I think that I will edit in Squeak and run in Pharo...

Now that Smallapack supports Opal, there should be no major problem for porting to Pharo7, but I did not have time to try yet. A few more MC regressions, and the fact to forbid protocol beginning with a * was too serious a cross compatibility hurdle for me. But I'll come back to it, tools are generally better in ph7 than ph6. Stay tuned.

Nicolas Cellier

by Stéphane Ducasse at January 13, 2019 08:15 PM

Visual Studio code Configuration for the VM

Hi guys,

We have been using this week with Pablo a combination of Visual Studio Code, cygwin, and gdb to build and debug the VM to chase some issues during ffi calls in win64.

It was overall simple to setup, and though I thought it was going to be just a text editor with vitamines, it ended up being a really light but versatile IDE with code navigation, compilation and debugging integration.

But, since there were some little things over here and there like gdb
source code mapping that was not so straight forward to find in the
documentation, we thought it would be good to share it.

If somebody is interested in using a similar setup to work with the VM, I've left my configuration files in the following gist, including:

 - cygwin bash terminal integration (also with zsh, but that's pure cygwin)
 - task actions to build cog and stack vms on debug mode
 - launch configs to run both in debug mode with gdb attached

https://gist.github.com/guillep/452a9be3d231db6f89dd40bfb8cf4405

Cheers,
Guille & Pablo

by Stéphane Ducasse at January 13, 2019 08:09 PM