The Inbox: Network-topa.166.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Network-topa.166.mcz

commits-2
Tobias Pape uploaded a new version of Network to project The Inbox:
http://source.squeak.org/inbox/Network-topa.166.mcz

==================== Summary ====================

Name: Network-topa.166
Author: topa
Time: 21 October 2015, 8:26:14.656 pm
UUID: d6d9910f-fa67-4c69-9a89-030c81233e90
Ancestors: Network-topa.165

UUIDGenerator
 - Use new Random>>#nextBytes:into:startingAt: (needs Kernel-ul.960) for even more speed
 - Fix UUIDGenerator class>>#initialize to correctly register at startup
 - Do not reset default on startup but rather reseed TheRandom

Timings improved:  '1,190,000 per second. 842 nanoseconds per run.' (0.25 times slower than primitive version)

=============== Diff against Network-topa.165 ===============

Item was changed:
  Object subclass: #UUIDGenerator
+ instanceVariableNames: ''
- instanceVariableNames: 'bits'
  classVariableNames: 'Default TheRandom TheSemaphore'
  poolDictionaries: ''
  category: 'Network-UUID'!
 
  !UUIDGenerator commentStamp: 'topa 10/19/2015 23:23:19' prior: 0!
  I generate a pseudo-random UUID by asking Random for a 128 bit value.
 
  See https://tools.ietf.org/html/rfc4122.html#section-4.4 for reference.!

Item was changed:
  ----- Method: UUIDGenerator class>>default (in category 'instance creation') -----
  default
+ ^ Default ifNil: [Default := self new]
+ !
- Default ifNil: [self generateDefault].
- ^Default!

Item was removed:
- ----- Method: UUIDGenerator class>>generateDefault (in category 'instance creation') -----
- generateDefault
- Default := self new!

Item was changed:
  ----- Method: UUIDGenerator class>>initialize (in category 'class initialization') -----
  initialize
  TheRandom := Random new.
  TheSemaphore := Semaphore forMutualExclusion.
+ Smalltalk addToStartUpList: self!
- Smalltalk addToStartUpList: self after: nil.!

Item was added:
+ ----- Method: UUIDGenerator class>>resetDefault (in category 'class initialization') -----
+ resetDefault
+ Default := nil.!

Item was changed:
  ----- Method: UUIDGenerator class>>startUp (in category 'class initialization') -----
  startUp
+ "Reseed the random"
+ TheSemaphore critical: [TheRandom seed: nil].!
- Default := nil!

Item was added:
+ ----- Method: UUIDGenerator>>fillRandomly: (in category 'instance creation') -----
+ fillRandomly: aUUID
+
+ TheSemaphore critical: [
+ TheRandom nextBytes: 16 "128 bit" into: aUUID startingAt: 1].!

Item was changed:
  ----- Method: UUIDGenerator>>generateBytes:forVersion: (in category 'instance creation') -----
