A new version of Chronology-Core was added to project The Inbox:
http://source.squeak.org/inbox/Chronology-Core-mt.51.mcz ==================== Summary ==================== Name: Chronology-Core-mt.51 Author: mt Time: 11 November 2019, 11:40:16.217633 am UUID: 199ad2ea-67cb-2545-84e9-4f24e577216f Ancestors: Chronology-Core-mt.50 Improve formatting for GC pressure as suggested by Dave. =============== Diff against Chronology-Core-mt.50 =============== Item was changed: ----- Method: BlockClosure>>benchFor: (in category '*chronology-core') ----- benchFor: aDuration "See how many times I can value within the given duration. I'll answer a meaningful description." | startTime shouldRun count elapsedTime roundTo3Digits delay gcStart gcTime | roundTo3Digits := [:num | | rounded lowDigit | rounded := (num * 1000) rounded. "round to 1/1000" lowDigit := (rounded numberOfDigitsInBase: 10) - 3. "keep only first 3 digits" rounded := rounded roundTo:(10 raisedTo: lowDigit). (lowDigit >= 3 or: [rounded \\ 1000 = 0]) "display fractional part only when needed" ifTrue: [(rounded // 1000) asStringWithCommas] ifFalse: [(rounded / 1000.0) printString]]. delay := aDuration asDelay. count := 0. shouldRun := true. Smalltalk garbageCollect. [ delay wait. shouldRun := false ] forkAt: Processor timingPriority - 1. startTime := Time millisecondClockValue. gcStart := (Smalltalk vmParameterAt: 8) + (Smalltalk vmParameterAt: 10). [ shouldRun ] whileTrue: [ self value. count := count + 1 ]. elapsedTime := Time millisecondsSince: startTime. gcTime := (Smalltalk vmParameterAt: 8) + (Smalltalk vmParameterAt: 10) - gcStart. ^(roundTo3Digits value: count * 1000 / elapsedTime) , ' per second.', (( #( (1e-3 'seconds') (1 'milliseconds') (1e3 'microseconds') (1e6 'nanoseconds') ) detect: [ :pair | elapsedTime * pair first >= count ] ifNone: [ #(1e9 'picoseconds') ]) in: [ :pair | ' {1} {2} per run.' format: { (roundTo3Digits value: elapsedTime * pair first / count). + pair second } ]), (' {1} % GC time.' format: {gcTime / elapsedTime * 100 printShowingMaxDecimalPlaces: 5})! - pair second } ]), (' {1} % GC time.' format: {gcTime / elapsedTime * 100 roundTo: 0.0001})! |
Hi guys, This looks like a lot of thought went into making an output that we want to be both functional as well as easy to read. On a similar topic, has anyone else been finding #asBytesDescription to be similarly useful for reporting integral quantities, when the top three orders of precision are enough? What I like about it is how it lets me express any integer all the way up to (2 raisedTo: 99) in no more than *four* characters. See? 9999 asBytesDescription "10k" (2 raisedTo: 99) asBytesDescription " '634Y' <--- Yotta's" This is a wonderfully dense representation, but I think extends even beyond "bytes descriptions" -- I think we need a better name for it... Is there a proper academic name for this representation? - Chris On Mon, Nov 11, 2019 at 4:40 AM <[hidden email]> wrote: A new version of Chronology-Core was added to project The Inbox: |
Heyho. > ... but I think extends even beyond "bytes descriptions" ... +1 The "bytes" domain is way too specific for this kind of functionality Best, Marcel
|
(Palm meets forehead. :) ) Still, not obvious what would be a good name. #asMetricDescription? #printSiUnits? And, actually, a more general function would seem to beg for more configurability -- like full-name vs. abbreviation, as well the possibility of specifying a precision. I'll have to think about it, thanks... On Tue, Nov 12, 2019 at 3:04 AM Marcel Taeumel <[hidden email]> wrote:
|
I've personally used #asAbbreviated...String (Bytes and Hz - two cases I have). I guess more generally #asAbbreviatedString might work. Or in this case #asAbbreviatedFractionalSeconds? You just need to know exactly how you round/divide to get what you want.
(Bytes I divide by 1024; HZ by 1000)
-cbc On Tue, Nov 12, 2019 at 3:26 PM Chris Muller <[hidden email]> wrote:
|
In reply to this post by Chris Muller-4
Meanwhile, +1 for moving Marcel's Chronology changes to trunk :-)
Dave On Tue, Nov 12, 2019 at 05:25:46PM -0600, Chris Muller wrote: > (Palm meets forehead. :) ) > > Still, not obvious what would be a good name. #asMetricDescription? > #printSiUnits? > > And, actually, a more general function would seem to beg for more > configurability -- like full-name vs. abbreviation, as well the possibility > of specifying a precision. > > I'll have to think about it, thanks... > > > > On Tue, Nov 12, 2019 at 3:04 AM Marcel Taeumel <[hidden email]> > wrote: > > > Heyho. > > > > > ... but I think extends even beyond "bytes descriptions" ... > > > > +1 The "bytes" domain is way too specific for this kind of functionality > > > > https://en.wikipedia.org/wiki/Metric_prefix > > > > Best, > > Marcel > > > > Am 12.11.2019 04:42:05 schrieb Chris Muller <[hidden email]>: > > Hi guys, > > > > This looks like a lot of thought went into making an output that we want > > to be both functional as well as easy to read. > > > > On a similar topic, has anyone else been finding #asBytesDescription to be > > similarly useful for reporting integral quantities, when the top three > > orders of precision are enough? What I like about it is how it lets me > > express any integer all the way up to (2 raisedTo: 99) in no more than > > *four* characters. See? > > > > 9999 asBytesDescription "10k" > > (2 raisedTo: 99) asBytesDescription " '634Y' <--- Yotta's" > > > > This is a wonderfully dense representation, but I think extends even > > beyond "bytes descriptions" -- I think we need a better name for it... Is > > there a proper academic name for this representation? > > > > - Chris > > > > > > On Mon, Nov 11, 2019 at 4:40 AM <[hidden email]> wrote: > > > >> A new version of Chronology-Core was added to project The Inbox: > >> http://source.squeak.org/inbox/Chronology-Core-mt.51.mcz > >> > >> ==================== Summary ==================== > >> > >> Name: Chronology-Core-mt.51 > >> Author: mt > >> Time: 11 November 2019, 11:40:16.217633 am > >> UUID: 199ad2ea-67cb-2545-84e9-4f24e577216f > >> Ancestors: Chronology-Core-mt.50 > >> > >> Improve formatting for GC pressure as suggested by Dave. > >> > >> =============== Diff against Chronology-Core-mt.50 =============== > >> > >> Item was changed: > >> ----- Method: BlockClosure>>benchFor: (in category '*chronology-core') > >> ----- > >> benchFor: aDuration > >> "See how many times I can value within the given duration. I'll > >> answer a meaningful description." > >> > >> | startTime shouldRun count elapsedTime roundTo3Digits delay > >> gcStart gcTime | > >> roundTo3Digits := [:num | > >> | rounded lowDigit | > >> rounded := (num * 1000) rounded. "round to 1/1000" > >> lowDigit := (rounded numberOfDigitsInBase: 10) - 3. "keep > >> only first 3 digits" > >> rounded := rounded roundTo:(10 raisedTo: lowDigit). > >> (lowDigit >= 3 or: [rounded \\ 1000 = 0]) "display > >> fractional part only when needed" > >> ifTrue: [(rounded // 1000) asStringWithCommas] > >> ifFalse: [(rounded / 1000.0) printString]]. > >> delay := aDuration asDelay. > >> count := 0. > >> shouldRun := true. > >> Smalltalk garbageCollect. > >> [ delay wait. shouldRun := false ] forkAt: Processor > >> timingPriority - 1. > >> startTime := Time millisecondClockValue. > >> gcStart := (Smalltalk vmParameterAt: 8) + (Smalltalk > >> vmParameterAt: 10). > >> [ shouldRun ] whileTrue: [ > >> self value. > >> count := count + 1 ]. > >> elapsedTime := Time millisecondsSince: startTime. > >> gcTime := (Smalltalk vmParameterAt: 8) + (Smalltalk > >> vmParameterAt: 10) - gcStart. > >> ^(roundTo3Digits value: count * 1000 / elapsedTime) , ' per > >> second.', (( > >> #( > >> (1e-3 'seconds') > >> (1 'milliseconds') > >> (1e3 'microseconds') > >> (1e6 'nanoseconds') > >> ) > >> detect: [ :pair | elapsedTime * pair first >= > >> count ] > >> ifNone: [ #(1e9 'picoseconds') ]) > >> in: [ :pair | > >> ' {1} {2} per run.' format: { > >> (roundTo3Digits value: elapsedTime * pair > >> first / count). > >> + pair second } ]), (' {1} % GC time.' > >> format: {gcTime / elapsedTime * 100 printShowingMaxDecimalPlaces: 5})! > >> - pair second } ]), (' {1} % GC time.' > >> format: {gcTime / elapsedTime * 100 roundTo: 0.0001})! > >> > >> > >> > |
agree. On Tue, Nov 12, 2019, 20:51 David T. Lewis <[hidden email]> wrote: Meanwhile, +1 for moving Marcel's Chronology changes to trunk :-) |
Free forum by Nabble | Edit this page |