Monthly Archives: June 2016

New Consortium Member

The Pharo Consortium is very happy to announce that FINWorks 
has joined the Consortium as a Bronze Member.


	FINWorks provides software solutions and automation in the financial sector. 
	Our main area of focus is investment administration, especially back office 
	solutions for LISP (Linked Investment Service Provider or Fund Supermarkets), 
	Benefit Administrators, Unit Trust Companies, Asset Managers, Independent 
	Financial Advisors (IFA)  and other financial service providers

Pharo Consortium:

	The goal of the Pharo Consortium is to allow companies and institutions to
	support the ongoing development and future of Pharo.
	Individuals can support Pharo via the Pharo Association:


Windows previewer / switcher


This mail to announce you that I am working on a windows previewer / switcher for
Pharo [1].

It is still in early stage of development but it is usable.

To install it:

Metacello new
    repository: 'github://JulienDelplanque/WindowsPreviewer/repository';
    baseline: 'WindowsPreviewer';

See the README for details on activation/shortcuts.

Please, if you have some ideas or critics let me know!

Also, a better name than “Windows Previewer” would be cool but I have
no other idea :-)…




Functional callbacks on all Cog platforms

Hi All,

just wanted to report that as of Alien-eem.35 and we now have functional callbacks on all x86 platforms, ARM32 platforms and x86_64 platforms.

There’s a simple example Alien class>>exampleCqsort that shows how to use the system and tests the implementation using the C library’s sort quick sort implementation that takes a function pointer as an argument to use for comparing pairs of elements.  This is mapped onto a Smalltalk block by Alien’s callback implementation.  The example sorts 100 random double-precision floats using qsort and a callback into Smalltalk.

New version of Interactive Fiction Framework

New version of Interactive Fiction Framework

I think it is mature enough to be used, but of course there might be some
rough edges.

Contributors, users and testers would be very welcome!


Continuous improvements: the agile way

18520 EyeTreeInspector is broken

18527 #halt should not be in the badSelectors rule

18525 fix for IconStyler
18524 Add Icon Styler for haltOnce and haltOnCount:

18496 duplicate shortcut usage for window close and tab close

18514 ConfigurationOfEpicea not in sync with Pharo

18511 DNU MorphicDiffAdapter keyStroke:fromMorph:
18517 ConfigurationOfVersionner needs update to be in sync with Pharo

18522 Add icon styler for “self halt”

18518 ConfigurationOfCatalog needs update to be in sync with Pharo

18513 NEC fails to guess the type of non-class bindings

18521 Add manifest for Random-Core

18512 cleanup related to deprecations

18509 per send-site #haltOnCount:

18507 add #deprecated:transformWith: (automatic rewrites of deprecated sends)
18477 QualityAssistant v3.0.5

15849 Remove NewList

18282 Scrollbar doesnt move when scrollValue is set in TextModel

18501 icons -> icons iconNamed: (part 2)

18497 EncoderForSistaV1: last integration to be usable.

18484 instance variable refactoring without instance variables

18489 remove more old deprecated methods

18488 remove “recover lost changes…”

18486 remove some methods deprecated in Pharo 5
18492 safer access to charset

15085 non-english character input

18485 TabsExample broken (icon access)

18490 Configuration of TxText needs update stable version
18470 EncoderForSistaV1 update

18480 remove MCMockRPackage

18479 Process termination trick for Semaphore critical method should be refactored to be reusable for other lock objects

18481 Better #haltOnce: per haltOnce state, auto-enable

18332 ClassRefs menu items should be moved at the same level than analyze

18478 “Instance variables defined in all subclasses” rule not clear
18448 Rubric: “Do not use #ifNotNilDo:ifNil:, #ifNil:ifNotNilDo:, #ifNotNilDo:”

18468 Use readOnlyQueue when reading source files
18474 move var to class refactoring broken II

18476 update Versionner to 2.13.15

