Monthly Archives: April 2015

Pillar based rendered class comments

pillar-in-nautilus-view

Kasper Østerbye has just finished a proof-of-concept that renders Pillar
text inside a class comment pane.
Advertisements

Pharo beautiful explanation

http://www.slideshare.net/StephanEggermont/pharo-devnology20150401

And a narrative:

Pharo, the Immersive Programming Experience

Why do we choose to use Pharo? We feel that Pharo
provides the best way to combat complexity in
software development.

As long as the number of software developers paid to
make software smaller and throw away code is a lot
smaller than the number of developers paid to add
code, the software we deal with on a daily basis will continue
to grow.  This inevitably leads to an increase in the
complexity of the systems we build. This complexity is
problematic because decision making in difficult
situations is biased (1), using first fit heuristics instead
of best fit.

An interesting observation (2)  is that successful software
tends to have technical debt. If a software system is
successfull, the market pressure to deliver more and faster
than technically advisable is difficult to resist. When growing
very fast, it can make sense to make choices that enable
short-term growth that will need refactoring later. Additionally,
an architecture that is optimal for a small system is not
ideal for a large system and vice-versa.

So, what can we do? There are several interesting models dealing
with complex software systems. Let’s check a few of them, and
see what Pharo has to offer there.

The Cynefin framework (3) categorizes the problem space into
5 domains:
– Obvious, where the relationship between cause and effect is obvious
to all;
– Complicated, where the relationship between cause and effect requires
analysis and/or the application of expert knowledge;
– Complex, where the relationship between cause and effect can only be
perceived in retrospect;
– Chaotic, where there is no relationship between cause and effect
– Disorder, where the type of causality is unknown.
Each domain needs a different approach. In the complex domain
the approach is Probe, Sense, Response, or run multiple safe-to-fail
experiments simultaneously and see how the system responds.

Pharo is well-suited to doing experiments and prototyping.

It offers fast feedback with instantaneous compilation of the
currently edited method, optionally running an autotest on the
changed code.

The system contains all the source code of all the tools, and they are
designed to be quickly customizable by the individual developer.
A stated goal is to be able to build a custom tool in 10 minutes.

Pharo immerses you in a sea of objects and provides you with
lots of different ways of looking at them.
The late binding allows manipulating these objects at runtime,
even modifying the runtime stack.

Real Options (4) provides a decision model based on
– Options have Value
– Options Expire
– Never commit early unless you know why

Pharo embraces this model. Code is compiled as late as
possible, in the running system. This makes it possible to
use information available only then to customize behaviour

Behaviour is triggered only by message passing, and the
receiving object decides what to do with a message.
Sending an object a message it does not understands
is caught at runtime and can be dealt with in several ways.
It makes it easy to create proxies and can be used to
learn objects new behaviour.

Debugger-Driven-Design is an approach unique to smalltalk systems.
It makes it possible to design the way objects communicate while
implementing it. It supports a superior way of doing
test driven development.

Small is Beautiful (5) is something that is very much applicable
to software. Software systems suffer from diseconomies of scale.

Pharo uses a very simple and orthogonal language, using a
very small set of constructs.

But this very small set of constructs contains all the needed
features for building highly complex, understandable and reusable
software architectures.

This reduces the cost of building
custom tools and makes it possible to cost-effectively  provide
such an advanced environment. The systematic refactoring
applied over many years pays off in a very “dense” library
that makes it possible to solve problems writing a very low
number of lines of code.

The state of the art in mainstream software development
to battle complexity is reuse at the application level, building
systems out of large-grained components (database, web server).

Pharo supports reuse at a much lower granularity.
It has lots of small domain specific languages to deal
with specific problems. Because smalltalk has so little
syntax and supports fluent interfaces, these languages
support describing problems and their solutions in a
language near to that of the domain expert.

