[Pharo-users] [ANN] OSSubprocess first milestone

Ferlicot D. Cyril cyril.ferlicot at gmail.com
Thu Jan 14 13:44:07 EST 2016


Le 14/01/2016 19:33, Mariano Martinez Peck a écrit :
> Dear all, 
> 
> I am happy to tell you I have a first prototype of the tool for
> executing OS processes:
> 
> https://github.com/marianopeck/OSSubprocess
> 
>  As I said many times, the main idea was to be as much as possible
> FFI-based, only for executing OS commands and, from my point of view, a
> better end-user API. Also, as for the first step, I had to focus on
> Linux/OSX. 
> 
> I would like to thank Pharo Consortium for the sponsor of this
> development effort. Here is the first milestone!
> 
> There are many things on my to-do but I think the code is ready for some
> usage, testing, code review and feedback!  
> 
> All classes and all methods have comments and I have quite some unit
> tests. All tests are green in my OSX and a CentOS box. 
> 
> *Important: you CANNOT have OSProcess installed in the same image as
> OSSubprocess. This is because I am reusing his SIGCHLD handler and for
> the time being both cannot coexist.  *
> 
> Keep in mind that the tool may be unstable and that MAY mean a VM crash.
> So use with care, mostly the first time. If all tests passes, then there
> are much less chances of something going bad. 
> 
> Important disclaimer: my tool (OSSubproccess from now onward) is HIGHLY
> influenced by a subset of the OSProcess project. There are parts which I
> even simply copied and adapted them (OSSPipe, OSSAttachableStream,
> OSSUnixProcessExitStatus). Other parts, I took them as inspiration (the
> idea of ThisOSProcess representing the VM process, the child watcher,
> and many others). In addition, I AM STILL USING (maybe as a first step?)
> some of the OSProcess PLUGIN (not OSProcess image side), such as the
> SIGCHLD handler or the creation of pipes.
> 
> In github url you have all the documentation of the project, included
> how to install it and use it. 
> 
> *Finally, if you test it in a OS different than OSX and CentOS please
> share with me the results (about the tests).* Tomorrow the
> ConfigurationOf should also appear in the Catalog of Pharo 5.0. 
> 
> Any feedback is appreciated. 
> 
> Best, 
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com

Hi,

Thank you for your work!

In Windows seven I got an error on loading.

Executed code in Pharo 5:

Metacello new
    configuration: 'OSSubprocess';
    repository: 'github://marianopeck/OSSubprocess:master/repository';
    version: #stable;
    load.

Stack:

ExternalLibraryFunction(Object)>>error:
ExternalLibraryFunction(Object)>>externalCallFailed
ExternalLibraryFunction(ExternalFunction)>>invokeWithArguments:
OSSUnixSystemAccessor>>primitiveGetpid
FFICalloutAPI>>function:module:
OSSUnixSystemAccessor(Object)>>ffiCall:
OSSUnixSystemAccessor>>primitiveGetpid
OSSUnixSystemAccessor>>getPid
OSSVMProcess>>initialize
OSSVMProcess class>>initializeVMProcessInstance
OSSVMProcess class>>initialize
MCMethodDefinition>>postloadOver:
[ :each | each postloadOver: (self obsoletionFor: each) ] in
MCPackageLoader>>basicLoadDefinitions in Block: [ :each | each
postloadOver: (self obsoletionFor: ...etc...
[ :each |
| newLabel |
"Special handling for first and last element"
(count = 0
	or:
		[ count + 1 = size
			or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
	ifTrue:
		[ bar current: count.
		oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
			ifFalse: [ bar label: newLabel.
				oldLabel := newLabel ].
		lastUpdate := Time millisecondClockValue ].
aBlock value: each.
count := count + 1 ] in [ :bar |
labelBlock := aStringOrBlock isString
	ifTrue: [ bar label: aStringOrBlock.
		[ :dummyItem | aStringOrBlock ] ]
	ifFalse: [ aStringOrBlock ].
self
	do:
		[ :each |
		| newLabel |
		"Special handling for first and last element"
		(count = 0
			or:
				[ count + 1 = size
					or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
			ifTrue:
				[ bar current: count.
				oldLabel
					= (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
					ifFalse: [ bar label: newLabel.
						oldLabel := newLabel ].
				lastUpdate := Time millisecondClockValue ].
		aBlock value: each.
		count := count + 1 ] ] in
OrderedCollection(Collection)>>do:displayingProgress:every: in Block: [
:each | ...
OrderedCollection>>do:
[ :bar |
labelBlock := aStringOrBlock isString
	ifTrue: [ bar label: aStringOrBlock.
		[ :dummyItem | aStringOrBlock ] ]
	ifFalse: [ aStringOrBlock ].
self
	do:
		[ :each |
		| newLabel |
		"Special handling for first and last element"
		(count = 0
			or:
				[ count + 1 = size
					or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
			ifTrue:
				[ bar current: count.
				oldLabel
					= (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])
					ifFalse: [ bar label: newLabel.
						oldLabel := newLabel ].
				lastUpdate := Time millisecondClockValue ].
		aBlock value: each.
		count := count + 1 ] ] in
OrderedCollection(Collection)>>do:displayingProgress:every: in Block: [
:bar | ...
BlockClosure>>cull:
[ ^ block cull: self ] in [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run in
Block: [ ^ block cull: self ]
[ p psValueAt: index put: anObject.
aBlock value ] in CurrentJob(DynamicVariable)>>value:during: in Block: [
p psValueAt: index put: anObject....
BlockClosure>>ensure:
CurrentJob(DynamicVariable)>>value:during:
CurrentJob class(DynamicVariable class)>>value:during:
[ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run in
Block: [ self prepareForRunning....
BlockClosure>>ensure:
Job>>run
MorphicUIManager(UIManager)>>displayProgress:from:to:during:
ByteString(String)>>displayProgressFrom:to:during:
OrderedCollection(Collection)>>do:displayingProgress:every:
OrderedCollection(Collection)>>do:displayingProgress:
MCPackageLoader>>basicLoadDefinitions



-- 
Cyril Ferlicot

http://www.synectique.eu

165 Avenue Bretagne
Lille 59000 France

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.pharo.org/pipermail/pharo-users_lists.pharo.org/attachments/20160114/8ef12e2c/attachment.asc>


More information about the Pharo-users mailing list