+ generateBytes: aUUID forVersion: aVersion
+ | versionID fixedValue |
+
+ aVersion = 4 ifFalse: [^ self error: 'Unsupported version'].
+
+ self fillRandomly: aUUID.
+ versionID := ((aUUID at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4"
+ fixedValue := ((aUUID at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value"
+ aUUID
+ at: 7 put: versionID;
+ at: 9 put: fixedValue.!
- generateBytes: aPlaceHolder forVersion: aVersion
- aVersion = 4 ifTrue: [self generateFieldsVersion4]
- ifFalse: [self error: 'Unsupported version'].
- self placeFields: aPlaceHolder.!

Item was removed:
- ----- Method: UUIDGenerator>>generateFieldsVersion4 (in category 'instance creation') -----
- generateFieldsVersion4
-  
- TheSemaphore critical: [
- bits := 16rffffffffffffffffffffffffffffffff atRandom: TheRandom. "128 bit"].!

Item was removed:
- ----- Method: UUIDGenerator>>placeFields: (in category 'instance creation') -----
- placeFields: aByteArray
-
- | version fixed |
- bits isLarge
- ifTrue: [ aByteArray replaceFrom: 1 to: bits size with: bits]
- ifFalse: [aByteArray unsignedLongAt: 1 put: bits bigEndian: false].
-
- version := ((aByteArray at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4"
- fixed := ((aByteArray at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value"
- aByteArray
- at: 7 put: version;
- at: 9 put: fixed.!


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Network-topa.166.mcz

Tobias Pape
Hi all

I hope this version is an improvement over the last attempt :)
Levente, is this way of using the Random generator useful?
That is, Class-wide, guarded with a Semaphore and re-seeded at
image startup?

Best regards
        -Tobias

On 21.10.2015, at 18:26, [hidden email] wrote:

> Tobias Pape uploaded a new version of Network to project The Inbox:
> http://source.squeak.org/inbox/Network-topa.166.mcz
>
> ==================== Summary ====================
>
> Name: Network-topa.166
> Author: topa
> Time: 21 October 2015, 8:26:14.656 pm
> UUID: d6d9910f-fa67-4c69-9a89-030c81233e90
> Ancestors: Network-topa.165
>
> UUIDGenerator
> - Use new Random>>#nextBytes:into:startingAt: (needs Kernel-ul.960) for even more speed
> - Fix UUIDGenerator class>>#initialize to correctly register at startup
> - Do not reset default on startup but rather reseed TheRandom
>
> Timings improved:  '1,190,000 per second. 842 nanoseconds per run.' (0.25 times slower than primitive version)
>
> =============== Diff against Network-topa.165 ===============
>
> Item was changed:
>  Object subclass: #UUIDGenerator
> + instanceVariableNames: ''
> - instanceVariableNames: 'bits'
>   classVariableNames: 'Default TheRandom TheSemaphore'
>   poolDictionaries: ''
>   category: 'Network-UUID'!
>
>  !UUIDGenerator commentStamp: 'topa 10/19/2015 23:23:19' prior: 0!
>  I generate a pseudo-random UUID by asking Random for a 128 bit value.
>
>  See https://tools.ietf.org/html/rfc4122.html#section-4.4 for reference.!
>
> Item was changed:
>  ----- Method: UUIDGenerator class>>default (in category 'instance creation') -----
>  default
> + ^ Default ifNil: [Default := self new]
> + !
> - Default ifNil: [self generateDefault].
> - ^Default!
>
> Item was removed:
> - ----- Method: UUIDGenerator class>>generateDefault (in category 'instance creation') -----
> - generateDefault
> - Default := self new!
>
> Item was changed:
>  ----- Method: UUIDGenerator class>>initialize (in category 'class initialization') -----
>  initialize
>   TheRandom := Random new.
>   TheSemaphore := Semaphore forMutualExclusion.
> + Smalltalk addToStartUpList: self!
> - Smalltalk addToStartUpList: self after: nil.!
>
> Item was added:
> + ----- Method: UUIDGenerator class>>resetDefault (in category 'class initialization') -----
> + resetDefault
> + Default := nil.!
>
> Item was changed:
>  ----- Method: UUIDGenerator class>>startUp (in category 'class initialization') -----
>  startUp
> + "Reseed the random"
> + TheSemaphore critical: [TheRandom seed: nil].!
> - Default := nil!
>
> Item was added:
> + ----- Method: UUIDGenerator>>fillRandomly: (in category 'instance creation') -----
> + fillRandomly: aUUID
> +
> + TheSemaphore critical: [
> + TheRandom nextBytes: 16 "128 bit" into: aUUID startingAt: 1].!
>
> Item was changed:
>  ----- Method: UUIDGenerator>>generateBytes:forVersion: (in category 'instance creation') -----
> + generateBytes: aUUID forVersion: aVersion
> + | versionID fixedValue |
> +
> + aVersion = 4 ifFalse: [^ self error: 'Unsupported version'].
> +
> + self fillRandomly: aUUID.
> + versionID := ((aUUID at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4"
> + fixedValue := ((aUUID at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value"
> + aUUID
> + at: 7 put: versionID;
> + at: 9 put: fixedValue.!
> - generateBytes: aPlaceHolder forVersion: aVersion
> - aVersion = 4 ifTrue: [self generateFieldsVersion4]
> - ifFalse: [self error: 'Unsupported version'].
> - self placeFields: aPlaceHolder.!
>
> Item was removed:
> - ----- Method: UUIDGenerator>>generateFieldsVersion4 (in category 'instance creation') -----
> - generateFieldsVersion4
> -  
> - TheSemaphore critical: [
> - bits := 16rffffffffffffffffffffffffffffffff atRandom: TheRandom. "128 bit"].!
>
> Item was removed:
> - ----- Method: UUIDGenerator>>placeFields: (in category 'instance creation') -----
> - placeFields: aByteArray
> -
> - | version fixed |
> - bits isLarge
> - ifTrue: [ aByteArray replaceFrom: 1 to: bits size with: bits]
> - ifFalse: [aByteArray unsignedLongAt: 1 put: bits bigEndian: false].
> -
> - version := ((aByteArray at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4"
> - fixed := ((aByteArray at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value"
> - aByteArray
> - at: 7 put: version;
> - at: 9 put: fixed.!
>
>


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Network-topa.166.mcz

Levente Uzonyi-2
Hi Tobias,

Yes, it looks good.

Levente

On Wed, 21 Oct 2015, Tobias Pape wrote:

> Hi all
>
> I hope this version is an improvement over the last attempt :)
> Levente, is this way of using the Random generator useful?
> That is, Class-wide, guarded with a Semaphore and re-seeded at
> image startup?
>
> Best regards
> -Tobias
>
> On 21.10.2015, at 18:26, [hidden email] wrote:
>
>> Tobias Pape uploaded a new version of Network to project The Inbox:
>> http://source.squeak.org/inbox/Network-topa.166.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Network-topa.166
>> Author: topa
>> Time: 21 October 2015, 8:26:14.656 pm
>> UUID: d6d9910f-fa67-4c69-9a89-030c81233e90
>> Ancestors: Network-topa.165
>>
>> UUIDGenerator
>> - Use new Random>>#nextBytes:into:startingAt: (needs Kernel-ul.960) for even more speed
>> - Fix UUIDGenerator class>>#initialize to correctly register at startup
>> - Do not reset default on startup but rather reseed TheRandom
>>
>> Timings improved:  '1,190,000 per second. 842 nanoseconds per run.' (0.25 times slower than primitive version)
>>
>> =============== Diff against Network-topa.165 ===============
>>
>> Item was changed:
>>  Object subclass: #UUIDGenerator
>> + instanceVariableNames: ''
>> - instanceVariableNames: 'bits'
>>   classVariableNames: 'Default TheRandom TheSemaphore'
>>   poolDictionaries: ''
>>   category: 'Network-UUID'!
>>
>>  !UUIDGenerator commentStamp: 'topa 10/19/2015 23:23:19' prior: 0!
>>  I generate a pseudo-random UUID by asking Random for a 128 bit value.
>>
>>  See https://tools.ietf.org/html/rfc4122.html#section-4.4 for reference.!
>>
>> Item was changed:
>>  ----- Method: UUIDGenerator class>>default (in category 'instance creation') -----
>>  default
>> + ^ Default ifNil: [Default := self new]
>> + !
>> - Default ifNil: [self generateDefault].
>> - ^Default!
>>
>> Item was removed:
>> - ----- Method: UUIDGenerator class>>generateDefault (in category 'instance creation') -----
>> - generateDefault
>> - Default := self new!
>>
>> Item was changed:
>>  ----- Method: UUIDGenerator class>>initialize (in category 'class initialization') -----
>>  initialize
>>   TheRandom := Random new.
>>   TheSemaphore := Semaphore forMutualExclusion.
>> + Smalltalk addToStartUpList: self!
>> - Smalltalk addToStartUpList: self after: nil.!
>>
>> Item was added:
>> + ----- Method: UUIDGenerator class>>resetDefault (in category 'class initialization') -----
>> + resetDefault
>> + Default := nil.!
>>
>> Item was changed:
>>  ----- Method: UUIDGenerator class>>startUp (in category 'class initialization') -----
>>  startUp
>> + "Reseed the random"
>> + TheSemaphore critical: [TheRandom seed: nil].!
>> - Default := nil!
>>
>> Item was added:
>> + ----- Method: UUIDGenerator>>fillRandomly: (in category 'instance creation') -----
>> + fillRandomly: aUUID
>> +
>> + TheSemaphore critical: [
>> + TheRandom nextBytes: 16 "128 bit" into: aUUID startingAt: 1].!
>>
>> Item was changed:
>>  ----- Method: UUIDGenerator>>generateBytes:forVersion: (in category 'instance creation') -----
>> + generateBytes: aUUID forVersion: aVersion
>> + | versionID fixedValue |
>> +
>> + aVersion = 4 ifFalse: [^ self error: 'Unsupported version'].
>> +
>> + self fillRandomly: aUUID.
>> + versionID := ((aUUID at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4"
>> + fixedValue := ((aUUID at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value"
>> + aUUID
>> + at: 7 put: versionID;
>> + at: 9 put: fixedValue.!
>> - generateBytes: aPlaceHolder forVersion: aVersion
>> - aVersion = 4 ifTrue: [self generateFieldsVersion4]
>> - ifFalse: [self error: 'Unsupported version'].
>> - self placeFields: aPlaceHolder.!
>>
>> Item was removed:
>> - ----- Method: UUIDGenerator>>generateFieldsVersion4 (in category 'instance creation') -----
>> - generateFieldsVersion4
>> -
>> - TheSemaphore critical: [
>> - bits := 16rffffffffffffffffffffffffffffffff atRandom: TheRandom. "128 bit"].!
>>
>> Item was removed:
>> - ----- Method: UUIDGenerator>>placeFields: (in category 'instance creation') -----
>> - placeFields: aByteArray
>> -
>> - | version fixed |
>> - bits isLarge
>> - ifTrue: [ aByteArray replaceFrom: 1 to: bits size with: bits]
>> - ifFalse: [aByteArray unsignedLongAt: 1 put: bits bigEndian: false].
>> -
>> - version := ((aByteArray at: 7) bitAnd: 16r0F) bitOr: 16r40. "Version 4"
>> - fixed := ((aByteArray at: 9) bitAnd: 16r3F) bitOr: 16r80. "Fixed 8..b value"
>> - aByteArray
>> - at: 7 put: version;
>> - at: 9 put: fixed.!
>>
>>
>
>
>