Monthly Archives: July 2016

Pharo was used to build ATM software for Russian banks. Such devices could be found in Moscow streets. The Presenty UI frameworks offered full new adapted UI was developed for this project. Well done Denis: a really nice success story that was kept secret for business reasons.

Here is a sample video:

Advertisements

Summer Enhancements…

50761
18757 Simple Shell Command Eval for 5.0
https://pharo.fogbugz.com/f/cases/18757

18676 Endless loop parsing e-mail addresses containing an ampersand
https://pharo.fogbugz.com/f/cases/18676
60158
18766 Change TabModelTest and TabManagerTest to use the abstract class
https://pharo.fogbugz.com/f/cases/18766

18833 Error on TreeModels drag&drop
https://pharo.fogbugz.com/f/cases/18833

18830 RBPatternParser should respect RBErrorNode when parsing pattern blocks
https://pharo.fogbugz.com/f/cases/18830

18826 failing tests testMethodsReferencingClass on bootstrapped image
https://pharo.fogbugz.com/f/cases/18826

60157
18740 selectAll of TextInputFieldModel dont react like its super class TextModel
https://pharo.fogbugz.com/f/cases/18740

18824 Fuel packages lost some integrated stuff
https://pharo.fogbugz.com/f/cases/18824

18750 Improve the abstract TestCase for widgets
https://pharo.fogbugz.com/f/cases/18750

60156
18822 RBScanner>>#scanPatternVariable shouldnt continue parsing on error
https://pharo.fogbugz.com/f/cases/18822

18771 Add a manifest for critics
https://pharo.fogbugz.com/f/cases/18771

18743 Create an abstract class to remove code duplication between CheckboxModel and RadioButtonModel
https://pharo.fogbugz.com/f/cases/18743

18803 Cleanup of Spec-Polywidget
https://pharo.fogbugz.com/f/cases/18803
60155
18734 Two tests failing in FFIExternalStructureTests
https://pharo.fogbugz.com/f/cases/18734

18807 Improve Margin>>#printOn:
https://pharo.fogbugz.com/f/cases/18807

18741 add RadioButtonGroupModel
https://pharo.fogbugz.com/f/cases/18741

18775 Fix a typo
https://pharo.fogbugz.com/f/cases/18775

60154
18812 epicea is not respecting the new pharo-local directory
https://pharo.fogbugz.com/f/cases/18812

18770 Add a manifest and fix critics
https://pharo.fogbugz.com/f/cases/18770

18772 Fix critics in SpecLayout
https://pharo.fogbugz.com/f/cases/18772

60153
18734 Two tests failing in FFIExternalStructureTests
https://pharo.fogbugz.com/f/cases/18734

60152
18774 Fix some critics
https://pharo.fogbugz.com/f/cases/18774

18746 fix some typo in method comments
https://pharo.fogbugz.com/f/cases/18746

18745 Move what are not widget from Spec-core-widget to another subpackage of Spec-core
https://pharo.fogbugz.com/f/cases/18745

60151
18747 Improve RadioButtonGroup
https://pharo.fogbugz.com/f/cases/18747

18742 add class to manage focusorder
https://pharo.fogbugz.com/f/cases/18742

60149
18390 System version should be “Pharo 6.0” instead of “Pharo6.0” and PharoWelcomePage should not hard code version
https://pharo.fogbugz.com/f/cases/18390

18748 OpalCompiler Tests: OCNewCompilerWithChangesFunctionalTests should set encoder to OpalEncoderForV3PlusClosures
https://pharo.fogbugz.com/f/cases/18748

15688 Remove ComposableModel>>#instantiateModels:s senders in Spec-Examples
https://pharo.fogbugz.com/f/cases/15688
60148
18739 CompiledMethod sourceNodeForPC is not working for primitives
https://pharo.fogbugz.com/f/cases/18739

18738 Context sourceNodeExecuted could fail when first line is block
https://pharo.fogbugz.com/f/cases/18738
60147
18736 STCommandLineHandler>>installSourceFile:
https://pharo.fogbugz.com/f/cases/18736

18727 MessageBrowser Suggestions shortcut ignores selection
https://pharo.fogbugz.com/f/cases/18727

18718 usage of deprecated Pragma>>#selector in the kernel
https://pharo.fogbugz.com/f/cases/18718

60146
18732 Workaround for isBlockReturn:
https://pharo.fogbugz.com/f/cases/18732

18721 external alignment for enumerations is bad in win32
https://pharo.fogbugz.com/f/cases/18721
60145
18717 call on #name for SuggestionMenu
https://pharo.fogbugz.com/f/cases/18717

