links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
Home desktop system
Last updated at 8:12 pm UTC on 21 August 2020

The Home System is a desktop system build on top of Squeak/Smalltalk. It is based upon the idea of storing data in living objects and allowing its users to adapt it completely to their needs.

 Metacello new
  baseline: 'Home';
  repository: 'github://hpi-swa-lab/home-desktop-system/repository';

Status in Squeak 5.3

Loads fine in Squeak 5.3, but when using it a deprecation warning is issued:

 Symbol>>#asMutator has been deprecated. Use #asSimpleSetter instead

Domain objects

DomainObject printHierarchy '
ProtoObject #()
	Object #()

		DomainObject #(''additionalState'' ''createdAt'' ''uuid'')
			Agent #(''name'')
			Collaboration #()
			Course #(''courseName'' ''teams'')
			CreativeWork #(''title'')
			DiaryEntry #(''content'' ''date'')
				DiaryHassle #()
			GardenMap #(''pots'' ''pointInTime'')
			GardenPlant #(''plantName'')
			GardenPlanting #(''start'' ''end'' ''plant'')
			GardenPot #(''number'' ''plantings'' ''material'' ''volume'')
			Lending #(''itemDescription'' ''date'' ''borrower'')
			ObjectEditorWrapperTestDomainObject #()
			Person #(''fullName'' ''email'')
			TeachingGroup #(''members'')
			TeachingTopic #(''title'')
			TestDomainObject #(''someField'')
			ToDo #(''description'' ''done'' ''dueDate'' ''reminderDate'' ''scheduledFor'')'

Object editor for domain objects


Object rack app

The system uses a global object called 'TheRack' : https://github.com/hpi-swa/Rack.
It is accessed through the apps menu entry 'Object rack'.
The tool called by this menu entry is RRackTool.

Context menu operations on the domain objects

Context menu operations on the domain objects may be made available in the object rack app through a pragma (printed in bold below):

DomainObject subclass: #ToDo
	instanceVariableNames: 'description done dueDate reminderDate scheduledFor'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Home-ToDo'

The set done method of a ToDo object


	<rackOperationLabel: 'set done' inContextMenus: true>

	self isDone ifFalse: [
		self done: true.
		self changed]


The global object TheRack is an object of type RTheRack
 TheRack class

 Object subclass: #RTheRack
	instanceVariableNames: 'hierarchy'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Rack-Core'

That hierarchy instance variable holds a folder object (class RFolder) which holds entry objects (class REntry). The entries are accessed with the #entries selector and called 'boxes' in the instance variables.

Object subclass: #RFolder
	instanceVariableNames: 'boxes'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Rack-Core'

boxes are OrderedCollections

Object subclass: #REntry
	instanceVariableNames: 'parent parents item label'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Rack-Core'

An entry has a label and an item which may be any object including another RFolder object. Also it has a reference to its parent object.
There is also a parents (plural) instance variables which if not nil may point to several parents as the same entry object may appear in different folders.

From the window 'Your object rack' you may access and inspect any object and also access the code.

You may also access the contents of TheRack global in a workspace

 TheRack / 'writings' / 'essays 2017' / 'on racks and boxes'

and add any object there also

 TheRack / 'writings' add: 'First sketch of a new essay without a title'.
 TheRack / 'writings' add: 'First sketch of a new essay' named: 'essay without a title yet'

There are also
 remove: entryName 
 rename: entryName to: newEntryName

and just

 TheRack entries	 
     an OrderedCollection(ToDo To read)


There is also a class 'Rack' which has class methods for doing some configuration work.

The system also includes a category 'SVG-Morphic'.