All software development environments support
programming yourself into a corner. Making  decisions
that turn out to be bad is inevitable when building
complex systems. Being able to program yourself out
of that corner again makes it possible to approach
a problem without fear.

Pharo offers easy meta programming and a code
rewriting engine to help undoing bad design decisions
and and cleaning up large amounts of code in a controlled
way.

The choices made by the Pharo project put it on the
left hand side on the value chain map (6). suitable for
innovation, focusing on effectiveness instead of
efficiency.

Pharo is an open source project, supported by the
Pharo Consortium. It is both a research vehicle and a
platform for commercial software. We use continuous
integration to make sure that the innovations from
research don’t destabilize commercial developments.
Next week we hope to release Pharo 4, and in a few
months the much faster new “Spur” vm with support
for 64 bits.

This was an introduction presentation for the Devnology
workshop of April 1. 2015. Devnology is a Dutch
group of people interested in improving software
development, organizing a monthly meetup.

(1) Gary Klein (1999) Sources of Power: How People Make Decisions.

(2) @meekrosoft, Mike Long (Long Life Software), 2013,
Cleaning Code – Tools and Techniques for legacy restoration projects

(3) Dave Snowden
http://cognitive-edge.com/

(4) Chris Matts and Olav Maassen, Committment, the Book.
Expands on the ideas articulated by Kent Beck in
“Extreme Programming Explained, Embrace Change”
http://commitment-thebook.com/

(5) E.F. Schumacher, (1973) Small is beautiful: A Study of Economics
As if People Mattered.

(6) Simon Wardley, http://blog.gardeviance.org/

Preparing the release…

40598
15315 Inspecting Slots raises an error
https://pharo.fogbugz.com/f/cases/15315
40597
15308 Bugfix and test for BooleanSlot
https://pharo.fogbugz.com/f/cases/15308

40596
15306 EyeInspectorTest pollutes world with left open windows
https://pharo.fogbugz.com/f/cases/15306

15282 Cannot run the image with the new bytecode set.
https://pharo.fogbugz.com/f/cases/15282
40595
15287 RBNamespaceTest>>#testModelImplementorsSenders
https://pharo.fogbugz.com/f/cases/15287
40594
15278 Filtering on a Dynamic Group throws a DNU
https://pharo.fogbugz.com/f/cases/15278

15295 TickDialogWindow open invokes not existing method
https://pharo.fogbugz.com/f/cases/15295

40593
ConfigurationOfRubric

40592
15280 issue grabber should use new tracker app
https://pharo.fogbugz.com/f/cases/15280

15234 monticello is not showing right status when working with branches
https://pharo.fogbugz.com/f/cases/15234

40591
15275 Small cleanup in Slot examples
https://pharo.fogbugz.com/f/cases/15275

40590
15269 a simple BooleanSlot example
https://pharo.fogbugz.com/f/cases/15269

15234 monticello is not showing right status when working with branches
https://pharo.fogbugz.com/f/cases/15234

40589
15268 Categorise some uncategorized methods in Slot examples
https://pharo.fogbugz.com/f/cases/15268

15261 Generator: Move example from comment to method
https://pharo.fogbugz.com/f/cases/15261

15266 browser version in nautilus without a method selected throws a DNU
https://pharo.fogbugz.com/f/cases/15266
40588
15253 URL to book in Tutorial is wrong
https://pharo.fogbugz.com/f/cases/15253

14974 failing test testScrollToLargeX
https://pharo.fogbugz.com/f/cases/14974

15241 Nautilus does not display catalogDescrption help text for many packages when moused over/clicked
https://pharo.fogbugz.com/f/cases/15241
40587
ConfigurationOfRubric

