Bert Freudenberg uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-bf.473.mcz
==================== Summary ====================
Name: System-bf.473
Author: bf
Time: 24 March 2012, 12:58:14.567 am
UUID: 7cbf3ed3-b852-44ca-ba5e-8a2579ed3aff
Ancestors: System-eem.472
Fix mapping classes that changed shape when loading from an ImageSegment.
Apart from correcting the source formatting in comeFullyUpOnReload:, the real addition is "aFake becomeForward: aReal" causing the imported classes to be mapped to the actual classes. Before, only the instances were remapped to the actual classes. Also, prevent doIts from entering the system.
=============== Diff against System-eem.472 ===============
Item was changed:
----- Method: ImageSegment>>comeFullyUpOnReload: (in category 'fileIn/Out') -----
comeFullyUpOnReload: smartRefStream
+ "fix up the objects in the segment that changed size. An object in the segment is the wrong size for the modern version of the class. Construct a fake class that is the old size. Replace the modern class with the old one in outPointers. Load the segment. Traverse the instances, making new instances by copying fields, and running conversion messages. Keep the new instances. Bulk forward become the old to the new. Let go of the fake objects and classes.
+ After the install (below), arrayOfRoots is filled in. Globalize new classes. Caller may want to do some special install on certain objects in arrayOfRoots.
- "fix up the objects in the segment that changed size. An
- object in the segment is the wrong size for the modern version of the
- class. Construct a fake class that is the old size. Replace the
- modern class with the old one in outPointers. Load the segment.
- Traverse the instances, making new instances by copying fields, and
- running conversion messages. Keep the new instances. Bulk forward
- become the old to the new. Let go of the fake objects and classes.
- After the install (below), arrayOfRoots is filled in.
- Globalize new classes. Caller may want to do some special install on
- certain objects in arrayOfRoots.
May want to write the segment out to disk in its new form."
+ | mapFakeClassesToReal ccFixups receiverClasses rootsToUnhiberhate myProject forgetDoItsClasses |
- | mapFakeClassesToReal ccFixups receiverClasses rootsToUnhiberhate myProject |
+ forgetDoItsClasses := Set new.
+ RecentlyRenamedClasses := nil. "in case old data hanging around"
- RecentlyRenamedClasses := nil. "in case old data
- hanging around"
mapFakeClassesToReal := smartRefStream reshapedClassesIn: outPointers.
+ "Dictionary of just the ones that change shape. Substitute them in outPointers."
- "Dictionary of just the ones that change shape.
- Substitute them in outPointers."
ccFixups := self remapCompactClasses: mapFakeClassesToReal
refStrm: smartRefStream.
+ ccFixups ifFalse: [^ self error: 'A class in the file is not compatible'].
- ccFixups ifFalse: [^ self error: 'A class in the file is not
- compatible'].
endMarker := segment nextObject. "for enumeration of objects"
endMarker == 0 ifTrue: [endMarker := 'End' clone].
self fixCapitalizationOfSymbols.
arrayOfRoots := self loadSegmentFrom: segment outPointers: outPointers.
"Can't use install. Not ready for rehashSets"
mapFakeClassesToReal isEmpty ifFalse: [
+ self reshapeClasses: mapFakeClassesToReal refStream: smartRefStream
- self reshapeClasses: mapFakeClassesToReal refStream:
- smartRefStream
].
+ "When a Project is stored, arrayOfRoots has all objects in the project, except those in outPointers"
- "When a Project is stored, arrayOfRoots has all objects in
- the project, except those in outPointers"
arrayOfRoots do: [:importedObject | | existing |
((importedObject isMemberOf: WideString) or: [importedObject isMemberOf: WideSymbol]) ifTrue: [
importedObject mutateJISX0208StringToUnicode.
importedObject class = WideSymbol ifTrue: [
"self halt."
+ Symbol hasInterned: importedObject asString ifTrue: [:multiSymbol |
+ multiSymbol == importedObject ifFalse: [
+ importedObject becomeForward: multiSymbol.
- Symbol hasInterned:
- importedObject asString ifTrue: [:multiSymbol |
- multiSymbol == importedObject
- ifFalse: [
- importedObject
- becomeForward: multiSymbol.
].
].
].
].
(importedObject isKindOf: TTCFontSet) ifTrue: [
+ existing := TTCFontSet familyName: importedObject familyName
+ pointSize: importedObject pointSize. "supplies default"
+ existing == importedObject ifFalse: [importedObject becomeForward: existing].
- existing := TTCFontSet familyName:
- importedObject familyName
- pointSize:
- importedObject pointSize. "supplies default"
- existing == importedObject ifFalse:
- [importedObject becomeForward: existing].
].
].
+ "Smalltalk garbageCollect. MultiSymbol rehash. These take time and are not urgent, so don't to them. In the normal case, no bad MultiSymbols will be found."
- "Smalltalk garbageCollect. MultiSymbol rehash. These take
- time and are not urgent, so don't to them. In the normal case, no
- bad MultiSymbols will be found."
receiverClasses := self restoreEndianness. "rehash sets"
smartRefStream checkFatalReshape: receiverClasses.
"Classes in this segment."
arrayOfRoots do: [:importedObject |
+ importedObject class class == Metaclass ifTrue: [
+ forgetDoItsClasses add: importedObject.
+ self declare: importedObject]].
- importedObject class class == Metaclass ifTrue: [self
- declare: importedObject]].
arrayOfRoots do: [:importedObject |
(importedObject isKindOf: CompiledMethod) ifTrue: [
+ importedObject sourcePointer > 0 ifTrue: [importedObject zapSourcePointer]].
- importedObject sourcePointer > 0 ifTrue:
- [importedObject zapSourcePointer]].
(importedObject isKindOf: Project) ifTrue: [
myProject := importedObject.
importedObject ensureChangeSetNameUnique.
Project addingProject: importedObject.
importedObject restoreReferences.
self dependentsRestore: importedObject]].
rootsToUnhiberhate := arrayOfRoots select: [:importedObject |
importedObject respondsTo: #unhibernate
"ScriptEditors and ViewerFlapTabs"
].
myProject ifNotNil: [
+ myProject world setProperty: #thingsToUnhibernate toValue: rootsToUnhiberhate asArray.
- myProject world setProperty: #thingsToUnhibernate
- toValue: rootsToUnhiberhate
].
mapFakeClassesToReal isEmpty ifFalse: [
+ mapFakeClassesToReal keysAndValuesDo: [:aFake :aReal |
+ aFake indexIfCompact > 0 ifTrue: [aFake becomeUncompact].
+ aFake removeFromSystemUnlogged.
+ aFake becomeForward: aReal].
- mapFakeClassesToReal keys do: [:aFake |
- aFake indexIfCompact > 0 ifTrue: [aFake
- becomeUncompact].
- aFake removeFromSystemUnlogged].
SystemOrganization removeEmptyCategories].
+ forgetDoItsClasses do: [:c | c forgetDoIts].
"^ self"
!
http://onsmalltalk.com/scaling-seaside-more-advanced-load-balancing-and-pub…
sfortman(a)cincom.com
There don't seem to be any young people in this casino. It's all middle
aged people and old people with time and money. Go across the street to
the Waffle House and the prices fall in half and there are young people.
It's an ersatz environment with its thirty foot ceilings, air
conditioning that's always a bit too cold, and the sound of the slot
machines. It's pleasant, but sterile after three or four days.
I saw Dale's presentation Practical Git For Smalltalk. The details are
in my first post of this series. He did mention that Amber could be used
to inspect Smalltalk code stored in GitHub. That's neat. The interesting
part of this talk was at the end, when people from different dialects
were asking questions. It started to take on the feeling of a revival
meeting. People felt very strongly that this was going to be an advance
for everybody across the board. Lots of excitement. Dale did qualify his
position a bit saying it wasn't a panacea, but that it would be good for
people sharing a project, like Seaside, over different dialects.
I saw the lightning talks which were a mixed bag. Things were displayed,
though sometimes you weren't sure what the take-away message was
supposed to be.
I'll outline mine first as it's clearest in my mind. I read the Ramon
Leon blog posting above in December and had an epiphany that in Linux I
wasn't starting an image, I was starting a process. Obvious on the
surface of it, but it lead to other thoughts. seasidehosting.st has
people upload whole images. It takes seven minutes and I've always hated
that. Why not just upload the mcz and load it into a generic image? Make
seasidehosting.com into a host. Upload an mcz and have a request use
mod_rewrite with rewrite map and a BASH script to pull a subdomain
related port and mcz into a generic image on startup?
Thierry Thelliez did a presentation called Compliance Certification
Management System 2 years later. I'm not sure what it was about. You
could Google it, I guess.
Bob Nemic of Cherniak Software in Toronto did a talk, I should say all
the talks were 5 minutes, on mobile Seaside. They have a Seaside issue
portal and he was using CSS to make a switch if somebody turns their
iPhone sideways.
John O'Keefe of Instantiations showed a VA Monticello importer.
Martin of Cincom did something with SSH.
Chris Muller presented NakedObjects, which is a behavior browser. You
drag and drop a method from the SystemBrowser into NakedObjects, which I
believe is made with Maui. He can explain it better than I can.
Seth of I believe Instantiations showed a code completion where you
could drag one of the options and a browser would appear with it.
David Buck presented a SpaceWar game with old fashioned cylons he was
building with his son.
Martin McClure did something with floating point.
There was no presentation of Amber with 0MQ. The way Sebastian told it
to me, he and Johnny didn't gel when they tried to work together. Too
much California and not enough Bavaria. Or the other way around. Still
sounds like a good idea, though.
STIC will be held June 2013 in Arizona. There will be another
SmalltalkDirections track, as Ralph Johnson was not discouraged: "It's a
small start." If you contact Suzanne Fortman at the email above, she
will give you a code for $100 off the price.
No mention of Biloxi would be complete without saying Hurricane Katrina
passed a thirty foot wave over this sandy peninsula and destroyed
everything. You don't hear about it in the casino. Step outside and meet
a local and you'll hear about their house being cut in half and how
'This Waffle House is a new building.' Then they'll tell you about the
Deepwater Horizon oil spill. This is the South. To me, and as a
Canadian, the South is the most distinct and opaque culture in the
United States. Whatever it is that's unique down here does not travel
and can't be shown on television. It's an interesting place to visit.
That wraps it up for my trip to Biloxi. I'm on a shuttle to the airport
in an hour.
Thanks for reading,
Chris
re the confusion of copyFrom: (i.e. that it looks to be part of the
copyFrom:to: family) could we please come up with a renaming of copyFrom:,
e.g. copyStateFrom: or copyInstVarsFrom: and start using it so that some
time we may have (c copyFrom: i) = (c copyFrom: i to: c size) ?
On Thu, Mar 22, 2012 at 8:16 AM, <commits(a)source.squeak.org> wrote:
> Bert Freudenberg uploaded a new version of Tools to project The Trunk:
> http://source.squeak.org/trunk/Tools-bf.397.mcz
>
> ==================== Summary ====================
>
> Name: Tools-bf.397
> Author: bf
> Time: 22 March 2012, 4:15:47.476 pm
> UUID: 01d6b8f6-6a5a-40cb-bafd-c266b07ec665
> Ancestors: Tools-bf.396
>
> Preserve dependents when making new inspector. Otherwise, the new
> inspector becomes unresponsive.
>
> =============== Diff against Tools-bf.396 ===============
>
> Item was changed:
> ----- Method: Inspector>>inspect: (in category 'initialize-release') -----
> inspect: anObject
> "Initialize the receiver so that it is inspecting anObject. There
> is no current selection.
>
> Normally the receiver will be of the correct class (as defined by
> anObject inspectorClass),
> because it will have just been created by sedning inspect to
> anObject. However, the
> debugger uses two embedded inspectors, which are re-targetted on
> the current receiver
> each time the stack frame changes. The left-hand inspector in the
> debugger has its
> class changed by the code here. Care should be taken if this
> method is overridden to
> ensure that the overriding code calls 'super inspect: anObject', or
> otherwise ensures that
> the class of these embedded inspectors are changed back."
>
> | c |
> c := anObject inspectorClass.
> self class ~= c ifTrue: [
> self class format = c format
> ifTrue: [self primitiveChangeClassTo: c basicNew]
> + ifFalse: [self becomeForward: (c basicNew
> copyFrom: self)]].
> - ifFalse: [self becomeForward: c basicNew]].
> "Set 'object' before sending the initialize message, because some
> implementations
> of initialize (e.g., in DictionaryInspector) require 'object' to be
> non-nil."
>
> object := anObject.
> self initialize!
>
>
>
--
best,
Eliot
Bert Freudenberg uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-bf.397.mcz
==================== Summary ====================
Name: Tools-bf.397
Author: bf
Time: 22 March 2012, 4:15:47.476 pm
UUID: 01d6b8f6-6a5a-40cb-bafd-c266b07ec665
Ancestors: Tools-bf.396
Preserve dependents when making new inspector. Otherwise, the new inspector becomes unresponsive.
=============== Diff against Tools-bf.396 ===============
Item was changed:
----- Method: Inspector>>inspect: (in category 'initialize-release') -----
inspect: anObject
"Initialize the receiver so that it is inspecting anObject. There is no current selection.
Normally the receiver will be of the correct class (as defined by anObject inspectorClass),
because it will have just been created by sedning inspect to anObject. However, the
debugger uses two embedded inspectors, which are re-targetted on the current receiver
each time the stack frame changes. The left-hand inspector in the debugger has its
class changed by the code here. Care should be taken if this method is overridden to
ensure that the overriding code calls 'super inspect: anObject', or otherwise ensures that
the class of these embedded inspectors are changed back."
| c |
c := anObject inspectorClass.
self class ~= c ifTrue: [
self class format = c format
ifTrue: [self primitiveChangeClassTo: c basicNew]
+ ifFalse: [self becomeForward: (c basicNew copyFrom: self)]].
- ifFalse: [self becomeForward: c basicNew]].
"Set 'object' before sending the initialize message, because some implementations
of initialize (e.g., in DictionaryInspector) require 'object' to be non-nil."
object := anObject.
self initialize!
Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours:
http://lists.squeakfoundation.org/pipermail/packages/2012-March/005237.html
Name: Tools-bf.395
Ancestors: Tools-bf.394
Fix receiverInspector having the wrong class in debugger. To reproduce the problem, evaluate "Dictionary new halt values", step into the "values" method, select "self size" and choose "debug it" from the context menu. This would open a debugger whose receiverInspector was still a ContextInspector, when it should have been a DictionaryInspector.
=============================================
http://lists.squeakfoundation.org/pipermail/packages/2012-March/005238.html
Name: Tools-bf.396
Ancestors: Tools-bf.395
Use becomeForward: instead of become: as suggested by Nicolas.
=============================================
Any interest to use becomeForward: in such case?
Nicolas
Le 21 mars 2012 20:37, <commits(a)source.squeak.org> a écrit :
> Bert Freudenberg uploaded a new version of Tools to project The Trunk:
> http://source.squeak.org/trunk/Tools-bf.395.mcz
>
> ==================== Summary ====================
>
> Name: Tools-bf.395
> Author: bf
> Time: 21 March 2012, 8:37:16.352 pm
> UUID: daf7f77d-d62f-4b59-ab6c-ceeed1058c8a
> Ancestors: Tools-bf.394
>
> Fix receiverInspector having the wrong class in debugger. To reproduce the
> problem, evaluate "Dictionary new halt values", step into the "values"
> method, select "self size" and choose "debug it" from the context menu.
> This would open a debugger whose receiverInspector was still a
> ContextInspector, when it should have been a DictionaryInspector.
>
> =============== Diff against Tools-bf.394 ===============
>
> Item was changed:
> ----- Method: Inspector>>inspect: (in category 'initialize-release') -----
> inspect: anObject
> "Initialize the receiver so that it is inspecting anObject. There
> is no current selection.
>
> Normally the receiver will be of the correct class (as defined by
> anObject inspectorClass),
> because it will have just been created by sedning inspect to
> anObject. However, the
> debugger uses two embedded inspectors, which are re-targetted on
> the current receiver
> each time the stack frame changes. The left-hand inspector in the
> debugger has its
> class changed by the code here. Care should be taken if this
> method is overridden to
> ensure that the overriding code calls 'super inspect: anObject', or
> otherwise ensures that
> the class of these embedded inspectors are changed back."
>
> | c |
> c := anObject inspectorClass.
> + self class ~= c ifTrue: [
> + self class format = c format
> + ifTrue: [self primitiveChangeClassTo: c basicNew]
> + ifFalse: [self become: c basicNew]].
> - (self class ~= c and: [self class format = c format]) ifTrue: [
> - self primitiveChangeClassTo: c basicNew].
> -
> "Set 'object' before sending the initialize message, because some
> implementations
> of initialize (e.g., in DictionaryInspector) require 'object' to be
> non-nil."
>
> object := anObject.
> self initialize!
>
>
>
Bert Freudenberg uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-bf.396.mcz
==================== Summary ====================
Name: Tools-bf.396
Author: bf
Time: 21 March 2012, 9:24:17.297 pm
UUID: 6a6ab13c-10bd-47c6-a243-4c6612974337
Ancestors: Tools-bf.395
Use becomeForward: instead of become: as suggested by Nicolas.
=============== Diff against Tools-bf.395 ===============
Item was changed:
----- Method: Inspector>>inspect: (in category 'initialize-release') -----
inspect: anObject
"Initialize the receiver so that it is inspecting anObject. There is no current selection.
Normally the receiver will be of the correct class (as defined by anObject inspectorClass),
because it will have just been created by sedning inspect to anObject. However, the
debugger uses two embedded inspectors, which are re-targetted on the current receiver
each time the stack frame changes. The left-hand inspector in the debugger has its
class changed by the code here. Care should be taken if this method is overridden to
ensure that the overriding code calls 'super inspect: anObject', or otherwise ensures that
the class of these embedded inspectors are changed back."
| c |
c := anObject inspectorClass.
self class ~= c ifTrue: [
self class format = c format
ifTrue: [self primitiveChangeClassTo: c basicNew]
+ ifFalse: [self becomeForward: c basicNew]].
- ifFalse: [self become: c basicNew]].
"Set 'object' before sending the initialize message, because some implementations
of initialize (e.g., in DictionaryInspector) require 'object' to be non-nil."
object := anObject.
self initialize!
Bert Freudenberg uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-bf.395.mcz
==================== Summary ====================
Name: Tools-bf.395
Author: bf
Time: 21 March 2012, 8:37:16.352 pm
UUID: daf7f77d-d62f-4b59-ab6c-ceeed1058c8a
Ancestors: Tools-bf.394
Fix receiverInspector having the wrong class in debugger. To reproduce the problem, evaluate "Dictionary new halt values", step into the "values" method, select "self size" and choose "debug it" from the context menu. This would open a debugger whose receiverInspector was still a ContextInspector, when it should have been a DictionaryInspector.
=============== Diff against Tools-bf.394 ===============
Item was changed:
----- Method: Inspector>>inspect: (in category 'initialize-release') -----
inspect: anObject
"Initialize the receiver so that it is inspecting anObject. There is no current selection.
Normally the receiver will be of the correct class (as defined by anObject inspectorClass),
because it will have just been created by sedning inspect to anObject. However, the
debugger uses two embedded inspectors, which are re-targetted on the current receiver
each time the stack frame changes. The left-hand inspector in the debugger has its
class changed by the code here. Care should be taken if this method is overridden to
ensure that the overriding code calls 'super inspect: anObject', or otherwise ensures that
the class of these embedded inspectors are changed back."
| c |
c := anObject inspectorClass.
+ self class ~= c ifTrue: [
+ self class format = c format
+ ifTrue: [self primitiveChangeClassTo: c basicNew]
+ ifFalse: [self become: c basicNew]].
- (self class ~= c and: [self class format = c format]) ifTrue: [
- self primitiveChangeClassTo: c basicNew].
-
"Set 'object' before sending the initialize message, because some implementations
of initialize (e.g., in DictionaryInspector) require 'object' to be non-nil."
object := anObject.
self initialize!
http://alistair.cockburn.us/Using+natural+language+as+a+metaphoric+base+for…http://www.evolutionofcomputing.org/http://squeaksource.com/Spy/http://objectprofile.com/http://www.mediagenix.tvhttp://yesplan.be/http://wiki.squeak.org/squeak/3836
There are a few facts to display before talking about Sam Adams talk Big
POOP - parallel OOP. It's non-deterministic, so it doesn't want to say
something like "= C" but that it "approaches C". It started with a
Squeak VM and a 1.7 Squeak image. It has lots of cores and lots of heaps
and the cores start and stop all the time so the hardware configuration
is changing all the time. Each core has the power of a PDP-11. The
result is the Roar VM project.
Oh, yea. Previously the CPU was the centre of attention. We lined up
data to go through the CPU. The paradigm flips so that data, massive
amounts of data are at the centre and are surrounded by many spiraling
eddies of cores. Its uses MVC and not Morphic due to cycle consumption
or something.
A key idea is using different parts of speech in programming instead of
just nouns and verbs. This goes back to a paper from Alistair Cockburn
at OOPSLA in 1988. There will be a paper this year by Doug Kimelman and
Dave Ungar called "Non-deterministic collections - Ensembles."
We need to get under three words: adverb, gerund, and ensemble. You know
what an adverb is. In English it will end in 'ly'. A participle is a
verbal adjective. 'A loving father' is a participle acting as an
adjective describing a father. This matters because a participle must
have a subject. If you have too much distance between your subject and
participle something else in the sentence may appear to be the subject
and you have a dangling participle. A gerund is a verbal noun. It
requires no subject. 'A father who fears loving' shows a gerund. The
word 'loving' has no subject. The father fears the process of loving,
the act. It's a process that becomes it's own, objective thing. (Perhaps
a reification of the process of loving.) The immediate confusion comes
because there is no subject. Does the father fear loving or being loved?
Is the father the subject or the object? The lover or the object of
love? With a gerund, that is unspecified.
The third word we need to get under is ensemble, which is a replacement
for a Collection. An ensemble is a container full of instances that
cannot be accessed directly. There is no index or order. You can only
affect the instances indirectly and then they influence themselves. An
ensemble is a flock of instances like a flock of birds. Or like a school
of fish. If a flock of birds all turn at once, you need Boid algorithms
to model that. There is no subject/object relationship in a flock of
birds turning. The bird next to another bird is both the subject and the
object, as a turning bird influences the bird next to it and is also
influenced by the bird next to it.
An ensemble of birds in the presence of the gerund 'turning' all
influence each other without a clear idea of who is the subject and who
is the object. I decided the picture that makes this simple for me is
street riot. An ensemble of people emerge from an arena onto a street to
encounter the gerund 'rioting'. Being weak willed, they become rioters.
And in turn the next set of young people coming onto the street are
influenced by the newly created rioters. Sam Adams does not talk about
riots, but he can talk about war.
The language of the Roar VM is Ly, taken from the last two letters of an
adverb in English. It looks like JavaScript.
Boid.inflate(1000 --fuzzily)
The gerund is inflate and it is asking 1000 newly created instances to
influence each other in a fuzzy way.
flock.position(--averagely)
The ensemble called flock is told to influence each other in a way to
return a position, while modified by the adverb.
flock..position(--averagely)
If you change the number of periods you can determine how the ensemble
is relating to itself, only part, or something like that.
Andres Valloud asked Sam Adams what you could do with this. Say you are
in a convoy in Afghanistan and you want to avoid IEDs on the side of the
road. In thirty seconds you will turn left or right. In those thirty
seconds you have collected all the electromagnetic communication in
different languages, cell phones, GPS and it's one giant flop of data.
You are trying to track the communications of the enemy. You can
generate a probability of which is the road least likely to have an IED.
Andrew Black in Portland does the software. Stephan Marr is doing the VM
in Belgium.
Chris Muller did a presentation on his geo-location project in South
Africa. If a caller dials an emergency number and you have their
lat/long, how do you know where they are? He worked with public map
services to lay the location onto a map to pass to emergency services.
His presentation had the best slides. He used a BookMorph and a tool
he's written called OfficeObjects. His screen was a Squeak image on full
screen. It used Maui for the UI generation, had maps of Uganda and South
Africa, where he would dynamically layover different examples.
The Smalltalk Directions single panel was presented by Alexandre Bergel.
We were handed a ring bound book with two papers: The Hidden Face of
Execution Profiling; and, Memory Snapshotting of Self-Modifying Systems.
The first was about how the profiler is unreliable. If you do many
passes, then it becomes more reliable. Plotting those points, you get a
graph shape, and what were the various pathways on a tree diagram
producing the results? The second paper was not presented, but involved
SqueakNOS. It's likely there is pdf somewhere with these papers.
Then Alexandre Bergel presented on the Spy package which has the Kai
profiler and the Hapa'o tool to visually display how much test coverage
your application has. He also mentioned that beside CMS Box there was
another business using Pharo called YesPlan for scheduling.
And, Alexander did the Pharo roadmap where he said Pharo 1.4 will
replace ImageSegment with Fuel, because it's faster. There will be a
Pharo By Example 2 pdf book soon. The aim of the Pharo team is
"cleaning, cleaning, cleaning". That's how he describes the effort of
the Pharo community to rewrite all code in the image from top to bottom.
They have a saying in Hollywood: put your money where people will see
it. That means put your money on the screen and not into invisible parts
of the process. Ocean may be a library that creates an OOP socket
library, but does anybody need such a thing? Sockets aren't OOP, so why
bother? It seems to me the Pharo community has very, very strong
feelings about how things should be designed in a way that is perhaps
irrelevant to the kind of work being done. C'est la.
MediaGeniX creates a scheduling product called What's On for European TV
stations such as MTVUK, Kanal 5, TV Norge, TV2, YLE, TVN, RTBF. They
have 26 developers writing code in VisualWorks. They make 70
integrations a day and were displaying their continuous integration
process. They have a Seaside interface for all their running and
completed testing routines.
Today I'm going to Dale Henrichs Practical Git For Smalltalk and the
lightning talks, which should be interesting.
Thanks,
Chris