
Роман
12.01.2017
12:26:18
Что-то более случайное чем random_bytes()?

Evgeniy
12.01.2017
12:28:13
она не гарантирует уникальность

Роман
12.01.2017
12:31:10
Ну да, про уникальность понял, можно время примешать, но всё равно гарантии не будет. Хотя наверное вероятность совпадения будет ничтожно малой.

Evgeniy
12.01.2017
12:32:55
да, это так проблема из пальца)

Google

Evgeniy
12.01.2017
12:33:08
потому что у тебя изначальный вариант вполне нормальный и понятный)
имхо

Роман
12.01.2017
12:34:26

Evgeniy
12.01.2017
12:35:06
что именно захочешь добавить ? в setUid
он именно говорит что он проставляет значение в setUid и все хватит, остальное свои методы
можно даже внутри setUid проверять уникальность и валидировать)
я не говорю что оно лучше

Роман
12.01.2017
12:35:59
Ну вот чтобы прям 100% уникальность была (ну или 99,(9)) то мне нужно будет время туда примешать, хэш его, хэши сконкатенировать и т.д.

Evgeniy
12.01.2017
12:36:12
неа
можно нафигарить что то типо этого
вот так можно сделать )) http://pastebin.com/2ZFc8n0Z
но на самом деле это плохо )
:D

Google

Evgeniy
12.01.2017
12:39:48
и уникальность науровне процесса
можно проверять в бд и тд)))
что тоже не плохо

Роман
12.01.2017
12:41:48
Нет, все объекты независимы и проверять негде их уникальность, она должна быть "гарантированной". Хоть и в кавычках. ?

Evgeniy
12.01.2017
12:42:29
насколько важна случайность uid ?
сделай авто инкремент
я бог костылей :D

Роман
12.01.2017
12:43:21
Нет, тогда перебор возможен. Это внешний доступ будет. Да ладно, я ещё сам думаю над реализацией. А вас тут путаю, не выложив всех условий.
Ну это не костыль в определённых случаях. ?

Evgeniy
12.01.2017
12:44:25
если критична уникальность и важна случайность то надо хранить прошлые варианты и проверять не было ли их раньше
если уникальность не настолько важна и можно использовать алгоритмы которые с редкой веростностью дают энтропию)

Роман
12.01.2017
12:57:23
Думаю что это будет уникально:
$this->uid = hash('md5', microtime(true)) . bin2hex(random_bytes(16));
Даже если время будет одинаковое (при синхронизации оно повторится), вероятность того, что в одну микросекунду сгенерируется такая же случайная строка, ничтожно мала.

Evgeniy
12.01.2017
12:59:30
hash('md5', microtime(true)) обладает энтропией тут может быть не одна секунда)
:D
микросекунда0
:D

Роман
12.01.2017
13:00:20
? ну это уже фантастика.

Evgeniy
12.01.2017
13:00:27
колизия )
ну это математика)))
она жестока)

Google

Роман
12.01.2017
13:00:42
Я в курсе, но вероятность ничтожна.

Evgeniy
12.01.2017
13:00:47
а тут все идеалисты)
на самом деле я уже говорил и первый вариант достаточен)))

Sergey
12.01.2017
13:02:09