– 15219 #testClassDescriptionRespectsPolymorphismWithTraitDescription fails due to GT Extension
https://pharo.fogbugz.com/f/cases/15219
– 15137 Remove Morphic Halos for Bricks
https://pharo.fogbugz.com/f/cases/15137
– 15201 Darktheme default cursor color is black. Unreadable.
https://pharo.fogbugz.com/f/cases/15201
– 15226 spotter: preview for items without a preview only shows “Loading…”
https://pharo.fogbugz.com/f/cases/15226
– 14541 Editing the default inspector window size
https://pharo.fogbugz.com/f/cases/14541/
– 15214 Playground does not have window menu
Playground does not have window menu
– 14569 GTInspector should do live updates of objects and their slots
https://pharo.fogbugz.com/f/cases/14569/
(inspect ‘World activeHand’ and move mouse for a quick demo)

40586
13201 Hard to start a tutorial in Pharo
https://pharo.fogbugz.com/f/cases/13201

15240 Stuck SHTextStyler semaphores
https://pharo.fogbugz.com/f/cases/15240

15238 Add an assertion to check if a collection has same elements as another collection
https://pharo.fogbugz.com/f/cases/15238
40585
15232 ByteString and WideString dont agree on isAsciiString
https://pharo.fogbugz.com/f/cases/15232

14319 Ctrl + shift + F in the text pane does not work on mac (but on windows)
https://pharo.fogbugz.com/f/cases/14319
40584
15233 Inspecting objects yields MessageNotUnderstood: MorphTreeColumnButton>>isDefault error
https://pharo.fogbugz.com/f/cases/15233

15234 monticello is not showing right status when working with branches
https://pharo.fogbugz.com/f/cases/15234
40583
14344 Delay refactoring (part 3) – changeout mutex scheduling for semaphore scheduling
https://pharo.fogbugz.com/f/cases/14344

15180 Update Pharo Help topic about spotlight shortcut
https://pharo.fogbugz.com/f/cases/15180

40582
13761 Fraction floating pointer cannot be debugged
https://pharo.fogbugz.com/f/cases/13761

15215 Prevent the World locking due to multiple modal dialogs open
https://pharo.fogbugz.com/f/cases/15215

40581
13017 Class renaming does not update textual class definition
https://pharo.fogbugz.com/f/cases/13017

15156 remove AST Interpreter
https://pharo.fogbugz.com/f/cases/15156

40580
15210 load new configuration of Athens 3.1
https://pharo.fogbugz.com/f/cases/15210
40579
15221 PropertySlot: Tests for removing PropertySlots
https://pharo.fogbugz.com/f/cases/15221

15215 Prevent the World locking due to multiple modal dialogs open
https://pharo.fogbugz.com/f/cases/15215

40578
15222 Integrate GTools
https://pharo.fogbugz.com/f/cases/15222

40577
15190 Nautilus incorrectly flags Error classes as “missing class comments”
https://pharo.fogbugz.com/f/cases/15190

14924 Failing tests: testClassDescriptionRespectsPolymorphismWithTraitDescription
https://pharo.fogbugz.com/f/cases/14924

15189 “Extended search” vs. “Code search”
https://pharo.fogbugz.com/f/cases/15189

40576
12569 TextModel should not move scroll when accepting text
https://pharo.fogbugz.com/f/cases/12569

15141 More Cleanup after case 14353 Delay refactoring (part 2)
https://pharo.fogbugz.com/f/cases/15141

15207 Undo compiler change from case 15196
https://pharo.fogbugz.com/f/cases/15207

40575
15206 PostScript was not executed for issue 15182?
https://pharo.fogbugz.com/f/cases/15206

15203 Failing test: PackageTreeNautilusTest>>#testFullBrowseOnClass
https://pharo.fogbugz.com/f/cases/15203

14470 ReleaseTes>>#testObsoleteClasses failiing due to AnObsoleteClassForObsoleteTest
https://pharo.fogbugz.com/f/cases/14470
40574
15192 revert 14890
https://pharo.fogbugz.com/f/cases/15192

15151 TextInputFieldModel creation is slow
https://pharo.fogbugz.com/f/cases/15151

15196 Simple before and after links with minimal disturbance
https://pharo.fogbugz.com/f/cases/15196

