Planet Smalltalk

December 13, 2017

Pharo Weekly - Pharo Smalltalk: Un Entorno de Programación Subversiva

Hi all,

It has been published the video of the Pharo introduction talk (titled “Pharo Smalltalk: Un Entorno de Programación Subversiva”) we organized from Osoco for the Madrid Software Crafters meetup.
Both, video and slides are in spanish:
Cheers,
Rafael Luque

December 12, 2017

Pharo Weekly - Glorp on Github…

Hi Everyone,

I’ve migrated Glorp v130, including GlorpSQLite, from smalltalkhub to
github using Peter Uhnak’s excellent git-migration tool, see:
https://github.com/pharo-rdbms

To load Glorp:

Metacello new
repository: ‘github://pharo-rdbms/src’;
baseline: ‘Glorp’;
load.

To load Glorp with the UDBC SQLite drivers:

Metacello new
repository: ‘github://pharo-rdbms/src’;
baseline: ‘GlorpSQLite’;
load.

I’m not familiar with the other drivers, so I’m happy to help, but would
like some assistance before migrating the other drivers.

If I don’t hear any complaints in the next week I’ll eventually get
around to modifying the ConfigurationOfGlorp on smalltalkhub to use the
github version for Pharo 6.1 and 7.0.  Older versions of Pharo will
continue to load Glorp from smalltalkhub.

If there’s an official account that should own this project, I’m more
than happy to hand it over.

Cheers,
Alistair


Pharo Weekly - Calypso tool suite new release

Hello.

I glad announce new Calypso version. It is a big refactoring on navigation model and browser pluggability.
Now I start document new design and will post progress on it.
Notice: this version is not adopted for TelePharo and Cargo. It will be done soon.
Best regards,
Denis

December 10, 2017

Pharo Weekly - Nested JSON REST

> I guess part of what I’m interested in are patterns for hooking
> NeoJSON up to parse a REST response into objects to build a wrapper
> around a REST service. I see a chapter in Enterprise Pharo, which I’ll
> get to that soon.  Perhaps I was premature asking before reading that,
> but its good to have a few paths to explore.

Here is a recent example http://forum.world.st/Another-example-of-invoking-a-REST-JSON-web-service-resolving-User-Agent-strings-tt5017489.html