f4rt~
12.01.2017
13:02:14
version_compare для >= 7.0.0 bin2hex(random_bytes(32));
для остальных либо bin2hex(mcrypt_create_iv(32,PARAM)
или bin2hex(openssl_random_pseudo_bytes

Evgeniy
12.01.2017
13:02:41
или /dev/urandom
:D

Роман
12.01.2017
13:03:25
Ну или при одновременных запросах.

Sergey
12.01.2017
13:04:24

Роман
12.01.2017
13:04:48
Вообще согласен. ?
В общем вернулись к началу.

Evgeniy
12.01.2017
13:05:15
случайные != уникальные

Роман
12.01.2017
13:05:22
$this->setUID(bin2hex(random_bytes(16)));
Нет, они именно уникальные будут.
Из-за их количества. И вероятности повториться.

Sergey
12.01.2017
13:05:39

guga
12.01.2017
13:06:13
там, на днях, дядько боб будет вещать про tdd и котлин, кому-то интересно?

Aleh
12.01.2017
13:07:21
uuid для слабаков?

Роман
12.01.2017
13:08:29

Google

Aleh
12.01.2017
13:08:53
продолжи мысль

Evgeniy
12.01.2017
13:08:59
на вики
https://habrahabr.ru/post/135364/ вот и на хабре

Sergey
12.01.2017
13:09:31
Она не случайна.
Version 4 UUIDs are generated using random or pseudo-random numbers.

Evgeniy
12.01.2017
13:09:36
uuid не гарантирует отсутствие коллизии

Sergey
12.01.2017
13:09:40
зависит от реализации

Evgeniy
12.01.2017
13:10:53
uuid он случаен, но не гарантирует что не будет колизии

Aleh
12.01.2017
13:13:28
для исключения колизии нужна центральная точка, которая скажет есть такое или нет, а еще лучше скажет, какой id юзать
но там вроде изанчально такой задачи нет
то, что здесь обсуждалось

Admin
ERROR: S client not available

Evgeniy
12.01.2017
13:15:03
на ровном месте к коду который в 99% работает
и придумали проблему

Aleh
12.01.2017
13:15:32
а?
мы тут вроде решили проблему

guga
12.01.2017
13:17:25
конечно)
https://twitter.com/intellijidea/status/817008962239426560

Andrew
12.01.2017
13:19:20
Warning: The webinar is full.

Aleh
12.01.2017
13:49:31
будем ждать онлайн(

Yura
12.01.2017
22:03:20

Google

Yura
12.01.2017
22:04:31
уверен, что достаточно маленькая, чтобы об этом не думать

Evgeniy
12.01.2017
22:13:27
зависит от объема данных, доводилось сталкиватся с наступлением этой самой ситуации
но это было на старой работе и сейчас пофиг)

Роман
13.01.2017
05:01:56
Запись с rsdn:
"Экономить их надо! А то все, кому не лень, генерируют и генерируют, не напасешься!
Опомнитесь! Мировой запас UUID’ов ограничен! Подумайте об экологии в следующий раз, как рука потянется к кнопке «Сгенерировать»! И обязательно отдавайте старые ненужные UUID’ы на утилизацию. Что мы оставим потомкам-то? " ?

Sergei
13.01.2017
05:02:55
это старинный текст кажется, "Ecology of GUID"

da horsie
13.01.2017
05:32:06
Ive heard similar things being said about curly braces
And semicolons

Sergei
13.01.2017
05:33:26
well, GUIDs are clearly a limited resource while semicolons are not

da horsie
13.01.2017
05:34:05
Like bitcoins huh

Sergei
13.01.2017
05:34:54
:)

Sergey
13.01.2017
08:09:15
Where can i find GUID exchange?

?
13.01.2017
08:10:04

Alex
13.01.2017
11:21:11
Господа, вот скажите, как правильно принято назыать интерфесы?
Сейчас по пыхе:
Есть у меня несколько классов-сервисов, которые могут срать ошибками. С их названием проблем нет.
Есть Интерфейс для них, который хз как правильно обозвать.
Есть трейт HasErrors, название которого тоже с натяжкой подходит, ибо слова Errorable не существует.
Короче, беда у меня с именованием. Может кто подскажет какие-то общие принципы как и что обзывать, чтоб понятно было потом понятно каждому склонному к насилию психопату

Sergey
13.01.2017
11:24:40

Evgeniy
13.01.2017
11:27:10
для трейта я обычно названия NameTrait (с префиксом указываю, можно без)
но сейчас прибегут люди и докажут что это не правильно и надо все переписывать в DDD
замена Errorable меняется легко на hasError
и все что возвращает bool обычно с префиксом has в методах

Alex
13.01.2017
11:32:32

Aleh
13.01.2017
11:34:10
ну мол зачем ошибке интерфейс