Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 1 participants
- 144619 messages
[NB] Undocumented NativeBoost options
by Max Leske
I got a bit frustrated and ended up searching the source for â[\w]opt[[:upper]]â to find all NativeBoost options. Some of those options are in fact undocumented:
optMayGC
optProxyLabels
optCdecl
optReturnNullAsNil
optStdcall
optNonMovable
optReserveCallgateSpace
optDebug
optNoAlignment
optEmitCall
optNoCleanup
optCheckFailOnEveryArgument
optStringOrNull
WinUnicode
NBFFICallout>>defaultOptions documents most options but refers to NBFFICallout>>allOptions, wich does not exist. Most of the above options can be considered internal, I guess, but the one option I needed (âoptStringOrNullâ) isnât documented anywhere. I had to step through the execution to find out why my function call wasnât working (because I was trying to use âoptCoerceNilToNullâ and didnât know that strings need a special option).
Iâd be very thankful if these options would be included in the documentation.
Note: âWinUnicodeâ is used by the Windows code in a couple of places, even though the option name is not valid, according to NBNativeCodeGen>>parseOptions:
Cheers,
Max
Nov. 15, 2014
Re: [Pharo-dev] Configurations and Github for a specialised configuration browswe
by Yuriy Tymchuk
This is how I use all that magic http://sleepycoders.blogspot.ch/2014/04/how-to-distribute-your-github-pharo… <http://sleepycoders.blogspot.ch/2014/04/how-to-distribute-your-github-pharo…>
> On 21 Oct 2014, at 20:33, kilon alios <kilon.alios(a)gmail.com> wrote:
>
> So I am so happy with how Pharo works with Github, that I decided to even port my configurations there and I also decided to create a small configuration browser which will subclass the existing configuration browser for installing tools for my project Ephestos so I dont have to pollute the existing configuration projects with all my sub-projects.
>
> In sort I want to host configurations to Github similarly to how MetaRepos are host in Smalltalkhub. I want the user to be able to install those configurations without a need to install git
>
> I asked this I think before and I was told how to, but it was part of another thread and it got lost inside my email abyss.
>
> So How I do that ?
Nov. 15, 2014
Re: [Pharo-dev] Configurations and Github for a specialised configuration browswe
by kilon alios
ok after rereading your emails more carefully i realised that you meant
that BaselineOf should go to its own package, so I moved the class to
BaselineOfNireas package and now it does not report the same error but now
it complain that project,baseline or configuration not specified.
Is it mandatory to specify a configuration for my project , I though the
baseline class was enough. Would love to hear more info on the subject, I
am looking also at the Metacello chapter which by the way is in Deep Into
Pharo and not PBE , I see loads of info on the subject but does not seem to
mention anything about the BaselineOf class .
Will love it if we can gave a simple way to load git repos to pharo 4.
On Sat, Nov 15, 2014 at 12:53 PM, kilon alios <kilon.alios(a)gmail.com> wrote:
> small typo in my paste
>
> the actual code i used is
>
> Metacello new
> baseline:'Nireas';
> repository:'github://kilon/Nireas:master';
> get;
> load.
>
> any help is appreciated :)
>
> On Sat, Nov 15, 2014 at 12:50 PM, kilon alios <kilon.alios(a)gmail.com>
> wrote:
>
>> hello Dale I tried your approach with a new project I created called
>> Nireas, its a theme manager for pharo 4. I followed your instructions and
>> it complains that it cannot find the BaselineOfNireas
>>
>> This is the code I used
>>
>> Metacello new
>> baseline:'Nireas';
>> repository:'github://kilon/nireas:master';
>> get;
>> load.
>>
>> here is the repo
>>
>> https://github.com/kilon/Nireas
>>
>> and here is the error
>>
>>
>> MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>retryingResolvePackageSpecReferences:gofer:
>> linearLoadPackageSpec: packageSpec gofer: gofer
>> MetacelloPlatform current
>> do: [
>> | references nearestReference cachedReference externalReference mcVersion
>> loadedVersionInfos |
>> "check to see if mcz file is already in cacheRepository"
>> cachedReference := self resolvePackageSpec: packageSpec cachedGofer: self
>> loaderPolicy cacheGofer.
>> (cachedReference ~~ nil and: [ packageSpec getFile ~~ nil ])
>> ifTrue: [
>> cachedReference name = packageSpec file
>> ifTrue: [
>> "exact match between packageSpec file and cache"
>> ^ self scheduleFetchFor: packageSpec cachedReference: cachedReference ] ]. "look
>> up mcz file"
>> references := self retryingResolvePackageSpecReferences: packageSpec
>> gofer: gofer.
>> nearestReference := references last asMetacelloCachingResolvedReference. "If
>> the mcz is already in the cacheRepository, no need to copy"
>> (cachedReference ~~ nil and: [ cachedReference name = nearestReference
>> name ])
>> ifTrue: [
>> "latest reference in repository matches cachedReference ... "
>> ^ self scheduleFetchFor: packageSpec nearestReference: nearestReference ]. "If
>> the mcz is already loaded into the image, no need to copy"
>> (self ignoreImage not and: [ (loadedVersionInfos := self ancestorsFor:
>> packageSpec) ~~ nil ])
>> ifTrue: [
>> loadedVersionInfos
>> do: [ :info |
>> info name = nearestReference name
>> ifTrue: [ ^ self ] ] ].
>> externalReference := (references select: [ :ref | ref name =
>> nearestReference name ]) first
>> asMetacelloCachingResolvedReference.
>> self repositoryMap at: externalReference name put: externalReference
>> repository.
>> (self
>> resolveDependencies: externalReference
>> nearest: nearestReference
>> into: (OrderedCollection with: nearestReference))
>> do: [ :reference |
>> | pSpec l |
>> mcVersion := reference version.
>> (l := (GoferVersionReference name: reference name) resolveAllWith: self
>> loaderPolicy cacheGofer) isEmpty
>> ifTrue: [
>> self cacheRepository storeVersion: mcVersion.
>> reference == nearestReference
>> ifTrue: [ pSpec := packageSpec ]
>> ifFalse: [
>> pSpec := packageSpec project packageSpec.
>> pSpec name: mcVersion package name ].
>> self loadData
>> addVersion: mcVersion
>> versionInfo: mcVersion info
>> resolvedReference: reference
>> packageSpec: pSpec ] ].
>> self scheduleFetchFor: packageSpec externalReference: externalReference ]
>> displaying: 'Fetching ' , packageSpec file in
>> MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer: in Block:
>> linearLoadPackageSpec: packageSpec gofer: gofer...
>> MetacelloPharo30Platform(MetacelloPlatform)>>do:displaying:
>> MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer:
>> MetacelloPackageSpec>>loadUsing:gofer:
>> [ :pkg | pkg loadUsing: self gofer: gofer ] in
>> MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories:
>> in Block: [ :pkg | pkg loadUsing: self gofer: gofer ]
>> Array(SequenceableCollection)>>do:
>>
>> MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories:
>> [ super linearLoadPackageSpecs: packageSpecs repositories: repositories ]
>> in MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories: in
>> Block: [ super linearLoadPackageSpecs: packageSpecs repos...etc...
>> BlockClosure>>ensure:
>> MetacelloLoaderPolicy>>pushLoadDirective:during:
>> MetacelloLoaderPolicy>>pushExplicitLoadDirectivesDuring:for:
>> MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories:
>> MetacelloPackageSpec>>explicitLoadUsing:
>> MetacelloPackageSpec>>load
>> [
>> self setDefaultsAndValidateProjectSpec.
>> spec := self projectSpec.
>> projectPackage := spec projectPackage.
>> projectPackage repositorySpecs do: [ :repoSpec | repoSpec
>> createRepository flushForScriptGet ].
>> projectPackage load.
>> self root: (Smalltalk at: spec className asSymbol) project.
>> MetacelloProjectRegistration
>> registrationForProjectSpec: spec
>> ifAbsent: [ :new | new registerProject ]
>> ifPresent: [ :existing :new |
>> existing
>> copyOnWrite: [ :existingCopy |
>> spec
>> copyForRegistration: existingCopy
>> onWrite: [ :specCopy | specCopy ifNil: [ existingCopy merge: new ]
>> ifNotNil: [ specCopy mergeScriptRepository: spec ] ] ] ] ] in
>> MetacelloScriptEngine>>get in Block: [ ...
>> BlockClosure>>ensure:
>> MetacelloProjectRegistration class>>copyRegistryRestoreOnErrorWhile:
>> MetacelloScriptEngine>>get
>> [ :projectSpec |
>> | engine |
>> engine := MetacelloScriptEngine new
>> options: self options copy;
>> projectSpec: projectSpec;
>> yourself.
>> engine perform: actionArg key withArguments: actionArg value.
>> engine root ifNotNil: [ :root | self roots add: root ] ] in
>> MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: in Block: [
>> :projectSpec | ...
>> [ :projectSpec | projectSpec ifNotNil: [ projectSpecBlock value: (self
>> applyArgsToProjectSpec: projectSpec copy) ] ] in
>> MetacelloScriptApiExecutor>>executeString:do: in Block: [ :projectSpec |
>> projectSpec ifNotNil: [ projectSp...etc...
>> Array(SequenceableCollection)>>do:
>> MetacelloScriptApiExecutor>>executeString:do:
>> ByteString(String)>>execute:against:
>> MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute:
>> Metacello>>execute
>> Metacello>>get
>> UndefinedObject>>DoIt
>> OpalCompiler>>evaluate
>> RubSmalltalkEditor>>evaluateSelectionAndDo:
>>
>>
>> On Tue, Oct 21, 2014 at 10:55 PM, kilon alios <kilon.alios(a)gmail.com>
>> wrote:
>>
>>> Thank you Dale very much , this is very clear :)
>>>
>>> On Tue, Oct 21, 2014 at 10:53 PM, Dale Henrichs <
>>> dale.henrichs(a)gemtalksystems.com> wrote:
>>>
>>>>
>>>>
>>>> On Tue, Oct 21, 2014 at 12:04 PM, kilon alios <kilon.alios(a)gmail.com>
>>>> wrote:
>>>>
>>>>> Thank you Dale, this is more simple than I expected.
>>>>>
>>>>> From what you linked it looks like by [:comitish] you mean the git
>>>>> branch .Which in my case is master so it should be
>>>>>
>>>>> Metacello new
>>>>> baseline: 'BaselineOfXXX';
>>>>> repository: 'github://kilon/phEphestos:master/'
>>>>> get;
>>>>> load.
>>>>>
>>>>> https://github.com/kilon/phEphestos
>>>>>
>>>>
>>>> From looking at your repo on githug, the expression would be:
>>>>
>>>> Metacello new
>>>> baseline: 'Ephestos';
>>>> repository: 'github://kilon/phEphestos:master'
>>>> get;
>>>> load.
>>>>
>>>> A commitish is a branch, SHA or tag. Note also, that my example was
>>>> wrong ... the 'BaselineOf' shouldn't be used in the baseline: argument,
>>>> just the base name of the project.
>>>>
>>>> You also need to create a BaselineOfEphestos which specifies package
>>>> load order. BaselineOfEphestos would be created as a subclass of BaselineOf
>>>> and have a single method:
>>>>
>>>> baseline: spec
>>>> <baseline>
>>>> spec
>>>> for: #pharo
>>>> do: [
>>>> spec package: 'Ephestos' ].
>>>>
>>>> Then the above expression would load the Epestos package.
>>>>
>>>> If you were to add another package, say EphestosTests, then you'd
>>>> update the baseline to declare that EphestosTests requires Ephestos to be
>>>> loaded first you'd edit the baseline: method:
>>>>
>>>> baseline: spec
>>>> <baseline>
>>>> spec
>>>> for: #pharo
>>>> do: [
>>>> spec
>>>> package: 'Ephestos';
>>>> package: 'EphestosTests' with: [ spec requires: #( 'Ephestos'
>>>> ) ] ].
>>>>
>>>> You commit the BaselineOf along with the rest of the packages for your
>>>> project ...
>>>>
>>>> For more information see the Metacello chapter in Pharo by Example...
>>>>
>>>> Dale
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>
>
Nov. 15, 2014
Re: [Pharo-dev] Configurations and Github for a specialised configuration browswe
by kilon alios
small typo in my paste
the actual code i used is
Metacello new
baseline:'Nireas';
repository:'github://kilon/Nireas:master';
get;
load.
any help is appreciated :)
On Sat, Nov 15, 2014 at 12:50 PM, kilon alios <kilon.alios(a)gmail.com> wrote:
> hello Dale I tried your approach with a new project I created called
> Nireas, its a theme manager for pharo 4. I followed your instructions and
> it complains that it cannot find the BaselineOfNireas
>
> This is the code I used
>
> Metacello new
> baseline:'Nireas';
> repository:'github://kilon/nireas:master';
> get;
> load.
>
> here is the repo
>
> https://github.com/kilon/Nireas
>
> and here is the error
>
>
> MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>retryingResolvePackageSpecReferences:gofer:
> linearLoadPackageSpec: packageSpec gofer: gofer
> MetacelloPlatform current
> do: [
> | references nearestReference cachedReference externalReference mcVersion
> loadedVersionInfos |
> "check to see if mcz file is already in cacheRepository"
> cachedReference := self resolvePackageSpec: packageSpec cachedGofer: self
> loaderPolicy cacheGofer.
> (cachedReference ~~ nil and: [ packageSpec getFile ~~ nil ])
> ifTrue: [
> cachedReference name = packageSpec file
> ifTrue: [
> "exact match between packageSpec file and cache"
> ^ self scheduleFetchFor: packageSpec cachedReference: cachedReference ] ]. "look
> up mcz file"
> references := self retryingResolvePackageSpecReferences: packageSpec
> gofer: gofer.
> nearestReference := references last asMetacelloCachingResolvedReference. "If
> the mcz is already in the cacheRepository, no need to copy"
> (cachedReference ~~ nil and: [ cachedReference name = nearestReference
> name ])
> ifTrue: [
> "latest reference in repository matches cachedReference ... "
> ^ self scheduleFetchFor: packageSpec nearestReference: nearestReference ]. "If
> the mcz is already loaded into the image, no need to copy"
> (self ignoreImage not and: [ (loadedVersionInfos := self ancestorsFor:
> packageSpec) ~~ nil ])
> ifTrue: [
> loadedVersionInfos
> do: [ :info |
> info name = nearestReference name
> ifTrue: [ ^ self ] ] ].
> externalReference := (references select: [ :ref | ref name =
> nearestReference name ]) first
> asMetacelloCachingResolvedReference.
> self repositoryMap at: externalReference name put: externalReference
> repository.
> (self
> resolveDependencies: externalReference
> nearest: nearestReference
> into: (OrderedCollection with: nearestReference))
> do: [ :reference |
> | pSpec l |
> mcVersion := reference version.
> (l := (GoferVersionReference name: reference name) resolveAllWith: self
> loaderPolicy cacheGofer) isEmpty
> ifTrue: [
> self cacheRepository storeVersion: mcVersion.
> reference == nearestReference
> ifTrue: [ pSpec := packageSpec ]
> ifFalse: [
> pSpec := packageSpec project packageSpec.
> pSpec name: mcVersion package name ].
> self loadData
> addVersion: mcVersion
> versionInfo: mcVersion info
> resolvedReference: reference
> packageSpec: pSpec ] ].
> self scheduleFetchFor: packageSpec externalReference: externalReference ]
> displaying: 'Fetching ' , packageSpec file in
> MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer: in Block:
> linearLoadPackageSpec: packageSpec gofer: gofer...
> MetacelloPharo30Platform(MetacelloPlatform)>>do:displaying:
> MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer:
> MetacelloPackageSpec>>loadUsing:gofer:
> [ :pkg | pkg loadUsing: self gofer: gofer ] in
> MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories:
> in Block: [ :pkg | pkg loadUsing: self gofer: gofer ]
> Array(SequenceableCollection)>>do:
>
> MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories:
> [ super linearLoadPackageSpecs: packageSpecs repositories: repositories ]
> in MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories: in
> Block: [ super linearLoadPackageSpecs: packageSpecs repos...etc...
> BlockClosure>>ensure:
> MetacelloLoaderPolicy>>pushLoadDirective:during:
> MetacelloLoaderPolicy>>pushExplicitLoadDirectivesDuring:for:
> MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories:
> MetacelloPackageSpec>>explicitLoadUsing:
> MetacelloPackageSpec>>load
> [
> self setDefaultsAndValidateProjectSpec.
> spec := self projectSpec.
> projectPackage := spec projectPackage.
> projectPackage repositorySpecs do: [ :repoSpec | repoSpec createRepository
> flushForScriptGet ].
> projectPackage load.
> self root: (Smalltalk at: spec className asSymbol) project.
> MetacelloProjectRegistration
> registrationForProjectSpec: spec
> ifAbsent: [ :new | new registerProject ]
> ifPresent: [ :existing :new |
> existing
> copyOnWrite: [ :existingCopy |
> spec
> copyForRegistration: existingCopy
> onWrite: [ :specCopy | specCopy ifNil: [ existingCopy merge: new ]
> ifNotNil: [ specCopy mergeScriptRepository: spec ] ] ] ] ] in
> MetacelloScriptEngine>>get in Block: [ ...
> BlockClosure>>ensure:
> MetacelloProjectRegistration class>>copyRegistryRestoreOnErrorWhile:
> MetacelloScriptEngine>>get
> [ :projectSpec |
> | engine |
> engine := MetacelloScriptEngine new
> options: self options copy;
> projectSpec: projectSpec;
> yourself.
> engine perform: actionArg key withArguments: actionArg value.
> engine root ifNotNil: [ :root | self roots add: root ] ] in
> MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: in Block: [
> :projectSpec | ...
> [ :projectSpec | projectSpec ifNotNil: [ projectSpecBlock value: (self
> applyArgsToProjectSpec: projectSpec copy) ] ] in
> MetacelloScriptApiExecutor>>executeString:do: in Block: [ :projectSpec |
> projectSpec ifNotNil: [ projectSp...etc...
> Array(SequenceableCollection)>>do:
> MetacelloScriptApiExecutor>>executeString:do:
> ByteString(String)>>execute:against:
> MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute:
> Metacello>>execute
> Metacello>>get
> UndefinedObject>>DoIt
> OpalCompiler>>evaluate
> RubSmalltalkEditor>>evaluateSelectionAndDo:
>
>
> On Tue, Oct 21, 2014 at 10:55 PM, kilon alios <kilon.alios(a)gmail.com>
> wrote:
>
>> Thank you Dale very much , this is very clear :)
>>
>> On Tue, Oct 21, 2014 at 10:53 PM, Dale Henrichs <
>> dale.henrichs(a)gemtalksystems.com> wrote:
>>
>>>
>>>
>>> On Tue, Oct 21, 2014 at 12:04 PM, kilon alios <kilon.alios(a)gmail.com>
>>> wrote:
>>>
>>>> Thank you Dale, this is more simple than I expected.
>>>>
>>>> From what you linked it looks like by [:comitish] you mean the git
>>>> branch .Which in my case is master so it should be
>>>>
>>>> Metacello new
>>>> baseline: 'BaselineOfXXX';
>>>> repository: 'github://kilon/phEphestos:master/'
>>>> get;
>>>> load.
>>>>
>>>> https://github.com/kilon/phEphestos
>>>>
>>>
>>> From looking at your repo on githug, the expression would be:
>>>
>>> Metacello new
>>> baseline: 'Ephestos';
>>> repository: 'github://kilon/phEphestos:master'
>>> get;
>>> load.
>>>
>>> A commitish is a branch, SHA or tag. Note also, that my example was
>>> wrong ... the 'BaselineOf' shouldn't be used in the baseline: argument,
>>> just the base name of the project.
>>>
>>> You also need to create a BaselineOfEphestos which specifies package
>>> load order. BaselineOfEphestos would be created as a subclass of BaselineOf
>>> and have a single method:
>>>
>>> baseline: spec
>>> <baseline>
>>> spec
>>> for: #pharo
>>> do: [
>>> spec package: 'Ephestos' ].
>>>
>>> Then the above expression would load the Epestos package.
>>>
>>> If you were to add another package, say EphestosTests, then you'd update
>>> the baseline to declare that EphestosTests requires Ephestos to be loaded
>>> first you'd edit the baseline: method:
>>>
>>> baseline: spec
>>> <baseline>
>>> spec
>>> for: #pharo
>>> do: [
>>> spec
>>> package: 'Ephestos';
>>> package: 'EphestosTests' with: [ spec requires: #( 'Ephestos'
>>> ) ] ].
>>>
>>> You commit the BaselineOf along with the rest of the packages for your
>>> project ...
>>>
>>> For more information see the Metacello chapter in Pharo by Example...
>>>
>>> Dale
>>>
>>>
>>>
>>>
>>>
>>
>
Nov. 15, 2014
Re: [Pharo-dev] Configurations and Github for a specialised configuration browswe
by kilon alios
hello Dale I tried your approach with a new project I created called
Nireas, its a theme manager for pharo 4. I followed your instructions and
it complains that it cannot find the BaselineOfNireas
This is the code I used
Metacello new
baseline:'Nireas';
repository:'github://kilon/nireas:master';
get;
load.
here is the repo
https://github.com/kilon/Nireas
and here is the error
MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>retryingResolvePackageSpecReferences:gofer:
linearLoadPackageSpec: packageSpec gofer: gofer
MetacelloPlatform current
do: [
| references nearestReference cachedReference externalReference mcVersion
loadedVersionInfos |
"check to see if mcz file is already in cacheRepository"
cachedReference := self resolvePackageSpec: packageSpec cachedGofer: self
loaderPolicy cacheGofer.
(cachedReference ~~ nil and: [ packageSpec getFile ~~ nil ])
ifTrue: [
cachedReference name = packageSpec file
ifTrue: [
"exact match between packageSpec file and cache"
^ self scheduleFetchFor: packageSpec cachedReference: cachedReference
] ]. "look
up mcz file"
references := self retryingResolvePackageSpecReferences: packageSpec gofer:
gofer.
nearestReference := references last asMetacelloCachingResolvedReference. "If
the mcz is already in the cacheRepository, no need to copy"
(cachedReference ~~ nil and: [ cachedReference name = nearestReference name
])
ifTrue: [
"latest reference in repository matches cachedReference ... "
^ self scheduleFetchFor: packageSpec nearestReference: nearestReference ]. "If
the mcz is already loaded into the image, no need to copy"
(self ignoreImage not and: [ (loadedVersionInfos := self ancestorsFor:
packageSpec) ~~ nil ])
ifTrue: [
loadedVersionInfos
do: [ :info |
info name = nearestReference name
ifTrue: [ ^ self ] ] ].
externalReference := (references select: [ :ref | ref name =
nearestReference name ]) first
asMetacelloCachingResolvedReference.
self repositoryMap at: externalReference name put: externalReference
repository.
(self
resolveDependencies: externalReference
nearest: nearestReference
into: (OrderedCollection with: nearestReference))
do: [ :reference |
| pSpec l |
mcVersion := reference version.
(l := (GoferVersionReference name: reference name) resolveAllWith: self
loaderPolicy cacheGofer) isEmpty
ifTrue: [
self cacheRepository storeVersion: mcVersion.
reference == nearestReference
ifTrue: [ pSpec := packageSpec ]
ifFalse: [
pSpec := packageSpec project packageSpec.
pSpec name: mcVersion package name ].
self loadData
addVersion: mcVersion
versionInfo: mcVersion info
resolvedReference: reference
packageSpec: pSpec ] ].
self scheduleFetchFor: packageSpec externalReference: externalReference ]
displaying: 'Fetching ' , packageSpec file in
MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer: in Block:
linearLoadPackageSpec: packageSpec gofer: gofer...
MetacelloPharo30Platform(MetacelloPlatform)>>do:displaying:
MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer:
MetacelloPackageSpec>>loadUsing:gofer:
[ :pkg | pkg loadUsing: self gofer: gofer ] in
MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories:
in Block: [ :pkg | pkg loadUsing: self gofer: gofer ]
Array(SequenceableCollection)>>do:
MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories:
[ super linearLoadPackageSpecs: packageSpecs repositories: repositories ]
in MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories: in
Block: [ super linearLoadPackageSpecs: packageSpecs repos...etc...
BlockClosure>>ensure:
MetacelloLoaderPolicy>>pushLoadDirective:during:
MetacelloLoaderPolicy>>pushExplicitLoadDirectivesDuring:for:
MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories:
MetacelloPackageSpec>>explicitLoadUsing:
MetacelloPackageSpec>>load
[
self setDefaultsAndValidateProjectSpec.
spec := self projectSpec.
projectPackage := spec projectPackage.
projectPackage repositorySpecs do: [ :repoSpec | repoSpec createRepository
flushForScriptGet ].
projectPackage load.
self root: (Smalltalk at: spec className asSymbol) project.
MetacelloProjectRegistration
registrationForProjectSpec: spec
ifAbsent: [ :new | new registerProject ]
ifPresent: [ :existing :new |
existing
copyOnWrite: [ :existingCopy |
spec
copyForRegistration: existingCopy
onWrite: [ :specCopy | specCopy ifNil: [ existingCopy merge: new ]
ifNotNil: [ specCopy mergeScriptRepository: spec ] ] ] ] ] in
MetacelloScriptEngine>>get in Block: [ ...
BlockClosure>>ensure:
MetacelloProjectRegistration class>>copyRegistryRestoreOnErrorWhile:
MetacelloScriptEngine>>get
[ :projectSpec |
| engine |
engine := MetacelloScriptEngine new
options: self options copy;
projectSpec: projectSpec;
yourself.
engine perform: actionArg key withArguments: actionArg value.
engine root ifNotNil: [ :root | self roots add: root ] ] in
MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: in Block: [
:projectSpec | ...
[ :projectSpec | projectSpec ifNotNil: [ projectSpecBlock value: (self
applyArgsToProjectSpec: projectSpec copy) ] ] in
MetacelloScriptApiExecutor>>executeString:do: in Block: [ :projectSpec |
projectSpec ifNotNil: [ projectSp...etc...
Array(SequenceableCollection)>>do:
MetacelloScriptApiExecutor>>executeString:do:
ByteString(String)>>execute:against:
MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute:
Metacello>>execute
Metacello>>get
UndefinedObject>>DoIt
OpalCompiler>>evaluate
RubSmalltalkEditor>>evaluateSelectionAndDo:
On Tue, Oct 21, 2014 at 10:55 PM, kilon alios <kilon.alios(a)gmail.com> wrote:
> Thank you Dale very much , this is very clear :)
>
> On Tue, Oct 21, 2014 at 10:53 PM, Dale Henrichs <
> dale.henrichs(a)gemtalksystems.com> wrote:
>
>>
>>
>> On Tue, Oct 21, 2014 at 12:04 PM, kilon alios <kilon.alios(a)gmail.com>
>> wrote:
>>
>>> Thank you Dale, this is more simple than I expected.
>>>
>>> From what you linked it looks like by [:comitish] you mean the git
>>> branch .Which in my case is master so it should be
>>>
>>> Metacello new
>>> baseline: 'BaselineOfXXX';
>>> repository: 'github://kilon/phEphestos:master/'
>>> get;
>>> load.
>>>
>>> https://github.com/kilon/phEphestos
>>>
>>
>> From looking at your repo on githug, the expression would be:
>>
>> Metacello new
>> baseline: 'Ephestos';
>> repository: 'github://kilon/phEphestos:master'
>> get;
>> load.
>>
>> A commitish is a branch, SHA or tag. Note also, that my example was wrong
>> ... the 'BaselineOf' shouldn't be used in the baseline: argument, just the
>> base name of the project.
>>
>> You also need to create a BaselineOfEphestos which specifies package
>> load order. BaselineOfEphestos would be created as a subclass of BaselineOf
>> and have a single method:
>>
>> baseline: spec
>> <baseline>
>> spec
>> for: #pharo
>> do: [
>> spec package: 'Ephestos' ].
>>
>> Then the above expression would load the Epestos package.
>>
>> If you were to add another package, say EphestosTests, then you'd update
>> the baseline to declare that EphestosTests requires Ephestos to be loaded
>> first you'd edit the baseline: method:
>>
>> baseline: spec
>> <baseline>
>> spec
>> for: #pharo
>> do: [
>> spec
>> package: 'Ephestos';
>> package: 'EphestosTests' with: [ spec requires: #( 'Ephestos' )
>> ] ].
>>
>> You commit the BaselineOf along with the rest of the packages for your
>> project ...
>>
>> For more information see the Metacello chapter in Pharo by Example...
>>
>> Dale
>>
>>
>>
>>
>>
>
Nov. 15, 2014
New Cog VMs available
by Eliot Miranda
... at http://www.mirandabanda.org/files/Cog/VM/VM.r3133/.
CogVM binaries as per VMMaker.oscog-eem.934/r3133
These VMs should be functionally identical to the 3126 VMs; the core VM
differs
only in having been compiled from generated source that has been refactored
to
enable convenient 32-bit to 64-bit Spur image bootstrap. I'm building and
releasing them mostly to test that refactoring. However, there is new DNS
support on Windows and SSL support on Unix. See below.
Simulator/Slang:
Refactor to allow 32-bit and 64-bit Spur to coexist
in the simulator, thereby allowing a 64-bit bootstrap.
Replace direct use of BytesPerWord, ShiftForWord, BytesPerOop and
BaseHeaderSize
with sends of wordSize, shiftForWord, bytesPerOop & baseHeaderSize
respectively.
Make sure these are still output as the manifest constants in the generated
C.
Eliminate use of bytesPerSlot in favour of bytesPerOop. The use of sends is
similar to those in trunk VMMaker, but I don't have time to merge. Sorry
:-(.
Work-around use of sends for bytesPerOop in e.g. generateToByDo:on:indent:
and
users of isConstantNode:valueInto:.
Do a better job at inlining via inlineCodeOrNilForStatement:in:. Comment in
isNode:substitutableFor:inMethod:in: explains.
Eliminate generic VM_LABEL support, labelling only the bytecodes in
interpret.
Eliminate use of LargeContextSize in the stack and cog VMs. Alas haven't
yet
eliminated the frame offset constants such as FoxCallerSavedIP et al. We
only
need one of the two word sizes of interpreter to be executable in the
bootstrap.
And remember to generate the GdbARMPlugin
Add accessorDepths for the exported browser plugin primitives for Spur.
Merge Levente's recent changes to DNS lookup on Windows and SSL on Unix.
See
http://squeakvm.org/cgi-bin/viewvc.cgi/squeak?view=revision&revision=2249
http://bugs.squeak.org/view.php?id=7824
Have the Unix & Mac VMs print the process id and working directory when
blocking
on error or assert fail. Add scripts for the ARM VM archives.
--
best,
Eliot
Nov. 14, 2014
Re: [Pharo-dev] Pharo on Online Labs ARM cloud server ?
by Alain Rastoul
This is an ongoing trend that comes with connected devices and IoT: more
and more event flow and data stream processing to be done.
more cpu cores and clustering needed to do the job.
Given that arm are cheap, I would say Online labs is a smart move.
Even your phone have several cores now and may be the next home computer
tomorrow, just plugging a keyboard, mouse and screen.
Or connecting 2 or more phones will give you a new kind of cluster for
data processing.
Also interesting to note that event streaming is coming to systems
primarily designed for storage like databases : sql server 2014 do not
rewrite rows for memory optimized tables, but instead append a new row
and changes the pointer to that row in the memory header.
Very interesting pointer, thank you Sven.
regards,
Alain
Le 14/11/2014 15:55, Esteban A. Maringolo a écrit :
> Thank you Sven.
>
> I didn't know about this alternative. I guess it's worth using it if
> your horizontal scale is relevant, or if there is a particular set of
> use cases (high I/O, low cpu?).
>
> Regards!
>
Nov. 14, 2014
Re: [Pharo-dev] Pharo on Online Labs ARM cloud server ?
by Douglas McPherson
The ARMv7 stack build was compiled on Ubuntu 14.04 on a BeagelBone Black (1GHz ARMv7 Cortex-A8), where I get
55846422 bytecodes/sec; 3457632 sends/sec
The ARMv7 build is known to run on other platforms as well including the Parallella (dual core ARMv7 Cortex-A9) running Linaro 14.04 and a Samsung Chromebook (also dual core ARMv7 Cortex-A9).
The ARMv6 stack build was compiled on a Raspberry Pi running a fully updated Raspbian 2014-09-09. I havenât tried running this on anything but a Pi.
Both builds include the FAST_BLT optimizations.
Doug
---- Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
> Hi Eliot, Andreas,
>
> Yeah, I did not read all that careful enough, sorry about that. With the limits.d change the VM ran OK with a Pharo 3 image. Great !
>
> $ ./stklinuxhtARM/bin/squeak -vm-display-null Pharo.image eval '1 tinyBenchmarks'
> '61776061 bytecodes/sec; 3416954 sends/sec'
>
> I did not yet test again on a standard Raspberry Pi where I had the libc problem.
>
> Thx,
>
> Sven
>
> > On 14 Nov 2014, at 16:04, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
> >
> > Sven,
> >
> > do you not see the error message?
> >
> >> pthread_setschedparam failed: Operation not permitted
> >> Read e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r3126/README.3126
> >
> > If you read the read me it will explain what you need to do to get it to work.
> >
> > Eliot (phone)
> >
> > On Nov 14, 2014, at 3:00 AM, Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
> >
> >>
> >>> On 14 Nov 2014, at 01:02, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
> >>>
> >>> Hi Sven,
> >>>
> >>> On Thu, Nov 13, 2014 at 2:34 PM, Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
> >>> Hi,
> >>>
> >>> I just saw this: http://labs.online.net which offers real ARM cloud servers (15 minutes for free to try out) [they're French]. This is Ubuntu 14.10 on ARMv7.
> >>>
> >>> Naturally I wanted to try Pharo on such a machine.
> >>>
> >>> The base question is, where do I get the latest and best VM to try this ?
> >>>
> >>> Doug McPherson is building Stack VMs for ARMv6 and ARMv7 for both Cog and Spur and uploading them to my site. These VMs should run Pharo. See e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r3126/
> >>
> >> I tried that and it does not seem to work:
> >>
> >> ubuntu@c1-10-1-16-102:~$ ls
> >> Pharo.changes Pharo.image PharoV30.sources stklinuxhtARM stklinuxhtARMv7-14.45.3126.tgz
> >>
> >> ubuntu@c1-10-1-16-102:~$ ./stklinuxhtARM/bin/squeak -vm-display-null Pharo.image printVersion
> >> pthread_setschedparam failed: Operation not permitted
> >> Read e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r3126/README.3126
> >>
> >> Maybe their system is special, I don't know, it feels pretty standard, running the latest Ubuntu.
> >>
> >> I noticed the 'ht' in the VM name, is there no 'normal' one ?
> >>
> >> I will try on a Raspberry Pi as well.
> >>
> >>> Maybe a complete & easy to use source tree that can be compiled locally ?
> >>>
> >>> That's the case for http://www.squeakvm.org/svn/squeak/branches/Cog. See http://www.squeakvm.org/svn/squeak/branches/Cog/build.linux32ARM
> >>>
> >>> And would it make sense to add some ARM option to get.pharo.org ?
> >>>
> >>> Thx,
> >>>
> >>> Sven
> >>>
> >>>
> >>>
> >>> --
> >>> best,
> >>> Eliot
> >>
> >>
> >
>
>
Nov. 14, 2014
Re: [Pharo-dev] Pharo on Online Labs ARM cloud server ?
by Sven Van Caekenberghe
Hi Eliot, Andreas,
Yeah, I did not read all that careful enough, sorry about that. With the limits.d change the VM ran OK with a Pharo 3 image. Great !
$ ./stklinuxhtARM/bin/squeak -vm-display-null Pharo.image eval '1 tinyBenchmarks'
'61776061 bytecodes/sec; 3416954 sends/sec'
I did not yet test again on a standard Raspberry Pi where I had the libc problem.
Thx,
Sven
> On 14 Nov 2014, at 16:04, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
>
> Sven,
>
> do you not see the error message?
>
>> pthread_setschedparam failed: Operation not permitted
>> Read e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r3126/README.3126
>
> If you read the read me it will explain what you need to do to get it to work.
>
> Eliot (phone)
>
> On Nov 14, 2014, at 3:00 AM, Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
>
>>
>>> On 14 Nov 2014, at 01:02, Eliot Miranda <eliot.miranda(a)gmail.com> wrote:
>>>
>>> Hi Sven,
>>>
>>> On Thu, Nov 13, 2014 at 2:34 PM, Sven Van Caekenberghe <sven(a)stfx.eu> wrote:
>>> Hi,
>>>
>>> I just saw this: http://labs.online.net which offers real ARM cloud servers (15 minutes for free to try out) [they're French]. This is Ubuntu 14.10 on ARMv7.
>>>
>>> Naturally I wanted to try Pharo on such a machine.
>>>
>>> The base question is, where do I get the latest and best VM to try this ?
>>>
>>> Doug McPherson is building Stack VMs for ARMv6 and ARMv7 for both Cog and Spur and uploading them to my site. These VMs should run Pharo. See e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r3126/
>>
>> I tried that and it does not seem to work:
>>
>> ubuntu@c1-10-1-16-102:~$ ls
>> Pharo.changes Pharo.image PharoV30.sources stklinuxhtARM stklinuxhtARMv7-14.45.3126.tgz
>>
>> ubuntu@c1-10-1-16-102:~$ ./stklinuxhtARM/bin/squeak -vm-display-null Pharo.image printVersion
>> pthread_setschedparam failed: Operation not permitted
>> Read e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r3126/README.3126
>>
>> Maybe their system is special, I don't know, it feels pretty standard, running the latest Ubuntu.
>>
>> I noticed the 'ht' in the VM name, is there no 'normal' one ?
>>
>> I will try on a Raspberry Pi as well.
>>
>>> Maybe a complete & easy to use source tree that can be compiled locally ?
>>>
>>> That's the case for http://www.squeakvm.org/svn/squeak/branches/Cog. See http://www.squeakvm.org/svn/squeak/branches/Cog/build.linux32ARM
>>>
>>> And would it make sense to add some ARM option to get.pharo.org ?
>>>
>>> Thx,
>>>
>>> Sven
>>>
>>>
>>>
>>> --
>>> best,
>>> Eliot
>>
>>
>
Nov. 14, 2014
Re: [Pharo-dev] ValueHolder analysis
by Tudor Girba
I agree as well.
Doru
On Fri, Nov 14, 2014 at 4:58 PM, Igor Stasenko <siguctua(a)gmail.com> wrote:
>
>
> On 14 November 2014 16:25, Henrik Johansen <henrik.s.johansen(a)veloxit.no>
> wrote:
>
>>
>> > On 14 Nov 2014, at 12:01 , stepharo <stepharo(a)free.fr> wrote:
>> >
>> > I checked a bit deeper
>> >
>> >
>> > Nautilus is not implemented in Spec. But senders and implementors are
>> and they also leak memory. Around 400 Announcers after each
>> > opening and closing.
>> >
>> > Now
>> >
>> > whenChangedDo: aBlock
>> >
>> > | block |
>> > block := [:announcement :ann | aBlock cull: announcement newValue
>> cull: announcement oldValue cull: announcement cull: ann ].
>> > announcer when: ValueChanged do: block
>> >
>> > can also be part of the cause of some of our problems.
>> >
>> > There are 146 senders and many of them could just be replaced by
>> whenChanged:send:to: and whenChanged:send:to:with:
>> >
>> >
>> > Finally we were discussing with igor about the general API of spec
>> model: We are thinking that the following patterns
>> > are bloating the interface for an not obvious gain.
>> >
>> > whenWindowChanged: aBlock
>> >
>> > window whenChangedDo: aBlock
>> >
>> >
>> > whenShortcutsChanged: aBlock
>> > <api: #event>
>> > "Set a block to value when the shortcuts block has changed"
>> >
>> > additionalKeyBindings whenChangedDo: aBlock
>>
>> I'd argue the window and additionalKeyBindings' whenChangedDo:
>> implementations are unnecessary bloat as well.
>> Why on earth would you limit yourself to a an API where you have to use
>> seperate methods to register for every single announcement type?
>>
>> To me,
>> myObject additionalKeyBindings when: ValueChanged do: aBlock
>> is just as easy, if not easier to read compared to
>> myObject whenShortCutsChanged: []
>>
>> Not to mention, it easily lets you do unsubscription when you expect not
>> to outlive the source (through the 3rd block parameter, whose *main purpose
>> for even being there* is enabling easy unsubscription), rather than
>> discarding it during useless indirection and leaving the task harder to do
>> later on?
>>
>> +1
>
> in general, i would prefer to see:
>
> myModel propertyXYZ whenChangedDo: [...]
> or
> myModel properyXYZ whenChangedSend: #foo to: bar
> .
>
> - you don't have to know that it uses ValueChanged announcement. In this
> regard, such information is excessive, since it is standard ValueHolder.
> - once you learned how to access/use single property, you can use any
> other, because it will have same API, and so you don't have to remember
> numerous 'whenPropertyXYZChanged:...' hoping it is there and spelled
> correctly.
>
> 1. because, how i see it, the idea is , that your model exposes certain
> _public_ property,
> which application can read or change (using value/value: accessors ) or
> wants to be notified when it changed by others. And this can be done by
> simply exposing the accessor to its ValueHolder to outside.
>
> 2. the extra API is just a source of confusion. And the above example
> clearly illustrates why: while internally, property is named
> 'additionalKeyBindings', but the method for subscribing to its changes
> named 'whenShortcutsChanged:' . One might expect that to access such
> property, there should be 'shortcuts' accessor, right? No! That would be
> too easy. It is additionalKeyBindings!
>
> P.S. The Demeter law is not a dogma.
>
> Cheers,
>> Henry
>>
>
>
>
> --
> Best regards,
> Igor Stasenko.
>
--
www.tudorgirba.com
"Every thing has its own flow"
Nov. 14, 2014