18726 Move CriticBrowser to work on Renraku model
https://pharo.fogbugz.com/f/cases/18726

18728 remove WorkingSession>>#sid
https://pharo.fogbugz.com/f/cases/18728

60144
18719 Add an example, remove a duplicated example
https://pharo.fogbugz.com/f/cases/18719

18720 usage of deprecated Pragma>>#method: in the compiler
https://pharo.fogbugz.com/f/cases/18720

18707 Cannot open the context menu in Versionner
https://pharo.fogbugz.com/f/cases/18707

18715 QualityAssistant v3.2.0
https://pharo.fogbugz.com/f/cases/18715

60143
18705 SistaV1 Bytecode: Opal tests down to 23 failures, 4 errors
https://pharo.fogbugz.com/f/cases/18705

18709 Improvements in CustomHelp and ClassAPIHelpBuilder
https://pharo.fogbugz.com/f/cases/18709

18714 can not rename a class
https://pharo.fogbugz.com/f/cases/18714

18710 remove “currentScope” from RBParser
https://pharo.fogbugz.com/f/cases/18710

18713 Load NeoUUIDGenerator without using it
https://pharo.fogbugz.com/f/cases/18713
60142
18704 button border should be themable
https://pharo.fogbugz.com/f/cases/18704

60141
17958 Add examples to the Symbol class comment
https://pharo.fogbugz.com/f/cases/17958

18618 Better additional comment for primitive: 79 error: ec usage
https://pharo.fogbugz.com/f/cases/18618

18697 Automatic deprecation refactoring needs to take traits into account
https://pharo.fogbugz.com/f/cases/18697

18700 SistaV1 bytecode: fix for Opal tests to not crash the image
https://pharo.fogbugz.com/f/cases/18700

60140
18696 some cleanup for OCBytecodeDecompilerTest for new Bytecode set
https://pharo.fogbugz.com/f/cases/18696

18680 Forward port 18676 Endless loop parsing e-mail addresses containing an ampersand
https://pharo.fogbugz.com/f/cases/18680

18694 deprecate #getSource
https://pharo.fogbugz.com/f/cases/18694
60139
16636 Rename layout to classLayout (step 4 deprecate)
https://pharo.fogbugz.com/f/cases/16636

18449 Glamour: “Do not use #ifNotNilDo:ifNil:, #ifNil:ifNotNilDo:, #ifNotNilDo:”
https://pharo.fogbugz.com/f/cases/18449

60137
18690 deprecated BitBlt class>>#current
https://pharo.fogbugz.com/f/cases/18690

17434 debugger missing block local var for optimized blocks
https://pharo.fogbugz.com/f/cases/17434

18674 Turn spotter catalog off by default
https://pharo.fogbugz.com/f/cases/18674

18608 Impossible to delete a class
https://pharo.fogbugz.com/f/cases/18608

60136
18665 Rename Pragma>>#selector to Pragma>>#methodSelector
https://pharo.fogbugz.com/f/cases/18665

18685 System-Changes depends on Compression
https://pharo.fogbugz.com/f/cases/18685

18689 deprecate #copyLast:
https://pharo.fogbugz.com/f/cases/18689
60135
18682 remove Object>>wantsDiffFeedback
https://pharo.fogbugz.com/f/cases/18682

18686 Kernel does not depend any more on Compression
https://pharo.fogbugz.com/f/cases/18686

18683 Update pharo kernel dependencies
https://pharo.fogbugz.com/f/cases/18683
60134
18636 FFICallback is broken since Alien was updated to support ARM and 64bits
https://pharo.fogbugz.com/f/cases/18636

18223 GTInspector compose should use HelpBrowser openOn GTInspectorHelp
https://pharo.fogbugz.com/f/cases/18223

18681 Cleanup Compiled Method Trailers
https://pharo.fogbugz.com/f/cases/18681

60133
18658 Browse class directly for global variables
https://pharo.fogbugz.com/f/cases/18658

18529 There is empty packages in the image
https://pharo.fogbugz.com/f/cases/18529

15857 review rule RBAsOrderedCollectionNotNeededRule
https://pharo.fogbugz.com/f/cases/15857

18675 Cleanup related to deprecated methods
https://pharo.fogbugz.com/f/cases/18675

18673 Move variable declaration refactoring creates undeclared variables
https://pharo.fogbugz.com/f/cases/18673

Navigating Objects

Hi.

This is side project of my work on Seamess and RemoteDebuggingTools. You can load it by:

Gofer it
smalltalkhubUser: ‘Pharo’ project: ‘ObjectTravel’;
configuration;
loadStable
ObjectTravel is a tool to deeply traverse “native” references of given object through instance variables and “array contents”.
Usage is quite simple:

traveler := ObjectTraveler on: (1@2 corner: 3@4).
traveler referencesDo: [:eachRef | eachRed logCr].

Here is list of suitable methods:

  • collectReferences
  • countReferences
  • skip: anObject
  • traverseOnly: predicateBlock
  • copyObject
  • findAllPathsTo: targetObject
  • replaceCurrentReferenceWith: anObject
Best regards,
Denis

Pillar 4.0.0 is out

Hello,

I’m happy to announce the latest release of Pillar.

This release has been possible because of the hard work of Damien Cassou, Cyril Ferlicot, Yann Dubois, Thibault Arloing and Lukas Komarek.

What did it bring and what are the largest changes ?

  • Huge cleaning of code and Dependencies
  • Many bug fixes
  • Huge refactoring of internal parts
    • Extract phase management into an external project (LightPhaser)
    • Transformers and Phases are all Pipes

Remove Compilation cycle

  • Remove template handling from Pillar
  • Remove generation of pillarpostExport.sh
  • Pillar now exports files to JSON format
  • Command for pillar archetypes “./pillar archetype book”, book can be replaced by other archetype names (see Pillar documentation)
  • Possibility to load an archetype with a Makefile to compile pillar files

Features

  • Check phase to check syntax
  • EPub exporter for e-books (use pillar archetypes for this)
  • Semantic links to Youtube and Wikipedia
  • Citations for LaTeX
  • Structures (see Pillar documentation)
  • Footnotes for HTML, Markdown, LaTeX and AsciiDoc
  • Improvement of parsing configuration failure message

Major changes

  • Metadata field in configuration to separate data from configuration properties
  • Support files in configuration does no longer exists
  • “disableTransformers” property is now named “disabledPhases”
  • AsciiDoc file extension is now “.asciidoc”
  • Pillar now manages one input file, not a collection of input files anymore
    • Parameter inputFiles is now replaced by inputFile

The documentation of Pillar will be updated as soon as possible to fit those changes.

Cheers,

Thibault

A taste of bootstrap

Hi,

as you maybe know, we are working on Pharo image bootstrap – the process that can generate an image from source codes and initialize it correctly. Because of practical reasons we do not bootstrap the standard image at once but we are trying to bootstrap a small headless kernel image and then load the rest of the system into it.
The good news is that we are successful in our effor. We are already able to produce well usable images as you can test here:
From the Pharo/Squeak point of view this image is very special because it doesn’t contain any object inherited from 80’s. Pharo lost its umbilical cord.
Notice that the initial display width is too narrow and and we still need a lot of work on the building process, but In the next weeks and months it will change a lot the Pharo development – especially as soon as it will be combined with Git support.
Cheers,
— Pavel

JSONWebToken for Pharo

Hi,

thanks to the inquiry of Sven I published an implementation of JSONWebToken to smalltalkhub. It is available at

http://smalltalkhub.com/#!/~NorbertHartl/JSONWebToken <http://smalltalkhub.com/#!/~NorbertHartl/JSONWebToken>

For those who don't know JSONWebToken or short JWT pronounced "jot" is a token format suitable for authentication and authorization. The token consist of a header, a payload and a signature. The header defines crypto algorithms, compression and other things needed to read a token on reception. The payload is called a claim set which is basically a dictionary with well-known and custom keys. If we think about OAuth or OpenId the values contained map directly to JWT claims. For OpenID connect which is an identification mechanism on top of OAuth the usage of JWT is one of the building blocks. 

What are the advantages in using JWT?

- it defines a header for encoding the content so it is quite flexible in the ways compression and encryption of the key is done
- defines a payload which maps arbitrary keys and there is a set of well-known keys that implementations of OAuth, OpenID can understand
- defines a signature that makes it easy to trust the information contained or to give the token to someone who is not trusted
- token format is a single line string so it can be used e.g. in HTTP authentication headers

A problem JWT can solve:

In our company we have a lot of little REST servers serving some duties. To minimize the chaos I want to have a central authentication and authorization point. If we assume having 20 images running and we look at typical way how authorization works:

there is image A (Authentication), image S (Service) und client C. Client C wants to use the service S

1. client C authenticates and retrieves authorization information from A (or from S which redirects him to A)
2. client C hands out the authorization information to S
3. S needs to check at A if the information is valid (client C could have modified it or generated it)
4. S grants C access