18072 TxModel >>#applyAttribute:to: sends unimplemented message

18473 move var to class refactoring broken

18475 Do not announce method creation if the class is anonymous

Updated Pharo Launcher


I just updated Pharo Launcher. A new version 0.2.11 is available.
Here are the change log:
  • move Pharo Launcher to the latest stable pharo image: pharo 5.0. It implies That Pharo Launcher is now shipped with Spur VM.
  • allow an easy download of the new beta image: pharo 6.0
  • the Launcher now comes with 2 VMs:
    • Spur VM (pharo 5.0 and Pharo 6.0)
    • Non-Spur VM (to be able to run old images)
  • the Launcher is now shipped with a default template that is the current default Pharo image. It can be found in local templates.
  • there is a new OS bundle for linux: we now ship more files with the launcher and it was needed to have a bundle.
  • update of the default name propose when you create an image from a template: the default name will be the project name.
If you want to give it a try, executables are there:

Automatic Deprecation Refactoring


I have dusted off and improved the automatic refactoring of deprecations.

- when the refactoring engine is not present, it falls back to a standard deprecation
- It does not introduce any dependencies (can just be in the Kernel, the only cost is one method of 10 lines).
- It sets the author so it does not require initials
- It refactors *only* the sending (offending, deprecated) send site. So a second selector that is identical (which might be a different method and not deprecated) will not be affected.

The way to use it is this:

ifNotNilDo: aBlock
        deprecated: 'Please use #ifNotNil: instead'
        transformWith: '`@receiver ifNotNilDo: `@statements' -> '`@receiver ifNotNil: `@statements'.
    ^ aBlock ifNotNil: aBlock

As we try to provide already Lint rules for deprecations (or at least should have..) the amount of additional work is not much.

This is the full implementation:

