henry_flower: A melancholy wolf (Default)
henry_flower ([personal profile] 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:
  1. Nihad Abbasov, 2011-11-24T18:37:26.875Z

    а почему не SecureRandom.uuid?

  2. Henry Flower, 2011-11-24T18:53:03.293Z

    ггг, потому, что поленился посмотреть в securerandom.rb. спасибо за наводку.

    (впрочем, мне все равно нужен был такой uid чтобы годился как лексема сишного препроцессора.)


Permalink: https://plus.google.com/115290581164606462017/posts/YtP9HumccMY