[squeak-dev] The Inbox: Chronology-Core-mt.51.mcz
Chris Cunningham
cunningham.cb at gmail.com
Wed Nov 13 04:50:15 UTC 2019
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 <ma.chris.m at gmail.com> 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 <marcel.taeumel at hpi.de>
> 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 <asqueaker at gmail.com>:
>> 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 <commits at source.squeak.org> 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})!
>>>
>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20191112/ac85a4f6/attachment.html>
More information about the Squeak-dev
mailing list
|