Planet Smalltalk

January 30, 2015

Torsten Bergmann - Graphics and Visualizations in Pharo

...lots of possibilities for that these days with Roassal, Telescope, Woden, Athens, ...

See this presentation from PharoConf 2015.

Pharo Weekly - Window Plague Doctor

During development your Pharo IDE will quickly become overcrowded with unused windows. The Plague Doctor is a tool, inspired by Autumn Leaves, that helps you to mitigate this issue by closing the windows that you are less likely to use in the future.
If you want to try our prototype, please install it with the following script or ask me for a quick demo (I am Lille for the PharoDays!).
Gofer new

  smalltalkhubUser: ‘RobertoMinelli’ project: ‘PlagueDoctor';
  package: ‘ConfigurationOfPlagueDoctor';
  load.
(Smalltalk at: #ConfigurationOfPlagueDoctor) loadDevelopment.

Pharo Weekly - New version of PUnQLite NoSQL database project

Hi
are you in need for really simple out of image persistency?

If you like to use a small RDBMS solution with Pharo then there is the embeddable SQLite
shared library and NBSQLite3 project [1] to access it. Combine it with Glorp [2] and you do 
not have to fight too much with SQL.

On the other end of persistency world there are the so called "NoSQL databases" and beside 
Mongo and all the others that require special setup etc. there is this wonderful small UnQLite 
embeddable database [3] that similar to SQlite world only requires a simple library.

Thanks to Masashi Umezawa there is a nice wrapper for Pharo already to access this 
tiny embeddable NoSQL database called "PUnQLite" [4] and [5], also including access to 
the Jx9 machinery of UnQLite. It is really cool that he made this available.

This week I updated "PUnQLite" a little bit:
   - refactored the Native boost wrapper for UnQLite (using shared pools, ...)
   - documented classes
   - added a help topic
   - fixed a bug in cursors when accessing the keys in an empty database
   - and finally added a small spec based tool to work with a database file (see attached screenshot) 
     One can use it to open an unqlite database, show the key value pairs and remove or add entries.

If you are in latest Pharo 4 already you can load all of that right from the config browser. Be aware
that you need the external unqlite shared library which is downloaded and extracted into a folder
"pharo-vm" when loading the config.

For instance on Windows it automagically downloads a file "pharo-vm/unqlite.dll" below your
image directory and you just have to copy this shared library file to the folder where your 
VM (Pharo.exe) resides. Havent tried on other OS platforms.

>From the Pharo side using the UnQLite database basically works like having some kind
"external dictionary" in a database file. Just run that in a workspace:

|db|
db := PqDatabase open: 'comments.db'.
db disableAutoCommit.
db transact: [
Object subclasses do: [:cls | | key | 
    key := cls asString.
    db at: key put: cls comment ]
].
db close.

Then open the "Database Browser" from the world menu and open the "comments.db" file.
You can browse the keys and values, remove entries or add new. A filter for the keys
is also included. Nothing fancy but hope you like it or find it usable.

Couldnt make it to PharoConf 2015 but I hope all participants enjoy their time there. 
Keep the others updated by using the #pharodays2015 on Twitter. Have fun!

Bye
T.


[1] http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/2015-January/104720.html
[2] http://lists.pharo.org/pipermail/pharo-users_lists.pharo.org/2015-January/015809.html
[3] http://unqlite.org/
[4] https://github.com/mumez/PunQLite
[5] http://smalltalkhub.com/#!/~MasashiUmezawa/PunQLite

January 29, 2015

Torsten Bergmann - PharoDays2015 start

The Pharo Days 2015 conference starts today. You can follow some of the news with the Twitter hashtag: #pharodays2015

January 28, 2015

Torsten Bergmann - Object oriented implementation of numerical methods now OpenSource

Didier Besset offered his great book “Object-Oriented Implementation of Numerical Methods" to the community.

Read more here or directly grab the PDF.

Pharo Weekly - Object-Oriented Implementation of Numerical Methods now open-source

Didier Besset offered his great book “Object-Oriented Implementation of Numerical Methods:
An Introduction with Smalltalk and Java” to the community.

We would like to thank Didier Besset for his great book and for his gift of the source and implementation to the community.

You can find

Both book versions are maintained by Stéphane Ducasse and Serge Stinckwich.

27 Janvier 2015


Torsten Bergmann - GLORP Resources

Want to get used to GLORP, the ORM for Smalltalk to access a RDBMS from your favorite Smalltalk dialect. Then check out these resources:

January 27, 2015

Pharo News - [ANN] Pharo Consortium New Academic Partner: FAST

<p>The Pharo Consortium is very happy to announce that the FAST: Fundación Argentina de Smalltalk has joined the Consortium as an Academic Partner.</p> <p>About</p> <ul><li> FAST: Fundación Argentina de Smalltalk: <a href="http://www.fast.org.ar">http://www.fast.org.ar</a></li><li> Pharo Consortium: <a href="http://consortium.pharo.org">http://consortium.pharo.org</a></li></ul> <p>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: <a href="http://association.pharo.org">http://association.pharo.org</a></p>

Pharo News - [ANN] Pharo Consortium New Academic Partner: FAST

<p>The Pharo Consortium is very happy to announce that the FAST: Fundación Argentina de Smalltalk has joined the Consortium as an Academic Partner.</p> <p>About</p> <ul><li> FAST: Fundación Argentina de Smalltalk: <a href="http://www.fast.org.ar">http://www.fast.org.ar</a></li><li> Pharo Consortium: <a href="http://consortium.pharo.org">http://consortium.pharo.org</a></li></ul> <p>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: <a href="http://association.pharo.org">http://association.pharo.org</a></p>

Yoshiki Ohshima - [仕事] プロファイラのバグ

なんだってー!! http://lists.squeakfoundation.org/pipermail/squeak-dev/2015-January/181556.html 前のプロジェクトでSqueakを使っていた頃は結構QSystemProfiler(改名されてAndreasSystemProfierとなった)の結果を当てにしていたのですが、まさか抜けがあったとは。バグ逃げされたー。

January 26, 2015

Torsten Bergmann - Squeak for DiamondTouch

Sebastian pointed me to http://shareitproject.org  today. Have not seen this page before.

The page includes a Squeak app for DiamondTouch (DiamondTouch table is a multi-touch, interactive PC interface). From the people page it looks like Jochen “Jeff” Rick helped shaping it, I know him from his Swiki implementation and Squeak and Pharo contributions like QRCode.

He wrote several apps in Smalltalk as you can see on his page. Nice!

Torsten Bergmann - Microkanren for Pharo

An implementation of µKanren (an embedded Domain Specific Language for logic programming) for Pharo. The project is here (GitHub) and here (SmalltalkHub).

Torsten Bergmann - PharoCloud with PillarHub knowledge base

PharoCloud now uses own PillarHub to provide a knowledge base:

   http://pharocloud.com/kb

Also Pharo Launcher is part of their Pharocloud Image Store. Additionally the underlying cloud system provides support for Cairo graphics which makes it possible to run Pharo4 on it and access it via VNC.


January 25, 2015

Smalltalk Jobs - Smalltalk Jobs – 1/24/15

  • Bengaluru/Bangalore, IndiaSmallTalk Developer at Cargill
    • Required Skills:
      • Bachelor’s degree in Computer Science/ MIS or a minimum of 5 years of software development experience.
      • SmallTalk VSE
      • SmallTalk Visual Works 7.9
      • SQL
      • Strong problem solving skills.
      • Ability to follow complex documentation.
      • Good verbal and written communication skills.
      • Ability to work in a team environment.
      • Ability to handle multiple priorities and meet deadlines.
      • Familiar with software design concepts, standards, practices, and procedures.
  • Windsor, CT and Lafayette, LAApplication Developer through Ardice Consulting
    • Required Skills:
      • Visual SmallTalk Enterprise(VSE 3.1)
      • Window builder pro
      • Overall 7 + years IT experience with minimum of 3+ years into design and lead developer/tech lead role.
    • Wanted Skills:
      • Health insurance domain knowledge
      • .Net.
      • ASP .Net
      • C#
      • VB.Net
      • SSRS
      • SSIS
      • SQL Server
      • Crystal Reports
      • RDLC Team player
      • Strong leadership qualities
      • Onsite-Offshore coordination Effective communication
      • Analysis and Design skills
    • Additional listings: CGI, CGI, CGI, CGI, Ana Data Consulting
  • White House Station, NJSmalltalk Consultant through Windsor Partners
    • Required Skills:
      • 8+ years of experience on IBM VisualAge Smalltalk
      • Strong OOPS Concepts
      • Strong design and development skills on Smalltalk
      • Knowledge of Smalltalk version 8.5
      • Knowledge of Smalltalk Server
      • Knowledge of writing Web Services in Smalltalk
      • Ability to create high level (Conceptual) and Low Level design
    • Wanted Skills:
      • Insurance domain knowledge will be an advantage particularly Property & Casualty.
    • Additional listings: Windsor Partners, Okaya, Lorven Technologies
  • Charlotte, NCSmalltalk Developer through Kforce
    • Required Skills:
      • Bachelor’s degree in Computer Science, Information Technology, or equivalent is required
      • Must have 10 + years’ experience with Smalltalk programming and debugging/troubleshooting with Cincom ObjectStudio or equivalent
      • 5 + years in client server application development
      • SQL Server
      • Experience with agile and waterfall software development methodologies
      • Ability to translate business requirements into technical requirements
    • Wanted Skills:
      • Knowledge of Quality Center
      • Knowledge of Microsoft SharePoint
    • Additional listings: Kforce, Kforce
  • Miami, FLApplications Architect through Kforce
    • Required Skills:
      • Java Skills
      • Smalltalk
      • VB.Net
      • Must have strong communication and people skills
    • Wanted Skills:
      • Java AND .Net is a plus
Good luck with your job hunting,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed


Filed under: Employment Tagged: jobs, Smalltalk, Smalltalk jobs

January 24, 2015

Pharo Weekly - Another batch of improvements

40459
14784 toggle show hierarchy gives: list receiver of “package” is nil

https://pharo.fogbugz.com/f/cases/14784

14779 fix #definitionString for subclasses of ClassVariable and IntanceVariableSlot

https://pharo.fogbugz.com/f/cases/14779

14780 Bug in compiled method printing since signflag is printed.

https://pharo.fogbugz.com/f/cases/14780

40458
14775 Cleanup “Jobs” package further

https://pharo.fogbugz.com/f/cases/14775

14770 Clean up the AST-Interpreter package further

https://pharo.fogbugz.com/f/cases/14770

40455
14766 Fix two release methods in Versionner

https://pharo.fogbugz.com/f/cases/14766

14768 MCClassDefinition: merge #createClass into #load

https://pharo.fogbugz.com/f/cases/14768

40452
14755 Slot: do not call #index: on virtual slots

https://pharo.fogbugz.com/f/cases/14755

14753 add support for setting class comments to class builder

https://pharo.fogbugz.com/f/cases/14753

40450

14636: spotter: remap cmd+enter to shift+enter
14641: spot on global vars
14741: GTInspector: add simple slot support
14252: Make collections browsable again in the tools
14722: Disable FreeType gives MNU and RMOD in GTools
14711: The Playground print popper should allow for inserting the text in the editor
14587: deleting the whole text in the inspector pane throws SubscriptOutOfBounds
14515: Damaged configurations in the image
40449
14742 Fix: Allow defining simple ClassVariales using symbols

https://pharo.fogbugz.com/f/cases/14742

14712 The print-popper should have a different color than the selection in the default Pharo theme

https://pharo.fogbugz.com/f/cases/14712

14515 Damaged configurations in the image

https://pharo.fogbugz.com/f/cases/14515

40446
14733 do not check for coding convention on addClassVariable:

https://pharo.fogbugz.com/f/cases/14733

14731 Fixing DNU binding in GT and Nautilus

https://pharo.fogbugz.com/f/cases/14731

40442
14590 SHParserST80Test>>#testNumbers

https://pharo.fogbugz.com/f/cases/14590

14725 When using class side slot, show class definition for slots

https://pharo.fogbugz.com/f/cases/14725

40441
14720 Add support for Class Instance Slots

https://pharo.fogbugz.com/f/cases/14720

40440
14716 Remove all #notify: from inline checking

https://pharo.fogbugz.com/f/cases/14716

14718 Move class instance variable def from #load to #createClass in MCClassDefinition

https://pharo.fogbugz.com/f/cases/14718

40438
14699 Slot: #definingClass and #usingMethods should work on non-used slots

https://pharo.fogbugz.com/f/cases/14699

14698 Allow Slots to be saved with Monticello

https://pharo.fogbugz.com/f/cases/14698

14697 simplify extended search menu: case insensitive description not needed

https://pharo.fogbugz.com/f/cases/14697

40437
12501 Duplicate shortcut case sensitive/insenstive method literal strings with it

https://pharo.fogbugz.com/f/cases/12501

14691 Improve pretty printing of Slot classdefinition

https://pharo.fogbugz.com/f/cases/14691

40436
14693 Spotter version 1.0.6

https://pharo.fogbugz.com/f/cases/14693

14692 GTools version 2.0.8

https://pharo.fogbugz.com/f/cases/14692

40434
14684 Spotter version 1.0.5

https://pharo.fogbugz.com/f/cases/14684

14683 GTools version 2.0.7

https://pharo.fogbugz.com/f/cases/14683

40433
14681 Commiting to directory with subdirectory repo

https://pharo.fogbugz.com/f/cases/14681

14680 Improve printing of class definition of classes with Slots or ClassVars

https://pharo.fogbugz.com/f/cases/14680

40432
14638 Avoid indirectly invoking the Refactoring Engine parser (thru CompiledMethod>>ast) when installing a method from an used trait

https://pharo.fogbugz.com/f/cases/14638

40431
14679 Fix layout glitch in FileDialogWindows text preview

https://pharo.fogbugz.com/f/cases/14679

14678 fix DNU #index when redefining a class with slots that have no index

https://pharo.fogbugz.com/f/cases/14678

14675 correctly set superclass when creating classes with slots

https://pharo.fogbugz.com/f/cases/14675

40430
14672 ScriptLoader should not reset repositories

https://pharo.fogbugz.com/f/cases/14672

14673 Avoidable DNU at each compilation

https://pharo.fogbugz.com/f/cases/14673

40429
14668 HandMorph event statistics should be off by default with preference

https://pharo.fogbugz.com/f/cases/14668

14652 Float class fromIEEE32Bit: gradual underflow handling is buggy

https://pharo.fogbugz.com/f/cases/14652

40428
14658 cleaning/commenting SUnit classes

https://pharo.fogbugz.com/f/cases/14658

40427
14643 find records for classcomment changes in SourceFileArray

https://pharo.fogbugz.com/f/cases/14643

10529 ToolRegistry need to support multiple registrations per tool

https://pharo.fogbugz.com/f/cases/10529


January 23, 2015

Arden Thomas - MapReduce, Hadoop, and Cincom Smalltalk

MapReduce is a popular and effective technique that’s used to apply concurrency to problems that often involve large amounts of data, in order to improve performance.

Hadoop is a popular implementation of the MapReduce model or technique.

MapReduce is named after the functional programming functions map and reduce. The map function applies a function to each element in a list, and reduce aggregates or combines the results. MapReduce can distribute the Map work to many machines, and then Reduce summarizes the work into a final answer.

MapReduce and Smalltalk

So how would this work in Smalltalk? To start, let’s determine what the Smalltalk equivalents to map and reduce are.

The collect: method can be used as a Smalltalk equivalent of map, since it can collect the result of a block applied to every element in a collection.
The fold: method (or inject:into: ) can be used as an equivalent of reduce, since it can reduce the results to a single object (simple  examples: finding the maximum, minimum, or sum value).

Pragmatically though, you might also think of map as mapping out the work (to be performed concurrently) to multiple cores or machines, and reduce as combining or summarizing the results from the map work. If you are following the pattern it doesn’t matter if  you use collect: or fold: specifically.

The purpose of Cincom’s MatriX framework is to simplify concurrency. The MatriX framework allows you to easily make many linear solutions concurrent.

The example below shows how to create a solution to a problem, and then use MatriX to create a mapReduce-style solution using the same code with minimal alterations.

A Simple Example

Let’s say that we had a long list of documents (files) and we wanted to get a count of how many times each word occurs in the set of documents. In Smalltalk, we would want to collect the word counts for each file and then combine or fold the results into an aggregated summary.   So how might we do this in Smalltalk?

Let’s start with some basics.

  1. A method to return a list of filenames to use for counting word occurrences
  2. A method that parses the file into tokens (words)
  3. A method that, given a file string, returns a count of the words found in the file
  4. A method that summarizes (reduces) the word counts into one set
  5. A method that provides a local solution using the above methods

We can test and debug by first running it locally, and then move forward distributing the work.

Below are the methods for the above basics, respectively:

Note: Be sure to change the dir in the myFiles method to a location on your machine.

myFiles
        "self myFiles"
        "Returns filename strings"
        | dir fileStrings |
        dir := 'C:\Arden\Documents\Cincom\'.
        fileStrings := dir asFilename filesMatching: '*.txt'.
        ^fileStrings as Array

 

parseFile: fileString
        | fileStream contents words |
        fileStream := fileString asFilename readStream.
        contents := [fileStream upToEnd] ensure:[fileStream close].
        words := contents tokensBasedOn: Character space.
        words copy do:[:word | (word includes: Character cr) ifTrue: [
               words remove: word.
               words addAll: (word tokensBasedOn: Character cr)]].
        ^words


wordCountFor: fileString
        | words |
        words := self parseFile: fileString.
        words := words collect:[:word | word select:[:char | 
		char isAlphabetic] ].
        words := words reject: #isEmpty.
        ^words asBag.

 

reduce: wordCounts
        "Combine the wordCounts and create a Dictionary summary"
        | aggregatedWords finalCounts |
        aggregatedWords := wordCounts fold:[:counts :newCounts | 
		newCounts valuesAndCountsDo:[:word :n | 
		counts add: word withOccurrences: n]. counts ].
        finalCounts := Dictionary new.
        aggregatedWords valuesAndCountsDo:[:word :count | 
		finalCounts at: word put: count].
        ^finalCounts

 

runExampleLocal
        "self runExampleLocal"
        | files wordCounts summary results |
        files :=self myFiles.
        wordCounts := files collect:[:fileStr | self wordCountFor: fileStr ].
        summary := self reduce: wordCounts.
        results := summary associations sort: #value descending.
        (results first: 100) do:[:ea |Transcript cr; show: 
		ea key; tab; show: ea value printString ].

So now that we have this running, we want to distribute the workload to allow the files to be processed and words to be counted, concurrently. The word counts will come back to a central place (our main image) where they will be summarized.

Making this concurrent is a lot of work, right?

Not in Smalltalk with Cincom’s MatriX concurrency framework.

  • Load MatriX
  • Add one line of code to create the virtual machines that do the work concurrently
  • Tweak the line of code that gets the word counts to distribute the work

That’s it! Here is the complete example of our solution running distributed:

runExample
        "self runExample"
        | files vms wordCounts summary results |
        files :=self myFiles.
        vms := MatriX.VirtualMachines new:3.
        wordCounts := [vms do:[:fileString | 
		MapReduceExample wordCountFor: fileString] with: files] 
		ensure:[vms release].
        summary := self reduce: wordCounts.
        results := summary associations sort: #value descending.
        (results first: 100) do:[:ea |Transcript cr; show: ea key; 
		tab; show: ea value printString ].

Note: I ran into an issue with marshaling Bags in MatriX, and I have a patch available. (Thank you Michael for finding and fixing!)


Torsten Bergmann - Smalltalk Research forum

Richard Eng (initiator of the Smalltalk Renaissance Program - SRP) will now use the Smalltalk-research forum

  https://groups.google.com/forum/#!forum/smalltalk-research

to discuss all future SRP-related discussions. So if you want to participate in SRP go there.

Torsten Bergmann - Dark Theme for Amber Helios IDE

The Amber Smalltalk Helios IDE also supports (similar to Pharo) a dark theme. Nice!

Joachim Tuchel - Instantiations survey: Which Smalltalk are you using?

Instantiations put up a mini-survey to better understand the current Smalltalk market. They only ask one single question: What flavor (or flavors) of Smalltalk do you actively use? So if you are using Smalltalk, or even if you are just interested in using Smalltalk, please take 20 seconds to answer this simple question. There is […]

Torsten Bergmann - SmalltalkFlavor

There is an online survey from Instantiations: what Smalltalk flavor do you use?

https://www.surveymonkey.com/s/SmalltalkFlavor

January 22, 2015

Ricardo Moran - Conway’s Game of Life

Hi everybody,

Playing with Laura’s “Programming Minecraft” project I made a very simple implementation of Conway’s Game of Life. Just for fun :)
Here you have a video:

Hola a todos, estaba jugando con el proyecto de Laura “Programando Minecraft” y armé una muy simple implementación del Juego de la Vida de Conway. Sólo para divertirme un rato :)
Acá les dejo un videito:

Cincom Smalltalk - Smalltalk Digest: January Edition

The January edition of The Cincom Smalltalk Digest is available now.

January 21, 2015

Pharo News - [ANN] Pharo Consortium New Academic Partner: DCyT - Universdad Nacional de Quilmes

<p>The Pharo Consortium is very happy to announce that the DCyT - Universdad Nacional de Quilmes has joined the Consortium as an Academic Partner.</p> <p>About</p> <ul><li> DCyT - Universdad Nacional de Quilmes: <a href="http://www.unq.edu.ar">http://www.unq.edu.ar</a></li><li> Pharo Consortium: <a href="http://consortium.pharo.org">http://consortium.pharo.org</a></li></ul> <p>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: <a href="http://association.pharo.org">http://association.pharo.org</a></p>

Pharo News - [ANN] Pharo Consortium New Academic Partner: DCyT - Universdad Nacional de Quilmes

<p>The Pharo Consortium is very happy to announce that the DCyT - Universdad Nacional de Quilmes has joined the Consortium as an Academic Partner.</p> <p>About</p> <ul><li> DCyT - Universdad Nacional de Quilmes: <a href="http://www.unq.edu.ar">http://www.unq.edu.ar</a></li><li> Pharo Consortium: <a href="http://consortium.pharo.org">http://consortium.pharo.org</a></li></ul> <p>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: <a href="http://association.pharo.org">http://association.pharo.org</a></p>

Torsten Bergmann - Grafoscopio

Grafoscopio is a mockup of a outliner interface made using Moose playgrounds. Is a learning exercise from a Smalltalk newbie but it aims to evolve to become a outliner interface for playgrounds that can be used for developing visual data narratives for open/garage/citizen science research.

A detailed description is here, video here and code here.