Slide 1

Slide 1 text

Identify All the Things With UUIDs Ben Ramsey Nomad PHP 19 May 2016

Slide 2

Slide 2 text

HI, I’M BEN. I’m a web craftsman, author, and speaker. I build a platform for professional photographers at ShootProof. I enjoy APIs, open source software, organizing user groups, good beer, and spending time with my family. Nashville, TN is my home. ▸Zend PHP Certification Study Guide ▸Nashville PHP & Atlanta PHP user groups ▸array_column() ▸ramsey/uuid ▸league/oauth2-client

Slide 3

Slide 3 text

What is a UUID?

Slide 4

Slide 4 text

universally unique identifier

Slide 5

Slide 5 text

universally unique identifier U U ID

Slide 6

Slide 6 text

universally unique identifier

Slide 7

Slide 7 text

universally unique identifier

Slide 8

Slide 8 text

universally unique There are 1632 possible UUIDs “only after generating 1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%” — Wikipedia, UUID

Slide 9

Slide 9 text

128-bit integer 379dae82-5a2b-4c4b-8193-b8e7749a3495

Slide 10

Slide 10 text

RFC 4122 Defines a specific variant of UUID with five versions.

Slide 11

Slide 11 text

composer require ramsey/uuid

Slide 12

Slide 12 text

use Ramsey\Uuid\Uuid;

Slide 13

Slide 13 text

Version 1: Time Based

Slide 14

Slide 14 text

$uuid = Uuid::uuid1(); echo $uuid->toString();

Slide 15

Slide 15 text

for ($i = 0; $i < 5; $i++) { echo Uuid::uuid1()->toString(); echo "\n"; }

Slide 16

Slide 16 text

68845efc-1303-11e6-8d40-3c15c2cafa76 68846d0c-1303-11e6-8088-3c15c2cafa76 68847216-1303-11e6-830b-3c15c2cafa76 68847590-1303-11e6-892a-3c15c2cafa76 68847806-1303-11e6-913b-3c15c2cafa76

Slide 17

Slide 17 text

Version 2: DCE Security

Slide 18

Slide 18 text

Version 3: Name Based MD5

Slide 19

Slide 19 text

$nomadphpNS = Uuid::uuid3( Uuid::NAMESPACE_DNS, 'nomadphp.com' ); $pageId = Uuid::uuid3( $nomadphpNS, '/2016/02/22/the-rise-of-the-machines/' );

Slide 20

Slide 20 text

6d5bfa6d-08d5-3b30-bffb-390f96d6a363

Slide 21

Slide 21 text

Version 4: Random

Slide 22

Slide 22 text

for ($i = 0; $i < 5; $i++) { echo Uuid::uuid4()->toString(); echo "\n"; }

Slide 23

Slide 23 text

28b7883f-3df0-4e8a-9994-57b28f01fab2 dd78278c-03d7-4ca4-8411-06380c4cfd57 ae8de9f1-6ffc-454e-8522-b2c260e4c66b a5e9ac6b-0680-4fb7-a019-f305c7d2d5da 09fd4b15-2b2d-49be-af51-30899169ff99

Slide 24

Slide 24 text

Version 5: Name Based SHA-1

Slide 25

Slide 25 text

$nomadphpNS = Uuid::uuid5( Uuid::NAMESPACE_DNS, 'nomadphp.com' ); $pageId = Uuid::uuid5( $nomadphpNS, '/2016/02/22/the-rise-of-the-machines/' );

Slide 26

Slide 26 text

c21433be-0665-5179-b567-a020f2ea7063

Slide 27

Slide 27 text

Advanced
 Features

Slide 28

Slide 28 text

$factory = new UuidFactory(); $generator = new CombGenerator( $factory->getRandomGenerator(), $factory->getNumberConverter() ); $codec = new TimestampFirstCombCodec( $factory->getUuidBuilder() ); $factory->setRandomGenerator($generator); $factory->setCodec($codec); Uuid::setFactory($factory); for ($i = 0; $i < 5; $i++) { echo Uuid::uuid4()->toString(); echo "\n"; }

Slide 29

Slide 29 text

85031b4a-26c8-4689-a4e9-8d24fcb961b9 85031b4a-26e6-42e3-82ac-efc012d82dce 85031b4a-26fb-4c3d-ba85-0c5bc8365bdd 85031b4a-270c-4a01-97f6-eeeb1bbbf70e 85031b4a-271d-4d4b-bc49-a364fc1fc9f4

Slide 30

Slide 30 text

THANK YOU. ANY QUESTIONS? If you want to talk more, feel free to contact me. benramsey.com @ramsey github.com/ramsey [email protected] Identify All the Things With UUIDs Copyright © 2016 Ben Ramsey This work is licensed under Creative Commons Attribution- ShareAlike 4.0 International. For uses not covered under this license, please contact the author. Ramsey, Ben. “Identify All the Things With UUIDs.” Nomad PHP. Web conference. 19 May 2016. Conference presentation. This presentation was created using Keynote. The text is set in Chunk Five and Helvetica Neue. The source code is set in Menlo. The iconography is provided by Font Awesome. Unless otherwise noted, all photographs are used by permission under a Creative Commons license. Please refer to the Photo Credits slide for more information. bram.se/ramsey-uuid

Slide 31

Slide 31 text

PHOTO CREDITS 1. “38-365 Fingerprint” by Bram Cymet 2. “Baby Feet” by Katelyn Kenderdine 3. “Security door” by reynermedia 4. “Hello My Name Is.... 221/365” by Robert Occhialini 5. “Random” by Vladimer Shioshvili 6. “Hello! My Name Is JEDi.” by Tyrone J Moore 7. “Curvy Road Ahead” by Kit Ng 1 2 3 4 5 6 7