henry_flower (
henry_flower) wrote2011-11-07 09:22 am
Entry tags:
Какой же я все-таки идиот. Надо мне было при генерации ф
Какой же я все-таки идиот. Надо мне было при генерации файлов из темплейтов генерировать штук 10-30 нечто типа uuid (по одному на каждый файл), но чтобы не трогать uuidgen(1), потому шо мозга нет этож икспенсив!
И я написал такое:
...
def self.uuidgen_fake
loop {
r = '%08X_%04X_%04X_%04X_%12X' % [
rand(0x0000100000000),
rand(0x0000000010000),
rand(0x0000000010000),
rand(0x0000000010000),
rand(0x1000000000000)
]
return r if r[0] !~ /\d/
}
end
Но вдруг, совершенно неожиданно, uuidgen_fake начала возвращать строчки типа B44928EB_8371_4765_D5BD_ 9795B456176 (пробел перед последним блоком).
Ыыы.
uuidgen(1) все таки опять решил не трогать. Поменял на:
require 'securerandom'
...
def self.uuidgen_fake
loop {
r = ('%s_%s_%s_%s_%s' % [
SecureRandom.hex(4),
SecureRandom.hex(2),
SecureRandom.hex(2),
SecureRandom.hex(2),
SecureRandom.hex(6),
]).upcase
return r if r[0] !~ /\d/
}
end
В 1.9.3 вроде работает. Правда, не очень быстро. 1536 штук генерирует за 0.46 с.
Comments:
И я написал такое:
...
def self.uuidgen_fake
loop {
r = '%08X_%04X_%04X_%04X_%12X' % [
rand(0x0000100000000),
rand(0x0000000010000),
rand(0x0000000010000),
rand(0x0000000010000),
rand(0x1000000000000)
]
return r if r[0] !~ /\d/
}
end
Но вдруг, совершенно неожиданно, uuidgen_fake начала возвращать строчки типа B44928EB_8371_4765_D5BD_ 9795B456176 (пробел перед последним блоком).
Ыыы.
uuidgen(1) все таки опять решил не трогать. Поменял на:
require 'securerandom'
...
def self.uuidgen_fake
loop {
r = ('%s_%s_%s_%s_%s' % [
SecureRandom.hex(4),
SecureRandom.hex(2),
SecureRandom.hex(2),
SecureRandom.hex(2),
SecureRandom.hex(6),
]).upcase
return r if r[0] !~ /\d/
}
end
В 1.9.3 вроде работает. Правда, не очень быстро. 1536 штук генерирует за 0.46 с.
Comments:
- Nihad Abbasov, 2011-11-24T18:37:26.875Z
а почему не SecureRandom.uuid?
- Henry Flower, 2011-11-24T18:53:03.293Z
ггг, потому, что поленился посмотреть в securerandom.rb. спасибо за наводку.
(впрочем, мне все равно нужен был такой uid чтобы годился как лексема сишного препроцессора.)
Permalink: https://plus.google.com/115290581164606462017/posts/YtP9HumccMY
