RSSAmplifier

Blog

Working on Pharo Smalltalk

dionisiydk.blogspot.comRSS feed ↗25 posts

Latest posts

Deprecations as They Should Be

With BPatterns, you don’t need a special syntax to search or rewrite code. Any block or any AST node can become a matching pattern. This opens up interesting opportunities to simplify existing users of the rewrite engine. One particularly good candidate is the deprecation mechanism in Pharo . Let’s look at a real example. Deprecations in Pharo Today Consider this recently introduced deprecation in…

BPatterns: Rewrite Engine with Smalltalk style

The rewrite engine is an absolutely brilliant invention by John Brant and Don Roberts, introduced with the Refactoring Browser (see “A Refactoring Tool for Smalltalk”, 1997 ). It gives us AST-level matching and rewriting with astonishing power. But let’s be honest: how many people actually remember its syntax? Even the simplest rewrite rule—say, replacing a deprecated message with a new…

Calypso in progress 0.8.7

It is important release which prepares Calypso for new TelePharo version and removes the main Nautilus dependency. Now all Nautilus method icons are done in Calypso way with extra features: override/overridden method icons (up/down arrows). Up/down buttons open method browser scoped to superclasses or subclasses. Method context menu "Inheritance" with shortcut cmd+h. icon for methods marked with…

New Calypso version 0.8 is out

Finally I finish major Calypso changes. It is a big refactoring on navigation model and browser pluggability. For the model part the biggest change is composition of queries and scopes. For example string lookup in class comments and method sources looks like: (ClyClassComments withSubstring: 'test') , (ClyMethodSources withSubstring: 'test') Query of all variables accessible from the class can be…

Class annotations

In Pharo language we can annotate methods with meta information using special syntax: MyClass>>someMethod <mySpecialPragmaWith: firstArg and: secondArg> "method logic" The meta information is represented by pragma instances. It can be retrieved from methods: (MyClass>>#someMethod) pragmas And it can be queried globally from the system: Pragma allNamed: #mySpecialPragmaWith:and: in: MyClass You can…

PharoThings took third place at Esug2017

At Esug2017 I participated in Innovation Technology Awards with the project PharoThings which took third place. Here is slides from Esug presentation:

Full Calypso in pictures

At Esug2017 I made presentation about Calypso. It shows full set of features in pictures. Have fun to look at it:

PharoThings. A live programming IoT platform based on Pharo

I am glad to announce the project PharoThings which brings the live programming environment into IoT domain. It includes: development tools to lively program, explore and debug remote boards (based on TelePharo ) board modeling library which simplifies board configuration Raspberry driven by WiringPi library Arduino driven by Firmata, soon Beaglebone, soon Follow github page and videos to get a…

PharmIDE is renamed to TelePharo and moved to github

This time to talk about PharmIDE migration. In the team we finally agreed on the end name for project. It is now TelePharo. Prefix "tele" means some action on or by distance. And this is what the project is about: to work remotely with Pharo images. With new name project was moved to github repository https://github.com/dionisiydk/TelePharo with all dependencies: Seamless Basys TCPServer…

Calypso update: many improvements and migration to GitHub

New version 0.7.9 is done. Calypso is now hosted on https://github.com/dionisiydk/Calypso . To load it use following script: Metacello new baseline: ' Calypso ' ; repository: ' github://dionisiydk/Calypso ' ; load Feel free to fork it and pull requests to dev branch. Main improvement is navigation history: It remembers table selections, browser modes and active tabs. You can switch browser to…

PharoDays2017. Calypso presentation

Another Pharo year is gone. I made presentation about Calypso browser at PharoDays2017 . You can look at slides here: And try it lively by: Metacello new baseline: 'Calypso'; repository: 'github://dionisiydk/Calypso'; load. #ClySystemBrowser asClass open

Commander: command pattern library

Commander is a new Pharo library which models application actions as first class objects. Every action is implemented as separate command class (subclass of CmdCommand) with #execute method and all state required for execution. Commands are reusable objects and applications provide various ways to access them: shortcuts, context menu, buttons, etc.. This information is attached to command classes…

Calypso navigation model

This time I am going describe Calypso navigation model. In Calypso users query environment for specific set of objects. First you need environment instance. There is global one for current image: env := ClyNavigationEnvironment currentImage It is navigation environment which is created over some system environment. In this case it is current image: ClySystemEnvironment currentImage System…

PharmIDE: Pharo remote IDE to develop farm of Pharo images remotely

I am glad announce first version of PharmIDE project which is complete toolset for remote development of Pharo images. It includes: remote debugger remote inspector remote playground remote browser Old project RemoteDebuggingTools is deprecated. But it could be used for Pharo 5 images. PharmIDE targets Pharo 6 or later and provides everything which was done in original project. Server part of…

Calypso update: MethodBrowser and better UI

I glad release new version of Calypso. It includes method browser which makes Calypso complete toolset for system navigation. Also new version contains many UI changes: white toolbar (according to theme background color) separators between radio button groups clickable labels instead of buttons Method browser has many new cool features: Flat and hierarchy view modes. First shows methods as flat…

Calypso. New system browser for Pharo

Calypso is a new system browser for Pharo which I developed as required component for general remote IDE project. First initial version is done. You can try it by: Metacello new baseline: 'Calypso'; repository: 'github://dionisiydk/Calypso'; load. #ClySystemBrowser asClass open. I release Calypso in the state where I finish most design decisions which I think important for project evolution. Of…

Second place for RemoteDebugger at ESUG Innovation Technology Awards

Another Smalltalk year is gone. There was many interesting projects at ESUG . And I was happy to won second place at Innovation Technology Competition . Presentation about project is online:

ObjectTravel. A tool to traverse object references

ObjectTravel is a tool to deeply traverse "native" references of objects through instance variables and "array contents". Metacello new baseline: 'ObjectTravel'; repository: 'github://dionisiydk/ObjectTravel'; load. Usage is quite simple: just create traveler instance on your object and send #referencesDo: traveler := ObjectTraveler on: (1@2 corner: 3@4). traveler referencesDo: [:eachRef | eachRef…

Major Seamless update

I glad to publish new version of Seamless (0.8.2) together with new doc . It could be loaded by: Metacello new baseline: 'Seamless'; repository: 'github://dionisiydk/Seamless'; load It works in Pharo 5 and 6. As usually feedback is welcome. 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).…