deprecated: anExplanationString transformWith: aRule
    | rewriteRule method context node |
    context := thisContext sender sender.
    (Smalltalk globals hasClassNamed: #RBParseTreeRewriter) 
        ifFalse: [ ^self deprecated: anExplanationString ].
    method := context method.
    node := context sourceNodeExecuted.
    rewriteRule := (Smalltalk globals classNamed: #RBParseTreeRewriter) new replace: aRule key with: aRule value.
    (rewriteRule executeTree: node)
        ifFalse: [ ^ self ].
    node replaceWith: rewriteRule tree. 
        useAuthor: 'AutoDeprecationRefactoring'
        during: [method methodClass compile: method ast formattedCode classified: method protocol]

This is *with intention* the absolute “simplest thing that can possibly work”. There is no interactive tool to preview refactoring in interactive
mode, or some way to opt in or out. 

The power of things like this comes from actually using them, not from being perfect...


Nicer haltOnce


Yesterday we improved #haltOnce to be more like a “once” BreakPoint:

	-> state per *each* haltOnce send
		(this means you can put two in one method and they are independent)
	-> when putting a haltOnce, it is enabled by default
	-> The global menu entry just resets all haltOnce to be active again.

Interesting is how trivial this was to implement… in class Halt 
    | node |
    node := thisContext sender sender sourceNodeExecuted.
    (node hasProperty: #haltOnce) ifTrue: [^self]. 
    node propertyAt: #haltOnce put: true.
    ^ self signal.

This means, we get the AST node of the “haltOnce” message send. Then we put an annotation there.
To reset all (enable all), the global many just does:

	#haltOnce senders do: #recompile.


This will be in 60082.


Continuous enhancements

18413 disable code completion in comment pane

18457 Allow # to be part of the string when searching senders and implementors
18464 Update ConfigurationOfRubric to 2.20.2

18466 Make Rubric packages internal

18465 EncoderForV3 does not have its specification in its comment

18467 Make CodeImporter interal

18462 FileReference>>newTempFilePrefix:suffix:

18458 fall back debug menu in FileLists preview pane context menu

18456 Add readOnlyQueue to SourceFilesArray

18424 Remove Dependency AST -> FFI and unload AST-FFI-Pharo50Compatibility

18367 Symbol>>#asIcon

18186 Morphic event mechanism should be removed from the kernel

18454 drawing menus: respect order of upper/lowercase keys

18461 ConfigurationOfEpicea needs update
18451 Do not use #ifNotNilDo:ifNil:, #ifNil:ifNotNilDo:, #ifNotNilDo:

18443 update Versionner configuration to 2.13.14

18433 Simplify DangerousClassNotifier logic

18440 ConfgurationOfGTDebugger needs update

18355 Change refactoring label from Rename temporary to Rename temporary/parameter
18442 ConfigurationOfGToolkitCore needs update

18441 ConfigurationOfGTPlaygroundCore needs update

18439 Remove QA git leftovers

18428 Add SelectEntity to Spec

18421 Fix Zinc-HTTP extensions capitalization

18438 confusing error for variable refactoring

18436 update ConfigurationOfGTInspectorCore to latest version

18437 update ConfigurationOfCatalog to latest version

18377 ConfigurationOfGTEventRecorder is not in sync with the current package versions

18403 ConfigurationOfGTInspectorCore needs update versions of dependencies

18423 Fix Glamour-Tests-Core extensions capitalization

18402 ConfigurationOfGTSpotter needs update versions of dependencies

18420 Fix Metacello-Core extensions capitalization

18417 Fix Reflectivity extensions capitalization

18422 CompiledMethod depends on old BytecodeEncoder classes

18380 ConfigurationOfTxText is not in sync with the current Pharo package versions

18415 Fix Regex-Core extensions capitalization

18404 ConfigurationOfUnifiedFFI not in sync with current Pharo package versions

18401 The ConfigurationOfRubric is not in sync

18427 System-CommandLineHandler should be abstract and not extend particular command line handlers

18394 change some more keymapping definitions in PharoShortcuts

18412 QAViewedDiff(Object)>>doesNotUnderstand: #critic:
18410 Remove KMMockMorph

18398 LanguageEnvironment class>>#localeID: can cause endless loop

18406 Add EphemeronTests

18400 Add Pharo 6 to #metacelloPlatformAttributes (but keep Pharo 5 for now)
18375 remove package ConfigurationOfNautilusGroupAutoBuilder

18368 Move Rubric Shout support into standalone package

18358 Integrate Ephemeron Registry

18382 STON should not extent RunArray and Text
18361 Update UFFI version to 0.20.2

18376 Do not allow assignments to global vars

18381 ConfigurationOfCatalog is not in sync with current Pharo package versions

18377 ConfigurationOfGTEventRecorder is not in sync with the current package versions

18396 Glamour-FastTable extends projects that are loaded after it
18385 CatalogBrowser is required for NautilusGroupAutoBuilder

18362 Critics-> critiques renaming

18380 ConfigurationOfTxText is not in sync with the current Pharo package versions
18378 ConfigurationOfVersionner has wrong stable version

18261 move StartupPreferencesLoader examples to the class comment

18381 ConfigurationOfCatalog is not in sync with current Pharo package versions

18373 Epiceas lost changes detector is too slow

18265 remove Deprecated50 package

18343 Radiobuttons sometimes appear like Checkbox

18342 SliderModel label isnt display correctly

18372 Inheritable PS variables registration logic is broken by stupid bug

18371 Remove menu entry for RecentMessageList (replaced by Epicea)

17990 Spur ephemerons must be integrated
18370 GlamourCore 4.15

PassBy[ME] lib for Pharo


I made a library for an online 2 factor authentication service called 
PassBy[ME] <>  . 

This a service that provides PKI based 2nd factor authentication (using
smartphones) among other things like message sending and electronic

The library lets you start new authentication sessions and send messages to
the user's phone.

For more info:!/~zeroflag/PBMAuthenticator