Thanks Sven.  That helped a lot.   I’d like to report success.
It may be useful to others to see how to progressively build up to parsing a Nested JSON REST
1. First parse the JSON into simple Dictionaries…
(ZnClient new
    enforceHttpSuccess: true;
    accept: ZnMimeType applicationJson;
    contentReader: [ :entity | NeoJSONReader fromString: entity contents ];
get) inspect.
==>Dictionary(
      ‘success’ ==> true
      ‘message’ ==> ”
      ‘result ‘ ==> an Array(a Dictionary(‘BaseCurrency’->’BTC’ ‘BaseCurrencyLong’->’Bitcoin’)
… a Dictionary(‘BaseCurrency’->’ETH’ ‘BaseCurrencyLong’->’Ethereum’)
2. Then parse the first level response into a real object…
Object subclass: #BittrexResponse
    instanceVariableNames: ‘success message result’
    classVariableNames: ”
    package: ‘Bittrex’
(ZnClient new
   enforceHttpSuccess: true;
   accept: ZnMimeType applicationJson;
   contentReader: [ :entity |
       (NeoJSONReader on: entity readStream)
mapInstVarsFor: BittrexResponse ;
         nextAs: BittrexResponse ];
      get) inspect.
==>BittrexResponse
      success => true
      message => ”
      result => an Array(a Dictionary(‘BaseCurrency’->’BTC’ ‘BaseCurrencyLong’->’Bitcoin’)
… a Dictionary(‘BaseCurrency’->’ETH’ ‘BaseCurrencyLong’->’Ethereum’)
Or alternatively…
(ZnClient new
   enforceHttpSuccess: true;
   accept: ZnMimeType applicationJson;
   contentReader: [ :entity | |reader|
   reader := (NeoJSONReader on: entity readStream).
   reader for: BittrexResponse do: [:m|
           m mapInstVar: #success.
           m mapInstVar: #message.
           m mapInstVar: #result ].
    reader nextAs: BittrexResponse ];
   get) inspect.
==>BittrexResponse
      success => true
      message => ”
      result => an Array(a Dictionary(‘BaseCurrency’->’BTC’ ‘BaseCurrencyLong’->’Bitcoin’)
… a Dictionary(‘BaseCurrency’->’ETH’ ‘BaseCurrencyLong’->’Ethereum’)
3. Finally parse into real objects the nested level holding the data you really want…
Object subclass: #Market
    instanceVariableNames: ‘MarketCurrency BaseCurrency MarketCurrencyLong BaseCurrencyLong MinTradeSize MarketName IsActive Created Notice IsSponsored LogoUrl’
   classVariableNames: ”
   package: ‘Bittrex’
(ZnClient new
   enforceHttpSuccess: true;
   accept: ZnMimeType applicationJson;
   contentReader: [ :entity | |reader|
   reader := (NeoJSONReader on: entity readStream).
   reader for: BittrexResponse do: [:m|
            m mapInstVar: #success.
            m mapInstVar: #message.
           (m mapInstVar: #result) valueSchema: #ArrayOfMarkets].
           reader for: #ArrayOfMarkets customDo: [ :mapping | mapping listOfElementSchema: Market ].
reader mapInstVarsFor: Market.
      reader nextAs: BittrexResponse ];
   get) inspect.

==>BittrexResponse
      success => true
      message => ”
      result => an Array(a Market(LTC) a Market(DOGE) a Market(VTC) a Market(PPC) a Market(FTC) a Market(RDD)
… Market(POWR) a Market(BTG) a Market(BTG) a Market(BTG) a Market(ADA) a Market(ENG) a Market(ENG))
WhooHoo!
A couple of things remaining:
* The instance variables of Market currently start with an upper-case to match the JSON fields.
  Lower-casing the first letter breaks things.
  What strategies can be used to conform here to Smalltalk conventions?
  Or is it easy enough to live with it?
* In various posts I’ve seen mention of a class-side method #neoJsonMapping:
   but there is no explanation of this in the Enterprise Book.
   How might #neoJsonMapping: come into the picture for my use case above?
cheers -ben

Pharo Weekly - About REST clients

Hi Ben,

I’ve made a few REST Clients

http://smalltalkhub.com/#!/~pdebruic/Stripe
http://smalltalkhub.com/#!/~pdebruic/Tropo
http://smalltalkhub.com/#!/~pdebruic/SegmentIO

And the elasticsearch one but its been advanced mostly lately by Sho Yoshida
(https://github.com/newapplesho) here
https://github.com/newapplesho/elasticsearch-smalltalk

He has also made REST clients for Twilio, AWS, SendGrid, Salesforce, and
Mixpanel among others.

Norbert Hartl made one for Mandrill (Mailchimps transactional email service)
http://smalltalkhub.com/#!/~NorbertHartl/Mandrill

And Francois Stephany made one for Postmark (another transactional email
service) http://smalltalkhub.com/#!/~PharoExtras/Postmark

So those are some examples of different approaches.

I also started/made a cross platform web client wrapper (just wraps calls to
ZnClient or WebClient on Squeak)
http://smalltalkhub.com/#!/~pdebruic/HTTPAPIClient

But IIRC I only used it in the Stripe API client.

Hope this gives you some ideas about how to approach your own solution

Paul


December 09, 2017

Hernán Morales Durand - Territorial: A new package for Geographical Information Retrieval for Smalltalk

Territorial is a Smalltalk library for Geographical Information Retrieval (GIR) in geopolitical objects. It was originally designed for a Phylogeographic Information Retrieval system based in BioSmalltalk. There will be no scripts in this post, everything is explained in the Territorial User Manual (PDF). The Territorial library has two locations: SmalltalkHub is where I will commit latest

Pharo Weekly - GT Mondrian: Mondrian on top of Block

Hi,

We are happy to announce, a graph visualization engine built on top of Bloc.

It is similar to the original Mondrian and the Mondrian from Roassal, but it is different in that it is built directly out of Bloc elements. This is interesting because it allows us to combine typical widgets with visualizations. The other interesting thing about it is that it validates the design of Bloc: right now, the implementation has 509 lines of code (excluding graph-specific layouts). The goal is to make visualization a first class citizen and an integral part of the IDE.

The key ingredient that made this happen is that Bloc can now treat graph layouts, such as tree or force based, behave under the same rules as typical widget layouts, such as grid or flow. The challenge comes from the fact that a graph layout depends on the notion of edges between elements, and we did not want to have elements know about edges in the core of Bloc.
The solution was to split the mondrian-doctypical edge implementation in graph visualization libraries into two distinct concepts:
• Line is an element that draws the connections.
• Edge defines constraints imposed by connections between elements.


Thus, edges form constraints, and constraints are what layouts deal with. That is one reason why elements in bloc have the ability of defining layout-specific constraints. Using this, we can nicely define edges between elements as a plugin to Bloc, but still be able to connect arbitrary elements. What’s more, it turns out that we need constraints for other layouts as well. For example, an element in a grid layout might specify the span.

 
The API of GT Mondrian is similar to the one from Roassal, but there are a few differences as well. These are described in the Pillar documentation available in the GitHub repo.
The best way to experience GT Mondrian and its documentation is to load the GToolkit as described here:
If you download the GT code through Iceberg, the documentation can be experienced live by inspecting:
‘./pharo-local/iceberg/feenkcom/gtoolkit-visualizer/doc/mondrian/index.pillar’ asFileReference
The Feenk team

December 08, 2017

Cincom Smalltalk - “Cincom Does So Much for Smalltalk”

Last month, FAST (Fundación Argentina de Smalltalk) hosted its 11th annual Smalltalks 2017 Conference at Universidad Nacional de La Plata, Argentina. Suzanne Fortman, the Director of Smalltalk Global Operations, was asked to […]

The post “Cincom Does So Much for Smalltalk” appeared first on Cincom Smalltalk.

Pharo Weekly - (the kernel of) a Framework for genetic algorithms

Hi,

I just implemented (the kernel of) a Framework for genetic algorithms (https://en.wikipedia.org/wiki/Genetic_algorithm) in Pharo.
Some of you could be dealing with optimisation problems. So maybe it could be useful for you.
I implemented some basic functionalities : monoobjecitve, multi objective, a crossover and mutation operators, uniform selection… I also implemented some basic exemples ( mono/multi knapsack and travelling salesman)
I still need to provide some documentation but there are lot of tests so it is easy to see how it works. I will add more operators from time to time.
The code is intended to be as easy to reuse as possible. It is on Smalltalkhub : http://smalltalkhub.com/#!/~Alidra/GeneticAlgorithmsFramework/
Please take a look and tell me what you think. I will be pleased to help if you think the Framework can apply to your problem. just let me know 🙂
Abdelghani

Pharo Weekly - Report period: 24 November 2017 to 8 December 2017

* 20734-Nested-Structures-using-Platform-longs-fails
>> Adding implementation of platform dependent longs in FFIExternalStructureReferenceHandle.
>>
>> Fixes https://pharo.fogbugz.com/f/cases/20734/Nested-Structures-using-Platform-longs-fails

Issue URL: https://pharo.fogbugz.com/f/cases/20734
PR URL: https://github.com/pharo-project/pharo/pull/519
Diff URL: https://github.com/pharo-project/pharo/pull/519/files

Thanks to tesonep

* 20847 Super setUp need to be called in various test classes (Part 2)
>> – call super setUp in HiNodesAndLinksIteratorWithOneLinkModelTest
>> – call super setUp in GuideTest
>> – call super setUp in SMTPClientTest
>> – call super setUp in SocketStreamTest
>> – call super setUp in SocketTest
>> – call super setUp in ZipArchiveTest
>> – call super setUp in TonelRepositoryTest
>> – call super setUp in SlotMethodRecompilationTest
>> – call super setUp in SmalllintManifestCheckerTest
>> – call super setUp in OmSessionStoreNameStrategyTest
>> – call super setUp in PharoBootstrapRuleTest
>> – call super setUp in PharoIssueTest
>> – call super setUp in PharoTutorialTestGoOnMockTutorial
>> – call super setUp in PharoTutorialTestNavigation
>> – call super setUp in UUIDGeneratorTest
>> – call super setUp in TestObjectsAsMethods
>> – call super setUp in TutorialPlayerTestWithMockTutorial
>> – call super setUp in PNGReadWriterTest
>> – call super setUp in PragmaTest
>> – call super setUP in QuotedPrintableMimeConverterTest
>> – call super setUP in RandomTest
>> – call super setUP in RectangleTest
>> – call super setUP in RecursionStopperTest
>> – call super setUp in ResumableTestFailureTestCase
>> – call super setUp in MTDependencyTest
>> – call super setUp in MTDevelopmentWorkfowTestWithXMLParser
>> – call super setUp in NautilusTest
>> – call super setUp in NautilusUITest
>> – call super setUp in SimpleTestResourceTestCase
>> – call super setUp in SUnitTest
>> – call super setUp in SimpleTestResource
>> – call super setUp in GTDebuggerSmokeTest
>> – call super setUp in GTPlaygroundBasicTest
>> – call super setUp in GTSpotterCandidatesListTest
>> – call super setUp in ZdcPluginSSLSessionTest
>> – call super setUp in ZnStaticFileServerDelegateTests
>> – call super setUp in ZnStaticFileServerDelegateTests
>> – call super setUp in GLMAnnouncementPropagationTest
>> – call super setUp in GLMAnnouncerTest
>> – call super setUp in GLMExplicitBrowserCopyTest
>> – call super setUp in GLMPagerModelTest
>> – call super setUp in GLMUpdateMorphicTest
>> – call super setUp in GLMPagerMorphTest
>>
>> https://pharo.fogbugz.com/f/cases/20847/Super-setUp-need-to-be-called-in-various-test-classes-Part-2

Issue URL: https://pharo.fogbugz.com/f/cases/20847 Super setUp need to be called in various test classes (Part 2)
PR URL: https://github.com/pharo-project/pharo/pull/593
Diff URL: https://github.com/pharo-project/pharo/pull/593/files

Thanks to astares

* 20840 Super setUp need to be called in various test classes (Part 1)
>> – call super setUp in AbstractNautilusUITest
>> – call super setUp in AndreasSystemProfilerTest
>> – call super setUp in ArrayTest
>> – call super setUp in AssociationTest
>> – call super setUp in ASTCacheResetTest
>> – call super setUp in BagTest
>> – call super setUp in Base64MimeConverterTest
>> – call super setUp in BuilderManifestTest
>> – call super setUp in CairoUTF8ConverterTest
>> – call super setUp in ChangesBrowserTest
>> – call super setUp in ChangeSetClassChangesTest
>> – call super setUp in ClassRenameFixTest
>> – call super setUp in ClassTest
>> – call super setUp in TraitsResource
>> – call super setUp in CollectionValueHolderTest
>> – call super setUp in CommandLineArgumentsTest
>> – call super setUp in CopyVisitorTest
>> – call super setUp in FreeTypeCacheTest
>> – call super setUp in HashAndEqualsTestCase
>> – call super setUp in HeapTest
>> – call super setUp in SortedCollectionTest
>> – call super setUp in SortHierarchicallyTest
>> – call super setUp in SetTest
>> – call super setUp in StackTest
>> – call super setUp in StringTest
>> – call super setUp in SymbolTest
>> – call super setUp in FloatArrayTest
>> – call super setUp in SHStyleElementTest
>> – call super setUp in HistoryIteratorTest
>> – call super setUp in IntervalTest
>> – call super setUp in OrderedCollectionTest
>> – call super setUp in LazyTabGroupTest
>> – call super setUp in MatrixTest
>> – call super setUp in RPackageTestCase
>> – call super setUp in ScheduleTest
>> – call super setUp in SendsDeprecatedMethodToGlobalRuleTest
>> – call super setUp in MorphTest
>> – call super setUp in MorphicEventHandlerTest
>> – call super setUp in MorphicAdapterTest
>> – call super setUp in MorphicUIBugTest
>> – call super setUp in CircleMorphTest

Issue URL: https://pharo.fogbugz.com/f/cases/20840 Super setUp need to be called in various test classes (Part 1)
PR URL: https://github.com/pharo-project/pharo/pull/590
Diff URL: https://github.com/pharo-project/pharo/pull/590/files

Thanks to astares

* 20838 Super setUp need to be called in System-SessionManager package tests
>> – call super setUp in SessionErrorHandlingTest
>> – call super setUp in SessionManagerRegistrationTest
>> – call super setUp in SessionManagerUnregistrationTest
>>
>> https://pharo.fogbugz.com/f/cases/20838/Super-setUp-need-to-be-called-in-System-SessionManager-package-tests

Issue URL: https://pharo.fogbugz.com/f/cases/20838 Super setUp need to be called in System
PR URL: https://github.com/pharo-project/pharo/pull/588
Diff URL: https://github.com/pharo-project/pharo/pull/588/files

Thanks to astares

* 20839 Super setUp need to be called in NECompletion-Tests
>> – call super setUp in NECControllerTest
>> – call super setUp in NECOverrideModelTest
>> – call super setUp in NECUntypedModelTest
>>
>> https://pharo.fogbugz.com/f/cases/20839/

Issue URL: https://pharo.fogbugz.com/f/cases/20839 Super setUp need to be called in NECompletion
PR URL: https://github.com/pharo-project/pharo/pull/589
Diff URL: https://github.com/pharo-project/pharo/pull/589/files

Thanks to astares

* 20826 Super setup need to be called in DependencyAnalyser tests
>> – call super setUp in DADependencyCheckerTest
>> – call super setUp in DAMessageSendAnalyzerTest
>> – call super setUp in DAPackageCycleDetectorTest (with some formatting cleanups in setUp)
>> – call super setUp in DAPackageCycleTest
>> – call super setUp in DAPackageDependencyTest
>> – call super setUp in DAPackageDependencyWrapperTest
>> – call super setUp in DAPackageRelationGraphDiffTest
>> – call super setUp in DAPackageRelationGraphTest (with some formatting cleanups in setUp)
>> – call super setUp in DAPackageTest (with some formatting cleanups in setUp)
>> – call super setUp in DATarjanAlgorithmTest (with some formatting cleanups in setUp)
>> Also add some tags to to better categorize the test classes in package “Tool-Dependency-Analyse-Test”

Issue URL: https://pharo.fogbugz.com/f/cases/20826 Super setup need to be called in DependencyAnalyser tests
PR URL: https://github.com/pharo-project/pharo/pull/579
Diff URL: https://github.com/pharo-project/pharo/pull/579/files

Thanks to astares

* 20791-World-menu-help-not-shown-in-the-menu
>> Set balloonText after the spec’s help.

Issue URL: https://pharo.fogbugz.com/f/cases/20791
PR URL: https://github.com/pharo-project/pharo/pull/575
Diff URL: https://github.com/pharo-project/pharo/pull/575/files

Thanks to luque

* 20830 Super setup need to be called in Monticello tests and other cleanups (comments, tags)
>> – call super setUp in MCChangeNotificationTest
>> – call super setUp in MCClassDefinitionTest
>> – call super setUp in MCDictionaryRepositoryTest
>> – call super setUp in MCDirectoryRepositoryTest
>> – call super setUp in MCFileInTest
>> – call super setUp in MCMczInstallerTest
>> – call super setUp in MCMethodDefinitionTest
>> – call super setUp in MCPatchTest
>> – call super setUp in MCSnapshotBrowserTest
>> – call super setUp in MCSnapshotTest
>> – call super setUp in MCStWriterTest
>> – call super setUp in MCVersionTest
>> – call super setUp in MCSnapshotResource (test resource)
>>
>> – categorize the three test methods in MCPackageManagerTest
>> – Add a comment to uncommented MCTestCase
>> – Add a comment to uncommented MCRepositoryTest
>> – Add a comment to uncommented MCSnapshotResource
>> – Add a comment to uncommented MCMockDependency
>>
>> – add some tags to structure the many test classes in the package better
>>
>>
>> https://pharo.fogbugz.com/f/cases/20830/Super-setup-need-to-be-called-in-Monticello-tests-and-other-cleanups-comments-tags

Issue URL: https://pharo.fogbugz.com/f/cases/20830 Super setup need to be called in Monticello tests and other cleanups (comments, tags)
PR URL: https://github.com/pharo-project/pharo/pull/583
Diff URL: https://github.com/pharo-project/pharo/pull/583/files

Thanks to astares

* 20816 Typo in DateAndTimeEpochTest and DateAndTimeUnixEpochTest tearDown
>> fix typo
>>
>> https://pharo.fogbugz.com/f/cases/20816/Typo-in-DateAndTimeEpochTest-and-DateAndTimeUnixEpochTest-tearDown

Issue URL: https://pharo.fogbugz.com/f/cases/20816 Typo in DateAndTimeEpochTest and DateAndTimeUnixEpochTest tearDown
PR URL: https://github.com/pharo-project/pharo/pull/572
Diff URL: https://github.com/pharo-project/pharo/pull/572/files

Thanks to astares

* 20822 Cleanup AbstractKeymappingTest
>> – override #isAbstract as it is an abstract test superclass
>> – call super setUp
>> – call super tearDown
>> – set default to nil in tearDown to avoid further referencing

Issue URL: https://pharo.fogbugz.com/f/cases/20822 Cleanup AbstractKeymappingTest
PR URL: https://github.com/pharo-project/pharo/pull/577
Diff URL: https://github.com/pharo-project/pharo/pull/577/files

Thanks to astares

* 20820 Better formatting of TestSuite setUp
>> – one blank instead of two
>> – format to be more readable
>>
>> https://pharo.fogbugz.com/f/cases/20820/Better-formatting-of-TestSuite-setUp

Issue URL: https://pharo.fogbugz.com/f/cases/20820 Better formatting of TestSuite setUp
PR URL: https://github.com/pharo-project/pharo/pull/574
Diff URL: https://github.com/pharo-project/pharo/pull/574/files

Thanks to astares

* 20825 Super setUp need to be called in Opal Compiler tests
>> – call super setUp in OCBytecodeDecompilerTest
>> – call super setUp in OCClosureCompilerTest
>> – call super setUp in OCCompilerExceptionTest
>> – call super setUp in OCCompilerNotifyingTest
>> – call super setUp in OCCompilerTest

Issue URL: https://pharo.fogbugz.com/f/cases/20825 Super setUp need to be called in Opal Compiler tests
PR URL: https://github.com/pharo-project/pharo/pull/578
Diff URL: https://github.com/pharo-project/pharo/pull/578/files

Thanks to astares

* 20819 Fix variable assignment in RBScanner>>stripComment
>> https://pharo.fogbugz.com/f/cases/20819/Fix-variable-assignment-in-RBScanner-stripComment

Issue URL: https://pharo.fogbugz.com/f/cases/20819 Fix variable assignment in RBScanner>>stripComment
PR URL: https://github.com/pharo-project/pharo/pull/573
Diff URL: https://github.com/pharo-project/pharo/pull/573/files

Thanks to astares

* Fix potential dangling reference to a released FT_Face
>> This is issue https://pharo.fogbugz.com/f/cases/20776/Potential-dangling-ref-to-freed-FT_Face
>>
>> Technical details:
>>
>> A cairo_font_face could still be referenced from external heap and further used.
>> Thus we must NOT release the FT_Face until the external reference count drops to 1.
>>
>> Thus the CairoFontFace is not a good place for retaining a strong reference to the FT2Face, because the reference will vanish as soon as the Smalltalk object is garbage collected, while some external cairo_font_face still point on it.
>> It’s better to have the strong reference in the executor, and avoid garbageCollecting the executor while there are external references to the resource data…
>>
>> The solution is to use a specific CairoFontFaceExecutor.
>> If the resource is shared, then we have no other choice than regularly polling the ref count in a new Process.
>> This process must stop whenever the session change.
>>
>> Please review carefully and pass some tests.

Issue URL: https://pharo.fogbugz.com/f/cases/Fix potential dangling reference to a released FT_Face
PR URL: https://github.com/pharo-project/pharo/pull/565
Diff URL: https://github.com/pharo-project/pharo/pull/565/files

Thanks to nicolas-cellier-aka-nice

* 20821 Remove unused ivar from RBKeywordToken and RBIdentifierToken
>> Remove
>> – unused ivar stopPosition in RBIdentifierToken and
>> – unused ivar stopPosition in RBKeywordToken
>>
>> https://pharo.fogbugz.com/f/cases/20821/Remove-unused-ivar-from-RBKeywordToken-and-RBIdentifierToken

Issue URL: https://pharo.fogbugz.com/f/cases/20821 Remove unused ivar from RBKeywordToken and RBIdentifierToken
PR URL: https://github.com/pharo-project/pharo/pull/576
Diff URL: https://github.com/pharo-project/pharo/pull/576/files

Thanks to astares

* 20828 Super setup need to be called in Versionner tests
>> – call super setUp in MBAbstractTest
>> – call super setUp in MBPackageInfoTest
>>
>> https://pharo.fogbugz.com/f/cases/20828/Super-setup-need-to-be-called-in-Versionner

Issue URL: https://pharo.fogbugz.com/f/cases/20828 Super setup need to be called in Versionner tests
PR URL: https://github.com/pharo-project/pharo/pull/581
Diff URL: https://github.com/pharo-project/pharo/pull/581/files

Thanks to astares

* 20829 Super setup need to be called in Spec tests
>> – call super setUp in MorphicLabelAdapterTest
>> – call super setUp in MorphicTreeAdapterTest
>> – call super setUp in SpecInterpreterTest
>> – call super setUp in SpecTestCase
>>
>> https://pharo.fogbugz.com/f/cases/20829/Super-setup-need-to-be-called-in-Spec-tests

Issue URL: https://pharo.fogbugz.com/f/cases/20829 Super setup need to be called in Spec tests
PR URL: https://github.com/pharo-project/pharo/pull/582
Diff URL: https://github.com/pharo-project/pharo/pull/582/files

Thanks to astares

* 20827 Super setUp need to be called RBParseTreeRewriterTest and RBParseTreeSearcherTest
>> – call super setUp in RBParseTreeRewriterTest
>> – call super setUp in RBParseTreeSearcherTest

Issue URL: https://pharo.fogbugz.com/f/cases/20827 Super setUp need to be called RBParseTreeRewriterTest and RBParseTreeSearcherTest
PR URL: https://github.com/pharo-project/pharo/pull/580
Diff URL: https://github.com/pharo-project/pharo/pull/580/files

Thanks to astares

* 20814 Add release check that we have no protocols left without methods
>> Check that we have no protocols left without methods
>>
>> https://pharo.fogbugz.com/f/cases/20814/Add-release-check-that-we-have-no-protocols-left-without-methods

Issue URL: https://pharo.fogbugz.com/f/cases/20814 Add release check that we have no protocols left without methods
PR URL: https://github.com/pharo-project/pharo/pull/570
Diff URL: https://github.com/pharo-project/pharo/pull/570/files

Thanks to astares

* 20815 Add a release test ensuring that there are no empty packages in the i
>> Add a release test ensuring that there are no empty packages in the image left
>>
>> https://pharo.fogbugz.com/f/cases/20815/Release-check-so-that-we-have-no-empty-packages-left

Issue URL: https://pharo.fogbugz.com/f/cases/20815 Add a release test ensuring that there are no empty packages in the i
PR URL: https://github.com/pharo-project/pharo/pull/571
Diff URL: https://github.com/pharo-project/pharo/pull/571/files

Thanks to astares

* 20786-halt-messages-are-not-highlighted-in-red-as-the-other-flavours-of-halt-messages
>> Added haltIfNil to the selectors to be highlighted by HaltIconStyler.
>> Changed the structure of the shouldStyleNode method’s code to increase clarity.

Issue URL: https://pharo.fogbugz.com/f/cases/20786
PR URL: https://github.com/pharo-project/pharo/pull/569
Diff URL: https://github.com/pharo-project/pharo/pull/569/files

Thanks to dupriezt

* 20781-update-to-iceberg-064
>> closes issue #20781

Issue URL: https://pharo.fogbugz.com/f/cases/20781
PR URL: https://github.com/pharo-project/pharo/pull/560
Diff URL: https://github.com/pharo-project/pharo/pull/560/files

Thanks to estebanlm

* 20793-During-Bootstrap-if-a-baseline-installation-fails-it-should-cancel-the-process
>> This PR introduces two changes to handle the errors during the bootstrap:
>>
>> 1. The Whole process now has a timeout of 60 minutes.
>> 2. After initializing the world in BaselineOfMorphic the UIManager is restored to the correct UIManager depending the system state. If it is headless then the NonInteractiveManager is used, otherwise the MorphicUIManager.

Issue URL: https://pharo.fogbugz.com/f/cases/20793
PR URL: https://github.com/pharo-project/pharo/pull/567
Diff URL: https://github.com/pharo-project/pharo/pull/567/files

Thanks to tesonep

* 20800-do-not-open-welcome-window-for-now
>> https://pharo.fogbugz.com/f/cases/20800/do-not-open-welcome-window-for-now
>>
>> do not open the welcome window

Issue URL: https://pharo.fogbugz.com/f/cases/20800
PR URL: https://github.com/pharo-project/pharo/pull/568
Diff URL: https://github.com/pharo-project/pharo/pull/568/files

Thanks to pavel-krivanek

* 20786-halt-messages-are-not-highlighted-in-red-as-the-other-flavours-of-halt-messages
>> Created HaltColonIconStylerClass, to style `halt:` message nodes with red highlighting in code browsers.

Issue URL: https://pharo.fogbugz.com/f/cases/20786
PR URL: https://github.com/pharo-project/pharo/pull/564
Diff URL: https://github.com/pharo-project/pharo/pull/564/files

Thanks to dupriezt

* 20782-CompiledCode-misses-an-abstract-sourcePointer-method
>> introduced CompiledCode>>sourcePointer as an abstract method

Issue URL: https://pharo.fogbugz.com/f/cases/20782
PR URL: https://github.com/pharo-project/pharo/pull/561
Diff URL: https://github.com/pharo-project/pharo/pull/561/files

Thanks to LucFabresse

* -20785/Fix-the-names-of-uploaded-bootstrap-zip-files
>> https://pharo.fogbugz.com/f/cases/20785/Fix-the-names-of-uploaded-bootstrap-zip-files

Issue URL: https://pharo.fogbugz.com/f/cases/
PR URL: https://github.com/pharo-project/pharo/pull/563
Diff URL: https://github.com/pharo-project/pharo/pull/563/files

Thanks to pavel-krivanek

* 20783-upload-temporary-building-files-into-a-separate-repository
>> https://pharo.fogbugz.com/f/cases/20783/upload-temporary-building-files-into-a-separate-repository

Issue URL: https://pharo.fogbugz.com/f/cases/20783
PR URL: https://github.com/pharo-project/pharo/pull/562
Diff URL: https://github.com/pharo-project/pharo/pull/562/files

Thanks to pavel-krivanek

* 20777-Fix-instVarAt-instVarAt-put-comment
>> https://pharo.fogbugz.com/f/cases/20777/Fix-instVarAt-instVarAt-put-comment
>>
>> http://forum.world.st/Problem-with-primitive-instVarAt-instVarAt-put-what-should-we-do-td5036631.html

Issue URL: https://pharo.fogbugz.com/f/cases/20777
PR URL: https://github.com/pharo-project/pharo/pull/559
Diff URL: https://github.com/pharo-project/pharo/pull/559/files

Thanks to clementbera

* 20772 – Unused temps in MBConfigurationInfo, MethodDictionaryTest,…
>> Fix unused temps in
>>
>> MethodDictionaryTest>>#testIdentityKeyAtNonExistantValueReturnsFailBlock
>> MBConfigurationInfo>>#buildStringOrText
>> MBPackageInfo>>#versions
>> MCFileTreeRepository class>>#parseName:extension:
>> MCWorkingCopyBrowser>>#addRepositoryToPackage
>> MethodDictionaryTest>>#testGrowPreservesElements

Issue URL: https://pharo.fogbugz.com/f/cases/20772
PR URL: https://github.com/pharo-project/pharo/pull/557
Diff URL: https://github.com/pharo-project/pharo/pull/557/files

Thanks to astares

* 20745-cleanup-unused-methods-OCOptimizedBlockScope
>> cleanup unused methods OCOptimizedBlockScope
>>
>> https://pharo.fogbugz.com/f/cases/20745/cleanup-unused-methods-OCOptimizedBlockScope

Issue URL: https://pharo.fogbugz.com/f/cases/20745
PR URL: https://github.com/pharo-project/pharo/pull/556
Diff URL: https://github.com/pharo-project/pharo/pull/556/files

Thanks to MarcusDenker

* 20700-translateToUTC-does-not-work-on-Month-and-Year
>> 20700 translateToUTC does not work on Month and Year
>>
>> Update Year>>starting:duration: and Month>>starting:duration: to keep the supplied DateAndTime’s offset.
>>
>> Add automated tests to Year, Month and Week to confirm correct operation.

Issue URL: https://pharo.fogbugz.com/f/cases/20700
PR URL: https://github.com/pharo-project/pharo/pull/545
Diff URL: https://github.com/pharo-project/pharo/pull/545/files

Thanks to akgrant43

* 20770-Open-WelcomeHelp-window-at-startup
>> https://pharo.fogbugz.com/f/cases/20770/Open-WelcomeHelp-window-at-startup
>>
>> open WelcomeHelp on startup

Issue URL: https://pharo.fogbugz.com/f/cases/20770
PR URL: https://github.com/pharo-project/pharo/pull/555
Diff URL: https://github.com/pharo-project/pharo/pull/555/files

Thanks to pavel-krivanek

* 20769-DateAndTime-now-returns-summer-time-in-winter-France-time-zone
>> https://pharo.fogbugz.com/f/cases/20769/DateAndTime-now-returns-summer-time-in-winter-France-time-zone
>>
>> add missing startup list registrations

Issue URL: https://pharo.fogbugz.com/f/cases/20769
PR URL: https://github.com/pharo-project/pharo/pull/553
Diff URL: https://github.com/pharo-project/pharo/pull/553/files

Thanks to pavel-krivanek

* 19304-anyOne-comment-should-be-improved
>> https://pharo.fogbugz.com/f/cases/19304/
>>
>> improve #anyOne comment

Issue URL: https://pharo.fogbugz.com/f/cases/19304
PR URL: https://github.com/pharo-project/pharo/pull/552
Diff URL: https://github.com/pharo-project/pharo/pull/552/files

Thanks to pavel-krivanek

* 20768-remove-GLMWatcherMorphicTest
>> https://pharo.fogbugz.com/f/cases/20768/remove-GLMWatcherMorphicTest
>>
>> remove GLMWatcherMorphicTest

Issue URL: https://pharo.fogbugz.com/f/cases/20768
PR URL: https://github.com/pharo-project/pharo/pull/551
Diff URL: https://github.com/pharo-project/pharo/pull/551/files

Thanks to pavel-krivanek

* 20738 dictionarystore string generates incorrect source code when a negative number is in values

Issue URL: https://pharo.fogbugz.com/f/cases/20738 dictionarystore string generates incorrect source code when a negative number is in values
PR URL: https://github.com/pharo-project/pharo/pull/538
Diff URL: https://github.com/pharo-project/pharo/pull/538/files

Thanks to juliendelplanque

* 20767-Decrease-retry-times-for-failing-jobs
>> https://pharo.fogbugz.com/f/cases/20767/Decrease-retry-times-for-failing-jobs

Issue URL: https://pharo.fogbugz.com/f/cases/20767
PR URL: https://github.com/pharo-project/pharo/pull/550
Diff URL: https://github.com/pharo-project/pharo/pull/550/files

Thanks to pavel-krivanek

* 20758-Slot-should-have-explicit-property-definingClass2
>> definingClass is added to Slot.
>> It is initialized in ClassDescription>>superclass:layout:
>> SlotIntegrationTest>>testSlotsAreInitializedWithDefiningAnonimousClass covers that initialization is performed.
>>
>> https://pharo.fogbugz.com/f/cases/20758/Slot-should-have-explicit-property-definingClass

Issue URL: https://pharo.fogbugz.com/f/cases/20758
PR URL: https://github.com/pharo-project/pharo/pull/543
Diff URL: https://github.com/pharo-project/pharo/pull/543/files

Thanks to dionisiydk

* 20747-Date-comparisons-without-time-zone
>> 20747 Date comparisons without time zone
>>
>> Add time zone independent comparisons to Date.

Issue URL: https://pharo.fogbugz.com/f/cases/20747
PR URL: https://github.com/pharo-project/pharo/pull/544
Diff URL: https://github.com/pharo-project/pharo/pull/544/files

Thanks to akgrant43

* 20766-Increase-priority-of-FreeType-initialization
>> https://pharo.fogbugz.com/f/cases/20766/Increase-priority-of-FreeType-initialization
>>
>> increase priority of FreeType initialization

Issue URL: https://pharo.fogbugz.com/f/cases/20766
PR URL: https://github.com/pharo-project/pharo/pull/548
Diff URL: https://github.com/pharo-project/pharo/pull/548/files

Thanks to pavel-krivanek

* 20699-Convenience-method-for-creating-typed-buffers-to-pass-by-ref-through-FFI-
>> https://pharo.fogbugz.com/f/cases/20699/Convenience-method-for-creating-typed-buffers-to-pass-by-ref-through-FFI

Issue URL: https://pharo.fogbugz.com/f/cases/20699
PR URL: https://github.com/pharo-project/pharo/pull/508
Diff URL: https://github.com/pharo-project/pharo/pull/508/files

Thanks to estebanlm

* 20759 Unused temps in Metacello classes
>> Fix unused temps
>>
>> MetacelloMCProjectSpec>>#determineCurrentVersionForLoad
>> MetacelloToolBox class>>#defaultTopic:for:
>> MetacelloToolBox>>#commitBaselineOfMethod
>> MetacelloToolBox>>#commitMethod
>> MetacelloToolBox>>#updateVersionMethodForVersion:projectAttributes:updateProjects:updatePackages:versionSpecsDo:
>> MetacelloToolBoxConstructor>>#extractSymbolicVersionSpecsFor:
>> MetacelloVersionSpec>>#configMethodOn:last:indent:
>> MetacelloMCVersion>>#executeLoadFromArray:
>> MetacelloMCVersionValidator>>#validateProjectVersionLoad:loads:
>> MetacelloMemberListSpec>>#mergeSpec:
>> MetacelloPackageSpec>>#currentPackageLoaded:notLoaded:using:
>> MetacelloPackageSpec>>#mergeSpec:
>> MetacelloProject>>#version:
>> MetacelloScriptEngine>>#lookupProjectSpecFor:
>> MetacelloSemanticVersionNumber class>>#fromString:forPattern:

Issue URL: https://pharo.fogbugz.com/f/cases/20759 Unused temps in Metacello classes
PR URL: https://github.com/pharo-project/pharo/pull/546
Diff URL: https://github.com/pharo-project/pharo/pull/546/files

Thanks to astares

* 20763 ExternalAddress>>finalize should be in finalization protocol
>> Put finalize into finalization category to satisfy ProperMethodCategorizationTest
>>
>> https://pharo.fogbugz.com/f/cases/edit/20763/ExternalAddress-finalize-should-be-in-finalization-protocol

Issue URL: https://pharo.fogbugz.com/f/cases/20763 ExternalAddress>>finalize should be in finalization protocol
PR URL: https://github.com/pharo-project/pharo/pull/547
Diff URL: https://github.com/pharo-project/pharo/pull/547/files

Thanks to astares

* 20061-Explicit-isAbstract-is-needed-instead-of-using-hasAbstractMethods-in-tools2
>> https://pharo.fogbugz.com/f/cases/20061/Explicit-isAbstract-is-needed-instead-of-using-hasAbstractMethods-in-tools
>>
>> Few things are done:
>> – Behavior and friends define isAbstract method with optimized logic.
>> It gives 50 milliseconds for the test:
>> [50 timesRepeat: [ PluggableTextMorph isAbstract]] timeToRun.
>> 50 items is much more then we able to see in browser class list. So it should not affect browser speed.
>> – BehaviorTest>>testIsAbstract
>> – CompiledMethod>>isAbstract is now take into account traits explicit and implicit requirement.
>> – Nautilus uses #isAbstract instead of hasAbstractMethods to mark abstract classes

Issue URL: https://pharo.fogbugz.com/f/cases/20061
PR URL: https://github.com/pharo-project/pharo/pull/541
Diff URL: https://github.com/pharo-project/pharo/pull/541/files

Thanks to dionisiydk

* 20740-Work-Needed-isAbstract-not-working-correctly-on-64bit
>> Fixed markerOrNil to work on both bytecode sets for 64 bits and 32 bits.
>>
>> https://pharo.fogbugz.com/f/cases/20740

Issue URL: https://pharo.fogbugz.com/f/cases/20740
PR URL: https://github.com/pharo-project/pharo/pull/537
Diff URL: https://github.com/pharo-project/pharo/pull/537/files

Thanks to clementbera

* 20176-Error-in-ByteArraybooleanAt
>> Fix ByteArray>>#booleanAt: to actually return true when the byte at the querried position in the ByteArray is a non-zero integer

Issue URL: https://pharo.fogbugz.com/f/cases/20176
PR URL: https://github.com/pharo-project/pharo/pull/539
Diff URL: https://github.com/pharo-project/pharo/pull/539/files

Thanks to dupriezt

* 20756-Secondary-selections-are-dark-after-switch-to-the-white-theme-in-Pharo-7
>> https://pharo.fogbugz.com/f/cases/20756/Secondary-selections-are-dark-after-switch-to-the-white-theme-in-Pharo-7
>>
>> change default secondary selection color

Issue URL: https://pharo.fogbugz.com/f/cases/20756
PR URL: https://github.com/pharo-project/pharo/pull/540
Diff URL: https://github.com/pharo-project/pharo/pull/540/files

Thanks to pavel-krivanek

* 20690-assertequals
>> https://pharo.fogbugz.com/f/cases/20690/assert-equals
>>
>> – swap actual and experted sides in comparig inside assert:equals:
>> – deprecate assert:descriptionBlock:

Issue URL: https://pharo.fogbugz.com/f/cases/20690
PR URL: https://github.com/pharo-project/pharo/pull/533
Diff URL: https://github.com/pharo-project/pharo/pull/533/files

Thanks to pavel-krivanek

* 20729-Monticello-history-browser-should-enable-diffing-with-parent
>> This is issue https://pharo.fogbugz.com/f/cases/20729/Monticello-history-browser-should-enable-diffing-with-parent
>> Such option is really handy when cherry picking changes from other branches
>> Pick the implementation from Squeak (fbs, eem) and adapt to Pharo

Issue URL: https://pharo.fogbugz.com/f/cases/20729
PR URL: https://github.com/pharo-project/pharo/pull/513
Diff URL: https://github.com/pharo-project/pharo/pull/513/files

Thanks to nicolas-cellier-aka-nice

 


December 07, 2017

Pharo Weekly - HaltManager: The friend of the debugger

Hello,

I have developed a package to assist developers managing their halts and breakpoints: HaltManager.

HaltManager provides a window showing all the breakpoints and halt messages of the system, and allows one to toggle them on/off with a simple click. Halt messages can also be toggled via source code rewriting. The deactivation/reactivation feature is available in all code browsers, not only in the HaltManager window.

Metacello new
  baseline: 'HaltManager';
  repository: 'github://dupriezt/HaltManager/src';
  load

It is available here, with installation instructions and pictures: https://github.com/dupriezt/HaltManager

Feedback welcome.

Cheers,
Thomas Dupriez

 

33613913-2e9b59de-d9d6-11e7-944a-7de40071eb67.jpg


December 06, 2017

Torsten Bergmann - HaltManager for Pharo

Want to better manage your debugging breakpoints in Pharo?

Then use HaltManager. Source code and docu is on GitHub: https://github.com/dupriezt/HaltManager

Pierce Ng - Creating an X.509 certificate request

From within Pharo:

| rsa |
rsa := LcRSA generateKey: 2048.
LcX509Request new
  setSubject: 'www.samadhiweb.com';
  setPublicKey: (LcEvpPublicKey setRSA: rsa);
  sign;
  asString

The output is an X.509 certificate request, suitable for Let's Encrypt:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: CN=www.samadhiweb.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b6:c4:94:dc:83:4c:8f:92:6c:8c:f5:e4:3a:66:
                    b9:6a:90:e8:51:aa:58:da:e4:ea:3a:59:1d:78:96:
                    14:ab:83:23:2f:20:45:13:70:88:8d:b5:93:8c:18:
                    c5:78:70:c9:b3:8e:e3:f4:66:64:9c:9d:78:b9:dc:
                    9b:2b:e1:6d:06:d0:b4:6a:83:94:4e:6e:27:dd:12:
                    7f:79:b2:a1:67:ed:96:bb:29:fd:dd:dd:78:5a:8c:
                    c1:8f:83:8f:f7:c8:b1:52:d2:8b:de:9f:6b:31:9c:
                    1f:b7:99:34:83:c1:e6:9d:d4:10:59:ff:bd:32:9f:
                    0a:8c:e2:3b:06:8c:6c:60:24:e2:89:6c:1f:d4:97:
                    c0:e2:77:44:98:31:d8:3f:41:29:e0:ac:ef:56:fb:
                    7c:a5:55:94:45:51:3d:b6:4e:5b:e7:1b:05:7c:7e:
                    0b:1d:cc:a3:88:30:7a:98:51:c7:64:cf:d6:29:f1:
                    16:86:00:b4:72:10:1a:c7:77:16:9d:94:c3:4e:fc:
                    83:63:e5:d7:09:d6:40:cb:d4:26:7e:3e:c7:e4:64:
                    7f:7e:1c:af:53:68:24:f5:5c:a6:79:76:2f:cf:29:
                    bf:9c:3d:3e:38:00:5e:9d:a6:f3:92:09:9b:eb:e4:
                    b4:24:ca:a3:d9:ed:6e:ed:bd:06:af:40:fe:7b:f3:
                    50:c7
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         4a:21:79:18:51:92:2c:d7:cd:ac:f0:f3:bc:6e:53:f3:de:72:
         11:56:ce:f3:e1:71:61:a5:8a:cb:95:4f:31:36:1e:65:50:09:
         39:71:95:a2:a5:30:c6:fc:36:29:7f:6e:86:1f:2a:52:a9:b8:
         55:39:b2:82:b6:67:84:b3:35:2b:be:57:5f:fd:7e:a5:b1:b9:
         ab:20:65:d7:20:68:97:14:0f:13:30:1d:54:c9:7f:55:0d:58:
         0a:14:2d:5b:80:57:a0:6a:73:31:6d:64:52:43:d1:6d:c2:3b:
         8f:88:25:9a:6e:50:52:1d:f8:66:c0:d7:ed:85:be:ef:8b:63:
         20:c1:48:e4:d2:30:6c:cf:07:27:bb:a7:56:82:8a:7d:c7:fe:
         73:29:f1:4a:f4:18:77:0e:56:48:20:41:08:e5:2e:2c:07:67:
         16:e3:9c:d5:c3:0e:02:17:c4:11:5c:01:19:20:4b:c9:e2:37:
         3b:14:02:90:77:d2:17:1d:62:24:cc:5b:1c:b0:c9:48:71:02:
         c6:ff:d8:5e:57:30:bb:da:c7:73:4d:40:ed:b2:8f:a1:2c:07:
         d6:58:22:94:7f:ff:bc:94:38:23:30:fb:0c:51:53:6c:13:f6:
         dc:92:9e:c8:67:fa:ed:3b:e7:1a:1d:00:6e:5c:f6:c5:27:7c:
         d7:76:5a:78

December 05, 2017

Torsten Bergmann - StarfallNight

A little game implemented using Bloc in Pharo 6.1. 3 jewels drop from the top.


You can move it left and right by left arrow key and right arrow key respectively. You can rotate the order of the jewels by the up arrow key. The down arrow key will drop the jewels on-to the floor. If the pile of the jewels stack on the floor have 3 or more of the same kind of jewels in a row, column or diagonal, they will vanish out and the jewels on the vanished one will fall down to the floor (or another jewel), which may cause another vanish of jewels.

This game was implemented to learn how to use Bloc. The source code is available at github https://github.com/tomooda/StarfallNight/

Torsten Bergmann - Pharo Newsletter

The Pharo newsletter archive is now available on:

http://newsletter.pharo.org

If you like you can help with content or own articles for the newsletter.

Torsten Bergmann - TypeLWidgets for Pharo

A demo of 2 retro analog meters. The left meter monitors system status. The blue hand shows CPU load, the red for memory space and the short black for GC. The right meter shows activities of the mouse.The blue hand shows x position of the mouse cursor, the red for y position and the short black at the bottom for mouse buttons.

TypeLWidgets for Pharo is an open source library distributed at https://github.com/tomooda/TypeLWidgets under the MIT license.


 

Pharo Weekly - http://newletter.pharo.org

Hi,

the newsletter archive is now available on

newsletter.pharo.org

which is more easy to remember.

Thanks Marcus for setting up the redirect!

Bye


December 04, 2017

Pharo Weekly - Pharo at Dev Conf

Christophe Demarey will present agile programming in Pharo at http://bordeaux.ncrafts.io/

 


Pharo Weekly - Bloc and GT update

Hi,

Here is an update of the work on Bloc and GT:

Bloc:
– Bezier curves (cubic and quadratic).
https://twitter.com/feenkcom/status/934765444464021504
https://twitter.com/feenkcom/status/934856909001252865

– Dragging is now possible through a BlDragHandler that can be attached to any element.

– Pixel accurate line heads and tails
https://twitter.com/feenkcom/status/936704646290305025

– More flexible scalable element.
https://twitter.com/feenkcom/status/934003681539907585

– Improved scalability of the rendering. For example, on Mac, we are on par with the speed of Firefox.
https://twitter.com/feenkcom/status/931462535861108736

– Sparta is now able to load custom fonts.
https://twitter.com/feenkcom/status/930919637214285824

– Text insertion works now much better. Deletion and Selection still require more work.

– The rope data structure can now be better inspected.
https://twitter.com/feenkcom/status/937298739584172032

– Sparta/Moz2D has a visual loader that also provides more specific details in case of errors.
https://twitter.com/feenkcom/status/936501909581688832

– Moz2D is now installed by default on Linux 64b.

GT:

– The GT Visualizer sub-project now contains two tools:

— GT Mondrian is a graph visualization engine that is both performant and shows how Bloc works well for visualizations. More details in a follow up post.
https://twitter.com/feenkcom/status/937682660704563202

— GT Connector is a new tool for browsing connected examples. More details about it in a follow up post.
https://twitter.com/feenkcom/status/936109463462965248

Enjoy,
The feenk team


www.tudorgirba.com
www.feenk.com


December 03, 2017

Pharo Weekly - Network Extras…

 

Hi. I just committed the latest version of Douai’s team package NetworkExtras. It includes support for multicast socket, and splitting/reconstruting data to send over UDP data larger than datagrams/IP packets size (MTU).

Gofer it
    smalltalkhubUser: 'CAR' project: 'ReusableBricks';
    configurationOf: 'ReusableBricks';
    loadBleedingEdge

Comments are welcome.

BTW, I run tests only on Mac.
Noury Bouraqadi

December 02, 2017

Pharo Weekly - Pharo newsletter archive

Every month one cool newsletter about our lovely community and system!

Register! Just visiting http://www.pharo.org

The archives are here

https://us11.campaign-archive.com/home/?u=6f667565c2569234585a7be77&id=048680a940

Pharo crew


November 29, 2017

Pharo Weekly - A little pref script for Pharo70alpha

StartupPreferencesLoader default executeAtomicItems: {
StartupAction
name: ‘Git Settings’
code: [
FileStream stdout
cr; nextPutAll: ‘Setting the ssh credentials’; cr.
Iceberg enableMetacelloIntegration: true.
IceCredentialsProvider useCustomSsh: true.
IceCredentialsProvider sshCredentials
username: ‘git’;
publicKey: ‘/Users/ducasse/.ssh/id_rsa.pub’;
privateKey: ‘/Users/ducasse/.ssh/id_rsa’.
IceCredentialsProvider
plaintextCredentials: (IcePlaintextCredentials new username: ‘Ducasse’; password: ‘XXXX’ ; yourself ).
IceRepository
shareRepositoriesBetweenImages: true;
sharedRepositoriesLocationString:       ‘/Users/ducasse/Workspace/FirstCircle/ActiveResearch/Pharo/PharoCodeBase/’.
Iceberg showSystemRepositories: true.
IceRepository registry
detect: [ :each | each name = ‘pharo’ ]
ifFound: [ :repo | repo location: ‘/Users/ducasse/Workspace/FirstCircle/ActiveResearch/Pharo/PharoCodeBase/pharo’ asFileReference ].
FileStream stdout cr; nextPutAll: ‘Finished’; cr ].
}.


November 28, 2017

Pharo Weekly - Simple VoxelSpace engine

Hi,
I tried to port and optimize the extremely simple VoxelSpace engine into Pharo.

https://github.com/pavel-krivanek/VoxelSpace

How to load
Metacello new
  baseline: ‘VoxelSpace’;
  repository: ‘github://pavel-krivanek/VoxelSpace/src’;
  load.
How to run
Copy maps into the image directory and then evaluate:
VoxelSpaceMorph new openInWindow.
No external library is required. If you have some next ideas how to improve the rendering performance with the same image quality, please let me know.
VoxelSpace.png

Smalltalk Jobs - Smalltalk Jobs 11/28/17

There is a full time job which requires Smalltalk in Germany.   The only other bit of info is that it seems to be Finance/Bank related.

Apply here.


Filed under: Employment

David Buck (Simberon) - Mobile Smalltalk

I've been announcing the Open Beta release of my game HexSolve for Android and iOS.  HexSolve was written in Smalltalk and people have been asking me how it's possible to run Smalltalk on mobile devices.  I thought I'd write up a little description of the technology behind it.



I've wanted to be able to run Smalltalk on Android and iOS for many years.  I finally decided to do something about it.  I chose VisualWorks for my development environment.  Unfortunately iOS doesn't support dynamic compilation so getting the regular VisualWorks VM to run on iOS is virtually impossible.  I decided to skirt around the issue by writing my own VM.

My VM is written in C.  It interprets the same bytecodes as those generated by VisualWorks so I can use the VisualWorks compiler to compile all of the code for the mobile Smalltalk.  Being a pure interpreter, I get around the problem of dynamic compilation on iOS.  Apple is okay with an interpreter so long as all of the code it's interpreting is delivered with the product and not downloaded dynamically.

Development of the Smalltalk code begins in VisualWorks.  I have my own Object class (in my own namespace) as well as my own copies of the other base classes (True, False, UndefinedObject, etc.).  I did this because I had better control of the implementation than I would if I just used the VisualWorks base code.  If I used the regular VisualWorks classes, then I would need to bring in more and more of the base code to get those classes to work.  There are just too many "strings attached" to do this effectively.



Methods beginning with an underscore ($_) will have the underscore removed when moving the image to the mobile device.  It allows me to have one version for Mobile Smalltalk and a different version for VisualWorks.  You can imagine that it would be bad if I re-defined at:put: in VisualWorks.

I have an ImageBuilder utility that takes all of the code in the packages "SimTalk Remote Core" (base Smalltalk code) and "SimTalk HexSolve" (the game itself), packages them into a special 64-bit image format and writes the image into a file.  I can then use AndroidStudio or XCode to include this image as an asset to deliver to the device along with the interpreter.

The interpreter itself is a 64 bit image.  It uses immediate objects (tagged objects that fit within the object pointer) for SmallInteger, Character and Float.  This allows me to do faster operations on these objects without allocating memory.

The game uses Smalltalk primitives to interface to OpenGL ES which runs on both Android and iOS. For text, I interface to Freetype which is compiled and delivered with the game.  Freetype will create images for the characters which I can collect and cache in a Smalltalk Image object.  I then render these images as OpenGL textures.

My mobile Smalltalk is single-threaded - there's no such thing as fork, a Process or a ProcessManager.  In fact, Smalltalk runs completely as an OS callback.  When the OS determines that something happened (a touch event, a button or a timeout), it runs a callback in my VM.  The VM creates an Event object, drops it into a known spot in the image and runs the interpreter.  The interpreter then reads the event, dispatches it, re-renders the screen if necessary then calls suspend which returns from the OS callback.  Nothing more happens until the next OS callback.

Some people have asked me when I'll release this technology so they can use it.  I'm sorry to say, but I don't intend to do that.  This is for internal use for me to write Smalltalk code for Android and iOS.  I have several problems if I try to commercialize the development technology:

  1. You can't develop code in this environment without a VisualWorks license.  I have such a license with Cincom but it's hard to tell other developers that they need a license for VisualWorks plus a license for my mobile development environment and it's hard to enforce.
  2. I've implemented interfaces to API's I need in the OS but not to everything.  Other developers would need probably access to accelerometers, GPS, Internet, cameras and other things.  I can't have a good commercial product without those interfaces and it's too much work to write these interfaces on speculation.
  3. Too many companies have died trying to provide tools for developers to enhance Smalltalk environments.  The market isn't big enough to justify the effort.
  4. To be honest, software developers make lousy customers.  They tend to be very demanding on everything they need and usually don't like paying money for what they get.  They're used to software development environments being free and open source and don't want to pay for development and maintenance of their toolset.
  5. I'd rather create fun profitable games than creating development environments for other people to use to create fun profitable games.
The graphics for HexSolve were all rendered using POV-Ray.

I hope that answers most of your questions.  Happy Smalltalking.

Benoit St-Jean - Smalltalk sur iOS et Android

Smalltalk sur iOS et Android? Oui, c’est maintenant possible.  Mais c’est un brin plus compliqué qu’on ne le pense (pour l’instant).  Un excellent article de david Buck sur le sujet ici.


Classé dans:Smalltalk, VisualWorks Tagged: Android, iOS, Smalltalk, VisualWorks