Remote debugging tools is ready

I glad to release first version of RemoteDebuggingTools project. It allows explore and debug remote images. Here is demo with debugging Seaside application: On server side you need to install Server group of project: Metacello new smalltalkhubUser: 'Pharo' project: 'RemoteDebuggingTools'; configuration: 'RemoteDebuggingTools'; version: #stable; load: 'Server'. Then server should be started on port…

Magic with Pharo Reflectivity

Last days I play with idea of compile time evaluation without special language support. For example in Dolphin Smalltalk there is special syntax for this: ##(100 factorial) Factorial will be evaluated at method compilation time and result will be saved as literal. And this precomputed value will be used during method execution. In Pharo we can do this without special syntax. Thank's to powerful…

ObjectStatistics. Simple objects analysis tool

I am glad to announce ObjectStatistics tool to analyse set of objects by computing different kind of metrics and look at them from different angles. It implements simplistic OLAP Cube approach for data analysis but in objects space. Imaging that we have collection of message sends and we want to know number of message sends in dimension of receiver, receiver class and message selector. We have…

Halt next object call

ObjectVirus allows very simple implementation of object centric debugging. We can infect given object by virus which will halt any message send. Let's create new GhostBehaviour for this: GHGhostBehaviour subclass: #GHObjectCallHalt instanceVariableNames: '' classVariableNames: '' package: 'Ghost-ObjectCallHalt' GHGhostBehaviour>>send: aMessage to: anObject | method breakpoint | anObject…

New version of Mocketry 3.0

New version of Mocketry is out. You can load it from https://github.com/dionisiydk/Mocketry by Metacello new baseline: 'Mocketry'; repository: 'github://dionisiydk/Mocketry'; load In this version I try to provide most simple way to stub any message to any object and to verify any occurred behaviour. It was presented at PharoDays2016 conference: Here I show full details about Mocketry Create mocks…

Playing with ObjectVirus

I want to show ObjectVirus, special kind of ClassGhost. But first let's look at ClassGhost. It is ghost which can play role of object classes. ClassGhost can substitute class of objects and intercept all their messages. And as ghost it intercepts all direct messages too. So concrete implementation should decide how ghost should behave itself and how normal objects should behave when they are…