Taking the assumption of having 20 service images, every image would need to get back to A in order to check authorization information. The more services images you have the more load it will put on A. In a JWT use case scenario the same would look like

1. client C authenticates and receives a JWT containing authorization information. The token is signed by A
2. client C hands out JWT to service S
3. S checks the signature of A and knows that the authorization information contained is valid. 
4. S grants C access

FYI,

Norbert

New version of Seamless

I glad to finally release new version of Seamless (0.8.2).

It could be loaded by:
       Gofer it
      smalltalkhubUser: ‘Pharo’ project: ‘Seamless’;
      configuration;
      loadStable.
It works in Pharo 5 and 6.
It is complete redesign of original version with the goal to make it more flexible, reliable and simple.
(original version was created by Nikolaos Papoulias)
Seamless is foundation for RemoteDebuggingTools. It allows reuse existing debugger to work with remote process by transparent network communication. Particularly new version provides required flexibility to reduce number of requests between distributed objects. No debugger changes was needed to make it work relatively fast with remote model.
For more details look at my blog and read docs: Seamless and Basys 
As usual feedback is welcome.
Best regards,
Denis

OpenGLES2 bindings ready

Hi all,

My tiny binding for OpenGLES2 is ready :)
http://smalltalkhub.com/#!/~ThibaultRaffaillac/OpenGLES2/

It takes a different direction than that of NBOpenGL. I found the support for all versions of OpenGL overwhelming, both for beginners and to maintain. With a limited number of functions I could carefully name all messages.

A demo using either SDL2 or GLFW (faster) is included, supporting VSync and retina displays.
Tested only on Mac OSX, patches welcome!

Cheers,
Thibault

Metacello support for GitFileTree metadata-less mode

In the last month or so we’ve had a couple of different discussions on this list involving adding support to Metacello (otherwise known as “Cypress package extension”) for GitFileTree’s metadata-less mode[1] and [4] and earlier this week I released a new version of Metacello[2] that includes an updated version of the  “Cypress package extension”[5].

Depending on the version of Pharo you are using, at some point in time, I expect this new release of Metacello to be available in the standard download. Until then, to install the latest version of Metacello into Pharo execute the following in a workspace:

Metacello new
baseline: ‘Metacello’;
repository: ‘github://dalehenrich/metacello-work:master/repository’;
get.
Metacello new
baseline: ‘Metacello’;
repository: ‘github://dalehenrich/metacello-work:master/repository’;
onConflict: [:ex | ex allow];
load

If you are using GitFileTree’s metadata-less mode and Metacello, then add the following method to your BaselineOf:

projectClass
^ MetacelloCypressBaselineProject

and you are good to go.

If you are curious as to why “Cypress package extensions” are needed, you can read this comment[6] for a description of what rules Metacello uses when fetching/loading packages from a FileTree repository using a baseline.

On a slightly different topic, Alistair Grant ran into a bug involving Metacello and how it semantic version numbers[7] a couple months ago and this release includes a bug fix … the bug was related to the fact that the parser was too lenient and did throw an error for some forms of invalid Semantic version numbers … with this fix an error is thrown … of course it is entirely possible that there are ConfigurationOfs out in the wild that “depend upon the old behavior” so if you get an “invalid version number” error while working with a configuration and discover that it is not practical to redefine the version numbers to conform to the semantic version number format then you can add the following method to the ConfigurationOf and the old, buggy version of the parser will be used:

versionNumberClass
^ MetacelloOldSemanticVersionNumber

If you are sharing code between GemStone and Pharo, then you will want to make sure that you install the new version of Metacello in GemStone as well. See the GemStone release announcement for details[8].

Dale

[1] http://forum.world.st/Saving-to-local-git-and-quot-Loading-all-file-names-from-http-pharo5-inbox-quot-tt4897962.html#a4905790
[2] https://github.com/dalehenrich/metacello-work/pull/401
[4] http://forum.world.st/How-do-I-convert-a-FileTree-project-to-Metadataless-GitFileTree-project-tp4903920p4905054.html
[5] https://github.com/dalehenrich/metacello-work/issues/399
[6] https://github.com/dalehenrich/metacello-work/issues/399#issuecomment-231464884
[7] https://github.com/dalehenrich/metacello-work/issues/392
[8] http://forum.world.st/new-release-of-Metacello-metadata-less-FileTree-repository-support-part-IV-tt4906322.html

Remote Debugger now available

I glad to release first version of RemoteDebuggingTools project. It allows explore and debug remote images.

Any feedback is welcome.
Best regards,
Denis.