Re: [Pharo-project] Getting started with Athens
Stef, With Ze great Stef? Incredible, indeed :) I'll start putting down my questions and learning then. Can you tell me when you will be starting? I'll start the one for Roassal soon. I will also ask tristan to join because he will work on athens for a large industrial :). Stef Would that touch on implementing any industrial communications protocols, like Modbus[1]? I plan to try implementing Modbus next year after I get a few other things out of the way. [1] http://en.wikipedia.org/wiki/Modbus Simple and robust, it has since become a de facto standard communication protocol, and it is now amongst the most commonly available means of connecting industrial electronic devices. Without a project behind I do not think that we cant decently implement protocol Now if people give a try and we see what it is… We have OSC and TUIO already Stef
[Pharo-project] Open Source and Constraints | Documentation is King
Well written: http://kennethreitz.org/open-source-and-constraints.html I also find that writing documentation (minimal method/class comments or longer standalone documents) improves coding, because you take another perspective. I wouldn't value it above tests though. Sven -- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill
Re: [Pharo-project] Open Source and Constraints | Documentation is King
On 2 December 2012 18:57, Sven Van Caekenberghe s...@stfx.eu wrote: Well written: http://kennethreitz.org/open-source-and-constraints.html I also find that writing documentation (minimal method/class comments or longer standalone documents) improves coding, because you take another perspective. I wouldn't value it above tests though. I'm designing an API and experience for myself and others as developers. That's exactly why I write tests in the first place: you write the tests to design the API. And hopefully the tests serve as good examples of how to use the API. (If they aren't good examples, you're writing your tests wrongly.) frank Sven -- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill
[Pharo-project] DynamicVariablevalue:during:
Hey guys, would not make much much more sense if we return the result of evaluating the block when we use dynamic variables? Here is the patch I'm using these days: DynamicVariablevalue: anObject during: aBlock | p oldValue result | p := Processor activeProcess. oldValue := (p psValueAt: index) ifNil: [self default]. [ p psValueAt: index put: anObject. result := aBlock value. ] ensure: [ p psValueAt: index put: oldValue ]. ^ result
Re: [Pharo-project] DynamicVariablevalue:during:
Yes, I think so too, but maybe there was some reason for not doing it ? On 02 Dec 2012, at 20:52, Sebastian Sastre sebast...@flowingconcept.com wrote: Hey guys, would not make much much more sense if we return the result of evaluating the block when we use dynamic variables? Here is the patch I'm using these days: DynamicVariablevalue: anObject during: aBlock | p oldValue result | p := Processor activeProcess. oldValue := (p psValueAt: index) ifNil: [self default]. [ p psValueAt: index put: anObject. result := aBlock value. ] ensure: [ p psValueAt: index put: oldValue ]. ^ result -- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill
Re: [Pharo-project] [[ false ] whileFalse: [ ]] in workspace
Hi! I've hacked a fix, but I don't know if it is correct... can somebody check it so I make a Slice? Guille On Sun, Dec 2, 2012 at 8:56 PM, Guillermo Polito guillermopol...@gmail.comwrote: Ok, I've found the cause :). From update 20043: Issue 5744:Clean up Temp Embedding 2): DoIts http://code.google.com/p/pharo/issues/detail?id=5744 - Doits are now compiled with source embedded - embedding sources for doits pretty prints from AST as doits are compiled specially (with a return added) CompiledMethod: - remove blockExtendsToTempsMap: Not needed anymore, all calls go the MethodNode - remove #copyWitTempsFromMethodNode: All senders use #copyWithSource - remove #holdsTempNames. Temp name embedding not needed - add isDoit - schematicTempNamesString always returns the schematic string representation of all temps - tempNames forwards to methodNode - remove tempNamesString. Concatenate yourself if you need that. DebuggerselectedMessage asks the selectedContext directly for the source. No need for the methodMap. DebuggerMethodMap - no special handling of methods that encode temps. Just as for methodNode always. MethodNode - generateWithSource. embedd pretty printed code in case of doit - remove generateWithTempNames In general: rewrite code to use #generateWithSource On Sat, Dec 1, 2012 at 6:24 PM, Stéphane Ducasse stephane.duca...@inria.fr wrote: Sebastian I can tell you that what you did is **useful** because we are all working like mad and such kind of help is really welcome. Stef On Dec 1, 2012, at 3:24 PM, Sebastian Nozzi wrote: It's the #7076. 2012/11/29 Camillo Bruni camillobr...@gmail.com: perfect! can you open a bug report with this information? :) MessageNode.GuillermoPolito.cs Description: Binary data
Re: [Pharo-project] just help :)
On Fri, Nov 30, 2012 at 10:06 AM, Sebastian Nozzi sebno...@gmail.comwrote: 2012/11/30 Marcus Denker marcus.den...@inria.fr: On Nov 29, 2012, at 11:55 PM, dimitris chloupis theki...@yahoo.co.uk wrote: * Framework for seamless data/object-synchronization. I suggested this a while ago, didn't get much response. I don't blame anyone, there is not much need for this right now. What I would want is to be able to modify certain objects in my image, while offline, and connect to the Internet, and these objects be synchronized between other images. This way Internet-enabled apps could be built on top of Pharo in a better way that web-apps are built now (because, in Pharo you can not hit F5 and get fresh data ;-). But this is low-priority for me. This is a hard problem… but if would be nice to have, yes. I think it would make a nice research project ;-) Maybe as an extension(*) to Fuel/Tanker? I guess Fuel/Tanker also has to deal with conflicts, right? Right. This already happens and Fuel deals with some of them. * - Extension or on-top-of -- Mariano http://marianopeck.wordpress.com
Re: [Pharo-project] CI server down?
yes it's dead, as usual... the old ci is vry unstable. so don't use it to get images. All images and VMs are available offsite at http://pharo.gforge.inria.fr/ci/ = no https transfers = faster download speed = higher availability = simple predictable urls On 2012-12-02, at 18:51, Sebastian Nozzi sebno...@gmail.com wrote: I cannot access: http://ci.lille.inria.fr/pharo/ (anyone has nagios on that? ;-)
Re: [Pharo-project] CI server down?
Re-forwarding to the list. Might be useful. 2012/12/2 Camillo Bruni camillobr...@gmail.com: With a change of repeating myself, this is the main use case of http://pharo.gforge.inria.fr/ci wget --quiet -qO - http://pharo.gforge.inria.fr/ci/ciPharo20NBCog.sh | sh ./vm.sh Pharo.image save $JOB_NAME REPO=http://squeaksource.com/Athens ./vm.sh $JOB_NAME.image config $REPO ConfigurationOfAthens --install=1.4 ./vm.sh $JOB_NAME.image test --junit-xml-output Athens-.* = Zero-Conf setup with the latest VMs and the Latest images On 2012-12-02, at 19:03, Sebastian Nozzi sebno...@gmail.com wrote: so don't use it to get images. All images and VMs are available offsite at http://pharo.gforge.inria.fr/ci/ Cool, that's *exactly* what I was using it for... thanks for the tip! :-)
[Pharo-project] Performance Tip: Using buffered streams
Hi, short-version When doing complex IO, like writing or parsing protocols, to non-memory streams, like file streams (and probably socket streams), buffering can make an important difference. ZnBufferedWriteStream and ZnBufferedReadStream are an easy solution to experience the difference. /short-version And now the long version: first some measurements (code based on latest versions of Zinc, NeoCSV, NeoJSON and STON): NeoJSON | data | data := (1 to: 25000) collect: [ :each | { each. each negated. each reciprocal asFloat. each sqrt. each asWords } ]. [ '/tmp/numbers.json' asFileReference writeStreamDo: [ :stream | (NeoJSONWriter on: stream) nextPut: data ] ] timeToRun. 22152 | data | data := (1 to: 25000) collect: [ :each | { each. each negated. each reciprocal asFloat. each sqrt. each asWords } ]. [ '/tmp/numbers.json' asFileReference writeStreamDo: [ :fstream | ZnBufferedWriteStream on: fstream do: [ :stream | (NeoJSONWriter on: stream) nextPut: data ] ] ] timeToRun. 5147 [ '/tmp/numbers.json' asFileReference readStreamDo: [ :stream | (NeoJSONReader on: stream) next ] ] timeToRun. 3502 [ '/tmp/numbers.json' asFileReference readStreamDo: [ :fstream | ZnBufferedReadStream on: fstream do: [ :stream | (NeoJSONReader on: stream) next ] ] ] timeToRun. 1214 STON | data | data := (1 to: 25000) collect: [ :each | { each. each negated. each reciprocal asFloat. each sqrt. each asWords } ]. [ '/tmp/numbers.ston' asFileReference writeStreamDo: [ :stream | STON writer on: stream; nextPut: data ] ] timeToRun. 22275 | data | data := (1 to: 25000) collect: [ :each | { each. each negated. each reciprocal asFloat. each sqrt. each asWords } ]. [ '/tmp/numbers.ston' asFileReference writeStreamDo: [ :fstream | ZnBufferedWriteStream on: fstream do: [ :stream | STON writer on: stream; nextPut: data ] ] ] timeToRun. 5501 [ '/tmp/numbers.ston' asFileReference readStreamDo: [ :stream | STON reader on: stream; next ] ] timeToRun. 3632 [ '/tmp/numbers.ston' asFileReference readStreamDo: [ :fstream | ZnBufferedReadStream on: fstream do: [ :stream | STON reader on: stream; next ] ] ] timeToRun. 1367 NeoCSV | data | data := (1 to: 25000) collect: [ :each | { each. each negated. each reciprocal asFloat. each sqrt. each asWords } ]. [ '/tmp/numbers.csv' asFileReference writeStreamDo: [ :stream | (NeoCSVWriter on: stream) nextPutAll: data ] ] timeToRun. 20916 | data | data := (1 to: 25000) collect: [ :each | { each. each negated. each reciprocal asFloat. each sqrt. each asWords } ]. [ '/tmp/numbers.csv' asFileReference writeStreamDo: [ :fstream | ZnBufferedWriteStream on: fstream do: [ :stream | (NeoCSVWriter on: stream) nextPutAll: data ] ] ] timeToRun. 5559 [ '/tmp/numbers.csv' asFileReference readStreamDo: [ :stream | (NeoCSVReader on: stream) addIntegerField; addIntegerField; addFloatField; addFloatField; addField; upToEnd ] ] timeToRun. 1290 [ '/tmp/numbers.csv' asFileReference readStreamDo: [ :fstream | ZnBufferedReadStream on: fstream do: [ :stream | (NeoCSVReader on: stream) addIntegerField; addIntegerField; addFloatField; addFloatField; addField; upToEnd ] ] ] timeToRun. 970 The reason for these non-trivial speedups is that buffering is missing and/or buffer management is suboptimal in the standard file stream classes. Simply wrapping the stream with a 64Kb buffer yields results like this. We already knew this for writing (and Fuel adapted it as well), but it seems to make a similar, although smaller difference when reading. side-note Attentive, curious readers might ask why in this particular benchmark the reading is so much slower than the writing - normally it should be the inverse or at least they should be closer to each other. Lo and behold: another performance issue: float printing (as opposed to parsing) is extremely slow (probably partially due to its reliance on LargeInteger arithmetic) ! Here is a similar benchmark with only Integers: | data | data := (1 to: 25000) collect: [ :each | { each. each negated. each + 10. each - 10. each asWords } ]. [ '/tmp/numbers.csv' asFileReference writeStreamDo: [ :fstream | ZnBufferedWriteStream on: fstream do: [ :stream | (NeoCSVWriter on: stream) nextPutAll: data ] ] ] timeToRun. 311 [ '/tmp/numbers.csv' asFileReference readStreamDo: [ :fstream | ZnBufferedReadStream on: fstream do: [ :stream | (NeoCSVReader on: stream) addIntegerField; addIntegerField; addIntegerField; addIntegerField; addField; upToEnd ] ] ] timeToRun. 396 /side-note If ZnBufferedWriteStream or ZnBufferedReadStream were useful in
[Pharo-project] using a long running native thread - NativeBoost or Plugin?
Would it be possible to start native thread inside pharo? This thread would run (for quite a long time) some event loop (like the libev), and post some info to the SharedQueue. Smalltalk code would in turn be reading stuff from this queue. You could say it would be pumping events from libev to SharedQueue instance for Smalltalk code to consume. Is this doable? With NativeBoost or Plugin? I have also found some info on threaded VM, but if I understand it correctly it seems more oriented to provide a thread to execute FFI call on it. - http://www.cloud208.com/ -- View this message in context: http://forum.world.st/using-a-long-running-native-thread-NativeBoost-or-Plugin-tp4657747.html Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
Re: [Pharo-project] Performance Tip: Using buffered streams
Hi Mariano, On 02 Dec 2012, at 23:43, Mariano Martinez Peck marianop...@gmail.com wrote: This is really really interesting, because it means a speed up of 2x when reading :) Where can I get the last version of ZnBufferedReadStream? I knew you would be interested: it is in the latest Zn, either http://mc.stfx.eu or squeaksource (not in the metacello yet). It should work on binary streams too, I don't know whether it would make a lot of difference, I would guess so. Maybe Fuel uses lots of 'deterministic reading' (size prefixed) instead of parsing. Sven -- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill
Re: [Pharo-project] Pharo Association
The print out, sign and sending the document is understood. Where can I pay for individual members by credit card and where. Can this also be done for bulk payment for multiple membership, if I can convince a few more locally On Thu, Nov 15, 2012 at 7:21 PM, Marcus Denker marcus.den...@inria.frwrote: Hello, We are happy to announce the Pharo User Association: http://association.pharo.org The goal of the Pharo User Association is to support Pharo development and promotion. There are two individual memberships - Individual Pharo Association Member: Yearly fee 40 Euros - Golden Individual Pharo Association Member: Yearly fee 99 Euros You will get - reduction access to pharo conferences, - reduction for training and access to teaching material, - be part of the pharoAssociation-individual-members mailing-list, - an account at the pharo association web site. This Association is complementary to the Pharo consortium managed by INRIA. The Consortium is for entities such as companies, research teams, or institutes. For more information, see: http://www.pharo-project.org/community/consortium The funds collected by the Association will be used in coordination with the Consortium to support the development of Pharo. The Pharo Board and Pharo Core Team.
Re: [Pharo-project] Pharo Association
On Dec 3, 2012, at 8:02 AM, S Krish krishnamachari.sudha...@gmail.com wrote: The print out, sign and sending the document is understood. Where can I pay for individual members by credit card and where. Hello, For individuals, the way to support Pharo is not the consortium (as Inria can not handle small payments and especially no credit cards): http://association.pharo.org Can this also be done for bulk payment for multiple membership, if I can convince a few more locally On Thu, Nov 15, 2012 at 7:21 PM, Marcus Denker marcus.den...@inria.fr wrote: Hello, We are happy to announce the Pharo User Association: http://association.pharo.org The goal of the Pharo User Association is to support Pharo development and promotion. There are two individual memberships - Individual Pharo Association Member: Yearly fee 40 Euros - Golden Individual Pharo Association Member: Yearly fee 99 Euros You will get - reduction access to pharo conferences, - reduction for training and access to teaching material, - be part of the pharoAssociation-individual-members mailing-list, - an account at the pharo association web site. This Association is complementary to the Pharo consortium managed by INRIA. The Consortium is for entities such as companies, research teams, or institutes. For more information, see: http://www.pharo-project.org/community/consortium The funds collected by the Association will be used in coordination with the Consortium to support the development of Pharo. The Pharo Board and Pharo Core Team.
Re: [Pharo-project] CI server down?
Yes, it's dead. On Dec 2, 2012, at 10:51 PM, Sebastian Nozzi sebno...@gmail.com wrote: I cannot access: http://ci.lille.inria.fr/pharo/ (anyone has nagios on that? ;-) I have a what dog on it and I send a mail to it every time something stops working (which now is just hours after it is fixed…). So, it's dead. We should move everything here: https://ci.inria.fr/pharo/ Sadly I have no time to work on it last week or this week. Marcus
Re: [Pharo-project] Performance Tip: Using buffered streams
Sven Van Caekenberghe-2 wrote Hi Mariano, On 02 Dec 2012, at 23:43, Mariano Martinez Peck lt; marianopeck@ gt; wrote: This is really really interesting, because it means a speed up of 2x when reading :) Where can I get the last version of ZnBufferedReadStream? I knew you would be interested: it is in the latest Zn, either http://mc.stfx.eu or squeaksource (not in the metacello yet). It should work on binary streams too, I don't know whether it would make a lot of difference, I would guess so. Maybe Fuel uses lots of 'deterministic reading' (size prefixed) instead of parsing. Sven -- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill Did you (or anybody else for that matter) tried to use persistent arrays as base for in memory streeams? They are basically shallow tree that provides array like access. Their claim to fame is that one can avoid copy operation when array gets resized. So it _might_ be usable when one handles large write streams and does not know in advance how large they will get. - http://www.cloud208.com/ -- View this message in context: http://forum.world.st/Performance-Tip-Using-buffered-streams-tp4657739p4657775.html Sent from the Pharo Smalltalk mailing list archive at Nabble.com.