15086 Ctrl + Arrow Behaviour
https://pharo.fogbugz.com/f/cases/15086

40573
15145 Spec TabManager selectedTab returns nil after first opening
https://pharo.fogbugz.com/f/cases/15145

15182 add basic inspector option
https://pharo.fogbugz.com/f/cases/15182

15195 test for redefined Slots on class side
https://pharo.fogbugz.com/f/cases/15195

15188 Color ariphmetical operations are broken
https://pharo.fogbugz.com/f/cases/15188
40572
15187 Endless loop on catching ZeroDivide for floats
https://pharo.fogbugz.com/f/cases/15187

13523 MNU protocolsFor: when show hierachy, show groups, click on a class
https://pharo.fogbugz.com/f/cases/13523

15186 revert 15171
https://pharo.fogbugz.com/f/cases/15186
40571
15097 Monticello repository UI not bolding unloaded packages after Lazy MCVersionInfo integrated
https://pharo.fogbugz.com/f/cases/15097

15179 Be able to browse dependent projects with Versionner
https://pharo.fogbugz.com/f/cases/15179
40570
14890 Browsing a different class should select by default the previously browsed method
https://pharo.fogbugz.com/f/cases/14890

15171 MNU: receiver of “getClass” is nil
https://pharo.fogbugz.com/f/cases/15171

15168 add DelayNullScheduler
https://pharo.fogbugz.com/f/cases/15168
40569
13295 Integrate Versionner 2.8
https://pharo.fogbugz.com/f/cases/13295
40568
15167 Fix: Class level should know about visible slots, layout knows all
https://pharo.fogbugz.com/f/cases/15167

15166 More tests for Slots
https://pharo.fogbugz.com/f/cases/15166

15172 Add String>>#allRangesOfSubstring:
https://pharo.fogbugz.com/f/cases/15172

15175 Add FindReplaceService>>#findNextSubstring:inTextMorph:
https://pharo.fogbugz.com/f/cases/15175

15165 Number>>#percent shouldnt force to Float
https://pharo.fogbugz.com/f/cases/15165

15169 add some GT views to ReflectiveMethod
https://pharo.fogbugz.com/f/cases/15169

40567
15115 Spotter should appear in the World menu
https://pharo.fogbugz.com/f/cases/15115

15163 #instVarNamed: mixed up
https://pharo.fogbugz.com/f/cases/15163
40565
15160 Move all deprecated Methods in Spec to Deprecated40 package
https://pharo.fogbugz.com/f/cases/15160

12991 navigation enhancement Path>>parentUpTo: aParentDirName
https://pharo.fogbugz.com/f/cases/12991

15110 Cleanup after case 14353 Delay refactoring (part 2)
https://pharo.fogbugz.com/f/cases/15110

40564
ConfigurationOfRubric

40563
13333 MCWorkingCopyBrowser>>addSlice references ScriptLoader
https://pharo.fogbugz.com/f/cases/13333

15158 Move deprecated Methods to Deprecated40 package
https://pharo.fogbugz.com/f/cases/15158

15083 We should have senders/implementors in the code menu
https://pharo.fogbugz.com/f/cases/15083

40562
15124 Move String>>#lastIndexOfPKSignature: to Compression
https://pharo.fogbugz.com/f/cases/15124

15147 change class comment template
https://pharo.fogbugz.com/f/cases/15147

14885 Cant change name of a Spec tab after it has been opened
https://pharo.fogbugz.com/f/cases/14885
40561
15126 NBExternalEnumeration needs to respect slots
https://pharo.fogbugz.com/f/cases/15126

14873 Morph>>#boundingBoxOfSubmorphs is sometimes too large
https://pharo.fogbugz.com/f/cases/14873

40560
14383 VersionnerProjectBrowser>>example does not work
https://pharo.fogbugz.com/f/cases/14383

15133 #downloadSources references PharoV30.sources
https://pharo.fogbugz.com/f/cases/15133
40559
15139 Update Zn+Zdc March 2015
https://pharo.fogbugz.com/f/cases/15139

40558
15122 resuming Delay failing under certain condition
https://pharo.fogbugz.com/f/cases/15122
40557
15128 Class comment and #open on TxWorkspace
https://pharo.fogbugz.com/f/cases/15128

14834 I cant add classVariable to context
https://pharo.fogbugz.com/f/cases/14834

40556
15064 DynamicSpecExample should use #label: instead of deprecated #text:
https://pharo.fogbugz.com/f/cases/15064

15125 PharoCommonTools>>#cleanUp changes collection while iterating
https://pharo.fogbugz.com/f/cases/15125

15045 GTPharo4Extensions should be merged into GT-SpotterExtensions-Core
https://pharo.fogbugz.com/f/cases/15045
40555
15057 Split command line support and command line handling support
https://pharo.fogbugz.com/f/cases/15057

15120 PropertySlot: test for installing two proportySlots. Make sure the share the same baseSlot
https://pharo.fogbugz.com/f/cases/15120
40554
14829 Spec MenuModel submenu not working
https://pharo.fogbugz.com/f/cases/14829

14972 SpecWindow: AboutText always shows WindowModels class comment
https://pharo.fogbugz.com/f/cases/14972

6488 DropListModel>>whenSelectionChanged:
https://pharo.fogbugz.com/f/cases/6488

15067 TestReviver open does not work in Pharo4.0 Latest update: #40535
https://pharo.fogbugz.com/f/cases/15067

UDP client for Syslog

I just released an UDP client for the Syslog network protocol (RFC5424). The product is available on SmalltalkHub.
Best regards
Olivier 😉

Girlish pinkish Pharo … the 1st of April :)

today well today the GTSpotter announced a modern design for GTSpotter. And it feels pink 🙂

Screen Shot 2015-04-01 at 22.41.17

Here is their announce.

Hi,
We would like to present a brand new Spotter design! It follows all modern UI techniques as flat and material design. Feel the future coming! Update Spotter to the latest version:
{       { ‘ConfigurationOfRubric’. ‘AlainPlantec’. ‘Rubric’ }.
        { ‘ConfigurationOfGlamourCore’. ‘Moose’. ‘Glamour’ }.
        { ‘ConfigurationOfGTInspectorCore’. ‘Moose’. ‘GToolkit’ }.
        { ‘ConfigurationOfGTPlaygroundCore’. ‘Moose’. ‘GToolkit’ }.
        { ‘ConfigurationOfGTSpotter‘. ‘Moose’. ‘GToolkit’ }.
{ ‘ConfigurationOfGToolkitCore’. ‘Moose’. ‘GToolkit’ }.
} do: [ :spec |
        Gofer new
                smalltalkhubUser: spec second project: spec third;
                package: spec first;
                load ].
ConfigurationOfGToolkitCore loadDevelopment.
KMRepository reset.
Best wishes,
GT Team

http://catalog.pharo.org

Hi,

Last week I made a super small project to consolidate all projects published in all metarepos.
Is very simple, in the style of smalltalkhub repository list, but it shows all projects with the info their owners provided.
Yes, it could be a lot better, but we do not want to lose much time with this because not far in the future (but not right now) we will put online a much better service 🙂
You can see the catalog here:
and a JSON variant here:
enjoy,
Esteban

New release of DrGeo

Dr. Geo 15.04 released today, based on Pharo 3.
http://www.drgeo.eu/news/drgeo1504
It has been a long road to reach part of the Dr. Geo vision: from basic usage of interactive geometry to an empowered user with programming capabilities it was a long way. Only with Pharo, this vision became incredibly vivid with results beyond my initial expectations: not only Dr.Geo user can write script in a *comfortable environment*, more she can also study its code, and even modify it while DrGeo is in activity!